查看完整版本 : 【求助】曲线拟合的题目
曲线拟合:
实测以下试验数据,请选用光滑的二次曲线拟合这些离散数据,要求:
(1) 个数据点离曲线的综合误差尽可能小;
(2) 画出拟合曲线图形,标出原始离散数据点。
(3) 划出误差分布图形,定量分析表述拟合误差。
x 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
y -0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2
请高手指点啊
rockman6320
2007-07-17, 16:17
对于这个问题,小弟有几个粗浅的见解:
(1) 个数据点离曲线的综合误差尽可能小
可使用一维插值interp1,我选用了三次样条插值spline;
(2) 画出拟合曲线图形,标出原始离散数据点
假设曲线是线性二次曲线:f(x)=a1*x^2+a2*x+a3,然后求出A=(a1,a2,a3),使得f(x(i))-y(i)最小(当然非线性也是可以的)
(3) 划出误差分布图形,定量分析表述拟合误差
这个还不会,哈哈
下面是程序:x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
>> y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
>> X=0:0.01:1;
>> Y=interp1(x,y,X,'spline');
>> A=polyfit(X,Y,2)
>> z=polyval(A,X);
>> plot(x,y,'k+',X,z,'r')
clear;clc;clf %清除内存中的变量,并清屏
x=0:0.1:1;
y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
A=polyfit(x,y,9);%把所有数据的y坐标关于x进行9次拟合,可以自己改
Y=poly2str(A,'X')%显示拟合多项式
xx=0:0.001:1;%设置xx
Y=polyval(A,xx);%根据xx,用拟合多项式A生成拟合好的数据
plot(x,y,'*',xx,Y,'r')
grid on%显示网格
lengxueshen
2007-08-07, 09:41
x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
a = linspace(0,1.0,100);
b = interp1(x,y,a,'cubic');
plot(a,b,x,y,'cubic');
lengxueshen
2007-08-07, 09:44
或者
x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
>> y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
a = 0:0.01:1.0;
b = ployval(ployfit(x,y,3),a);
plot(a,b,x,y,'bo');
纠正一下刚才上面的错了
应该是plot(a,b,x,y,'bo');
不是plot(a,b,x,y,'cubic');
yhat=(b(1)+b(2)*exp(b(3)*x+b(4)*x.^2))./(1+b(5)*exp(b(6)*x+b(7)*x.^2));
SSy = 129.6221
b=[11.28373734, 26.66992882, 5.978100169, -20.46399152, 111.9917405, -11.62488572, 4.328266653]
RSS =2.932514206
MSe = 0.7331
R2 =.977376
vBulletin® v3.8.3,版权所有 ©2000-2025,Jelsoft Enterprises Ltd.