抛物线拟合的matlab问题(求助)。。。
我现在有16个数据点,想把他们拟合成抛物线,请问该怎样在MATLAB里面实现呢?下面是抛物线的值,请注意这个抛物线是空间坐标内测量的。
x y z
1182.87 611.92 4463
1202.86 451.82 4463
1133.63 655.28 4443
1206.68 396.5 4443
1150.43 705.32 4423
1202.85 362.19 4423
1130.42 752.99 4403
1198.09 317.4 4403
1064.66 886.41 4343
1186.65 265.93 4343
1039.88 930.26 4303
1168.54 183.01 4303
1010.32 976.01 4263
1144.71 115.29 4263
996.97 996.97 4223
1124.69 66.72 4223
本人接触MATLAB仅有数天,还没有找到方向。希望前辈们多多指点。 上网查找关键词curve fit。不过德国研究所我还没有见过有购买这个toolbox的,建议你用自己盗版的matlab。 origin里面也有抛物线拟合的呀,不行吗? up~ 如果你已经知道这个函数是一个抛物线的话,最好先给出x,y,z之间的表达式,可以带参数。
看到表达式之后,可以考虑采用哪种数据拟合的算法。 如果是线性函数的话,应该可以拟合出来,否则需要有一个接近真实解的初始猜测值。 demo里面看看吧!肯定有的
你是要 有坐标 然后叫matlab 计算出你的函数是吗? 本帖最后由 ElberEis 于 2010-1-3 00:42 编辑
研究了一下你的问题。应该做出你要的结果了。
假设你的抛物线函数为:
z = a(1)*x.^2 + a(2)*x + a(3)*y.^2 + a(4)*y + a(5);
参考下面这个网页上的例子:
http://www.mathworks.com/support/solutions/en/data/1-17YMU/index.html?solution=1-17YMU
它采用的就是普通的 Least Square method,利用了一下MATLAB自带的 lsqcurvefit 函数。似乎是内部计算了一下数值的Jacobian矩阵后得到的。 我在自己机器上运行了一下, 结果列在这里供你参考。不知道精度怎么样。
我采用的初始猜测值是
a0 = ;
自定义抛物线函数就是本帖开头那个。
得到的结果是:
参数a 数列:
-0.071175 78.117 -0.050872 42.998 3975.4
resnorm =1.1607e+007
你看懂那个例子之后应该就不是很困难了。 如果需要修改后的代码再联系我。 多谢你的回复。
我现在疑问就是你为什么能在未知函数的形状下,确定函数的的方程。
其实X Y Z 坐标的函数方程,唯一的联系就是时间。xyz的坐标是同一时间一个点的3个坐标值。而且每个点的联系就是空间位置的依次移动。
多谢楼上和版主的回复。 本帖最后由 ElberEis 于 2010-1-3 12:25 编辑
其实我并不知道你那个函数的控制方程。我只是假设了一个抛物面方程,来演示如何在MATLAB上实现2个自变量+1个因变量+多个参数的 Least Square 拟合。
回到你的问题,看来你的控制方程可能是 x(t),y(t),z(t)的表达式。 你需要首先给出Governing Equation. 如果x(t), y(t)和z(t)是不独立的,那应该和给出的方法差不多。如果他们相互独立的话, 那么其实就是每个函数相对时间进行拟合。那样的话应该简单得多。
另一点是, 如果是x(t),y(t)和z(t)的话,你必须给出时间 t 的采样信息。 也就是说,你的拟合数据应该是x--y--z--t
页:
[1]