常州大学数值分析作业 第四章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档