摘要本文主要通过Matlab软件,对数值分析中的LU分解法、最小二乘法、复化Simpon积分、Runge-Kutta方法进行编程,并利用这些方法在MATLAB中对一些问题进行求解,并得出结论。实验一线性方程组数值解法中,本文选取LU分解法,并选取数据于《数值分析》教材第5章第153页例5进行实验。所谓LU分解法就是将高斯消去法改写为紧凑形式,可以直接从矩阵A的元素得到计算L、U元素的递推公式,而不需要任何步骤。用此方法得到L、U矩阵,从而计算Y、X。实验二插值法和数据拟合中,本文选取最小二乘拟合方法进行实验,数据来源于我们课堂学习该章节时的课件中的多项式拟合例子进行实验。最小二乘拟合是一种数学上的近似和优化,利用已知的数据得出一条直线或者曲线,使之在坐标系上与已知数据之间的距离的平方和最小。利用excel的自带函数可以较为方便的拟合线性的数据分析。实验三数值积分中,本文选取复化Simpon积分方法进行实验,通过将复化Simpson公式编译成MATLAB语言求积分∫𝑒;𝑥𝑑𝑥10完成实验过程的同时,也对复化Simpon积分章节的知识进行了巩固。实验四常微分方程数值解,本文选取Runge-Kutta方法进行实验,通过实验了解Runge-Kutta法的收敛性与稳定性同时学会了学会用Matlab编程实现Runge-Kutta法解常微分方程,并在实验的过程中意识到尽管我们熟知的四种方法,事实上,在求解微分方程初值问题,四阶法是单步长中最优秀的方法,通常都是用该方法求解的实际问题,计算效果比较理想的。实验五数值方法实际应用,本文采用最小二乘法拟合我国2001年到2015年的人口增长模型,并预测2020年我国人口数量。关键词:Matlab;LU分解法;最小二乘法;复化Simpon积分;Runge-Kutta目录一.LU分解法.......................................................11.1实验目的.....................................................11.2基本原理.....................................................11.3实验内容.....................................................21.4数据来源.....................................................31.5实验结论.....................................................3二.Lagrange插值...................................................42.1实验目的.....................................................42.2基本原理.....................................................52.3实验内容.....................................................52.4数据来源.....................................................62.5实验结论.....................................................6三.复化simpon积分.................................................73.1实验目的.....................................................73.2基本原理.....................................................73.3实验内容.....................................................73.4数据来源.....................................................83.5实验结论.....................................................8四.Runge-Kutta方法................................................94.1实验目的.....................................................94.2基本原理.....................................................94.3实验内容....................................................104.4数据来源....................................................114.5实验结论....................................................11五.数值方法实际应用...............................................115.1实验目的....................................................115.2基本原理....................................................125.3实验内容....................................................125.4数据来源....................................................135.5实验结论....................................................13总结...............................................................16参考文献...........................................................171一.LU分解法1.1实验目的[1]了解LU分解法的基本原理和方法;[2]通过实例掌握用MATLAB求线性方程组数值解的方法;[3]编程实现LU分解1.2基本原理对于矩阵A,若存在一个单位下三角矩阵L和一个上三角U,使得A=LU(1.1)。即[𝑎11⋯𝑎1𝑛⋮⋱⋮𝑎𝑛1⋯𝑎𝑛𝑛]=[1⋯0⋮⋱⋮𝑙𝑛1⋯1][𝑢11⋯𝑢1𝑛⋮⋱⋮0⋯𝑢𝑛𝑛](1.2)称上述分解为矩阵A的LU分解,也称为直接三角分解。在式(1.2)中,利用矩阵L的第一行与矩阵U的各列相乘,可以得到矩阵U的第1行𝑢1𝑗=𝑎1𝑗(𝑗=1,2,…,𝑛)(1.3)。利用矩阵L的各行与矩阵U的第1列相乘,得到矩阵L的第1列𝑙𝑖1=𝑎𝑖1𝑢𝑖1(𝑖=2,3,…,𝑛)(1.4)。假设已确定出矩阵U的第1行到第k-1行与矩阵L的第1列到第k-1列,现在来求矩阵U的第k行和L的第k列。利用式(1.2)中矩阵L的第k行与矩阵U的第j(j≥k)列相乘,得到矩阵U的第k行𝑢𝑘𝑗=𝑎𝑘𝑗−∑𝑙𝑘𝑞𝑢𝑞𝑗𝑘;1𝑞1(𝑗=𝑘,𝑘+1,…,𝑛)(1.5)。利用矩阵L的第i(i𝑘)行与矩阵U的第k列相乘,得到矩阵L的第k列𝑙𝑖𝑘=(𝑎𝑖𝑘−∑𝑙𝑖𝑞𝑢𝑞𝑘)/𝑢𝑘𝑘𝑘;1𝑞1(𝑖=𝑘+1,𝑘+2,…,𝑛)(1.6)。显然,式(1.5)和式(1.6)对于k=2,3,„,n都成立。若矩阵A有分解:A=LU,其中L为单位下三角阵,U为上三角阵,则称该分解为LU分解,可以证明,当A的各阶顺序主子式均不为零时,LU分解可以实现并且唯一。21.3实验内容(1)算法设计由式(1.1),将方程组Ax=b改写为L(Ux)=b则方程组求解可分成两部分完成。令y=Ux,则方程组可改写成方程组Ly=b和Ux=y由上式得到𝑦𝑘=𝑏𝑘−∑𝑙𝑘𝑗𝑦𝑗𝑘;1𝑗1(𝑘=1,2,…,𝑛)𝑥𝑘=(𝑦𝑘−∑𝑢𝑘𝑗𝑥𝑗𝑛𝑗𝑘:1)𝑢𝑘𝑘(𝑘=𝑛,𝑛−1,…,1)(2)利用MATLAB编写代码矩阵的LU分解:function[L,U,index]=LU_Decom(A)[n,m]=size(A);ifn~=merror('TherowsandcolumnsofmatrixAmustbeequal!');return;endL=eye(n);U=zeros(n);index=1;fork=1:nforj=k:nz=0;forq=1:k-1z=z+L(k,q)*U(q,j);endU(k,j)=A(k,j)-z;endifabs(U(k,k))epsindex=0;return;endfori=k+1:n3z=0;forq=1:k-1z=z+L(i,q)*U(q,k);endL(i,k)=(A(i,k)-z)/U(k,k);endend用矩阵的LU分解求解方程组function[x,y]=bxzylu(A,b)n=length(A);[L,U,index]=LU_Decom(A);y=L\b;x=U\y;1.4数据来源数据来源于《数值分析》教材第5章第153页例5。用直接三角分解法求解:[489371265][𝑥1𝑥2𝑥3]=[101824]1.5实验结论(1)将矩阵A进行LU分解在matlab命令窗口输入:A=[489;371;915];[L,U,index]=LU_Decom(A)输出结果为:L=1.0000000.75001.0000042.2500-17.00001.0000U=4.00008.00009.000001.0000-5.750000-113.0000index=1由index=1可知计算成功,得到了相应的分解矩阵。(2)用矩阵的LU分解求解方程组在matlab中输入:A=[489;371;915];b=[101824];[x,y]=bxzylu(A,b)输出结果为:x=3.40271.3407-1.5929y=10.000010.5000180.0000二.Lagrange插值2.1实验目的[1]熟悉Lagrange插值的基本原理;5[2]能编程实现Lagrange插值,并求解函数多项式的值;[3]运用Matlab编程,根据实例中给定的函数值表求出插值多项式和函数在某一点的近似值。2.2基本原理构造n次多项式𝐿𝑛(𝑥)=𝑦0𝑙0(𝑥)+𝑦1𝑙1(𝑥)+⋯+𝑦𝑛𝑙𝑛(𝑥),其中基函数𝑙𝑘(x)=(𝑥−𝑥0)…(𝑥−𝑥𝑘;1)(𝑥−𝑥𝑘:1)…(𝑥−𝑥𝑛)(𝑥𝑘−𝑥0)…(𝑥𝑘−𝑥𝑘;1)(𝑥𝑘−𝑥𝑘:1)…(𝑥𝑘−𝑥𝑛)显然𝑙𝑘(𝑥)满足𝑙𝑘(𝑥𝑖)={1(𝑖=𝑘)0(𝑖≠𝑘),此时𝐿𝑛(x)≈f(x)。误差𝑅𝑛(x)=f(x)−𝐿𝑛(𝑥)=𝑓𝑛:1(𝜉)(𝑛+1)!𝑤𝑛:1(𝑥)其中ξ∈(a,b)且依赖于x,𝑤𝑛:1(𝑥)=(𝑥−𝑥0)(𝑥−𝑥1)…(𝑥−𝑥𝑛),显然,当n=1时,即插值结点只有两个𝑥0,𝑥1时,𝐿1(𝑥)=𝑦0𝑥−𝑥1𝑥0−𝑥1+𝑦1𝑥−𝑥0𝑥1−𝑥02.3实验内容functionyi=Lagrange(x,y,xi