【www.myl5520.com--教学相关】
线性代数方程组求解
篇一:矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关
线性代数方程组求解
一、实验要求
编程求解方程组: 方程组1:
方程组2:
方程组3:
要求:
用C/C++语言实现如下函数: 1. bool lu(double* a, int* pivot, int n); 实现矩阵的LU分解。
pivot为输出参数,pivot[0,n) 中存放主元的位置排列。 函数成功时返回false,否则返回true。
2. bool guass(double const* lu, int const* p, double* b, int n);
求线代数方程组的解
设矩阵Lunxn为某个矩阵anxn的LU分解,在内存中按行优先次序存放。p[0,n)为LU分解的主元排列。b为方程组Ax=b的右端向量。此函数计算方程组Ax=b的解,并将结果存放在数组b[0,n)中。函数成功时返回false,否则返回true。
3. void qr(double* a, double* d, int n);矩阵的QR分解
假设数组anxn在内存中按行优先次序存放。此函数使用HouseHolder变换将其就地进行QR分解。
d为输出参数,d [0,n) 中存放QR分解的上三角对角线元素。
4. bool hshld(double const*qr, double const*d, double*b, int n); 求线代数方程组的解
设矩阵qrnxn为某个矩阵anxn的QR分解,在内存中按行优先次序存放。d [0,n) 为QR分解的上三角对角线元素。b为方程组Ax=b的右端向量。
函数计算方程组Ax=b的解,并将结果存放在数组b[0,n)中。 函数成功时返回false,否则返回true。
二、问题分析
求解线性方程组Ax=b,其实质就是把它的系数矩阵A通过各种变换成一个下三角或上三角矩阵,从而简化方程组的求解。因此,在求解线性方程组的过程中,把系数矩阵A变换成上三角或下三角矩阵显得尤为重要,然而矩阵A的变换通常有两种分解方法:LU分解法和QR分解法。
1、LU分解法:
将A分解为一个下三角矩阵L和一个上三角矩阵U,即:A=LU,
?10
?l121?其中 L=????
?ln1ln2
????
0??u11u12
?0u0?22?, U=??00?0
??1?0?0
?u1n?
?u2n?? ???
?
?unn?
2、QR分解法:
将A分解为一个正交矩阵Q和一个上三角矩阵R,即:A=QR
三、实验原理
解Ax=b 的问题就等价于要求解两个三角形方程组: ⑴ Ly=b,求y; ⑵ Ux=y,求x.
设A为非奇异矩阵,且有分解式A=LU, L为单位下三角阵,U为上三角阵。
L,U的元素可以有n步直接计算定出。用直接三角分解法解Ax=b(要求A的所有顺序主子式都不为零)的计算公式: ① uli?ali(i?1,2,?,n),lil?ail/u11 ,i=2,3,?,n. 计算U的第r行,L的第r列元素(i=2,3,?,n): ② uri?ari??lrkuki , i=r,r+1,?,n;
k?1r?1
③ lir?(air??likukr)/urr , i=r+1,?,n,且r≠n.
k?1
r?1
求解Ly=b,Ux=y的计算公式;
y1?b1,
④
yi?bi??likyk,i?2,3,?n:
k?1
i?1
xn?yn/unn,⑤
xi?(yi?
k?i?1
?uikxk)/uii,i?n?1,n?2,?,1.
n
四、实验步骤
1>将矩阵A保存进计算机中,再定义2个空矩阵L,U以便保存求出的三角矩阵的值。
利用公式①,②,③将矩阵A分解为LU,L为单位下三角阵,U为上三角阵。 2>可知计算方法有三层循环。
先通过公式①计算出U矩阵的第一行元素uli 和L矩阵的第一列元素lil。 再根据公式②和③,和上次的出的值,求出矩阵其余的元素,每次都要三次循环,求下一个元素需要上一个结果。 3>先由公式④ ,Ly=b
y1?b1,
yi?bi??likyk,i?2,3,?n:
k?1
i?1
求出y,因为L为下三角矩阵,所以由第一行开始求y. 4>再由公式⑤,Ux=y
xn?yn/unn,n
xi?(yi?
ik
xk)/uii,i?n?1,n?2,?,1.
k?u
?i?1
求出x, 因为U为上三角矩阵,所以由最后一行开始求x.
五、程序流程图
1、LU分解法
回代过程
高等代数实验
篇二:矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关
矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关。
高等代数实验
参考1.<<线性代数机算与应用指导Matlab版>>
(第1次)实验1 矩阵的基本运算 +熟悉matlab相关操作编程、作图等 (第2次)实验2:行列式与方程组的求解
(第3次)实验3:向量组的线性相关性及方程组的通解 (第4次)实验4:特征向量与二次型
实验1 矩阵的基本运算
1.1 实验目的
1. 掌握 Matlab 软件的矩阵赋值方法;
2. 掌握 Matlab 软件的矩阵加法、数乘、转置和乘法运算;
3. 掌握 Matlab 软件的矩阵幂运算及逆运算;
4. 掌握 Matlab 软件的矩阵元素群运算;
5. 通过 Matlab 软件进一步理解和认识矩阵的运算规则。
实验目的简单的讲:熟练使用Matlab软件进行矩阵的基本运算。
实验指导和实验内容及作业参考《(较清晰)线性代数机算与应用(MATLAB版)》.pdf
高等代数实验报告[1]
篇三:矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关
高等代数实验报告
实验时间:2013-12-03 报告评分:
1
2
高等代数实验报告
实验时间:2013-12-06 报告评分:
3
4
5
数学实验——线性代数方程组的数值解
篇四:矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关
实验5线性代数方程组的数值解法
分1 黄浩 2011011743
一、 实验目的
1. 学会用MATLAB软件数值求解线性代数方程组,对迭代法的收敛性和解的稳
定性作初步分析;
2. 通过实例学习用线性代数方程组解决简化的实际问题。
二、 实验内容
1. 《数学实验》第二版(问题1)
问题叙述:
通过求解线性方程组??1??=??1,??2??=??2,理解条件数的意义和方程组性态对解的影响,其中??1是n阶范德蒙矩阵,即
1 ??1= 1
… 1
??0??1…?????1
2??02??1…2?????1
???1
…??0
???1
…??1 , ??=1+0.1?? , ??=0,1,…,???1
??
……
???1
…?????1
??2是n阶希尔伯特矩阵,b1,b2分别是??1,??2的行和。
(1) 编程构造??1(??2可直接用命令产生)和b1,b2;你能预先知道方程组
??1??=??1和??2??=??2的解吗?令n=5,用左除命令求解(用预先知道的解可验证程序)。
(2) 令n=5,7,9,…,计算??1和??2的条件数。为观察他们是否病态,做以
下试验:b1,b2不变,??1和??2的元素??1(n,n),??2(??,??)分别加扰动ε后求解;??1和??2不变,b1,b2的分量b1(n),b2(n)分别加扰动ε后求解。分析A与b的微小扰动对解的影响。ε取10^-10,10^-8,10^-6。
(3) 经扰动得到的解记做?? ,计算误差
较。
模型转换及实验过程: (1)小题.
????? ??
,与用条件数估计的误差相比矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关。
由b1,b2为??1,??2的行和,可知方程组??1??=??1和??2??=??2的精确解均为n行全1的列向量。在n=5的情况下,用matlab编程(程序见四.1),构造??1,??2和b1,b2,使用高斯消去法得到的解x1,x2及其相对误差e1,e2(使用excel计算而得)为:矩阵代数实验,一,、实验目的,1.复习高等代数中线性代数方程组的求解和矩阵的相关。
由上表可见,当n=5时,
所得的解都接近真值,误差在10^-12的量级左右。 (2)小题
分别取n=5,7,9,11,13,15,计算??1和??2的条件数c1和c2,(程序见四.2),结果如下:
由上表可见,二者的条件数都比较大,可能是病态的。为证实??1和??2是否为病态,先保持b不变,对A(??,??)做扰动,得到该情况下的高斯消元解,(程序见四.3),结果如下:
(为使结果清晰简洁,在此仅列出n=5,9,13的情况,n=7,11,15略去) ε=10^-10时:
ε=10^-8时:
ε=10^-6时:
由上表可见:
a) 对于希尔伯特阵,随着阶数的增加,微小扰动对解带来的影响越来越大,
到了n=9时,已经有了6倍误差的解,到了n=13时,甚至出现了22倍误差的解元素;而随着ε的增加,解的偏差似乎也有增加的趋势,但仅
凭上述表格无法具体判断(在下一小题中具体叙述)。
b) 对于范德蒙矩阵,当n<10时,微小扰动对范德蒙矩阵的影响较小,最
大的误差不过1.6倍,但当n>10时,微小扰动对范德蒙矩阵的影响急剧增加,更出现了33倍误差的解!此时希尔伯特阵与范德蒙阵的病态程度是类似的。(因此,我认为第一版上的参考答案不够全面) 当固定A改变b时,结果与上表类似,微小扰动的影响随阶数的增加而增大,随ε的增加,解的偏差也有增加的趋势。方程组的解表格在此略去,程序也类似,其具体影响及分析见下一小问。
(3)小题
在上一小问中,我们解出了当A、b分别作微小扰动时解的变化情况,但是仅凭直观的感觉以及表格横向的比较,并不能很好的找出其内在规律。因此,可以通过计算误差
????? ??
对于这个误差计算公式,我选择的是2-范数,即norm(x)函数进行计算。 保持b不变,给A(n,n)以微小的扰动,(程序见四.4),结果如下(其中E1、E2分别为两方程解的误差 ????? ??
):
由上表可得出结论:
第一,随着阶数的增加,误差值有增加的趋势
第二,ε的变化对误差大小也有影响,但不是绝对的,对于n=5,7,9,11,13,
ε越大,扰动引起的偏差就越大,对于n=15,找不到ε与E的相关性
第三,实际算得的误差远远小于条件数指出的误差上限
第四,当n<10时,微小扰动对范德蒙矩阵的影响较小,但当n>10时,微小
扰动对范德蒙矩阵的影响急剧增加,到了n=15时,病态程度已与希尔伯特阵类似。