《张飞数值分析实验报告.doc》由会员分享,可在线阅读,更多相关《张飞数值分析实验报告.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、江西理工大学研究生院数值分析实验报告姓 名: 张飞 专 业: 机械工程 学 号: 6720150104 日 期: 2015年12月12日 目 录实验一 函数插值方法3实验二 函数逼近与曲线拟合7实验四 线方程组的直接解法17实验五 解线性方程组的迭代法24实验六 非线性方程求根26实验七 矩阵特征值问题计算28实验八 常微分方程初值问题数值解法32实验一 函数插值方法一、问题提出 对于给定的一元函数的n+1个节点值。试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。数据如下: (1) 0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.578
2、150.696750.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算,的值。(提示:结果为, ) (2) 1 2 3 4 5 6 7 0.368 0.135 0.050 0.018 0.007 0.002 0.001 试构造Lagrange多项式,计算的,值。(提示:结果为, )二、问题分析1、 利用Lagrange插值公式 编写出插值多项式程序; 2、 给出插值多项式或分段三次插值多项式的表达式; 3、 根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何; 4、 对此插值问题用Newton插值多项式其结果如何。Newton插值多项式如下:
3、 其中:三、实验程序及注释1.(1)程序一function f=Lagrange(x,fx,inx) x=0.4 0.55 0.65 0.8 0.95 1.05fx=0.41075 0.57815 0.69675 0.90 1.0 1.25382inx=0.596,0.99;n=length(x);m=length(inx); for i=1:m; z=inx(i); s=0.0; for k=1:n p=1.0; for j=1:n if j=k p=p*(z-x(j)/(x(k)-x(j); end end s=p*fx(k)+s; end f(i)=s; end plot(x,fx,O,
4、inx,f)(2)运行结果:x = 0.4000 0.5500 0.6500 0.8000 0.9500 1.0500fx =0.4108 0.5782 0.6967 0.9000 1.0000 1.2538ans =0.6257 1.05422、(1)程序二function f=Lagrange(x,fx,inx) x=1 2 3 4 5 6 7fx=0.368 0.135 0.050 0.018 0.007 0.002 0.001inx=1.8 6.15;n=length(x);m=length(inx); for i=1:m; z=inx(i); s=0.0; for k=1:n p=1
5、.0; for j=1:n if j=k p=p*(z-x(j)/(x(k)-x(j); (2)运行结果:x = 1 2 3 4 5 6 7fx = 0.3680 0.1350 0.0500 0.0180 0.0070 0.0020 0.0010ans= 0.1648 0.0013四、实验数据结果及分析 1 . 五次Lagrange多项式的运行结果为经过迭代达到了给定结果的精度实验图像如图像一图像一2. 六次Lagrange多项式的运行结果为经过迭代达到了给定结果的精度实验图像如图像二:图像二五、实验结论结果与提示值完全吻合,说明Lagrange插值多项式的精度是很高的;同时,若采用三点插值和
6、两点插值的方法,用三点插值的精度更高。若同时采用两点插值,选取的节点距离x越近,精度越高。实验二 函数逼近与曲线拟合 一、问题提出 从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。 在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t的拟合曲线。 t(分)0 5 10 15 20 25 30 35 40 45 50 55 0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64 二、问题分析 1、用最小二乘法进行曲线拟合; 2、近似解析表达式为;3、打
7、印出拟合函数,并打印出与的误差,; 4、另外选取一个近似表达式,尝试拟合效果的比较; 5、绘制出曲线拟合图。 三、实验程序及注释三次拟合程序(最小二乘法):t=0 5 10 15 20 25 30 35 40 45 50 55%输入时间t的数据y=0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64%输入含碳量数据p,s=polyfit(t,y,3)%调用MATLAB最小二乘法的程序进行三次拟合并给出误差分析format long%14位精度小数plot(t,y,*r)%绘制被拟合数据点的离散图hold onplot(t,y1,b)%
8、绘制三次拟合函数图(其中y1是拟合之后的数据)xlabel(时间t(分钟)) %注释x轴ylabel(含碳量/10-4) %注释y轴title(三次拟合图) %注释图名grid%坐标系网格化四次拟合程序(最小二乘法):p,s=polyfit(t,y,4) %调用MATLAB最小二乘法的程序进行四次拟合并给出误差分析format long%14位精度小数plot(t,y,*r)%绘制被拟合数据点的离散图hold onplot(t,y2,b)%绘制三次拟合函数图(其中y2是拟合之后的数据)xlabel(时间t(分钟)) %注释x轴ylabel(含碳量/10-4) %注释y轴title(四次拟合图)
9、 %注释图名grid%坐标系网格化四、实验数据结果及分析三次拟合可以得到其拟合多项式为:=0.00003436415436t-0.00521556221556t+0.26339852739853t+0.01783882783883 拟合函数与被拟合函数图之间的对比如下:(1) 红色星号为原始数据;(2) 带圈的曲线为最小二乘后而成的结果曲线。由此可见拟合函数与原函数离散数据点拟合成程度相当好,通过p,s=polyfit(t,y,n)对拟合误差进行分析,如图:图2-2由此可知,三次拟合精度较好。为了提高结果的可信度,我们另外选取一个近似表达式,尝试拟合效果的比较。于是,进行四次拟合:其中,拟合得
10、到的多项式为:=0.00000060256410t-0.00003191789692 t-0.00293227466977t+0.23806931494432t+0.06044871794872拟合如图2-3图2-3同样对四次拟合进行误差分析可得:图2-4由此可见,四次拟合误差0.494930.50824(三次拟合误差),精度更高。五、实验结论在用高阶多项式对某一函数进行曲线拟合时,并不是拟合出来的多项式与被拟合函数在整个区间上都能符合,polyfit()只能保证在输入数据x所能达到的区间上及其附近.求得的多项式可以最大限度在逼近原函数。利用最小二乘法对本问题进行的曲线拟合精度较高,而且,在一
11、般情况下,拟合的多项式次数越多,精度越高。实验三 数值积分与数值微分一、基本题 选用复合梯形公式,复合Simpson公式,Romberg算法,计算 (1) (2) (3) 要求:1、 编制数值积分算法的程序; 2、 分别用两种算法计算同一个积分,并比较其结果; 3、 分别取不同步长,试比较计算结果(如n = 10, 20等); 4、 给定精度要求,试用变步长算法,确定最佳步长。二、问题分析由上可知这三个积分找不到用初等函数表示的原函数,直接计算起来很困难,因此我们考虑利用函数在若干点得函数值,近似地计算该函数在一个区间上得定积分。这里采用的方法有三种:复合梯形公式,复合Simpson公式,Ro
12、mberg算法。三、实验程序及注释1、复合梯形公式MATLAB程序:function I=T_quad(x,y)%复化梯形求积公式,其中,% x为向量,被积函数自变量的等距节点;% y为向量,被积函数节点处的函数值;n=length(x);m=length(y);if n=m error(the length of X and Y must be equal!); return;endh=(x(n)-x(1)/(n-1);a=1 2*ones(1,n-2) 1;I=h/2 * sum(a.*y);2、复合Simpson公式MATLAB程序:function I=S_quad(x,y)% x为向
13、量,被积函数自变量的等距节点;% y为向量,被积函数节点处的函数值;n=length(x);m=length(y);if n=m error(the length of X and Y must be equal!); return;endif rem(n-1,2)=0 %如果n-1不能被2整除,则调用复化梯形公式 I=T_quad(x,y); return;endN=(n-1)/2;h=(x(n)-x(1)/N;a=zeros(1,n);for k=1:N a(2*k-1)=a(2*k-1)+1; a(2*k)=a(2*k)+4; a(2*k+1)=a(2*k+1)+1;endI=h/6*s
14、um(a.*y);3、Romberg算法MATLAB程序:function I=R_quad_iter(fun,a,b,ep)% Romberg求积公式,其中,% fun为被积函数;% a,b为积分区间端点,要求ab;% ep精度系数,缺省值为1e-5.if nargin 1; T(m+1,k+1)=(4k*T(m+1,k)-T(m,k)/(4k-1); M=M/2;k=k+1; end if abs(T(k,k)-T(k-1,k-1)ep break; end m=m+1;endI=T(k,k);4、自适应步长梯形公式:function I=R_quad_iter(fun,a,b,ep)%
15、梯形递推求积公式,其中,% fun为被积函数;% a,b为积分区间端点,要求ab;% ep精度系数,缺省值为1e-5.if nargin 4 ep=1e-5;end;N=1;h=b-a;T=h/2*(feval(fun,a)+feval(fun,b);while 1 h=h/2;I=T/2; for k=1:N; I=I+h*feval(fun,a+(2*k-1)*h); end if abs(I-T)3*tol h=h/2; T0=T; s=0; for i=1:n x=a+h*(2*i-1); s=s+zhuci_tixing_f(x); end T=T0/2+h*s; n=2*n; de
16、lt=T-T0;endjifen=T; num=n; end执行程序后的结果:六、实验分析: 逐次分半的积分算法具有很高的精度,对于复杂的工程实践问题具有很高的应用价值。同时,在利用复合梯形公式、复合Simpson公式以及Romberg算法等计算数值积分时,精度已经很高,并且随着步长越小,积分精度越高。另外,当给定一个精度的时候,我们还可以利用自适应步长法,确定所需要的最佳步长和结果。 同样在对比中可见:simpson公式的收敛速度比梯形公式的收敛速度快。实验四 线方程组的直接解法一、问题提出 给出下列几个不同类型的线性方程组,请用适当算法计算其解。 1、设线性方程组 2、设对称正定阵系数阵线
17、方程组 3、三对角形线性方程组 二、要求 1、 对上述三个方程组分别利用Gauss顺序消去法与Gauss列主元消去法;平方根法与改进平方根法;追赶法求解(选择其一); 2、 应用结构程序设计编出通用程序; 3、 比较计算结果,分析数值解误差的原因; 4、 尽可能利用相应模块输出系数矩阵的三角分解式。 三、问题分析直接法就是经过有限步算术运算,可求得线性方程组精确解得方法(若计算过程中没有舍入误差)。但是实际运算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解。我们经常采用的一些方法,如Gauss顺序消去法与Gauss列主元消去法、平方根法与改进平方根法、追赶法等等。四、实验程序
18、及注释列主元Gauss消去法:function x,det,index=Gauss(A,b)% 求线性方程的列主元Gauss消去法% A 为方程组的系数矩阵% b 为方程组的右端项% x 为方程组的解% det 为系数矩阵A的行列式的值% index 为指标变量,index=0 表示计算失败,index=1 表示计算成功% det 为系数矩阵 A 的行列式的值n,m=size(A);nb=length(b);% 当方程组行与列的维数不相等时,停止计算,并输出错误的信息if n=m error(A的行与列必须相等!); return;end当方程组与右端项的维数不匹配时,停止计算,输出错误信息i
19、f m=nb error(the columns of A must be equal the length of b); return;end开始计算,先赋初值:index=1;det=1;x=zeros(n,1);for k=1:n-1 % 选主元 a_max=0; for i=k:n if abs(A(i,k)a_max a_max=abs(A(i,k);r=i; end end if a_maxk; for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end消元过程: for
20、i=k+1:n m=A(i,k)/A(k,k); for j=k+1:n A(i,j)=A(i,j)-m*A(k,j); end b(i)=b(i)-m*b(k); end det=det*A(k,k);enddet=det*A(n,n);回代过程:if abs(A(n,n)1e-10 index=0;return;endfor k=n:-1:1 for j=k+1:n b(k)=b(k)-A(k,j)*x(j); end x(k)=b(k)/A(k,k);end改进平方根法:function L,D,index=LDL_Decom(A)% 求正定对称矩阵A的改进平方根分解,也称LDLT分解%
21、 A为要分解的矩阵% L为下三角阵% D为对角阵% index 为指标变量,index=0 表示计算失败,index=1 表示计算成功n=length(A);L=eye(n);D=zeros(n);d=zeros(1,n);T=zeros(n);index=1;for k=1:n d(k)=A(k,k); for j=1:k-1 d(k)=d(k)-L(k,j)*T(k,j); end if abs(d(k)=tol x0=x; x=B*x0+f; k=k+1; if(k=max1) disp(迭代次数超过300次,方程组可能无解); return; end2、高斯赛德尔迭代法计算线性方程组:
22、function x,k=guass_seid_f(A,b,x0,tol) max1=300; D=diag(diag(A); L=-tril(A,-1); U=-triu(A,1); G=(D-L)U; f=(D-L)b; x=G*x0+f; k=1; while norm(x-x0)=tol x0=x; x=G*x0+f; k=k+1; if(k=max1) disp(迭代次数太多,可能不收敛) end %k,x; end3、超松弛迭代法(sor)方法函数:超松弛迭代法的统一方程 function x,k=sor_f(A,b,x0,w,tol) max=300;if (w=2) error
23、; return;end D=diag(diag(A);L=-tril(A,-1);U=-triu(A,1);B=inv(D-L*w)*(1-w)*D+w*U);f=w*inv(D-w*L)*b;x=B*x0+f;k=1;while norm(x-x0)=tol x0=x; x=B*x0+f; k=k+1; if (kmax) disp(迭代次数过多,sor方法可能不收敛); return; end %k,x; %输出每一步迭代的结果,可不要End实验结果:对比题中的参考值,精度很高。实验六 非线性方程求根一、问题提出 设方程有三个实根现采用下面六种不同计算格式,求 f(x)=0的根或1、 2
24、、 3、 4、 5、 6、 二、要求 1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况; 2、用事后误差估计来控制迭代次数,并且打印出迭代的次数; 3、初始值的选取对迭代收敛有何影响; 4、分析迭代收敛和发散的原因。 三、实验程序代码本程序采用牛顿法求解非线性方程组: 也可自行编写简单迭代算法进行求解,此处没有给出。程序代码如下:newton迭代法求解非线性方程:function gen,time =newton(f,x0,tol)if (nargin=2) tol=1.0e-5;end df=diff(f); x1=x0; time=0; wucha=0.1; while(wuch
25、atol) time=time+1; fx=subs(f,x1); df=subs(df,x1); gen=x1-fx/df; wucha=abs(gen-x1); x1=gen; endend分别带入各个迭代格式得:由收敛准则: 知道,当且仅当迭代方程满足以上的收敛条件时,非线性方程组才有解。实验七 矩阵特征值问题计算一、问题提出 利用冪法或反冪法,求方阵的按模最大或按模最小特征值及其对应的特征向量。 设矩阵A的特征分布为: 且 试求下列矩阵之一 (1) 求,及 取 结果(2) 求及 取 结果:(3) 求及取结果 (4) 取 这是一个收敛很慢的例子,迭代次才达到结果 (5) 有一个近似特征值
26、,试用幂法求对应的特征向量,并改进特征值(原点平移法)。取 结果 二、实验程序代码V,D=eig(A); 也可用幂法求解,程序在下面给出,可自行调试进行求解:(1)(2)(3)下面给出幂法的算法程序:已调试:function namda,q,time,date_na,date_q=mifa(A,tol,x0) if nargin =1 tol=1e-7; temp=length(A); x0=ones(temp,1); end if nargin=2 temp=length(A); x0=ones(temp,1); end m1=0; u=x0; time=0;while time500 v=
27、A*u; vmax,i=max(abs(v); m=v(i); u=v/m; if abs(m-m1)tol break; end m1=m; time=time+1; date_na(time,1)=m; date_q(:,time)=u;endnamda=m;q=u;end实验八 常微分方程初值问题数值解法一、基本题 科学计算中经常遇到微分方程(组)初值问题,需要利用Euler法,改进Euler法,Rung-Kutta方法求其数值解,诸如以下问题: (1)分别取h=0.1,0.2,0.4时数值解。 初值问题的精确解。 (2)用r=3的Adams显式和预 - 校式求解 取步长h=0.1,用四阶标准R-K方法求值。 (3)用改进Euler法或四阶标准R-K