资源描述
用MATLAB作线性最小二乘拟合
% 数据点
x=[1,2,4,7,9,12,13,15,17];
f=[1.5,3.9,6,11.7,12.6,18.8,20.3,20.6,21.1];
% 设定
axis([0,18, 1,22])
xlabel('x')
ylabel('f')
% 插值点
y=1:0.1:17;
% 画出已知数据点、最近邻点插值、三次曲线拟合的图形并比较
figure(1)
plot(x,f,'o')
gtext('已知数据点')
hold on;
pause
bb1=interp1(x,f,y,'nearest')
plot(y,bb1)
gtext('最近邻点插值')
hold on;
pause
a=polyfit(x,f,3)
aa=polyval(a,y)
plot(y,aa,':')
gtext('三次曲线拟合')
hold off;
pause
% 画出已知数据点、直线插值、三次曲线拟合的图形并比较
figure(2)
plot(x,f,'o')
gtext('已知数据点')
hold on;
pause
bb1=interp1(x,f,y,'linest')
plot(y,bb1)
gtext('直线插值')
hold on;
pause
a=polyfit(x,f,3)
aa=polyval(a,y)
plot(y,aa,':')
gtext('三次曲线拟合')
hold off;
pause
% 画出已知数据点、样条插值、三次曲线拟合的图形并比较
figure(3)
plot(x,f,'o')
gtext('已知数据点')
hold on;
pause
bb1=interp1(x,f,y,'spline')
plot(y,bb1)
gtext('样条插值')
hold on;
pause
a=polyfit(x,f,3)
aa=polyval(a,y)
plot(y,aa,':')
gtext('三次曲线拟合')
hold off;
pause
解超定方程的方法
x=0:0.1:1;
y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
R=[(x.^2)',x',ones(11,1)]
A=R\y'
plot(x,y,'o',x,R*A,':')
legend('实际值','拟合值','Location','best')
用多项式拟合的命令
x=0:0.1:1;
y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];
A=polyfit(x,y,2)
z=polyval(A,x);
plot(x,y,'k+',x,z,'r')
legend('实际值','拟合值','Location','best')
两个求非线性最小二乘拟合的函数:lsqcurvefit、lsqnonlin。
举例求解
用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为 ,其中V0是电容器的初始电压,是充电常数。试由下面一组t,V数据确定V0, 。
分别应用非线性最小二乘拟合以及非线性回归命令求解,并作比较,体会统计回归与拟合方法的区别。
t (秒)
0.5 1 2 3 4 5 7 9
V (伏)
6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63
1.用非线性最小二乘拟合求解:
编写M-文件 curvefun1.m
function f=curvefun1(x,tdata)
f=10-(10-x(1))*exp(-tdata./x(2))
输入命令:
tdata=[0.5 1 2 3 4 5 7 9];
vdata=[6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63];
x0=[0.2,0.05];
x=lsqcurvefit ('curvefun1',x0,tdata,vdata)
f= curvefun1(x,tdata)
求得运算结果:
x = 5.5577 3.5002
f = 6.1490 6.6616 7.4913 8.1147 8.5832 8.9353 9.3987 9.6604
V0=5.5577 =3.5002
2.用非线性回归命令求解:
建立m-文件volum.m如下:
function yhat=volum(beta,x)
yhat=10-(10-beta(1))*exp(-x./beta(2));
输入命令为:
x=[ 0.5 1 2 3 4 5 7 9]
y=[6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63];
beta0=[1, 2]';
[beta,r,J]=nlinfit(x',y','volum',beta0);
beta
求得运算结果:
beta = 5.5577 3.5002
V0=5.5577 =3.5002
与用非线性最小二乘拟合求解结果一样。
区别:
统计回归可以判断拟合的效果,用统计回归可以分析可靠性,而拟合只是对数据点的拟合,不能用数据说明拟合的可靠性,只能从图形来判别。
非线性回归以及预测图
x=2:16;
y=[6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76];
beta0=[8 2]';
[beta,r,J]=nlinfit(x',y','volum',beta0);
[YY,delta]=nlpredci('volum',x',beta,r ,J);
plot(x,y,'k+',x,YY,'r',x,YY+delta,'b:',x,YY-delta,'b:')
展开阅读全文