清华大学数值分析实验报告

合集下载

数值分析综合实验报告

数值分析综合实验报告

一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。

二、实验内容1. 插值方法(1)拉格朗日插值法:利用已知数据点构造多项式,以逼近未知函数。

(2)牛顿插值法:在拉格朗日插值法的基础上,通过增加基函数,提高逼近精度。

2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,通过不断缩小区间来逼近根。

(2)Newton法:利用函数的导数信息,通过迭代逼近根。

(3)不动点迭代法:将方程转化为不动点问题,通过迭代逼近根。

3. 数值积分方法(1)矩形法:将积分区间等分,近似计算函数值的和。

(2)梯形法:将积分区间分成若干等分,用梯形面积近似计算积分。

(3)辛普森法:在梯形法的基础上,将每个小区间再等分,提高逼近精度。

三、实验步骤1. 拉格朗日插值法(1)输入已知数据点,构造拉格朗日插值多项式。

(2)计算插值多项式在未知点的函数值。

2. 牛顿插值法(1)输入已知数据点,构造牛顿插值多项式。

(2)计算插值多项式在未知点的函数值。

3. 方程求根方法(1)输入方程和初始值。

(2)选择求解方法(二分法、Newton法、不动点迭代法)。

(3)迭代计算,直到满足精度要求。

4. 数值积分方法(1)输入被积函数和积分区间。

(2)选择积分方法(矩形法、梯形法、辛普森法)。

(3)计算积分值。

四、实验结果与分析1. 插值方法(1)拉格朗日插值法:通过构造多项式,可以较好地逼近已知数据点。

(2)牛顿插值法:在拉格朗日插值法的基础上,增加了基函数,提高了逼近精度。

2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,计算简单,但收敛速度较慢。

(2)Newton法:利用函数的导数信息,收敛速度较快,但可能存在数值不稳定问题。

(3)不动点迭代法:将方程转化为不动点问题,收敛速度较快,但可能存在初始值选择不当的问题。

3. 数值积分方法(1)矩形法:计算简单,但精度较低。

数值分析2024上机实验报告

数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。

在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。

本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。

一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。

1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。

常见的数值方法有二分法、牛顿法、割线法等。

在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。

2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。

插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。

在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

3.数值积分这部分实验要求使用数值方法计算给定函数的积分。

常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。

在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。

4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。

常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。

在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。

结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。

2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。

结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。

清华大学贾仲孝老师高等数值分析报告第二次实验

清华大学贾仲孝老师高等数值分析报告第二次实验

高等数值分析第二次实验作业T1.构造例子特征值全部在右半平面时, 观察基本的Arnoldi 方法和GMRES 方法的数值性态, 和相应重新启动算法的收敛性. Answer:(1) 构造特征值均在右半平面的矩阵A :根据实Schur 分解,构造对角矩阵D 由n 个块形成,每个对角块具有如下形式,对应一对特征值i i i αβ±ii i i i S αββα-⎛⎫= ⎪⎝⎭这样D=diag(S 1,S 2,S 3……S n )矩阵的特征值均分布在右半平面。

生成矩阵A=U TAU ,其中U 为正交阵,则A 矩阵的特征值也均在右半平面。

不妨构造A 如下所示:2211112222/2/2/2/2N NA n n n n ⨯-⎛⎫⎪ ⎪ ⎪- ⎪= ⎪ ⎪ ⎪- ⎪ ⎪⎝⎭ 由于选择初值与右端项:x0=zeros(2*N,1);b=ones(2*N,1);则生成矩阵A 的过程代码如下所示:N=500 %生成A 为2N 阶 A=zeros(2*N); for a=1:NA(2*a-1,2*a-1)=a; A(2*a-1,2*a)=-a; A(2*a,2*a-1)=a; A(2*a,2*a)=a; endU = orth(rand(2*N,2*N)); A1 = U'*A*U;(2) 观察基本的Arnoldi 和GMRES 方法编写基本的Arnoldi 函数与基本GMRES 函数,具体代码见附录。

function [x,rm,flag]=Arnoldi(A,b,x0,tol,m) function [x,rm,flag]=GMRES(A,b,x0,tol,m)输入:A 为方程组系数矩阵,b 为右端项,x0为初值,tol 为停机准则,m 为人为限制的最大步数。

输出:x 为方程的解,rm 为残差向量,flag 为解是否收敛的标志。

外程序如下所示: e=1e-6; m=700;tic[xA,rmA,flagA]=Arnoldi(A1,b,x0,e,m);toctic[xG,rmG,flagG]=GMRES(A1,b,x0,e,m);tocsubplot(1,2,1);semilogy(rmA)title('ArnoldiÊÕÁ²ÇúÏß')xlabel('µü´ú²½Êýk')ylabel('log(||rk||)')subplot(1,2,2);semilogy(rmG)title('GMRESÊÕÁ²ÇúÏß')xlabel('µü´ú²½Êýk')ylabel('log(||rk||)')得到:得到两种方法的收敛曲线如上所示,将计算结果整理在下表中:结果讨论:1.从图中可以看出,基本的Arnoldi方法经过546步收敛,基本的GMRES方法经过526步收敛,基本的GMRES收敛速度会略快于基本的Arnoldi方法。

数值分析实验报告心得(3篇)

数值分析实验报告心得(3篇)

第1篇在数值分析这门课程的学习过程中,我深刻体会到了理论知识与实践操作相结合的重要性。

通过一系列的实验,我对数值分析的基本概念、方法和应用有了更加深入的理解。

以下是我对数值分析实验的心得体会。

一、实验目的与意义1. 巩固数值分析理论知识:通过实验,将课堂上学到的理论知识应用到实际问题中,加深对数值分析概念和方法的理解。

2. 培养实际操作能力:实验过程中,我学会了使用Matlab等软件进行数值计算,提高了编程能力。

3. 增强解决实际问题的能力:实验项目涉及多个领域,通过解决实际问题,提高了我的问题分析和解决能力。

4. 培养团队协作精神:实验过程中,我与同学们分工合作,共同完成任务,培养了团队协作精神。

二、实验内容及方法1. 实验一:拉格朗日插值法与牛顿插值法(1)实验目的:掌握拉格朗日插值法和牛顿插值法的原理,能够运用这两种方法进行函数逼近。

(2)实验方法:首先,我们选择一组数据点,然后利用拉格朗日插值法和牛顿插值法构造插值多项式。

最后,我们将插值多项式与原始函数进行比较,分析误差。

2. 实验二:方程求根(1)实验目的:掌握二分法、Newton法、不动点迭代法、弦截法等方程求根方法,能够运用这些方法求解非线性方程的根。

(2)实验方法:首先,我们选择一个非线性方程,然后运用二分法、Newton法、不动点迭代法、弦截法等方法求解方程的根。

最后,比较不同方法的收敛速度和精度。

3. 实验三:线性方程组求解(1)实验目的:掌握高斯消元法、矩阵分解法等线性方程组求解方法,能够运用这些方法求解线性方程组。

(2)实验方法:首先,我们构造一个线性方程组,然后运用高斯消元法、矩阵分解法等方法求解方程组。

最后,比较不同方法的计算量和精度。

4. 实验四:多元统计分析(1)实验目的:掌握多元统计分析的基本方法,能够运用这些方法对数据进行分析。

(2)实验方法:首先,我们收集一组多元数据,然后运用主成分分析、因子分析等方法对数据进行降维。

数值分析实验报告

数值分析实验报告

一、实验目的1. 理解数值分析的基本概念和常用算法;2. 掌握数值方法在求解实际问题中的应用;3. 培养编程能力,提高对数值分析软件的使用熟练度。

二、实验内容本次实验主要涉及以下内容:1. 拉格朗日插值法;2. 牛顿插值法;3. 线性方程组的求解方法;4. 方程求根的数值方法;5. 最小二乘法曲线拟合。

三、实验步骤1. 拉格朗日插值法(1)输入数据:给定一组数据点(x1, y1)、(x2, y2)、...、(xn, yn)。

(2)计算拉格朗日插值多项式L(x)。

(3)利用L(x)计算待求点x0的函数值y0。

2. 牛顿插值法(1)输入数据:给定一组数据点(x1, y1)、(x2, y2)、...、(xn, yn)。

(2)计算牛顿插值多项式N(x)。

(3)利用N(x)计算待求点x0的函数值y0。

3. 线性方程组的求解方法(1)输入数据:给定线性方程组的系数矩阵A和常数向量b。

(2)采用高斯消元法求解线性方程组Ax=b。

4. 方程求根的数值方法(1)输入数据:给定函数f(x)和初始值x0。

(2)采用二分法求解方程f(x)=0的根。

5. 最小二乘法曲线拟合(1)输入数据:给定一组数据点(x1, y1)、(x2, y2)、...、(xn, yn)。

(2)建立线性最小二乘模型y=F(x)。

(3)利用最小二乘法求解模型参数。

四、实验结果与分析1. 拉格朗日插值法与牛顿插值法的比较通过实验,我们发现牛顿插值法的精度高于拉格朗日插值法。

这是因为牛顿插值法在计算过程中考虑了前一项的导数信息,从而提高了插值多项式的平滑性。

2. 线性方程组的求解方法高斯消元法在求解线性方程组时,计算过程较为繁琐,但稳定性较好。

在实际应用中,可根据具体问题选择合适的方法。

3. 方程求根的数值方法二分法在求解方程时,收敛速度较慢,但具有较好的稳定性。

对于初始值的选择,应尽量接近真实根。

4. 最小二乘法曲线拟合最小二乘法在拟合曲线时,误差较小,适用于数据点较多的情况。

数值分析实验报告总结

数值分析实验报告总结

一、实验背景数值分析是研究数值计算方法及其理论的学科,是计算机科学、数学、物理学等领域的重要基础。

为了提高自身对数值分析理论和方法的理解,我们进行了数值分析实验,通过实验加深对理论知识的掌握,提高实际操作能力。

二、实验目的1. 理解数值分析的基本理论和方法;2. 掌握数值分析实验的基本步骤和技巧;3. 培养实验设计和数据分析能力;4. 提高编程和计算能力。

三、实验内容本次实验主要分为以下几个部分:1. 线性方程组求解实验:通过高斯消元法、LU分解法等求解线性方程组,并分析算法的稳定性和误差;2. 矩阵特征值问题计算实验:利用幂法、逆幂法等计算矩阵的特征值和特征向量,分析算法的收敛性和精度;3. 非线性方程求根实验:运用二分法、牛顿法、不动点迭代法等求解非线性方程的根,比较不同算法的优缺点;4. 函数插值实验:运用拉格朗日插值、牛顿插值等方法对给定的函数进行插值,分析插值误差;5. 常微分方程初值问题数值解法实验:运用欧拉法、改进的欧拉法、龙格-库塔法等求解常微分方程初值问题,比较不同算法的稳定性和精度。

四、实验过程1. 线性方程组求解实验:首先,编写程序实现高斯消元法、LU分解法等算法;然后,对给定的线性方程组进行求解,记录计算结果;最后,分析算法的稳定性和误差。

2. 矩阵特征值问题计算实验:编写程序实现幂法、逆幂法等算法;然后,对给定的矩阵进行特征值和特征向量的计算,记录计算结果;最后,分析算法的收敛性和精度。

3. 非线性方程求根实验:编写程序实现二分法、牛顿法、不动点迭代法等算法;然后,对给定的非线性方程进行求根,记录计算结果;最后,比较不同算法的优缺点。

4. 函数插值实验:编写程序实现拉格朗日插值、牛顿插值等方法;然后,对给定的函数进行插值,记录计算结果;最后,分析插值误差。

5. 常微分方程初值问题数值解法实验:编写程序实现欧拉法、改进的欧拉法、龙格-库塔法等算法;然后,对给定的常微分方程初值问题进行求解,记录计算结果;最后,比较不同算法的稳定性和精度。

《数值分析》课程实验报告数值分析实验报告

《数值分析》课程实验报告数值分析实验报告

《数值分析》课程实验报告数值分析实验报告《数值分析》课程实验报告姓名:学号:学院:机电学院日期:20__ 年 _ 月_ 日目录实验一函数插值方法 1 实验二函数逼近与曲线拟合 5 实验三数值积分与数值微分 7 实验四线方程组的直接解法 9 实验五解线性方程组的迭代法 15 实验六非线性方程求根 19 实验七矩阵特征值问题计算 21 实验八常微分方程初值问题数值解法 24 实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。

试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。

数据如下:(1) 0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.57815 0.69675 0.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 插值多项式如下:其中:三、目的和意义 1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;2、明确插值多项式和分段插值多项式各自的优缺点;3、熟悉插值方法的程序编制;4、如果绘出插值函数的曲线,观察其光滑性。

四、实验步骤(1) 0.4 0.55 0.65 0.80 0.951.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。

清华大学高等数值分析实验设计及答案

清华大学高等数值分析实验设计及答案

高等数值分析实验一工物研13 成彬彬2004310559一.用CG,Lanczos和MINRES方法求解大型稀疏对称正定矩阵Ax=b作实验中,A是利用A= sprandsym(S,[],rc,3)随机生成的一个对称正定阵,S是1043阶的一个稀疏阵A= sprandsym(S,[],0.01,3);检验所生成的矩阵A的特征如下:rank(A-A')=0 %即A=A’,A是对称的;rank(A)=1043 %A满秩cond(A)= 28.5908 %A是一个“好”阵1.CG方法利用CG方法解上面的线性方程组[x,flag,relres,iter,resvec] = pcg(A,b,1e-6,1043);结果如下:Iter=35,表示在35步时已经收敛到接近真实xrelres= norm(b-A*x)/norm(b)= 5.8907e-007为最终相对残差绘出A的特征值分布图和收敛曲线:S=svd(A); %绘制特征值分布subplot(211)plot(S);title('Distribution of A''s singular values');;xlabel('n')ylabel('singular values')subplot(212); %绘制收敛曲线semilogy(0:iter,resvec/norm(b),'-o');title('Convergence curve');xlabel('iteration number');ylabel('relative residual');得到如下图象:为了观察CG方法的收敛速度和A的特征值分布的关系,需要改变A的特征值:(1).研究A的最大最小特征值的变化对收敛速度的影响在A的构造过程中,通过改变A= sprandsym(S,[],rc,3)中的参数rc(1/rc为A的条件数),可以达到改变A的特征值分布的目的:通过改变rc=0.1,0.0001得到如下两幅图以上三种情况下,由收敛定理2.2.2计算得到的至多叠代次数分别为:48,14和486,由于上实验结果可以看出实际叠代次数都比上限值要小较多。

数值分析的实验报告

数值分析的实验报告

数值分析的实验报告实验目的本实验旨在通过数值分析方法,探讨数学问题的近似解法,并通过实际案例进行验证和分析。

具体目的包括: 1. 理解和掌握数值分析的基本原理和方法; 2. 学会使用计算机编程语言实现数值分析算法; 3. 分析数值分析算法的精确性和稳定性; 4. 根据实验结果对数值分析算法进行优化和改进。

实验步骤1. 问题描述首先,我们选择一个数学问题作为实验的对象。

在本次实验中,我们选取了求解非线性方程的问题。

具体而言,我们希望找到方程 f(x) = 0 的解。

2. 数值方法选择根据非线性方程求解的特点,我们选择了牛顿迭代法作为数值方法。

该方法通过不断迭代逼近方程的解,并具有较好的收敛性和精确性。

3. 程序设计与实现为了实现牛顿迭代法,我们使用了Python编程语言,并使用了相应的数值计算库。

具体的程序实现包括定义方程 f(x) 和其导数f’(x),以及实现牛顿迭代法的迭代过程。

4. 实验案例与结果分析我们选择了一个具体的方程,例如 x^3 - 2x - 5 = 0,并通过程序运行得到了方程的解。

通过比较实际解与数值解的差异,我们可以分析数值方法的精确性和稳定性。

5. 优化与改进基于实验结果的分析,我们可以对数值分析算法进行优化和改进。

例如,通过调整迭代的初始值、增加迭代次数或修改算法公式等方式,改进算法的收敛性和精确性。

实验结论通过本次实验,我们深入理解了数值分析的基本原理和方法,并通过具体案例验证了牛顿迭代法的有效性。

同时,我们也意识到数值分析算法的局限性,并提出了一些改进的建议。

在今后的数学问题求解中,我们可以运用数值分析的方法,通过计算机编程实现更精确的近似解。

数值分析绪论实验报告

数值分析绪论实验报告

一、实验目的1. 了解数值分析的基本概念和主要内容;2. 掌握数值计算的基本方法,如插值、求根、数值积分等;3. 培养使用计算机进行数值计算的能力;4. 增强对数值分析在实际问题中的应用意识。

二、实验内容1. 插值法:拉格朗日插值、牛顿插值;2. 求根法:二分法、牛顿法、不动点迭代法;3. 数值积分:矩形法、梯形法、辛普森法。

三、实验步骤1. 插值法实验(1)编写拉格朗日插值程序,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。

(2)编写牛顿插值程序,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。

2. 求根法实验(1)编写二分法程序,求方程f(x) = 0在区间[a, b]上的根。

(2)编写牛顿法程序,求方程f(x) = 0在初始值x0附近的根。

(3)编写不动点迭代法程序,求方程f(x) = 0在初始值x0附近的根。

3. 数值积分实验(1)编写矩形法程序,求定积分∫f(x)dx在区间[a, b]上的近似值。

(2)编写梯形法程序,求定积分∫f(x)dx在区间[a, b]上的近似值。

(3)编写辛普森法程序,求定积分∫f(x)dx在区间[a, b]上的近似值。

四、实验结果与分析1. 插值法实验(1)使用拉格朗日插值法,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。

(2)使用牛顿插值法,以x1, x2, ..., xn为节点,y1, y2, ..., yn为函数值,求插值多项式P(x)。

2. 求根法实验(1)使用二分法,求方程f(x) = 0在区间[a, b]上的根。

(2)使用牛顿法,求方程f(x) = 0在初始值x0附近的根。

(3)使用不动点迭代法,求方程f(x) = 0在初始值x0附近的根。

3. 数值积分实验(1)使用矩形法,求定积分∫f(x)dx在区间[a, b]上的近似值。

数值分析实习报告总结

数值分析实习报告总结

一、实习背景数值分析是数学的一个重要分支,它研究如何用数值方法求解数学问题。

随着计算机技术的飞速发展,数值分析在各个领域得到了广泛的应用。

为了提高自己的实践能力,我选择了数值分析作为实习课题,希望通过这次实习,能够掌握数值分析的基本方法,并将其应用于实际问题中。

二、实习过程1. 实习初期在实习初期,我首先了解了数值分析的基本概念、理论和方法。

通过阅读相关教材和文献,我对数值分析有了初步的认识。

接着,我学习了数值分析的基本方法,如泰勒展开、牛顿法、高斯消元法等。

2. 实习中期在实习中期,我选择了几个实际问题进行数值计算。

首先,我使用泰勒展开法求解一个简单的微分方程。

通过编写程序,我得到了微分方程的近似解。

然后,我运用牛顿法求解一个非线性方程组。

在实际计算过程中,我遇到了一些问题,如收敛性、迭代次数过多等。

通过查阅资料和请教导师,我找到了解决方法,成功求解了方程组。

3. 实习后期在实习后期,我进一步学习了数值分析的高级方法,如复化梯形公式、复化Simpson公式、自适应梯形法等。

这些方法在解决实际问题中具有更高的精度和效率。

我选择了一个具体的工程问题,运用复化梯形公式求解定积分。

在计算过程中,我遇到了区间细分、精度控制等问题。

通过不断尝试和调整,我得到了较为精确的积分值。

三、实习收获与体会1. 理论与实践相结合通过这次实习,我深刻体会到理论与实践相结合的重要性。

在实习过程中,我不仅学习了数值分析的理论知识,还将其应用于实际问题中。

这使我更加深刻地理解了数值分析的基本方法,提高了自己的实践能力。

2. 严谨的学术态度在实习过程中,我养成了严谨的学术态度。

在编写程序、进行数值计算时,我注重细节,力求精确。

这使我更加注重学术规范,提高了自己的学术素养。

3. 团队合作精神实习过程中,我与其他同学进行了交流与合作。

在解决实际问题时,我们互相学习、互相帮助,共同完成了实习任务。

这使我更加懂得团队合作的重要性,提高了自己的团队协作能力。

清华大学数值分析实验报告

清华大学数值分析实验报告

数值分析实验报告一、 实验3。

1 题目:考虑线性方程组b Ax =,n n R A ⨯∈,n R b ∈,编制一个能自动选取主元,又能手动选取主元的求解线性代数方程组的Gauss 消去过程。

(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=6816816816 A ,⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157 b ,则方程有解()T x 1,,1,1*⋯=。

取10=n 计算矩阵的条件数。

分别用顺序Gauss 消元、列主元Gauss 消元和完全选主元Gauss 消元方法求解,结果如何?(2)现选择程序中手动选取主元的功能,每步消去过程都选取模最小或按模尽可能小的元素作为主元进行消元,观察并记录计算结果,若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用.(4)选取其他你感兴趣的问题或者随机生成的矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。

1. 算法介绍首先,分析各种算法消去过程的计算公式, 顺序高斯消去法:第k 步消去中,设增广矩阵B 中的元素()0k kk a ≠(若等于零则可以判定系数矩阵为奇异矩阵,停止计算),则对k 行以下各行计算()(),1,2,,k ikik k kka l i k k n a ==++,分别用ik l -乘以增广矩阵B 的第k 行并加到第1,2,,k k n ++行,则可将增广矩阵B 中第k 列中()k kka 以下的元素消为零;重复此方法,从第1步进行到第n-1步,则可以得到最终的增广矩阵,即()()(),n n n B Ab ⎡⎤=⎣⎦; 列主元高斯消去法:第k 步消去中,在增广矩阵B 中的子方阵()()()()k kkkknk k nknn a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦中,选取()k k i k a 使得()(k)max k k i k ik k i na a ≤≤=,当k i k ≠时,对B 中第k 行与第k i 行交换,然后按照和顺序消去法相同的步骤进行。

数值分析实习报告

数值分析实习报告

数值分析实习报告一、实习背景与目的随着现代科学技术的飞速发展,数值分析作为一种重要的数学方法,在工程计算、科学研究等领域发挥着越来越重要的作用。

为了更好地将理论知识与实际应用相结合,提高自己在数值分析方面的实际操作能力,我参加了本次数值分析实习。

本次实习的主要目的是学习并掌握数值分析的基本方法及其编程实现,培养解决实际问题的能力。

二、实习内容与过程1. 实习前的准备工作:在实习开始前,我首先对数值分析的基本概念和方法进行了复习,包括误差分析、插值法、数值微积分、线性代数方程组的求解、非线性方程求解等。

同时,我还学习了相关编程语言,如Python、MATLAB等,为实习打下了坚实的基础。

2. 实习过程中的学习与实践:在实习过程中,我按照指导书的要求,完成了以下几个方面的学习与实践:(1)误差分析:通过实习,我深入理解了误差的来源、性质和影响因素,掌握了误差分析的基本方法,如绝对误差、相对误差、无穷小量级比较等。

(2)插值法:我学习了线性插值、二次插值、三次插值等基本插值方法,并掌握了利用Python和MATLAB编程实现插值法的技巧。

(3)数值微积分:我掌握了数值积分和数值微分的原理和方法,如梯形法、辛普森法等,并能够运用编程实现相应的算法。

(4)线性代数方程组的求解:我学习了高斯消元法、LU分解法等线性代数方程组的求解方法,并通过编程实践了这些方法的应用。

(5)非线性方程求解:我掌握了牛顿法、弦截法等非线性方程求解方法,并能够运用编程实现相应的算法。

3. 实习成果的展示与总结:在实习的最后阶段,我根据自己的学习与实践,编写了一个简单的数值分析程序,涵盖了插值、数值积分、线性代数方程组求解等多个方面的内容。

通过这个程序,我对实习过程中所学到的知识进行了巩固和总结。

三、实习收获与体会通过本次数值分析实习,我收获颇丰。

首先,我掌握了数值分析的基本方法及其编程实现,提高了自己在实际问题中的解决能力。

其次,我学会了如何将理论知识与实际应用相结合,培养了自己的动手实践能力。

清华大学高等数值分析 第一次实验作业

清华大学高等数值分析  第一次实验作业

高等数值分析实验作业一
附件:主要算法代码
CG 法 CG.m function [x,Error,i,flag]=CG(A,b,x,ErrSet,uplimit) [m,n]=size(b); if m<n
b=b'; end [m,n]=size(x); if m<n
x=x'; end r=b-A*x; p=r; i=1; temp_rkrkplus=r'*r; Error=sqrt(temp_rkrkplus)/norm(b,2); while 1
Lanzcos算法的收敛曲线 (阶数n=1002)
100 m=10 m=50 m=100 m=400 m=800
10-5
||rk||/||b||
-10
10
-15
10 0
20
40
60
80
100
120
140
160
迭代次数
图5 对不同的m,Lanczos法求解Ax=b的收敛曲线
高等数值分析实验作业一
结论:如果 A 只有 m 个不同的特征值,则 Lanczos 方法至多 m 步就可以找到精 确解。实验中,在 m 较大的时候,算法收敛较快,迭代次数远小于 m。当 m 较 小时,可能需要接近于 m 步才能找到准确解。
2. 对于同样的例子,比较 CG 和 Lanczos 的计算结果。 解:(1)构造 1002 阶正定矩阵 A:
(2)Lanczos法求解Ax=b,A良态: 利用matlab编程实现CG算法。b = ones(1002,1),x0 = zeros(1002, 1)。计算 每一步迭代的残差rk相对于初始残差的2范数。相对残差2范数的对数值与 迭代步数的关系曲线如图3所示:

数值分析实验报告_清华大学_非线性方程的解法

数值分析实验报告_清华大学_非线性方程的解法

非线性方程的解法实验1.算法设计与比较问题提出:非线性方程组的求解方法很多,基本的思想是线性化。

不同的方法效果如何,要靠计算的实践来分析、比较。

实验内容:考虑算法(1)牛顿法(2)拟牛顿法分别编写它们的matlab程序。

实验要求:(1)用上述方法,分别计算两个例子。

在达到精度相同的前提下,比较迭代次数、浮点运算次数和CPU时间等。

1.1程序清单为使用flops统计浮点运算次数,使用MATLAB5.3版本%f1.m原函数f1function y=f(x)y(1)=12*x(1)-x(2)^2-4*x(3)-7;y(2)=x(1)^2+10*x(2)-x(3)-8;y(3)=x(2)^3+10*x(3)-8;end%ff1.m原函数f1的雅克比矩阵function y=ff(x)y(1,:)=[12,-2*x(2),-4];y(2,:)=[2*x(1),10,-1];y(3,:)=[0,3*x(2)^2,10];end%f1.m原函数f2function y=f2(x)y(1)=3*x(1)-cos(x(2)*x(3)) -1/2;y(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;y(3)=exp(-x(1)*x(2))+20*x(3)+1/3*(10*pi-3);end%ff2.m原函数f2的雅克比矩阵function y=ff2(x)y(1,:)=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3))];y(2,:)=[2*x(1),-2*81*(x(2)+0.1),cos(x(3))];y(3,:)=[-x(2)*exp(-x(1)*x(2)),-x(1)*exp(-x(1)*x(2)),20]; end%牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;u=[1,1,1]';tic;while (norm(u)>tol*norm(x(:,i))&(i<n))A=ff1(x(:,i));b=f1(x(:,i))';u=-A\b;x(:,i+1)=x(:,i)+u;i=i+1;end;x(:,i)iter=i-1t=toc%拟牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;p=[1,1,1]';A=ff1(x(:,1));tic;while (norm(p)>tol*norm(x(:,i))&(i<n))x(:,i+1)=x(:,i)-A\f1(x(:,i))';p=x(:,i+1)-x(:,i);q=f1(x(:,i+1))'-f1(x(:,i))';A=A+(q-A*p)*p'/norm(p,2)^2;i=i+1;end;iter=i-1t=tocx(:,i)1.2运行结果1.2.1第一个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6 (1)取()(0)1,1,1x T=牛顿迭代法迭代3次收敛,浮点运算次数为440,每次迭代平均浮点运算次数为147,CPU 耗时t =0(s)拟牛顿法迭代4次收敛,浮点运算次数为1048,每次迭代平均浮点运算次数为262,CPU 耗时t =0(s)(2)取()(0)000x T =,, 牛顿迭代法迭代4次收敛,浮点运算次数为510,每次迭代平均浮点运算次数为128,CPU 耗时t =1.600e-002(s)拟牛顿法迭代6次收敛,浮点运算次数为1493,每次迭代平均浮点运算次数为248,CPU 耗时t =1.50e-002(s)(3)取()(0)50,5050x T=,牛顿迭代法迭代15次收敛,浮点运算次数为2118,每次迭代平均浮点运算次数为141,CPU 耗时t =1.600e-002(s)拟牛顿法迭代338次收敛,浮点运算次数为88454,每次迭代平均浮点运算次数为262,CPU 耗时t =3.100e-002(s)1.2.2第二个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6(1)取()(0)000x T=,, 牛顿迭代法迭代5次收敛,浮点运算次数为776,每次迭代平均浮点运算次数为155.2,CPU 耗时t =0(s)拟牛顿法迭代6次收敛,浮点运算次数为1635,每次迭代平均浮点运算次数为273,CPU 耗时t =0(s)(2)取()(0)888x T=,, 牛顿迭代法迭代9次收敛,浮点运算次数为1519,每次迭代平均浮点运算次数为169,CPU 耗时t =0(s)拟牛顿法迭代21次收敛,浮点运算次数为5924,每次迭代平均浮点运算次数为282,CPU 耗时t =1.600e-002(s)(3)对于离精确解更远的初值(如()(0)101010x T=,,),在计算中会出现奇异或接近奇异的矩阵,计算结果误差很大或计算根本无法进行下去。

数值分析实验报告

数值分析实验报告

数值分析实验报告一、实验目的数值分析是一门研究用计算机求解数学问题的数值方法及其理论的学科。

本次实验的目的在于通过实际操作和编程实现,深入理解和掌握数值分析中的常见算法,提高运用数值方法解决实际问题的能力,并对算法的精度、稳定性和效率进行分析和比较。

二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。

实验所依赖的主要库包括 NumPy、Matplotlib 等。

三、实验内容(一)函数逼近与插值1、拉格朗日插值法通过给定的离散数据点,构建拉格朗日插值多项式,对未知点进行函数值的估计。

2、牛顿插值法与拉格朗日插值法类似,但采用了不同的形式和计算方式。

(二)数值积分1、梯形公式将积分区间划分为若干个梯形,通过计算梯形面积之和来近似积分值。

2、辛普森公式基于抛物线拟合的方法,提高积分近似的精度。

(三)线性方程组求解1、高斯消元法通过逐行消元将线性方程组化为上三角形式,然后回代求解。

2、 LU 分解法将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过两次前代和回代求解。

(四)非线性方程求解1、二分法通过不断将区间一分为二,逐步缩小根所在的区间,直到满足精度要求。

2、牛顿迭代法利用函数的切线来逼近根,通过迭代逐步收敛到根的近似值。

四、实验步骤(一)函数逼近与插值1、拉格朗日插值法定义计算拉格朗日基函数的函数。

根据给定的数据点和待求点,计算插值多项式的值。

输出插值结果,并与真实值进行比较。

2、牛顿插值法计算差商表。

构建牛顿插值多项式。

进行插值计算和结果分析。

(二)数值积分1、梯形公式定义积分区间和被积函数。

按照梯形公式计算积分近似值。

分析误差。

2、辛普森公式同样定义积分区间和被积函数。

运用辛普森公式计算积分近似值。

比较与梯形公式的精度差异。

(三)线性方程组求解1、高斯消元法输入系数矩阵和右端项向量。

进行消元操作。

回代求解方程。

输出解向量。

2、 LU 分解法对系数矩阵进行 LU 分解。

清华大学研究生高等数值分析计算实验奇异值分解SVD以及图像压缩matlab源程序代码

清华大学研究生高等数值分析计算实验奇异值分解SVD以及图像压缩matlab源程序代码

第1部分方法介绍奇异值分解(SVD )定理:设m n A R ⨯∈,则存在正交矩阵m m V R ⨯∈和n n U R ⨯∈,使得TO A V U O O ∑⎡⎤=⎢⎥⎣⎦其中12(,,,)r diag σσσ∑= ,而且120r σσσ≥≥≥> ,(1,2,,)i i r σ= 称为A 的奇异值,V 的第i 列称为A 的左奇异向量,U 的第i 列称为A 的右奇异向量。

注:不失一般性,可以假设m n ≥,(对于m n <的情况,可以先对A 转置,然后进行SVD 分解,最后对所得的SVD 分解式进行转置,就可以得到原来的SVD 分解式)方法1:传统的SVD 算法主要思想:设()m n A R m n ⨯∈≥,先将A 二对角化,即构造正交矩阵1U 和1V 使得110T B n U AV m n⎡⎤=⎢⎥-⎣⎦其中1200n n B δγγδ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦然后,对三角矩阵T T B B =进行带Wilkinson 位移的对称QR 迭代得到:T B P BQ =。

当某个0i γ=时,B 具有形状12B O B O B ⎡⎤=⎢⎥⎣⎦,此时可以将B 的奇异值问题分解为两个低阶二对角阵的奇异值分解问题;而当某个0i δ=时,可以适当选取'Given s 变换,使得第i 行元素全为零的二对角阵,因此,此时也可以将B 约化为两个低阶二对角阵的奇异值分解问题。

在实际计算时,当i B δε∞≤或者()1j j j γεδδ-≤+(这里ε是一个略大于机器精度的正数)时,就将i δ或者i γ视作零,就可以将B 分解为两个低阶二对角阵的奇异值分解问题。

主要步骤:(1)输入()m n A R m n ⨯∈≥及允许误差ε(2)计算Householder 变换1,,,n P P ⋅⋅⋅,12,,n H H -⋅⋅⋅,使得112()()0Tn n B nP P A H H m n -⎡⎤⋅⋅⋅⋅⋅⋅=⎢⎥-⎣⎦其中1200n n B δγγδ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 12:n U PP P =⋅⋅⋅,122:.n V H H H -=⋅⋅⋅ (3)收敛性检验:(i )将所有满足()1j j j γεδδ-≤+的j γ置零;(ii )如果0,2,,j j n γ== ,则输出有关信息结束;否则,1:0γ=,确定正整数p q <,使得10p q n γγγ+==⋅⋅⋅==,0j γ≠,p j q <≤;(iii )如果存在i 满足1p i q ≤≤-使得i B δε∞≤,则:0i δ=,1:i x γ+=,1:i y δ+=,1:0i γ+=,:1l =,转步(iv );否则转步(4) (iv )确定cos ,sin c s θθ==和σ使0c s x s c y σ⎡⎤⎡⎤⎡⎤=⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦这也相应于0Tc s y s c x σ⎡⎤⎡⎤⎡⎤=⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦所以可以直接调用'Given s 变换算法得到:i l δσ+=,:(,,)T U UG i i l θ=+这相当于(1:;,)(1:;,)(1:;,)Tc s c s U n i i l U n i i l U n i i l s c s c -⎡⎤⎡⎤+=+=+⎢⎥⎢⎥-⎣⎦⎣⎦(v )如果l q i <-,则1:i l x s γ++=,11:i l i l c γγ++++=,1:i l y δ++=,:1l l =+转步(iv ),否则转步(i )(4)构造正交阵P 和Q ,使12=T P B Q B 仍为上双对角阵,其中112100pp p p q q B δγδγγδ+++⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦, 得121:=T B B P B Q =,:(,,)p n p q U Udiag I P I --=,:(,,)p n p q V Vdiag I Q I --=然后转步(3)。

清华大学高等数值分析 第二次实验作业

清华大学高等数值分析  第二次实验作业

400
600
800
1000
1200
1400
1600
1800
2000
迭代次数
图4
m步的重启动GMRES法求解Ax=b的收敛曲线
结论: m步重启GMRES方法快于m步重启Arnoldi方法, 随m增加, 迭代次数减小, 但都大于未重启算法的次数。当m=40时两种方法计算时间最短,此外,m步重 启动 Arnoldi 方法的收敛曲线有峰点和波纹,收敛速度均匀性差, m 步重启动 GMRES方法的收敛曲线很平滑,单调下降,收敛速度均匀性好。(图4是五条曲 线, 只是由于m=20和m=80两条曲线比较靠近, 看起来像四条, 放大后才能看清) 2.对于 1 中的矩阵,将特征值进行平移,使得实部有正有负,和 1 的结果进行比 较,方法的收敛速度会如何?基本的 Arnoldi 算法有无峰点?若有,基本的 GMRES 算法相应地会怎样? 解: (1)欲将特征值进行平移,使得实部有正有负,可以将矩阵 A 做如下变换:
10
0
特征值虚部按不同比例因子 k变化的 GMRES算法的收敛曲线 (阶数 n=1000)
k=0.2 k=0.5 k=2 k=5
10
-5
||rk||/||b||
10
-10
10
-15
0
100
200
300
400
500
600
700
800
900
1000
迭代次数
图8 特征值虚部按不同比例因子k变化的GMRES法求解求解Ax=b的收敛曲线
图7 特征值虚部按不同比例因子k变化的Arnoldi法求解求解Ax=b的收敛曲线
(3)GMRES法求解求解A′x=b: 利用matlab编程实现GMRES算法。b = ones(1000,1),x0 = zeros(1000, 1)。 计算每一步迭代的残差rk相对于初始残差的2范数。相对残差2范数的对数 值与迭代步数的关系曲线如图8所示:

数值分析实习报告总结

数值分析实习报告总结

数值分析实习报告总结首先,我想对我所参加的数值分析实习课程表示由衷的感谢。

这次实习让我对数值分析这门学科有了更深入的理解,并且让我在实际操作中掌握了许多有用的技能和知识。

在这篇实习报告总结中,我将回顾我在实习过程中的学习经历,总结我在实习中学到的主要内容,并分享我的一些感悟。

实习的第一周,我主要学习了数值分析的基本概念和方法。

通过阅读教材和参加课堂讨论,我了解了数值分析的重要性以及在工程、科学和商业领域中的应用。

我学习了插值、线性代数、微分方程等数值方法的原理和实现方式。

此外,我还通过实际编程练习,掌握了使用数值分析方法解决实际问题的基本技能。

在实习的第二周,我深入学习了Lagrange插值和数值线性代数。

我了解到Lagrange插值是一种构造多项式以通过一组给定的点的方法,它在插值和逼近方面有广泛的应用。

通过编写代码实现Lagrange插值算法,我学会了如何利用已知的数据点来预测未知的点。

此外,我还学习了数值线性代数中的矩阵运算、特征值问题和线性方程组的求解方法,这些方法对于解决实际问题非常重要。

在实习的第三周,我学习了数值微积分和数值求解微分方程的方法。

我了解到数值微积分是利用数值方法近似计算积分和导数的过程,它在信号处理和物理模拟等领域有广泛应用。

通过编写代码实现数值积分和数值导数算法,我学会了如何近似计算函数的积分和导数。

此外,我还学习了如何使用数值方法求解常微分方程和偏微分方程,这些方法对于解决工程和科学领域中的问题非常重要。

在实习的过程中,我也遇到了一些困难和挑战。

例如,在实现数值算法时,我常常会遇到编程错误和数值误差的问题。

通过与同学和老师的讨论和交流,我学会了如何调试代码和减小数值误差的方法。

这些经验让我更加熟悉编程和数值分析的方法,并且提高了我的问题解决能力。

通过这次数值分析实习,我不仅学到了许多关于数值分析的知识和技能,还提高了自己的编程能力和问题解决能力。

我相信这些知识和技能将在我未来的学习和工作中发挥重要作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告一、 实验3.1 题目:考虑线性程组b Ax =,n n R A ⨯∈,n R b ∈,编制一个能自动选取主元,又能手动选取主元的求解线性代数程组的Gauss 消去过程。

(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=6816816816 A ,⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157 b ,则程有解()Tx 1,,1,1*⋯=。

取10=n 计算矩阵的条件数。

分别用顺序Gauss 消元、列主元Gauss 消元和完全选主元Gauss 消元法求解,结果如?(2)现选择程序中手动选取主元的功能,每步消去过程都选取模最小或按模尽可能小的元素作为主元进行消元,观察并记录计算结果,若每步消去过程总选取按模最大的元素作为主元,结果又如?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成的矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。

1. 算法介绍首先,分析各种算法消去过程的计算公式, 顺序高斯消去法:第k 步消去中,设增广矩阵B 中的元素()0k kk a ≠(若等于零则可以判定系数矩阵为奇异矩阵,停止计算),则对k 行以下各行计算()(),1,2,,k ikik k kka l i k k n a ==++,分别用ik l -乘以增广矩阵B 的第k 行并加到第1,2,,k k n ++行,则可将增广矩阵B 中第k 列中()k kka 以下的元素消为零;重复此法,从第1步进行到第n-1步,则可以得到最终的增广矩阵,即()()(),n n n B Ab ⎡⎤=⎣⎦; 列主元高斯消去法:第k 步消去中,在增广矩阵B 中的子阵()()()()k kkkknk k nknn a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦中,选取()k k i k a 使得()(k)max k k i k ik k i na a ≤≤=,当k i k ≠时,对B 中第k 行与第k i 行交换,然后按照和顺序消去法相同的步骤进行。

重复此法,从第1步进行第n-1步,就可以得到最终的增广矩阵,即()()()111,n n n B A b ⎡⎤=⎣⎦; 完全主元高斯消去法:第k 步消去中,在增广矩阵B 中对应的子阵()()()()k kkkknk k nknn a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦中,选取()k k k i j a 使得()(k)max k k k i j ij k i nk j na a ≤≤≤≤=,若k i k ≠或k j k ≠,则对B 中第k 行与第k i 行、第k 列与第k j 列交换,然后按照和顺序消去法相同的步骤进行即可。

重复此法,从第1步进行到第n-1步,就可以得到最终的增广矩阵,即()()()222,n n n B A b ⎡⎤=⎣⎦; 接下来,分析回代过程求解的公式,容易看出,对上述任一种消元法,均有以下计算公式:()()()()()1;;1,2,,1nnn n nnnn n k kjjj k k n kkb x a b ax x k n n a=+=-==--∑2. 实验程序的设计一、输入实验要求及初始条件;二、计算系数矩阵A 的条件数及程组的理论解; 三、对各不同法编程计算,并输出最终计算结果。

3. 计算结果及分析(1)先计算系数矩阵的条件数,结果如下,12()2557.500000,()1727.556025,()2557.50000cond A cond A cond A ∞===可知系数矩阵的条件数较大,故此问题属于病态问题,b 或A 的扰动都可能引起解的较大误差;采用顺序高斯消去法,计算结果为:最终解为x=(1.0000, 1.0000, 1.0000, 1.0001, 0.9998, 1.0004, 0.9993, 1.0012, 0.9979, 1.0028)T使用无穷数衡量误差,得到*X X ε∞=-=2.0401e-14,可以发现,采用顺序高斯消元法求得的解与精确解之间误差较小。

通过进一步观察,可以发现,按照顺序高斯消去法计算时,其选取的主元值和矩阵中其他元素大小相近,因此顺序高斯消去法式并没有对结果造成特别大的影响。

若采用列主元高斯消元法,则结果为:最终解为x=(1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)T同样使用无穷数衡量误差,有*X X ε∞=-=0;若使用完全主元高斯消元法,则结果为最终解x=(1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)T同样使用无穷数衡量误差,有*X X ε∞=-=0;(2)若每步都选取模最小或尽可能小的元素为主元,则计算结果为最终解x=(1.0000 1.0000 1.0000 1.0001 0.9998 1.0004 0.9993 1.0012 0.9979 1.0028)T使用无穷数衡量误差,有*X X ε∞=-为2.0401e-14;而完全主元消去法的误差为*X X ε∞=-=0。

从(1)和(2)的实验结果可以发现,列主元消去法和完全主元消去法都得到了精确解,而顺序高斯消去法和以模尽量小的元素为主元的消去法没有得到精确解。

在后两种消去法中,由于程序计算时的舍入误差,对最终结果产生了一定的影响,但由于程组的维度较低,并且元素之间相差不大,所以误差仍比较小。

为进一步分析,计算上述4种法每步选取的主元数值,并列表进行比较,结果如下:从上表可以发现,对这个程组而言,顺序高斯消去选取的主元恰好事模尽量小的元素,而由于列主元和完全主元选取的元素为8,与4在数量级上差别小,所以计算过程中的累积误差也较小,最终4种法的输出结果均较为精确。

在这里,具体解释一下顺序法与模最小法的计算结果完全一致的原因。

该矩阵在消元过程中,每次选取主元的一列只有两个非零元素,对角线上的元素为4左右,而其正下的元素为8,该列其余位置的元素均为0。

在这样的情况下,默认的主元也就是该列最小的主元,因此两种法所得到的计算结果是一致的。

理论上说,完全高斯消去法的误差最小,其次是列主元高斯消去法,而选取模最小的元素作为主元时的误差最大,但是由于程组的特殊性(元素相差不大并且维度不高),这个理论现象在这里并没有充分体现出来。

20n=时,重复上述实验过程,各种法的计算结果如下所示,在这里,仍采用无穷数衡量绝对误差ε。

可以看出,此时列主元和完全主元的计算结果仍为精确值,而顺序高斯消去和模尽可能小法仍然产生了一定的误差,并且两者的误差一致。

与n=10时候的误差比相比,n=20时的误差增长了大约1000倍,这是由于计算过程中舍入误差的不断累积所致。

所以,如果进一步增加矩阵的维数,应该可以看出更明显的现象。

(4)不同矩阵维度下的误差如下,在这里,为便起见,选取2-条件数对不同维度的系数矩阵进行比较。

从上表可以看出,随着维度的增加,不同法对计算误差的影响逐渐体现,并且增长较快,这是由于舍入误差逐步累计而造成的。

不过,法二与法三在维度小于40的情况下都得到了精确解,这两种法的累计误差远比法一和法四慢;同样地,出于与前面相同的原因,法一与法四的计算结果保持一致,法二与法三的计算结果保持一致。

4. 结论本文矩阵中的元素差别不大,模最大和模最小的元素并没有数量级上的差异,因此,不同的主元选取式对计算结果的影响在维度较低的情况下并不明显,四种法都足够精确。

对比四种法,可以发现采用列主元高斯消去或者完全主元高斯消去法,可以尽量抑制误差,算法最为精确。

不过,对于低阶的矩阵来说,四种法求解出来的结果误差均较小。

另外,由于完全选主元法在选主元的过程中计算量较大,而且可以发现列主元法已经可以达到很高的精确程度,因而在实际计算中可以选用列主元法进行计算。

附录:程序代码clearclc;format long;%法选择n=input('矩阵A阶数:n=');disp('选取求解式');disp('1 顺序Gauss消元法,2 列主元Gauss消元法,3 完全选主元Gauss消元法,4 模最小或近可能小的元素作为主元');a=input('求解式序号:');%赋值A和bA=zeros(n,n);b=zeros(n,1);for i=1:nA(i,i)=6;if i>1A(i,i-1)=8;endif i<nA(i,i+1)=1;endendfor i=1:nfor j=1:nb(i)=b(i)+A(i,j);endenddisp('给定系数矩阵为:');Adisp('右端向量为:');b%求条件数及理论解disp('线性程组的精确解:');X=(A\b)'fprintf('矩阵A的1-条件数: %f \n',cond(A,1)); fprintf('矩阵A的2-条件数: %f \n',cond(A)); fprintf('矩阵A的无穷-条件数: %f \n',cond(A,inf));%顺序Gauss消元法if a==1A1=A;b1=b;for k=1:nif A1(k,k)==0disp('主元为零,顺序Gauss消元法无法进行');breakendfprintf('第%d次消元所选取的主元:%g\n',k,A1(k,k))%disp('此次消元后系数矩阵为:');%A1for p=k+1:nl=A1(p,k)/A1(k,k);A1(p,k:n)=A1(p,k:n)-l*A1(k,k:n);b1(p)=b1(p)-l*b1(k);endendx1(n)=b1(n)/A1(n,n);for k=n-1:-1:1for w=k+1:nb1(k)=b1(k)-A1(k,w)*x1(w);endx1(k)=b1(k)/A1(k,k);enddisp('顺序Gauss消元法解为:');disp(x1);disp('所求解与精确解之差的无穷-数为');norm(x1-X,inf)end%列主元Gauss消元法if a==2A2=A;b2=b;for k=1:n[max_i,max_j]=find(A2(:,k)==max(abs(A2(k:n,k))));if max_i~=kA2_change=A2(k,:);A2(k,:)=A2(max_i,:);A2(max_i,:)=A2_change;b2_change=b2(k);b2(k)=b2(max_i);b2(max_i)=b2_change;endif A2(k,k)==0disp('主元为零,列主元Gauss消元法无法进行');breakendfprintf('第%d次消元所选取的主元:%g\n',k,A2(k,k))%disp('此次消元后系数矩阵为:');%A2for p=k+1:nl=A2(p,k)/A2(k,k);A2(p,k:n)=A2(p,k:n)-l*A2(k,k:n);b2(p)=b2(p)-l*b2(k);endendx2(n)=b2(n)/A2(n,n);for k=n-1:-1:1for w=k+1:nb2(k)=b2(k)-A2(k,w)*x2(w);endx2(k)=b2(k)/A2(k,k);enddisp('列主元Gauss消元法解为:');disp(x2);disp('所求解与精确解之差的无穷-数为');norm(x2-X,inf)end%完全选主元Gauss消元法if a==3A3=A;b3=b;for k=1:nVV=eye(n);[max_i,max_j]=find(A3(k:n,k:n)==max(max(abs(A3(k:n,k:n)))));if numel(max_i)==0[max_i,max_j]=find(A3(k:n,k:n)==-max(max(abs(A3(k:n,k:n)))));endW=eye(n);W(max_i(1)+k-1,max_i(1)+k-1)=0;W(k,k)=0;W(max_i(1)+k-1,k)=1;W(k,max_i(1)+k-1)=1;V=eye(n);V(k,k)=0;V(max_j(1)+k-1,max_j(1)+k-1)=0;V(k,max_j(1)+k-1)=1;V(max_j(1)+k-1,k)=1;A3=W*A3*V;b3=W*b3;VV=VV*V;if A3(k,k)==0disp('主元为零,完全选主元Gauss消元法无法进行');breakendfprintf('第%d次消元所选取的主元:%g\n',k,A3(k,k))%disp('此次消元后系数矩阵为:');%A3for p=k+1:nl=A3(p,k)/A3(k,k);A3(p,k:n)=A3(p,k:n)-l*A3(k,k:n);b3(p)=b3(p)-l*b3(k);endendx3(n)=b3(n)/A3(n,n);for k=n-1:-1:1for w=k+1:nb3(k)=b3(k)-A3(k,w)*x3(w);endx3(k)=b3(k)/A3(k,k);enddisp('完全选主元Gauss消元法解为:');disp(x3);disp('所求解与精确解之差的无穷-数为');norm(x3-X,inf)end%模最小或近可能小的元素作为主元if a==4A4=A;b4=b;for k=1:nAA=A4;AA(AA==0)=NaN;[min_i,j]=find(AA(k:n,k)==min(abs(AA(k:n,k))));if numel(min_i)==0[min_i,j]=find(AA(k:n,k)==-min(abs(AA(k:n,k:n))));endW=eye(n);W(min_i(1)+k-1,min_i(1)+k-1)=0;W(k,k)=0;W(min_i(1)+k-1,k)=1;W(k,min_i(1)+k-1)=1;A4=W*A4;b4=W*b4;if A4(k,k)==0disp('主元为零,模最小Gauss消元法无法进行');breakendfprintf('第%d次消元所选取的主元:%g\n',k,A4(k,k))%A4for p=k+1:nl=A4(p,k)/A4(k,k);A4(p,k:n)=A4(p,k:n)-l*A4(k,k:n);b4(p)=b4(p)-l*b4(k);endendx4(n)=b4(n)/A4(n,n);for k=n-1:-1:1for w=k+1:nb4(k)=b4(k)-A4(k,w)*x4(w);endx4(k)=b4(k)/A4(k,k);enddisp('模最小Gauss 消元法解为:');disp(x4);disp('所求解与精确解之差的无穷-数为');norm(x4-X,inf)end二、实验3.3题目:考虑程组Hx b =的解,其中系数矩阵H 为Hilbert 矩阵:(),,1,,,1,2,,n 1i j i j n n H h h i j i j ⨯===+-这是一个著名的病态问题。

相关文档
最新文档