学生实验报告实验课程名称数值计算方法开课实验室数学实验室实验五解线性方程组的直接方法实验(主元的选取与算法的稳定性)问题提出:消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保消去法作为数值算法的稳定性呢?消去法从理论算法到数值算法,其关键是主元的选择。
主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。
实验内容:考虑线性方程组nn Rn∈=⨯,Ax∈,RbAb编制一个能自动选取主元,又能手动选取主元的求解线性方程组的消去过程。
实验要求:()取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816M O O Ob A ,则方程有解Tx )1,,1,1(*Λ=。
取计算矩阵的条件数。
让程序自动选取主元,结果如何?()现选择程序中手动选取主元的功能。
每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。
若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
()取矩阵阶数或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
()选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
实验(线性代数方程组的性态与条件数的估计) 问题提出:理论上,线性代数方程组b Ax =的摄动满足⎪⎪⎭⎫ ⎝⎛∆+∆∆-≤∆-b b A A AA A cond x x 11)( 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算1-A 通常要比求解方程b Ax =还困难。
实验内容:中提供有函数“”可以用来估计矩阵的条件数,它给出的是按范数的条件数。
首先构造非奇异矩阵和右端,使得方程是可以精确求解的。
再人为地引进系数矩阵和右端的摄动b A ∆∆和,使得bA ∆∆和充分小。
实验要求:()假设方程的解为,求解方程b b x A A ∆+=∆+ˆ)(,以范数,给出xx x xx -=∆ˆ的计算结果。
()选择一系列维数递增的矩阵(可以是随机生成的),比较函数“”所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“”很容易给出()的数值。
将它与函数“()”所得到的结果进行比较。
()利用“”给出矩阵条件数的估计,针对()中的结果给出xx ∆的理论估计,并将它与()给出的计算结果进行比较,分析所得结果。
注意,如果给出了()和A的估计,马上就可以给出1-A 的估计。
()估计著名的矩阵的条件数。
n j i j i h h H j i n n j i ,,2,1,,11,)(,,Λ=-+==⨯思考题一:(矩阵)设⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑∑====n i i n n i i ni i n i i n n nnn n nx x x x b x x x x x x x x x x x x A 002010022222121102001111M ΛM ΛM M M ΛΛΛ,,其中,n k k x k ,,1,0,1.01Λ=+=,()对,计算的条件数;随增大,矩阵性态如何变化? ()对,解方程组;设的最后一个元素有扰动,再求解 ()计算()扰动相对误差与解的相对偏差,分析它们与条件数的关系。
()你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插值法的原因吗?相关函数提示:实验程序:文件程序为:()('请输入矩阵的阶数')(*())(())(*())*()('条件数对应的范数是范数:')()[]();[ ]('请输入是否为手动,手动输入,自动输入:')[]((()));;([ ],:)([ ],:)();('输入列所选元素所处的行数:'); ([ ],:)([ ],:)();();()()(())*();();()()()();()(()()*())();()⑴取矩阵的阶数,自动选取主元:>>>>请输入矩阵的阶数条件数对应的范数是范数:请输入是否为手动,手动输入,自动输入:⑵取矩阵的阶数,手动选取主元:①选取绝对值最大的元素为主元:>>请输入矩阵的阶数条件数对应的范数是范数:请输入是否为手动,手动输入,自动输入:②选取绝对值最小的元素为主元:>>请输入矩阵的阶数条件数对应的范数是范数:请输入是否为手动,手动输入,自动输入:()取矩阵的阶数,手动选取主元:①选取绝对值最大的元素为主元:>>请输入矩阵的阶数条件数对应的范数是范数:请输入是否为手动,手动输入,自动输入:②选取绝对值最小的元素为主元:请输入矩阵的阶数条件数对应的范数是范数:请输入是否为手动,手动输入,自动输入:()取矩阵的阶数,手动选取主元:①选取绝对值最大的元素为主元:>>请输入矩阵的阶数条件数对应的范数是范数:②选取绝对值最小的元素为主元:请输入矩阵的阶数.条件数对应的范数是范数:请输入是否为手动,手动输入,自动输入:()该题目的程序如下所示()('请输入矩阵的阶数')()*()('条件数对应的范数是范数:')()[]();[ ]('请输入是否为手动,手动输入,自动输入:')[]((()));;([ ],:)([ ],:)();('输入列所选元素所处的行数:');([ ],:)([ ],:)();();()()(())*();();()()()();()(()()*())();>>请输入矩阵的阶数:请输入是否为手动,手动输入,自动输入:条件数对应的范数是范数:显然的是,该问题在主元选取与算出结果有着很大的关系,取绝对值大的元素作为主元比取绝对值小的元素作为主元时产生的结果比较准确,即选取绝对值小的主元时结果产生了较大的误差,条件数越大产生的误差就越大实验体会:运用高斯消去法求解线性方程组问题的时候,主元的选取和相应的消去法的选取决定了该算法的稳定性,选取绝对值大的元素比选取绝对值比较小的元素作为主元时对结果产生的误差影响比较小。
并且增加条件数反而对结果的误差产生更大的影响。
并且在运算中要尽量避免出现运用小数作为除数,使数量级加大,令大数吃掉小数的情况发生。
实验(线性代数方程组的性态与条件数的估计)问题提出:理论上,线性代数方程组b Ax =的摄动满足 ⎪⎪⎭⎫ ⎝⎛∆+∆∆-≤∆-b b A A A A A cond x x11)( 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算1-A 通常要比求解方程b Ax =还困难。
实验内容:中提供有函数“”可以用来估计矩阵的条件数,它给出的是按范数的条件数。
首先构造非奇异矩阵和右端,使得方程是可以精确求解的。
再人为地引进系数矩阵和右端的摄动b A ∆∆和,使得b A ∆∆和充分小。
实验要求:()假设方程的解为,求解方程b b x A A ∆+=∆+ˆ)(,以范数,给出x x xx x-=∆ˆ的计算结果。
()选择一系列维数递增的矩阵(可以是随机生成的),比较函数“”所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“”很容易给出()的数值。
将它与函数“()”所得到的结果进行比较。
()利用“”给出矩阵条件数的估计,针对()中的结果给出x x∆的理论估计,并将它与()给出的计算结果进行比较,分析所得结果。
注意,如果给出了()和A 的估计,马上就可以给出1-A 的估计。
()估计著名的矩阵的条件数。
n j i j i h h H j i n n j i ,,2,1,,11,)(,,Λ=-+==⨯程序代码:保存文件名为:(' ')(*())()*()*()*()()()保存文件名为:()[]();[ ];();()()(())*();();()()();()(()()*())();保存文件名为:()'*;[]();[](^());((()))*((()))保存文件为:(*());()()()保存文件为:(' ') 输入矩阵的阶数(*()); 随机生成一个矩阵(); 假设知道方程组的解全为*;()*;()*;;;();()()()((())*())*((())(())()()) ()()();()()()实验结果及其分析:()>>* **xx x x x -=∆ˆ的计算结果为:()()给出对xx x x x -=∆ˆ的估计是xx x x x -=∆ˆ的理论结果是:结果相差: ()讨论:线性代数方程组的性态与条件数有着很重要的关系,既矩阵的条件数是刻画矩阵性质的一个重要的依据,条件数越大,矩阵“病态”性越严重,在解线性代数方程组的过程中较容易产生比较大的误差,则在实际问题的操作过程中,我们必须要减少对条件数来求解,把条件数较大的矩阵化成条件数较小的矩阵来进行求解。
实验体会:在本次实验中,使我们知道了矩阵条件数对线性代数方程组求解的影响,条件数越大,对最后解的影响的越大,矩阵是一个很”病态”的矩阵,他的条件数随着阶数的增加而增大,每增加一阶,条件数就增大一个数量级,在求解的过程中要尽量避免矩阵实验六解线性方程组的迭代法实验(病态的线性方程组的求解)问题提出:理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组的求解,其中系数矩阵为矩阵,n j i j i h h H j i n n j i ,,2,1,,11,)(,,Λ=-+==⨯这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为)再计算出右端的办法给出确定的问题。
实验要求:()选择问题的维数为,分别用消去法、迭代法、迭代法和迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?()逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?()讨论病态问题求解的算法 程序代码: 消去法程序: ()('请输入矩阵的阶数') ()构造矩阵('条件数对应的范数是范数:') () [](); [ ]('请输入是否为手动,手动输入,自动输入:')[]((()));;([ ],:)([ ],:)();('输入列所选元素所处的行数:');([ ],:)([ ],:)();();()()(())*();();()()()();()(()()*())();迭代法程序:('系数矩阵的阶数:');()构造矩阵;(); 给定解();;*'; 由给定的解算出相应的进行迭代;;;()()();;()()()*()();;;()()()*()();;;迭代程序:('系数矩阵的阶数:');对题中给定的矩阵进行消元();;();();;*';;;()()();;()()()*()();;;()()()*()();;;迭代程序:('系数矩阵的阶数:');('松弛因子:');对题中给定的矩阵进行消元();;();();;*';;;();()()();;()()()*()();;;()()()*()();;()()**();;实验结果及其分析:给定各分量为的解,计算出右端作为问题。