1、 摘要数值分析(numerical analysis)是研究分析用计算机求解数学计算问题数值计算方法及其理论学科,是数学一个分支,它以数字计算机求解数学问题理论和方法为研究对象。在实际生产实践中,常常将实际问题转化为数学模型来处理,这个过程就是数学建模。学习数值分析这门课程能够让我们学到很多数学建模方法。利用数值分析处理问题过程:实际问题数学模型数值计算方法程序设计上机计算求出结果数值分析这门学科有以下特点:1.面向计算机2.有可靠理论分析3.要有数值试验本文关键经过 Matlab 软件,对数值分析中 LU 分解法、Lagrange插值法、复化Simpon积分方法和Runge-Kutta方法进
2、行编程,并利用这些方法在 MATLAB 中对部分问题进行求解,并得出结论。关键词:数值分析;计算机;编程 ;MATLAB;目录一 LU分解法11.1实验目的11.2实验基本原理11.3算法程序21.4实例及结果3二 Lagrange插值法62.1实验目的62.2实验基本原理62.3算法程序72.4实例及结果7三 复化Simpon积分93.1实验目的93.2实验基本原理93.3算法程序103.4实例及结果10四 Runge-Kutta方法124.1实验目的124.2实验基本原理124.3算法程序134.4实例及结果13总结15参考文献16一 LU分解法1.1试验目标1.了解LU分解法解线性方程组
3、基础原理。2.熟悉计算方法技巧和过程,能用LU分解法处理问题。3.用matlab实现LU分解。1.2试验基础原理1.设A为n阶矩阵,假如A次序主子式Di0(i=1,2,n-1),则A可分解为一个单位下三角矩阵L和一个上三角矩阵U乘积,且这种分解是唯一。A=LU=1l211ln1ln21u11u12u1nu22u2nunn 2.在满足1条件下可推导得出以下公式(1) lij=(aij-n=1j-1linuij)/uij (2) uij=aij-n=1j-1ljnuni (3) yi=bi-n=1j-1linyn (4) xi=(yi-n=i+1nuinxn)/uii 3.LU分解具体过程以下:
4、(1)第一步分解:u11=a11 (2)第二步分解:l21=a21/u11 u12=a12 u22=a22-l21u22 (3)第三步分解:l31=a31/u11 l32=(a32-l31u12)/u22 u13=a13 u23=a23-l21u13 u33=a33-l31u13-l32u23 (4)第n步分解:依次计算:ln1、ln1、lnn-1,uinunn 1l211ln1ln21u11u12u1nu22u2nunn1.3算法程序function L,U,x=Lu_x(A,d)n,m=size(A);if n=m error(The rows and columns of matrix
5、A must be equal!); retirn;endfor ii=1:nfor i=1:iifor j=1:ii AA(i,j)=A(i,j);endendif(det(AA)=0) error(The matrix can not be divided by LU!) return;endendAn,n=size(A);L=zeros(n,n);U=zeros(n,n);for i=1:n L(i,i)=1;endfor k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j); end for i=k+1:n L(i,k)=(A
6、(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)/U(k,k); endendy(1)=d(1);for i=2:n for j=1:i-1 d(i)=d(i)-L(i,j)*y(j); endy(i)=d(i);endx(n)=y(n)/U(n,n);for i=(n-1):-1:1 for j=n:-1:i+1 y(i)=y(i)-U(i,j)*x(j); end x(i)=y(i)/U(i,i);end1.4实例及结果1.3x1+5x2+6x3+2x4=207x1+3+7x3+5x4=152x1+7x2+3x3+6x4=163x1+2x2+5x3+8x4=19MATLAB
7、命令窗口输入以下: A=3 5 6 2;7 3 7 5;2 7 3 6;3 2 5 8 b=20 15 16 19; L,U,x=Lu_x(A,b)得到结果以下:A = 3 5 6 2 7 3 7 5 2 7 3 6 3 2 5 8L = 1.0000 0 0 0 2.3333 1.0000 0 0 0.6667 -0.4231 1.0000 0 1.0000 0.3462 -0.3592 1.0000U = 3.0000 5.0000 6.0000 2.0000 0 -8.6667 -7.0000 0.3333 0 0 -3.9615 4.8077 0 0 0 7.6117x = -2.41
8、71 0.7105 3.6824 0.80232.x1x2x3=161718MATLAB命令窗口输入以下: A=3 2 1;6 5 4;5 8 7 b=16 17 18; L,U,x=Lu_x(A,b)得到结果以下:A = 3 2 1 6 5 4 5 8 7A = 3 2 1 6 5 4 5 8 7L = 1.0000 0 0 2.0000 1.0000 0 1.6667 4.6667 1.0000U = 3.0000 2.0000 1.0000 0 1.0000 2.0000 0 0 -4.0000x = -0.0000 15.6667 -15.3333二 Lagrange插值法2.1试验目
9、标1.了解拉格朗日插值基础概念。2.了解插值公式基础原理,利用插值公式求解问题。3.编写matlab程序,实现拉格朗日插值法。2.2试验基础原理拉格朗日插值多项式以下:首先结构个插值节点x0、x1xn上插值基函数,对任一点所对应插值基函数,因为在全部xj(j=0,1,i-1,i+1,n)取零值,所以有因子。又因是一个次数不超出多项式,所以只可能相差一个常数因子,固可表示成:利用得:于是 所以满足 插值多项式可表示为:从而次拉格朗日插值多项式为:2.3算法程序function yy=nalagr(x,y,xx)m=length(x);n=length(y);if m=n,error(向量x和y长
10、度必需一致);ends=0;for i=1:n t=ones(1,length(xx); for j=1:n if j=i t=t.*(xx-x(j)/(x(i)-x(j); end end s=s+t*y(i);endyy=s;2.4实例及结果 1. 给出fx=lnx数值表,以下图所表示,用Lagrange插值计算ln0.46近似值x0.30.40.50.60.7lnx-0.81629-0.79315-0.61083-0.45777-0.32314MATLAB命令窗口输入以下: x=0.3 0.4 0.5 0.6 0.7 y=-0.81629 -0.79315 -0.61083 -0.457
11、77 -0.32314 xx=0.46 nalagr(x,y,xx)得到结果以下:ans = -0.68632.已知sin0.43=0.6654,sin0.45=0.6673,sin0.47=0.6754,求sin0.4432近似值。xsin0.43sin0.45sin0.47y0.66540.66730.6754MATLAB命令窗口输入以下: x=0.43 0.45 0.47 y=0.6654 0.6673 0.6754 xx=0.4432 nalagr(x,y,xx)得到结果以下:ans = 0.6660三 复化Simpon积分3.1试验目标1.了解复化Simpon积分基础原理。2.熟悉计
12、算方法技巧和过程,能用Simpon积分处理问题。3.用matlab实现Simpon积分。3.2试验基础原理将区间等分,子区间长度为,在每个子区间上采取Simpson公式,在用Simpson公式时,还需要将子区间再二等分,所以有个分点,即。经推导得到称为复化Simpson值,称如上式子为复化Simpson公式。类似于复化梯形公式,复化Simpson公式余项为实际上,=3.3算法程序%复化simpson求积分%a,b表示区间,n表示区间数function ret=mulsimpson(a,b,n)h=(b-a)/n;detsum=0;for i=1:n-1 xk=a+i*h; detsum=det
13、sum+fun(xk);endret=h*(fun(a)+fun(b)+2*detsum)/2;3.4实例及结果1.依据以上用Matlab数学软件所编代码来上机求解实际数学问题,用复化Simpson公式求积分-22e-x2dx,在积分区间中点和点之间间隔取为0.2。(1) 建立fun.m文件function z=fun(x)z=exp(-x*x);(2) MATLAB命令窗口输入以下: x=-2:0.2:2; y=exp(-x.2); I=S_quad(x,y)运行得到结果为:I =1.76412. 用复化Simpson公式求积分-126xdx,在积分区间中点和点之间间隔取为0.1(1) 建立
14、fun.m文件function z=fun(x)z=6*x;(2) MATLAB命令窗口输入以下: x=-1:0.1:2; y=6*x; I=S_quad(x,y)运行得到结果为:I = 9四 Runge-Kutta方法4.1试验目标1. 了解Runge-Kutta法收敛性和稳定性。2. 学会用Matlab编程实现Runge-Kutta法解常微分方程。4.2试验基础原理考虑差分格式,视为在点处斜率,视为在点处预报斜率,若参数及取值使得上式含有2阶精度,则称之为二阶Runge-Kutta格式。 另一个二阶Runge-Kutta法形式为 它本质上用和中间点值进行计算,所以也称为中点公式。考察四阶经
15、典Runge-Kutta法是用和加权平均值来近似。最常见四阶Runge-Kutta法有以上五个式子称为标准四阶Runge-Kutta公式,对应方法称为标准四阶Runge-Kutta法4.3算法程序function y,x=lgkt4j(x0,xn,y0,h)x=x0:h:xn;n=length(x);y1=x;y1(1)=y0;for i=1:n-1 K1=f(x(i),y1(i); K2=f(x(i)+h/2,y1(i)+h/2*K1); K3=f(x(i)+h/2,y1(i)+h/2*K2); K4=f(x(i)+h,y1(i)+h*K3); y1(i+1)=y1(i)+h/6*(K1+2
16、*K2+2*K3+K4);endy=y1;4.4实例及结果1.求微分方程dydx=-2xy2,y0=1.5,h=0.1在1.1x x0=1.1;xn=2.3;y0=1.5;h=0.1;y,x=lgkt4j(x0,xn,y0,h); n=length(x); fprintf(自编龙格库塔函数效果n); fprintf(i x(i) y(i)n); for i=1:nfprintf(%2d%12.4f%12.4fn,i,x(i),y(i);end得到结果以下:i x(i) y(i) 1 1.1000 1.5000 2 1. 1.1154 3 1.3000 0.8722 4 1.4000 0.706
17、0 5 1.5000 0.5860 6 1.6000 0.4959 7 1.7000 0.4262 8 1.8000 0.3709 9 1.9000 0.326110 2.0000 0.289311 2.1000 0.258612 2. 0.232813 2.3000 0.21072.求微分方程dydx=x3y2,y0=1,h=0.1在0.5x x0=0.5;xn=1.4;y0=1;h=0.;y,x=lgkt4j(x0,xn,y0,h); n=length(x); fprintf(自编龙格库塔函数效果n); fprintf(i x(i) y(i)n); for i=1:nfprintf(%2d
18、%12.4f%12.4fn,i,x(i),y(i);end得到结果以下:i x(i) y(i) 1 0.5000 1.0000 2 0.6000 1.0171 3 0.7000 1.0465 4 0.8000 1.0950 5 0.9000 1.1743 6 1.0000 1.3061 7 1.1000 1.5394 8 1. 2.0111 9 1.3000 3.310810 1.4000 14.3577总结这次课程设计时间不算长,可是我从中学到了很多东西。即使对matlab有一定了解,不过因为实际操作比较少,所以处理起课程设计还是比较吃力。经过这个程序设计,我对于matlab软件使用愈加熟练了。而对于数值分析这个课程,我也有了更深体会。经过这个课程设计,我认识到,为何说,计算方法是为多种数学问题数值解答研究提供最有效算法。因为利用计算方法中知识,我们能够在误差许可范围内,用最快、最正确方法去处理我们生活中碰到问题。总而言之,经过这次课程设计,我对matlab操作和对数值分析中知识全部有了提升,这些或许就是我在这次课程设计中最大收获吧。参考文件【1】 李庆扬 王能超 易大义 数值分析 第五版 清华大学出版社 【2】 白峰杉 数值计算引论 高等教育出版社 【3】 吴振远 基于Matlab数值分析 中国地质大学出版 【4】 薛毅 数值分析和试验 北京工业大学出版社