我在MATLAB中有两个向量,X和Y。
Y是X的函数,但X不是Y的函数。
对于给定的Y值,我想从样条(X,Y)中获得X值。
我该怎么做呢?我试着使用pp形式的样条线,但我没有走得太远。
发布于 2011-11-04 18:29:53
你说x不是y的函数,这意味着至少对于y的某些值,这个问题有多种解决方案。
您有几个选择,这取决于您在MATLAB中使用pp表单的能力。所有的选择都将是最好的,如果你首先...
使用括号方案来标识根所在的间隔。如果样条在给定的区间内是非单调的,您可能需要在这里使用技巧,但找到三次多项式达到最大值/最小值的位置并不困难,因为这只需要找到二次多项式的根。
一旦你有了解决方案的时间间隔:
你可以使用
,
如果你仔细编写代码,最后一个解决方案是最快的。事实上,它可以被矢量化以一次求解所有点。(已经做到了,我将断言它是可以做到的。好吧,实际上,这是一项编程作业,分配给一位当时为我工作的合作学院学生。)
我猜测你为什么不能正确使用pp表单是因为你不理解pp表单是如何工作的。这对于正确使用这些工具当然是必不可少的。
尝试绘制一条样条曲线的单个pp段。使用ppval对其进行评估。它一开始似乎不能正常工作吗?这意味着您误解了这些段是左移的,因此任何间隔的左端点总是被假定为零。这使得三次多项式分段可以更准确地求值,具体取决于样条曲线的断点。例如,如果函数值相同,则具有断点0 1 2 3的样条曲线和具有1000001 1000001 1000002 1000003处断点的样条曲线的工作方式应该相同。请注意,在浮点运算中,当您对如此大的数字进行立方体运算时,这将是一个数值问题。
再说一次,我甚至可以断言,所有这些都可以小心地矢量化,尽管当我们这样做的时候需要一些脑力。总体上最简单的解决方案是使用fzero,正如我所描述的那样。
发布于 2011-11-04 12:37:22
您可以使用lsqnonlin。
使有趣的参数成为计算样条线的函数,并减去所需的Y值,这样当达到所需的Y值时,结果将为零。
https://stackoverflow.com/questions/8004852
复制相似问题