Gauss列主元消去法、QR(MATLAB)

合集下载

Gauss列主元素消去法实验

Gauss列主元素消去法实验

Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤; 2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。

通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。

【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。

2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。

3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。

4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x(2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。

【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。

实验讲评:实验成绩:评阅教师:200 年 月 日Lab06.Gauss 列主元素消去法实验第一题:1、算法描述:Ⅰ、Gauss 消去法由书上定理5可知 设Ax=b ,其中A ∈R^(n(1)如果()0(1,2,....,1)k kka k n ≠=-,则可通过高斯消去法将Ax=b 约化为等价的 角形线性方程组,且计算公式为:① 消元计算(k=1,2,….,n-1)()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.k k ik ik kk k k k ij ij ik kj k k k iiik k m a a i k n a a m a i j k n b b m b i k n ++==+=-=+=-=+② 回带公式()()()()()1/,()/,1,...,2,1.n n n n nn ni i i i iii j ii j i x b a x ba x a i n =+==-=-∑(2)如果A 为非奇异矩阵,则可通过高斯消去法将方程组Ax=b 约化方程组为上三角矩阵以上消元和回代过程总的乘除法次数为332333nn nn +-≈,加减法次数为32353263nnn n+-≈以上过程就叫高斯消去法。

Gauss列主元消去法、QR(MATLAB)

Gauss列主元消去法、QR(MATLAB)

Gauss列主元消去法、QR(MATLAB)Gauss列主元消去法是一种线性方程组的求解方法,也称Gauss消去法。

其基本思想是将方程组转化为上三角矩阵,然后通过反向代入求解。

该方法的优点在于计算精度高,求解速度快,但缺点是需要大量的计算,尤其是在矩阵阶数较高时。

具体来讲,Gauss列主元消去法的步骤如下:步骤一:将系数矩阵A进行LU分解,其中L是下三角矩阵、U是上三角矩阵。

设$A=LU$,则原方程组可以写成$LUx=b$。

步骤二:通过初等矩阵左乘系数矩阵A,将每一列的主元变为该列所有元素中绝对值最大的那个元素。

这个过程称为选主元,可以避免计算中的数值不稳定问题。

步骤三:将选主元后的系数矩阵A进行LU分解,得到$L^{'}$、$U^{'}$。

步骤五:通过反向代入求解$U^{'}x=y$,得到$x$的解。

Gauss列主元消去法的实现通常通过矩阵的变换来实现。

对于$n$阶矩阵$A=[a_{ij}]$,通过一系列的行变换,可以将其变为上三角矩阵。

其中的变换可以表示为:$$ R_{i} \leftrightarrow R_{j} $$其中,$R_{i}$和$R_{j}$分别表示矩阵$A$中的第$i$行和第$j$行,$k$是一个非零常数。

这些变换被称为初等行变换。

在MATLAB中,可以使用已经实现好的{\color{blue}\texttt{gauss}}函数来求解线性方程组。

该函数实现的算法是Gauss列主元消去法。

其调用格式为:x = gauss(A,b)其中,$A$是系数矩阵,$b$是结果向量。

函数返回结果向量$x$。

如果$A$或$b$不合法,则函数会返回一个空向量。

除了Gauss列主元消去法,还有一种常用的求解线性方程组的方法是QR分解法。

步骤二:通过正交矩阵左乘系数矩阵$A$,使其变为一个上三角矩阵。

这个过程称为正交相似变换。

步骤三:将$b$进行正交相似变换,得到$Q^{T}b$。

2-2 Gauss列主元消去法

2-2 Gauss列主元消去法

S2 若ann 0,则输出“ A是奇异矩阵”;停机 . S3 置xn an,n1 / ann ;
对i n 1, n 2,...1,
ai,n1 n aij x j
置xi
j i 1
aii
S4 输出x1, x2,..., xn ;停机.
作业:
P50 习题3
k in
aik
;
S12 若aik ,k 0,则输出“ A是奇异矩阵”;停机 .
S13 若ik k,则
akj aik , j j k,...,n 1;
S14 对i k 1,..., n
置aik aik / akk ; 对j k 1,..., n 1
置aij aij aik akj.
§2-2 Gauss列主元消去法
一、Gauss列主元消去法的引入 例1. 用3位浮点数运算,求解线性方程组
0.0001xx11
x2 x2
1 2
解: 本方程组的精度较高的解为
x* (1.00010001 ,0.99989999 )T
用Gauss消去法求解
A ( A,b)
0.000100 1
1 1
21
0.000100
m2110 000
0
回代后得到
1
1
1.00 104 1.00 104
x1 0.00 , x2 1.00
与精确解相比,该结果显然是错误的 究其原因,在求行乘数时用了很小的数0.0001作除数
如果在求解时将1,2行交换,即
A ( A,b)
1 0.000100
1 1
a(2) i2
,
交换第2行和第i2行,
2in
然后进行消元,得[ A(3) , b(3) ].

Guass列主元消去法

Guass列主元消去法
0.602170487581795 0.784739294760742 0.191745255461798 0.576209380663007 0.208934922426023 0.350218013441105 0.869941032358007 0.647311480293128 0.404579995857626
0.077715611723761
-0.162370117351429
0.144328993201270
0.675332065747000 0.770159728608609 0.341124607049109 0.287498173066131 0.635786710514084 0.661944751905652 0.582249164527227 0.639316961040108 0.109697464523194
Guass列主元消去法
(已验证过,保证可用正确)
function y=Guass(A,b)
n=length(A);
u=zeros(1,n);
for k=1:n-1
p=find(abs(A(k:n,k))==max(abs(A(k:n,k))));%
p(1)=p(1)+k-1;
u(k)=p(1);
dd=A(p(1),1:n); %中间变量
求9阶的axb的解xs为用guass列主元消去法得到的近似解可以看出在这种情况guass列主元消去法得到解与精确解的误差1014左右因为本例才用的是随机数所以数据和误差会不同在matlab命令窗口中输入08443921565272050462449159242329072175803339110202690615866860180644442781431336060730394068563508329168190752160939829470344921099370462412085203444624113010420424349039815375047348599296532007655000166214380647617630172684045013769696589602564409922291470645551874972524021867663239963407805196527313580460916366028964015272120043823201886619767914910679016754093202045872549364886806134607368128750479463224948888010579827325022806753320657470000770159728608609034112460704910902874981730661310635786710514084066194475190565205822491645272270639316961040108010969746452319400067153143184770322471807186779060738921376834700911134636865350945174113109401077028551480366005407393371244100544716110526763006359137097510606021704875817950784739294760742019174525546179805762093806630070208934922426023035021801344110508699410323580070647311480293128040457999585762603867711945209850471357153710612073842683997694206833632432

matalab怎么用高斯消去法解方程组

matalab怎么用高斯消去法解方程组

matalab怎么用高斯消去法解方程组高斯消去法(Gaussian Elimination)是一种解线性方程组的常用方法,其中包括了高斯消元和回代两个步骤。

通过高斯消去法,我们可以将一个线性方程组转化为简化的上三角矩阵,从而简化求解过程。

要使用高斯消去法解决线性方程组,首先需要将方程组写成矩阵形式。

假设有一个n个方程和n个未知数的线性方程组,可以表示为Ax = b,其中A是一个n×n的系数矩阵,x是一个n×1的未知数向量,b是一个n×1的常数向量。

下面我们将详细介绍高斯消去法的步骤:步骤1:将系数矩阵A和常数向量b合并为增广矩阵[Ab],即在A的右边添加一个列向量b。

步骤2:选取主元素(pivot),通常选择第一行的首个非零元素作为主元素。

如果第一行的首个元素为零,则选择下一行的首个非零元素。

步骤3:将主元素所在的行交换到第一行,以确保主元素位于第一行。

步骤4:除以主元素,使主元素变为1。

这可以通过将主元素所在的行除以主元素的值来实现。

步骤5:用第一行的主元素消去其它行。

对于第i行,将其乘以第一行的主元素的负倒数,并加到第一行上。

步骤6:重复步骤2至步骤5,直到最后一行或最后一列为零。

如果最后一行或最后一列为零,则说明方程组无解或有无穷多解。

步骤7:回代。

从最后一行开始,将求得的解代入每一行的方程中,依次求解未知数。

下面我们将通过一个具体的例子来说明高斯消去法的过程。

假设有以下线性方程组:2x + y - z = 8-3x - y + 2z = -11-2x + y + 2z = -3我们首先将方程组转化为增广矩阵形式:[2 1 -1 | 8][-3 -1 2 | -11][-2 1 2 | -3]首先我们选择第一行的主元素,即第一行第一个非零元素2。

然后将第一行与第二行交换,使主元素位于第一行:[-3 -1 2 | -11][2 1 -1 | 8][-2 1 2 | -3]接下来我们将主元素化为1,即将第一行除以-3:[1 1/3 -2/3 | 11/3][2 1 -1 | 8][-2 1 2 | -3]然后用第一行的主元素消去第二行和第三行:[1 1/3 -2/3 | 11/3][0 1/3 1/3 | 2/3][0 5/3 4/3 | 2/3]此时我们得到了上三角矩阵形式的增广矩阵。

gauss列主元素消去法matlab

gauss列主元素消去法matlab

高斯列主元素消去法是一种解线性方程组的常用方法,特别在数值分析和线性代数中应用广泛。

在Matlab中,我们可以使用该方法来解决大规模的线性方程组,包括矩阵的求解和矩阵的反转。

一、高斯列主元素消去法的基本原理高斯列主元素消去法是一种基于矩阵消元的方法,它通过一系列的矩阵变换将原始的线性方程组转化为上三角形式,然后再进行回代求解。

这个方法的核心就是通过矩阵的变换来简化原始的线性方程组,使得求解过程更加简单高效。

在Matlab中,我们可以利用矩阵运算和函数来实现高斯列主元素消去法,如`lu`分解函数和`\"`运算符等。

通过这些工具,我们能够快速地求解各种规模的线性方程组并得到准确的结果。

二、高斯列主元素消去法在Matlab中的实现在Matlab中,我们可以通过调用`lu`函数来实现高斯列主元素消去法。

该函数返回一个上三角矩阵U和一个置换矩阵P,使得PA=LU。

通过对U进行回代求解,我们可以得到线性方程组的解。

除了`lu`函数之外,Matlab还提供了一些其他的函数和工具来帮助我们实现高斯列主元素消去法,比如`\"`运算符和`inv`函数等。

通过这些工具的组合使用,我们能够更加灵活地进行线性方程组的求解,并且可以方便地处理特殊情况和边界条件。

三、高斯列主元素消去法的应用与局限性高斯列主元素消去法在实际应用中具有广泛的适用性,特别是对于大规模的线性方程组或者稀疏矩阵的求解。

通过Matlab中的工具和函数,我们可以快速地求解各种规模的线性方程组,并得到高精度的数值解。

然而,高斯列主元素消去法也存在一些局限性,比如对于奇异矩阵或者接近奇异矩阵的情况时,该方法的求解精度可能会下降。

在实际应用中,我们需要结合具体的问题和矩阵特性来选择合适的求解方法,以确保得到准确的结果。

四、个人观点和总结作为一种经典的线性方程组求解方法,高斯列主元素消去法在Matlab 中具有较好的实现和应用效果。

通过对其原理和实现细节的深入理解,我们能够更加灵活地应用该方法,并且能够更好地理解其适用性和局限性。

gauss列主元消去法条件 -回复

gauss列主元消去法条件 -回复

gauss列主元消去法条件-回复Gauss列主元消去法是一种常用的线性方程组求解方法,它通过高斯消元和行交换的方式将一个线性方程组转化为上三角形方程组,从而方便地求解未知数的值。

在实际操作中,我们需要注意一些条件和步骤,以确保计算过程的正确性和可行性。

一、线性方程组的条件在使用Gauss列主元消去法求解线性方程组时,需要满足以下两个条件:1. 方程组必须是齐次或非齐次的线性方程组。

所谓齐次的线性方程组是指常数项全部为零的线性方程组,即右端项为零向量;非齐次的线性方程组则是指右端项不为零的线性方程组。

2. 方程组的未知数个数必须等于方程组的方程个数。

这意味着方程组必须是方阵,即系数矩阵的行数和列数相等。

满足以上两个条件后,可以应用Gauss列主元消去法对线性方程组进行求解。

二、Gauss列主元消去法的步骤下面我们一步一步来详细解释Gauss列主元消去法的过程。

步骤1:构造增广矩阵首先,将线性方程组的系数矩阵和右端项向量排列在一起,构成增广矩阵。

例如,对于一个3×3的线性方程组:a11x1 + a12x2 + a13x3 = b1a21x1 + a22x2 + a23x3 = b2a31x1 + a32x2 + a33x3 = b3构造的增广矩阵为:[ a11 a12 a13 b1 ][ a21 a22 a23 b2 ][ a31 a32 a33 b3 ]步骤2:选取主元在消元过程中,我们需要选取一个主元素进行消元,目的是将主元素所在的列下方的元素全部消为零。

为了提高计算的精确性,我们在选取主元素时通常选择当前列的绝对值最大的元素。

即,在第i列中,选取使得a[i][i]最大的行k,然后将第k行与第i行进行交换,将主元素移动到当前位置。

步骤3:高斯消元通过选取主元后,我们开始进行高斯消元的操作。

对于第i行以下的每一行j,执行如下操作:1. 计算倍数m,使得第j行的第i列元素消为零。

倍数m的值为第j行第i列的元素除以主元素所在位置的元素值,即m=a[j][i]/a[i][i]。

高斯消去、追赶法matlab

高斯消去、追赶法matlab

⾼斯消去、追赶法matlab 1. 分别⽤Gauss消去法、列主元Gauss消去法、三⾓分解⽅法求解⽅程组程序:(1)Guess消去法:function x=GaussXQByOrder(A,b)%Gauss消去法N = size(A);n = N(1);x = zeros(n,1);for i=1:(n-1)for j=(i+1):nif(A(i,i)==0)disp('对⾓元不能为0');return;endm = A(j,i)/A(i,i);A(j,i:n)=A(j,i:n)-m*A(i,i:n);b(j)=b(j)-m*b(i);endendx(n)=b(n)/A(n,n);for i=n-1:-1:1x(i)=(b(i)-sum(A(i,i+1:n)*x(i+1:n)))/A(i,i);end命令⾏输⼊:A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];b=[1 3 5 7];b=b';x=GaussXQByOrder(A,b)运算结果:x =-8.0000000000000000.3333333333333333.6666666666666672.000000000000000(2)列主元Gauss消去法程序:function x=GaussXQLineMain(A,b)%列主元Gauss消去法N = size(A);n = N(1);x = zeros(n,1);zz=zeros(1,n);for i=1:(n-1)[~,p]=max(abs(A(i:n,i)));zz=A(i,:);A(i,:)=A(p+i-1,:);A(p+i-1,:)=zz;temp=b(i);b(i)=b(i+p-1);b(i+p-1)=temp;for j=(i+1):nm = A(j,i)/A(i,i);A(j,i:n)=A(j,i:n)-m*A(i,i:n);b(j)=b(j)-m*b(i);endendx(n)=b(n)/A(n,n);for i=n-1:-1:1x(i)=(b(i)-sum(A(i,i+1:n)*x(i+1:n)))/A(i,i);end命令⾏:A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];b=[1 3 5 7];b=b';x=GaussXQLineMain(A,b)运⾏结果:x =-8.0000000000000050.3333333333333323.6666666666666682.000000000000000(3)三⾓分解⽅法程序:function x = LU(A,b)%三⾓分解N = size(A);n = N(1);L = eye(n,n);U = zeros(n,n);x = zeros(n,1);y = zeros(n,1);U(1,1:n) = A(1,1:n);L(1:n,1) = A(1:n,1)/U(1,1);for k=2:nfor i=k:nU(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i);endfor j=(k+1):nL(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k); endendy(1)=b(1)/L(1,1);for i=2:ny(i)=b(i)-sum(L(i,1:i-1)*y(1:i-1));endx(n)=y(n)/U(n,n);for i=n-1:-1:1x(i)=(y(i)-sum(U(i,i+1:n)*x(i+1:n)))/U(i,i);end命令⾏:A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];b=[1 3 5 7];b=b';x=LU(A,b)运⾏结果:x =-8.0000000000000000.3333333333333333.6666666666666672.000000000000000程序:function [times,wucha]=zhuiganfa(a,b,c,f)%追赶法:x为所求解,times为所有乘除运算次数(即时间),wucha为误差的2-范数。

matlab 列Gauss消去法

matlab 列Gauss消去法

列Gauss 消去法进行列主元Gauss 消去法的矩阵表示形式 U A Q L Q L Q L n n =⋅⋅⋅--112211对于某电路的分析,归结为求解线性方程组RI=V 。

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=10; 29 2- 0 0 0 9- 0 0 0 7 2- 27 0 0 5- 0 0 0 0 7- 0 0 41 30- 0 0 0 0 0 120 0 30- 47 7- 0 0 0 0 20- 0 5- 0 7- 57 30- 0 0 0 0 9- 0 0 0 30- 79 10- 0 0 23- 0 0 0 0 0 10- 31 9- 0 27 0 0 0 0 11- 0 9- 35 13- 15- 0 0 0 10- 0 0 0 13- 31R T T V ]10,7,7,12,20,0,23,27,15[----=(1)编制解n 阶线性方程组Ax=b 的列主元三角分解法的通用程序;(2)用所编制的程序解线性方程组RI=V ,并打印出解向量,保留五位有效数;(3)本编程之中,你提高了哪些编程能力?编程思路列主元Gauss 消去法的基本步骤如下:1.从第一行到第n 行找出增广矩阵R(i,1)中最大的数R(k,1),然后将第一行和第k 行的所有元素互相交换,对第2行到第n 行消去每行第一个数值。

2.从第2行到第n 行找出增广矩阵R(i,2)中最大的数R(k,2),然后将第二行和第k 行的所有元素互相交换,对第2行到第n 行消去每行第二个数值。

3.重复这个过程,直到第n 行,完成全部消元。

4.从第n 行开始计算出I(n),然后回代求解出所有解。

M 文件源代码:function R=fGauss();R=[31 -13 0 0 0 -10 0 0 0 -15;-13 35 -9 0 -11 0 0 0 0 27;⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=----)1()1(1)1(3)1(2)1(1)1(3)1(13)1(33)1(32)1(31)1(2)1(12)1(23)1(22)1(21)1(1)1(11)1(13)1(12)1(11nn nn n n n n n n n n n a a a a a a a a a a a a a a a a a a a a A0 -9 31 -10 0 0 0 0 0 -23;0 0 -10 79 -30 0 0 0 -9 0;0 0 0 -30 57 -7 0 -5 0 -20;0 0 0 0 -7 47 -30 0 0 12;0 0 0 0 0 -30 41 0 0 -7;0 0 0 0 -5 0 0 27 -2 7;0 0 0 -9 0 0 0 -2 29 10; ];m=9; %行数n=m+1; %扩展矩阵的列数%列主元法将矩阵转化成上三角矩阵for i=1:m;k=i; %当前计算到第k行% for count=k:n; %对k行下面的矩阵进行处理%a=abs(R(k,k));j=k+1;kk=k;while j<nb=abs(R(j,k));if b>aa=b;kk=j; %kk是最大的数所在的行else j=j+1;endendif kk~=kfor ii=k:n; %交换两行aa=R(k,ii);R(k,ii)=R(kk,ii);R(kk,ii)=aa;endend% end%l=0;pp=k+1;for p=pp:m;q=k;l=R(p,k)/R(k,k);while q<n+1R(p,q)=R(p,q)-l*R(k,q);q=q+1;end% fprintf('l=%f\n',l);endend% fprintf('%f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\n',R);% fprintf('\n \n \n');%回代过程,将结果存放在I矩阵中I=[0 0 0 0 0 0 0 0 0]; %存放结果的矩阵s=0;t=0;I(1,m)=R(m,n)/R(m,m);for s=(m-1):-1:1t=s+1;sum=0;while t<nsum=sum+R(s,t)*I(1,t);t=t+1;%fprintf('sum=%f\n',sum);endI(1,s)=(R(s,n)-sum)/R(s,s);%fprintf('sum=%f\t R(ss)=%f\n',sum,R(s,s));endfprintf('%f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\n',I);(1)方程的解向量为[]T-0.3454360.7128120.289234=-0.220609--I0.2902290.0578230.2010540.4304000.154309-(2)编写此题的感想:在本题的编程中,使我对for、while等循环结构的分析使用更为熟练,对于循环里面套循环的分析思路更为清晰。

(完整)高斯消元法MATLAB实现(2)

(完整)高斯消元法MATLAB实现(2)

《数值分析》实验报告一、实验目的与要求1.掌握高斯消去法的基本思路和迭代步骤;2.培养编程与上机调试能力。

二、实验内容1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.(1)1231231230.101 2.304 3.555 1.1831.347 3.712 4.6232.1372.835 1.072 5.6433.035x x xx x xx x x++=⎧⎪-++=⎨⎪-++=⎩(2)12312312352828321361x x xx x xx x x++=⎧⎪+-=⎨⎪--=⎩2.编写用列主元高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.(1)1231231230.101 2.304 3.555 1.1831.347 3.712 4.6232.1372.835 1.072 5.6433.035x x xx x xx x x++=⎧⎪-++=⎨⎪-++=⎩(2)12312312352828321361x x xx x xx x x++=⎧⎪+-=⎨⎪--=⎩三.MATLAB计算源程序1. 用高斯消元法解线性方程组bAX=的MATLAB程序输入的量:系数矩阵A和常系数向量b;输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n 和有关方程组解X及其解的信息.function [RA,RB,n,X]=gaus(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') EndEnd2.列主元消元法及其MATLAB程序AX 的MA TLAB程序用列主元消元法解线性方程组b输入的量:系数矩阵A和常系数向量b;输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n和有关方程组解X及其解的信息.function [RA,RB,n,X]=liezhu(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1[Y,j]=max(abs(B(p:n,p))); C=B(p,:);B(p,:)= B(j+p-1,:); B(j+p-1,:)=C;for k=p+1:nm= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') endend三.实验过程:1(1)编写高斯消元法的MATLAB文件如下:clear;A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];b=[1.183;2.137;3.035];[RA,RB,n,X] =gaus (A,b)运行结果为:请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =-0.39820.01380.3351(2)编写高斯消元法MATLAB文件如下:clear;A=[5 2 1;2 8 -3;1 -3 -6];b=[8;21;1;];[RA,RB,n,X] =gaus (A,b)运行结果为:请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =12-1在MATLAB中利用逆矩阵法检验结果:(1) 在command windows中直接运行命令:A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];b=[1.183;2.137;3.035];X=A\b运行结果为:X =-0.39820.01380.3351(2) 在command windows中直接运行命令:A=[5 2 1;2 8 -3;1 -3 -6];b=[8;21;1;];X=A\b运行结果为:X =12-1两小题所得结果相同,检验通过2(1)编写列组高斯消元法MATLAB文件如下:clear;A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];b=[1.183;2.137;3.035];[RA,RB,n,X] =liezhu(A,b)运行结果:请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =-0.39820.01380.3351(2)编写列组高斯消元法的MATLAB文件如下:clear;A=[5 2 1;2 8 -3;1 -3 -6];b=[8;21;1;][RA,RB,n,X] =liezhu(A,b)运行结果为:请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =12-1与题 1 中逆矩阵计算所得结果相同,检验通过四.实验体会:通过实验我掌握了消元法解方程的一些基本算法以及用matlab实现矩阵的几种基本计算。

高斯消元法,列主元素消元法及LU分解法的matlab程序

高斯消元法,列主元素消元法及LU分解法的matlab程序

§2.2.1高斯消元法的MATLAB程序f unction [RA,RB,n,X]=gaus(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') endend运行命令及结果a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48];b=[0.05;1.03;-0.53];[RA,RB,n,X] =gaus (A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =1.4531-1.5892-0.2749§2.2.2 列主元素消元法的MATLAB程序function [RA,RB,n,X]=liezhu(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1[Y,j]=max(abs(B(p:n,p))); C=B(p,:);B(p,:)= B(j+p-1,:); B(j+p-1,:)=C;for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') endend运行命令及结果a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48];b=[0.05;1.03;-0.53];[RA,RB,n,X]=liezhu(A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =1.4531-1.5892-0.2749§2.2.3 LU分解法的MATLAB程序function hl=zhjLU(A)[n n] =size(A); RA=rank(A);if RA~=ndisp('请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下:'), RA,hl=det(A);returnendif RA==nfor p=1:nh(p)=det(A(1:p, 1:p));endhl=h(1:n);for i=1:nif h(1,i)==0disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:'), hl;RAreturnendendif h(1,i)~=0disp('请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:')for j=1:nU(1,j)=A(1,j);endfor k=2:nfor i=2:nfor j=2:nL(1,1)=1;L(i,i)=1;if i>jL(1,1)=1;L(2,1)=A(2,1)/U(1,1);L(i,1)=A(i,1)/U(1,1);L(i,k)=(A(i,k)- L(i,1:k-1)*U(1:k-1,k))/U(k,k);elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);endendendendhl;RA,U,Lendend运行命令及结果a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48];hl=zhjLU(A)请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:RA =3U =2.5100 1.4800 4.53000 0.9300 -3.97110 0 -0.0837L =1.0000 0 00.5896 1.0000 01.0677 1.5696 1.0000hl =2.5100 0.1439 13.6410>> U=[2.5100 1.4800 4.53000 0.9300 -3.97110 0 -0.0837];>>L= [1.0000 0 00.5896 1.0000 01.0677 1.5696 1.0000];>> b=[0.05;1.03;-0.53];U1=inv(U); L1=inv(L); X=U1*L1*b,x=A\bX =-111.8440110.953125.7324x =1.4531-1.5892-0.2749例2.1: 用高斯消元法求解下面的非齐次线性方程组。

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