常州大学数值分析作业 第四章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:李俊乾专业:化学
用最小二乘法求形如y=axe的拟合函数。
答:Matlab程序
function [a,b]=ec(x,y)
Y=log(y)';
A=zeros(5,3);
for i=1:5
A(i,1)=1;
A(i,2)=log(x(i));
A(i,3)=i;
end
c=inv(A'*A)*(A'*Y);
a=exp(c(1));
b=c(3);
for i=1:5
y=a*x.*exp(b*x);
end
return
x=[1 2 3 4 5];
y=[1.222 2.984 5.466 8.902 13.592]; [a,b]=ec(x,y)
输出结果为:
a = 1.000202219673205
b = 0.200293860504786
plot(x,y,'b*',x,1*x.*exp(0.2*x),'r-')
7、已知人体表面积S和人体身高h,体重w有近似关系式S=α0hα1wα2。试根据身高,体重及相应的人体表面积的一组观测值
工程(专)学号:14102932
(h i,w i,S i)(i=0,1,2….n)来估计参数α0α1
α2的大小
答:Matlab程序:
function [a0,a1,a2]=ec2(h,w)
S=log(s)';N=length(h);
A=zeros(N,3);
for i=1:5
A(i,1)=1;
A(i,2)=log(h(i));
A(i,3)=log(w(i));
end
c=inv(A'*A)*(A'*S);
a0=exp(c(1));
a1=c(2);
a2=c(3);
return
%给出数据
h=[175 172 183 164 156];
w=[80 90 80 70 65];
s=[1000 900 1200 750 800];
[a0,a1,a2]=ec2(h,w,s)
输出结果为:
a0 =1.614815742043648e-04
a1 =3.383163094165866
a2 =-0.419165011582663
8、学习Matlab内部的函数lsqcurvefit,并
设计数值实验使用lsqcurvefit。
答:Matlab内部函数lsqcurvefit是用来解决
非线性拟合的最小二乘问题的。其调用格式为:
x= lsqcurvefit(fun,x0,xdata,ydata) x=lsqcurvefit(fun,x0,xdata,ydata
,lb,ub)
x=lsqcurvefit(fun,x0,xdata,ydata
,lb,ub,options)
[x,resnorm] = lsqcurvefit(…)
[x,resnorm,residual]=lsqcurvefit (…)
[x,resnorm,residual,exitflag]= lsqcurvefit(…)
[x,resnorm,residual,exitflag,out put] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,out put,lambda] = lsqcurvefit(…) [x,resnorm,residual,exitflag,out put,lambda,jacobian]
=lsqcurvefit(…)
输入参数:
fun为待拟合函数,计算x处拟合函数值,其定义为function F=myfun(x,xdata)
x0为初始解向量,即拟合参数的初始解;xdata,ydata为满足关系ydata=F(x, xdata)的数据;
lb、ub为解向量的下界和上界lb≤x≤ub,若没有指定界,则lb=[ ],ub=[ ];
options为指定的优化参数;
输出参数:
x为迭代得出解向量,即拟合出的参数;resnorm=sum ((fun(x,xdata)-ydata).^2),即x 处残差平方和,最小二乘式值;
residual=fun(x,xdata)-ydata,即在x处的残差;
exitflag为终止迭代的条件;
output为输出的优化信息;
lambda为解x处的Lagrange乘子;jacobian为解x处拟合函数fun的jacobian 矩阵。
function F = myfun(x,xdata)
F=(x(1).*xdata).*(exp(x(2).*xda ta));
xdata=[1,2,3,4,5];
ydata=[1.222,2.984,5.466,8.902,13.592];
x0=[0,0];
[x,resnorm]=lsqcurvefit(@myfun,x0,xdata,yda ta)
输出结果为:
Local minimum found.
Optimization completed because the size of the gradient is less than the default value of the function tolerance.
x =
0.999958348976391 0.200014132812834 resnorm = 8.067930437509675e-7