登录论坛

查看完整版本 : [求助]拟合数据点


hy85220
2008-06-19, 23:33
遇到个问题,请各位大侠赐教。
需要拟合32个数据点,用了polyfit,但是无论选择阶次为多少得到的拟合曲线都不好,最后两个数据点间曲线暴走。不知道为什么?想改用其它方法拟合,比如用折线连接数据点,用什么方法呢?有没有什么方便的函数?最后需要由任意给定的I通过曲线求得对应的L值。
数据如下:
I=[1.1955 1.5042 1.8062 2.1067 2.4072 2.7075 3.0073 3.3070
3.6070 3.9080 4.2097 4.5118 4.8136 5.1151 5.4167 5.7193
6.0237 6.3306 6.6413 6.9578 7.2815 7.6104 7.9388 8.2633
8.5922 8.9447 9.3339 9.7604 10.5013 11.4869 12.8993 15.6161];

L=[1.3383 1.3296 1.3288 1.3291 1.3293 1.3296 1.3301 1.3305
1.3307 1.3306 1.3303 1.3298 1.3296 1.3294 1.3292 1.3288
1.3281 1.3269 1.3250 1.3223 1.3184 1.3140 1.3100 1.3070
1.3035 1.2969 1.2856 1.2704 1.2341 1.1840 1.1163 0.9734]

slgu
2008-06-20, 01:18
yhat=b(1)*exp(b(2)*x+b(3)*x.^2)./(1+b(4)*x+b(5)*x.^2);

b=[1.35694961, -.108516533, .438971621e-2, -.919315083e-1, .485352136e-2]
RSS =.3148843759e-3
RMSe = 1.2111e-005
R^2 =.998221

slgu
2008-06-24, 01:33
求助者对此结果没有反应,可能对此结果所表示的含义不太了解。所拟合的曲线可用下列语句显示:

clear,clc
x=[1.1955, 3.6070, 6.0237, 8.5922, 1.5042, 3.9080, 6.3306, 8.9447, 1.8062, 4.2097, 6.6413, 9.3339, 2.1067, 4.5118, 6.9578, 9.7604, 2.4072, 4.8136, 7.2815, 10.501, 2.7075, 5.1151, 7.6104, 11.487, 3.0073, 5.4167, 7.9388, 12.899, 3.3070, 5.7193, 8.2633, 15.616];
y=[1.3383, 1.3307, 1.3281, 1.3035, 1.3296, 1.3306, 1.3269, 1.2969, 1.3288, 1.3303, 1.3250, 1.2856, 1.3291, 1.3298, 1.3223, 1.2704, 1.3293, 1.3296, 1.3184, 1.2341, 1.3296, 1.3294, 1.3140, 1.1840, 1.3301, 1.3292, 1.3100, 1.1163, 1.3305, 1.3288, 1.3070, .97340];
fy='1.35694961*exp(-.108516533*x+.438971621e-2*x.^2)./(1-.919315083e-1*x+.485352136e-2*x.^2)';
plot(x,y,'o')
hold on
fplot(fy,[1,16])

对于曲线与曲面拟合,第一个难点是选用合适的非线性方程;二是参数的全局最优估计;第三是进行合理的测验。第三个问题有赖于获取统计数的标准误,对于此题,每个统计数的误差(SEb)分别为:[.494388e-2, .477700e-2, .342370e-3, .255175e-2, .202511e-3]。希能对求助者和其他应用者有用。