实验报告—数值分析.doc_第1页
实验报告—数值分析.doc_第2页
实验报告—数值分析.doc_第3页
实验报告—数值分析.doc_第4页
实验报告—数值分析.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值分析实验报告姓 名: 学 号: 专 业: 指导教师: 刘 建 生 教 授 日 期: 2015年12月25日 实验一 Lagrange/newton插值一:对于给定的一元函数的n+1个节点值。试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。数据如下: 0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.578150.696750.90 1.00 1.25382 求五次L计算,的值(提示:结果为, ) 1 2 3 4 5 6 7 0.368 0.135 0.050 0.018 0.007 0.002 0.001 试构造Lagrange多项式,计算的,值。(提示:结果为, ) 二:实验程序及注释MATLAB程序:function f=lagrange(x0,y0,x )n=length(x0);m=length(y0); format longs=0.0;for k=1:n p=1.0; for j=1:n if j=k p=p*(x-x0(j)/(x0(k)-x0(j); end end s=s+y0(k)*p;End f=s; end结果运行:结果与提示值完全吻合,说明Lagrange插值多项式的精度是很高的;同时,若采用三点插值和两点插值的方法,用三点插值的精度更高。若同时采用两点插值,选取的节点距离x越近,精度越高。三:采用newton插值进行计算算法程序如下:format long; x0=0.4 0.55 0.65 0.80 0.95 1.05 ;y0=0.41075 0.578150.696750.90 1.00 1.25382 ;x=0.596; n=max(size(x0);y=y0(1); %disp(y);s=1;dx=y0; for i=1:n-1 dx0=dx; for j=1:n-i dx(j)=(dx0(j+1)-dx0(j)/(x0(i+j)-x0(j); end df=dx(1); s=s*(x-x0(i); y=y+s*df; %计算 %disp(y);enddisp(y)运行结果:绘制出曲线图:与结果相吻合。所以newton法和Lagrange法的思想是一样的。Lagrange适合理论分析,但Lagrange法不如newton法灵活。Lagrange如果节点个数改变,算法需要重新编写,而Newton法克服这一缺点,所以应用更为灵活。实验二 函数逼近与曲线拟合 一、问题提出 在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t的拟合曲线。 t(分钟)0510152025303540455055y(10)01.272.162.863.443.874.154.374.514.584.024.64要求: 1、用最小二乘法进行曲线拟合; 2、近似解析表达式为f(x)=at+ at+ at;3、计算出拟合函数f(x),并列出出f(x)与y(x)的误差; 4、另外选取一个近似表达式,尝试拟合效果的比较; 5、绘制出曲线拟合图。2、 问题分析3、从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。三、实验程序及注释三次拟合程序(最小二乘法):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)%绘制三次拟合函数图(其中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(四次拟合图) %注释图名grid%坐标系网格化四、实验数据结果及分析三次拟合可以得到其拟合多项式为:=0.00003436415436t-0.00521556221556t+0.26339852739853t+0.01783882783883 拟合函数与被拟合函数图之间的对比如下:(1) 红色星号为原始数据;(2) 带圈的曲线为最小二乘后而成的结果曲线。由此可见拟合函数与原函数离散数据点拟合成程度相当好,通过p,s=polyfit(t,y,n)对拟合误差进行分析,如图:图2-2由此可知,三次拟合精度较好。为了提高结果的可信度,我们另外选取一个近似表达式,尝试拟合效果的比较。于是,进行四次拟合:其中,拟合得到的多项式为:=0.00000060256410t-0.00003191789692 t-0.00293227466977t+0.23806931494432t+0.06044871794872拟合如图2-3图2-3同样对四次拟合进行误差分析可得:图2-4由此可见,四次拟合误差0.494930.50824(三次拟合误差),精度更高。五、实验结论在用高阶多项式对某一函数进行曲线拟合时,并不是拟合出来的多项式与被拟合函数在整个区间上都能符合,polyfit()只能保证在输入数据x所能达到的区间上及其附近.求得的多项式可以最大限度在逼近原函数。利用最小二乘法对本问题进行的曲线拟合精度较高,而且,在一般情况下,拟合的多项式次数越多,精度越高。 实验三 数值积分与数值微分 一、问题提出 计算下列积分值:(1) (2) (3) (4) 要求:1、 编制数值积分算法的程序; 2、 分别用两种算法计算同一个积分,并比较其结果; 3、 分别取不同步长,试比较计算结果(如n = 10, 20等); 4、 给定精度要求,试用变步长算法,确定最佳步长。二、问题分析由上可知这四个积分找不到用初等函数表示的原函数,直接计算起来很困难,因此我们考虑利用函数在若干点得函数值,近似地计算该函数在一个区间上得定积分。这里采用的方法有三种:复合梯形公式,复合Simpson公式,Romberg算法。三、实验程序及注释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为向量,被积函数自变量的等距节点;% 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*sum(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)% 梯形递推求积公式,其中,% 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; delt=T-T0;endjifen=T; num=n; end执行程序后的结果:实验分析: 逐次分半的积分算法具有很高的精度,对于复杂的工程实践问题具有很高的应用价值。同时,在利用复合梯形公式、复合Simpson公式以及Romberg算法等计算数值积分时,精度已经很高,并且随着步长越小,积分精度越高。另外,当给定一个精度的时候,我们还可以利用自适应步长法,确定所需要的最佳步长和结果。 同样在对比中可见:simpson公式的收敛速度比梯形公式的收敛速度快。实验四 线性方程组的直接解法一、问题提出 给出下列几个不同类型的线性方程组,请用适当算法计算其解。 1、 设线性方程组 参考解:2、 设对称正定阵系数阵线方程组 参考解: 3,三对角形线性方程组 参考解:要求:1、 对上述三个方程组分别利用Gauss顺序消去法与Gauss列主元消去法;平方根法与改进平方根法;追赶法求解(选择其一); 2、 应用结构程序设计编出通用程序; 3、 比较计算结果,分析数值解误差的原因; 4、 尽可能利用相应模块输出系数矩阵的三角分解式。二、问题分析直接法就是经过有限步算术运算,可求得线性方程组精确解得方法(若计算过程中没有舍入误差)。但是实际运算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解。我们经常采用的一些方法,如Gauss顺序消去法与Gauss列主元消去法、平方根法与改进平方根法、追赶法等等。3、 实验程序及注释 % 列主元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% 当方程组与右端项的维数不匹配时,停止计算,输出错误信息if 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 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分解% 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; end二,%高斯赛德尔迭代法计算线性方程组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; end 三,%超松弛迭代法(sor)方法函数%超松弛迭代法的统一方程 function x,k=sor_f(A,b,x0,w,tol) max=300;if (w=2) error; 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、 3、 4、 5、 6、 实验程序代码: 本程序采用牛顿法求解非线性方程组: 也可自行编写简单迭代算法进行求解,此处没有给出。程序代码如下:%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(wuchatol) time=time+1; fx=subs(f,x1); df=subs(df,x1); gen=x1-fx/df; wucha=abs(gen-x1); x1=gen; end end分别带入各个迭代格式得:由收敛准则: 知道,当且仅当迭代方程满足以上的收敛条件时,非线性方程组才有解。实验七 矩阵特征值问题计算一、问题提出 利用冪法或反冪法,求方阵的按模最大或按模最小特征值及其对应的特征向量。 设矩阵A的特征分布为: 且 试求下列矩阵之一 (1) 求,及 取 结果(2) 求及 取 结果: (3) 求及取结果 (4) 取 这是一个收敛很慢的例子,迭代次才达到结果 (5) 有一个近似特征值,试用幂法求对应的特征向量,并改进特征值(原点平移法)。取 结果 运用MATLAB指令: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=A*u; vmax,i=max(a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论