首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MATLAB Spline从Y中获取X

用MATLAB Spline从Y中获取X
EN

Stack Overflow用户
提问于 2011-11-04 12:22:07
回答 2查看 2.2K关注 0票数 1

我在MATLAB中有两个向量,X和Y。

Y是X的函数,但X不是Y的函数。

对于给定的Y值,我想从样条(X,Y)中获得X值。

我该怎么做呢?我试着使用pp形式的样条线,但我没有走得太远。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-04 18:29:53

你说x不是y的函数,这意味着至少对于y的某些值,这个问题有多种解决方案。

您有几个选择,这取决于您在MATLAB中使用pp表单的能力。所有的选择都将是最好的,如果你首先...

使用括号方案来标识根所在的间隔。如果样条在给定的区间内是非单调的,您可能需要在这里使用技巧,但找到三次多项式达到最大值/最小值的位置并不困难,因为这只需要找到二次多项式的根。

一旦你有了解决方案的时间间隔:

你可以使用

  1. ,找到(f(x)-y)的解。虽然fzero在大多数情况下不需要括号就能工作,但在最坏的情况下,if可能无法找到解决方案。如果您提供了一个括号,那么如果有多个解决方案,fzero将找到您选择的解决方案。(在这种情况下,我设置了一个由客户指定的规则,即我将始终选择最右侧或最左侧的解决方案。)
  2. 您可以在选定的pp段上使用root。这当然会比使用fzero更快,也更准确。当然,root会返回多个解决方案,因此您需要选择正确的root。其中一些解可能是要剔除的复数,

  1. ,你可以使用三次多项式的根的显式解。当然,它将再次返回多个解决方案,因此您需要小心采用哪种解决方案。

如果你仔细编写代码,最后一个解决方案是最快的。事实上,它可以被矢量化以一次求解所有点。(已经做到了,我将断言它是可以做到的。好吧,实际上,这是一项编程作业,分配给一位当时为我工作的合作学院学生。)

我猜测你为什么不能正确使用pp表单是因为你不理解pp表单是如何工作的。这对于正确使用这些工具当然是必不可少的。

尝试绘制一条样条曲线的单个pp段。使用ppval对其进行评估。它一开始似乎不能正常工作吗?这意味着您误解了这些段是左移的,因此任何间隔的左端点总是被假定为零。这使得三次多项式分段可以更准确地求值,具体取决于样条曲线的断点。例如,如果函数值相同,则具有断点0 1 2 3的样条曲线和具有1000001 1000001 1000002 1000003处断点的样条曲线的工作方式应该相同。请注意,在浮点运算中,当您对如此大的数字进行立方体运算时,这将是一个数值问题。

再说一次,我甚至可以断言,所有这些都可以小心地矢量化,尽管当我们这样做的时候需要一些脑力。总体上最简单的解决方案是使用fzero,正如我所描述的那样。

票数 3
EN

Stack Overflow用户

发布于 2011-11-04 12:37:22

您可以使用lsqnonlin

使有趣的参数成为计算样条线的函数,并减去所需的Y值,这样当达到所需的Y值时,结果将为零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8004852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档