资源描述:
《数值计算方法 Matlab实题训练(内附程序,模型).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《数值计算方法训练》实习报告题 目: 6-A组院 系: 上海电力学院数理学院 专业年级: 信息与计算科学专业2009级学生姓名: XX远 学号: 2011年7月8日第1题:含炭量与时间的关系在某冶炼过程中,钢的含炭量y与时间t的统计数据如下t0510152025303540455055y01.272.162.863.443.874.154.374.514.584.024.64(1)画出原始数据分布趋势图;(2)用最小二乘法求钢的含炭量y与时间t的拟合曲线;(3)打印出拟合曲线;(4)另外选用进行拟合,比较
2、二种拟合的效果。解:分析:使用到曲线拟合的最小二乘法,对于拟合函数,尽量转化为可以方便提炼出基函数的方程。在明确基函数的基础上,通过计算,得到各个系数,得到法方程组(1),程序:functionyuan(y)t=[0:5:55];plot(t,y,'*')legend('原始数据分布趋势图')运行结果:yuan([01.272.162.863.443.874.154.374.514.584.024.64])图1原始数据分布趋势(2),使用最小二乘法,就必须先取基函数,对于该题流程如下:①:取基函数为:②:由基函数和求法方程组
3、的系数:③:由这些系数,确定法方程组:④:解这个法方程组:,得到拟合函数:程序:function[a,b,c]=xian(y0)t0=[0:5:55];k1=t0;k2=t0.*t0;k3=t0.*t0.*t0;A=[sum(k1.*k1)sum(k2.*k1)sum(k3.*k1);sum(k1.*k2)sum(k2.*k2)sum(k3.*k2);sum(k1.*k3)sum(k2.*k3)sum(k3.*k3)];B=[sum(k1.*y0);sum(k2.*y0);sum(k3.*y0)];x=pinv(A)*B;a
4、=x(1,1);b=x(2,1);c=x(3,1);t=0:55;y=a.*t+b.*t.^2+c.*t.^3;plot(t,y,'--')holdonplot(t0,y0,'*')legend('y=a*t+b*t^2+c*t^3拟合效果','真实值')运行结果:[a,b,c]=xian([01.272.162.863.443.874.154.374.514.584.024.64])a=0.2657b=-0.0053c=3.5168e-005(3)拟合的图形,即上一题显示的图像图2拟合函数效果(4),用于这种非线性模型的拟
5、合①:把其化作线性:→两边同时取以e为底的对数→②:重复上面第二题的步骤进行,其中需要强调的是(0,0)的点需要另外输入,因为不存在,为了在同图出现,故对第二条拟合函数,取程序:function[m,n,a,b,c]=fei(y2,y0)%y2=y0除了0以外的数y1=log(y2);t1=[5:5:55];n=length(t1);k1=ones(1,n);k2=log(t1);A=[sum(k1.*k1)sum(k2.*k1);sum(k1.*k2)sum(k2.*k2)];B=[sum(k1.*y1);sum(k2.*
6、y1)];x=pinv(A)*B;m=exp(x(1,1));n=x(2,1);t=0:55;y=m*t.^n;plot(t,y,'-')holdon[a,b,c]=xian(y0)plot(t,y,'--')holdonplot(t1,y2,'*',0,0,'*')legend('y=m*t.^n拟合效果','y=a*t+b*t^2+c*t^3拟合效果','真实值')得到的拟合图像:图3两种拟合函数拟合效果对比结论:在实际生活当中,不免需要对一组数据进行拟合,通过采用最佳的拟合,找到一个近似的函数来研究数据的共性。通过这一
7、道题目,发现不同的函数,拟合效果差别也是蛮大的。第2题:特征值与特征向量用幂法求下列矩阵的主特征值与相应的特征向量(1)(2)解:利用幂法求矩阵A的主特征值与相应的特征向量,首先要给一个初始向量:①:定义一个和A行数一致的1列全一矩阵,即②:,为了方便计算,减少计算量,需要求出中按模最大的那个分量的值,同时得到向量,由此可知③:重复第二步,得到④:计算,看其是否大于给定的误差,如果大于,则令,并从第三步开始重复;如果小于,则为所求的按模最大的特征值,即主特征值,为其对应的特征向量流程图:开始n=size(A,2)=ones(
8、n,1)==输出最大的模,对应的特征向量结束N输入精度要求errY,表1幂法求主特征值的流程图程序:function[v2,p2]=maxtr(A,err)n=size(A,2);v0=ones(n,1);v1=A*v0;p1=max(v1);u1=v1/p1;v2=A*u1;p2=max