高斯法和列主元高斯消去法解线性方程组(MATLAB版)

合集下载

matlab高斯消元法

matlab高斯消元法

matlab高斯消元法
高斯消元法(Gaussian elimination)是一种求解线性方程组的方法,也常用于求解矩阵的逆以及计算矩阵的秩等问题。

在MATLAB 中,可以通过调用 `rref` 函数来实现高斯消元法。

`rref` 函数的用法如下:
```
X = rref(A)
```
其中,`A` 是要进行高斯消元的矩阵,`X` 是结果。

`rref` 函数会将矩阵 `A` 转化为行最简形,并返回结果矩阵 `X`。

以下是一个使用高斯消元法求解线性方程组的示例:
```matlab
A = [2, 1, -1, 8; -3, -1, 2, -11; -2, 1, 2, -3];
X = rref(A);
```
执行上述代码后,`X` 将会是一个行最简形的矩阵,表示线性方程组的解。

另外,如果你只想求解线性方程组的解而不需要得到行最简形矩阵,可以使用 `linsolve` 函数。

```matlab
A = [2, 1, -1; -3, -1, 2; -2, 1, 2];
b = [8; -11; -3];
X = linsolve(A, b);
```
上述代码中,`A` 是系数矩阵,`b` 是常数向量,`X` 是解向量。

执行代码后,`X` 将会是线性方程组的解。

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 中具有较好的实现和应用效果。

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

matlab求解代数方程组解析

matlab求解代数方程组解析

第三讲 Matlab 求解代数方程组理论介绍:直接法+迭代法,简单介绍相关知识和应用条件及注意事项 软件求解:各种求解程序讨论如下表示含有n 个未知数、由n 个方程构成的线性方程组:11112211211222221122n n n n n n nn n na x a x a xb a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ (1)一、直接法 1.高斯消元法:高斯消元法的基本原理: 在(1)中设110,a ≠将第一行乘以111,k a a -加到第(2,3,,),k k n = 得: (1)(1)(1)(1)11112211(2)(1)(2)22112(2)(2)(2)22n n n n n nn n n a x a x a x b a x a x b a x a x b ⎧+++=⎪++=⎪⎨⎪⎪++=⎩(2)其中(1)(1)1111,.k k aa b b ==再设(2)220,a ≠将(2)式的第二行乘以(2)2(2)22,(3,,)k a k n a -= 加到第k 行,如此进行下去最终得到:(1)(1)(1)(1)11112211(2)(1)(2)22112(1)(1)(1)1,111,1()()n n n n n n n n n n n n n n n n nn n n a x a x a x b a x a x b a x a x b a x b --------⎧+++=⎪++=⎪⎪⎨⎪+=⎪⎪=⎩(3) 从(3)式最后一个方程解出n x ,代入它上面的一个方程解出1n x -,并如此进行下去,即可依次将121,,,,n n x x x x - 全部解出,这样在()0(1,2,,)k kk a k n ≠= 的假设下,由上而下的消元由下而上的回代,构成了方程组的高斯消元法. 高斯消元法的矩阵表示:若记11(),(,,),(,,)T T ij n n n n A a x x x b b b ⨯=== ,则(1)式可表为.Ax b =于是高斯消元法的过程可用矩阵表示为:121121.n n M M M Ax M M M b --=其中:(1)21(1)111(1)1(1)11111n a a M a a ⎛⎫ ⎪ ⎪- ⎪=⎪ ⎪ ⎪ ⎪- ⎪⎝⎭ (2)32(2)222(2)2(2)221111n a a M a a ⎛⎫⎪⎪ ⎪-⎪=⎪ ⎪ ⎪⎪- ⎪⎝⎭高斯消元法的Matlab 程序: %顺序gauss 消去法,gauss 函数 function[A,u]=gauss(a,n) for k=1:n-1%消去过程 for i=k+1:n for j=k+1:n+1%如果a(k,k)=0,则不能削去 if abs(a(k,k))>1e-6 %计算第k 步的增广矩阵 a(i,j)=a(i,j)-a(i,k)/a(k,k)*a(k,j); else%a(k,k)=0,顺序gauss 消去失败 disp (‘顺序gauss 消去失败‘); pause; exit; end end end end%回代过程 x(n)=a(n,n+1)/a(n,n); for i=n-1:-1:1 s=0; for j=i+1:n s=s+a(i,j)*x(j); endx(i)=(a(i,n+1)-s)/a(i,i); end%返回gauss 消去后的增广矩阵 A=triu(a); %返回方程组的解 u=x ;练习和分析与思考: 用高斯消元法解方程组:12345124512345124512452471523814476192536x x x x x x x x x x x x x x x x x x x x x x ++++=⎧⎪+++=⎪⎪++++=⎨⎪+++=⎪+++=⎪⎩2.列主元素消元法在高斯消元法中进行到第k 步时,不论()k ik a 是否为0,都按列选择()||(,,)k ik a i k n = 中最大的一个,称为列主元,将列主元所在行与第k 行交换再按高斯消元法进行下去称为列主元素消元法。

数值分析实验报告高斯消元法和列主消元法

数值分析实验报告高斯消元法和列主消元法

《计算方法》实验指导书 实验三、高斯消元法和列主消元法一、实验目的:1. 通过matlab 编程解决高斯消元发和列主消元发来解方程组的问题, 加强编程能力和编程技巧,要熟练应用matlab 程序来解题,练习从数值分析的角度看问题进而来解决问题。

更深一步体会这门课的重要性,练习动手能力,同时要加深对数值问题的理解,要熟悉matlab 编程环境。

二、实验要求:用matlab 编写代码并运行高斯消元法和列主消元发来解下面的方程组的问题,并算出结果。

三、实验内容:用高斯消元法和列主消元法来解题。

1.实验题目:用高斯消元法和列主消元法来解下列线性方程组。

⎪⎪⎩⎪⎪⎨⎧−=+−−−=+−−=+−−=−+−.142,16422,0,13143214321432432x x x x x x x x x x x x x x x 2.实验原理高斯消元法:就是把方程组变成上三角型或下三角形的解法。

上三角形是从下往上求解,下三角形是从上向下求解,进而求得结果。

而列主消元法是和高斯消元法相类似,只不过是在开始的时候找出x1的系数的最大值放在方程组的第一行,再化三角形再求解。

3.设计思想高斯消元法:先把方程组的第一行保留,再利用第一行的方程将其余几行的含有x1的项都消去,再保留第二行,同理利用第二行的方程把第二行以下的几行的含有x2项的都消去,以此类推。

直到最后一行只含有一个未知数,化为上三角形,求得最后一行的这个未知数的值,再回带到倒数第二个方程求出另一个解,再依次往上回带即可求出这个方程组的值。

而列主消元法与高斯消元法类似,只不过在最开始时找出x1项系数的最大值与第一行交换再进行与高斯算法相似的运算来求出方程组的解。

4.源代码高斯消元法的程序: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=[1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1];b=[1;0; -1;-1]; [RA,RB,n,X] =gaus (A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.运行结果为:RA =4RB =4n =4X =-0.50000.5000.列主消元发的程序: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=[1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1];b=[1;0; -1;-1]; [RA,RB,n,X]=liezhu(A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.运行结果为:RA =4RB =4n =4X =-0.50000.5000实验体会:通过这次实验我了解了高斯消元法和列主消元方法的基本思想,虽然这两个程序的编写是有点困难的,但运行起来还是比较容易的,解决了不少实际问题的计算。

gauss消去法matlab

gauss消去法matlab

gauss消去法matlabGauss消去法是一种常用的线性方程组求解方法,它可以通过消元和回代的方式,将一个复杂的线性方程组转化为一个简化的三角形方程组,从而得到方程组的解。

在MATLAB中,我们可以使用高斯消去法函数来求解线性方程组。

我们需要明确线性方程组的形式。

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

接下来,我们可以使用MATLAB中的高斯消去法函数来求解线性方程组。

在MATLAB中,我们可以使用“[L,U,P] = lu(A)”函数来进行高斯消去法的分解,其中L是单位下三角矩阵,U是上三角矩阵,P 是置换矩阵。

通过高斯消元法的分解,我们可以得到三角形方程组:L(Ux) = b然后,我们可以使用“y = L\b”函数来求解下三角方程Ly = b,再使用“x = U\y”函数来求解上三角方程Ux = y。

最终,我们可以得到线性方程组的解x。

除了使用MATLAB中的高斯消去法函数,我们还可以手动实现高斯消去法。

首先,我们可以通过消元操作将系数矩阵A转化为上三角矩阵U。

消元操作的基本步骤如下:1.选择主元:选择第一列中绝对值最大的元素作为主元,并将其所在的行交换到第一行。

2.消元操作:对于第一行以下的每一行,将其第一列元素消为0。

具体操作是,将第一行乘以一个适当的倍数,然后从当前行中减去第一行的倍数。

3.重复以上步骤,直到所有的主元都不为0或者所有的行都消元结束。

接下来,我们可以使用回代操作将上三角矩阵U转化为解向量x。

回代操作的基本步骤如下:1.确定最后一个未知量:将最后一行的最后一个元素设为1。

2.回代计算:从最后一行开始,依次计算每个未知量的值。

具体操作是,将当前行的右侧元素减去已知的未知量的倍数,然后除以当前行对角线上的系数。

通过手动实现高斯消去法,我们可以更好地理解高斯消去法的原理和过程。

(完整)高斯消去法解线性方程的Matlab程序

(完整)高斯消去法解线性方程的Matlab程序

1151091 杨晨辉高斯消去法解线性方程的Matlab 程序方法一:function x = gauss(A,b) n = length(b);for k = 1 : n-1if A(k,k)==0fprintf( 'Error: the %dth pivot element equal to zero!\n' return ;endindex = [k+1:n];m = -A(index,k)/A(k,k);A(index,index) = A(index,index) + m*A(k,index); b(index) = b(index) + m*b(k);endx = zeros(n,1);x(n) = b(n)/A(n,n);for i = n-1:-1:1x(i) = ( b(i) - A(i,[i+1:n])*x([i+1:n]) )/A(i,i); end运行结果:>> A=[1 1.355 1.4 2; 3 3.5 0.22 1; 0.5 2 2.1 3;>> b=[2.00,1.00,0.55,3.00]' b =2.00001.00000.55003.0000 >> gauss(A,b)ans =2.5225-2.23130.01771.2381 方法二:矩阵求逆:function [ B ] = qiuni( A )%UNTITLED Summary of this function goes here% Detailed explanation goes here n=numel(A);r=rank(A);B=eye(r);if n==L2for k=1:rfor i=1:r ,k);0.3 0.1 -0.55 2];for j=1:rii=i-1;jj=j-1;if ii==0 && jj==0;ii=r;jj=r;B(ii,jj)=1/A(1,1);elseif ii==0 && jj~=0;ii=r;B(ii,jj)=-A(1,j)/A(1,1);elseif jj==0 && ii~=0;jj=r;B(ii,jj)=A(i,1)/A(1,1);elseB(ii,jj)=A(i,j)-A(i,1)*A(1,j)/A(1,1);endendendA=B;B=eye(r);endB=A;elsemsgbox( ' 矩阵不可逆' , 'message' , 'warn' ); end endGr^l Jr«t jskiALM13LII4I3 S ]J. IXI f 8 4»LEF3f* ll.Tfil™'.*?a. nr-ii I. >3 DOC-1- E^:I.MQP n rml.»HGil・a血«.4WtOMHi超if iMr MHfH 曰ITfar !■ i: rIlliUliNJTL2in kLIU#•十*minilu-dzr齡 4 J 2.4 7^3.9 il-l-Z U • (14 M,1 1*1,1 i Ih.i 他[S 4 J 2 4 2 it 3.3 I ? 5.4 3 3 lh”gg飞『可选1M^4T<E AfrrE喩耳.庇賈■斗『.*玛11册V ttii< .M ■帥?脅 Q* M It 当方程不可逆时:第二种:fun ction [ B ] = lyxq inv( A )%UNTITLED Summary of this fun ctio n goes here % Detailed expla nati on goes here n=n umel(A);r=ra nk(A);B=eye(r);if n==L2E=eye(r);A=[A E];for k=1:(r-1)for i=(k+1):rfor j=(k+1):2*rA(i,j) = A(i,j)-A(i,k)* A(k,j) / A(k,k);endj=k;A(i,j) = A(i,j)-A(i,k)* A(k,j) / A(k,k);endendfor k=2:rpuspus !( .UJBM , £ .sBesseiu, £ ,廡址k 捌目# . )xoq6siu9S|9 :(j^:(i,+j )i:)a=apue pue©!)▼/(「!)皆(「!)日J^:L=[」oj」j=!」ojpue pue:(>l 1>l )V/(r>l )V.(>l 1!)V-(r!)V=(r!)V■>l=f pue:(>i i >i )v/(r>i )v.(>i i !)v-(r!)v=(r!)v j^:(i /+>i )=r 」oj(宀)J=!」OJ!■« ^'1 1 I t'C 0 £ S't t fe- S]-*-fiN1=5 3 If• ◎ ID * ・E -*w J£ 口1M^!PIS^'D-EMJ'DgfWP Sfft F IMF CGiK S^£j£K 加屜iz "UP EWtT>- UKH MX®MJFV- HQFU岡Z 伽巾w:MMsmn a t i 11 ft g i t z t if 町■ V —1 J£*frdrj_ E-C-^'P ■fp XklMC I «f*E|«ul3 5 ¥ 1 i I r'C 9 £ C I ・ ** epiiJbcMH L ^btLJ=Ul] Ci 1 J't 1 I L'L 9 ■£ R* L I 3]^j ",|Q 鼻 H-R r ft ・ 4 ■卩 * C- [- T'P- f ■门碑 :\|T- i TI :-q r R!- 3 I 旷£- « 1- 4 1- f E- F]-» 14肯1肚丫 F1 41 J. I 时4T ■ = FIT IF P 町贰F 3»rl-qll 5 I 3 -5 A I E :f B 5 P C E > 5]<*V] *■*iia t i i i E C g i P S I t ・町詐(q Fri "T<e fc-xsr[i —we*Fip - . jr r ■'w■I« !J►5 ft O EWK陆羽 LfEMLD?K :fl.«ll r miEI f lfiMlbiM.T -[| g 盅 E fi J E £'L 5> E »'Z € t £]=9 «IH -MnhiQui'u^iJEi 1I in-M ka« tfun cti on X=jie(A,b); [m,n ]=size(A);B=[A,b];RA=ra nk(A);RB=ra nk(B);formatratif RA==RB & RA==n %判断方程有唯一解 X=A\b;else if RA==RB & RA<n %判断方程有无穷解X=A\b %求特解 C=null(A,'R' );%求AX=0勺基础解系else X='方程无解’;%判断方程无解 end end上图的方程有两个,第一个有解,显示结果;第二个无解,显示 方程无解当方程有无穷解时,显示其特解■ -1^ u* sf Bi fclw JtJf• 6 •CiJ □ £J 4■谍 1 3 7 fl I 7 >7 13 D<L. rlsipc-hn- >Ji>; «»EV i > 1.4 > H >J < i T >■ t iipiM -caim 勒诵 < 3 j,4 g ].] I 7 5.? 3 fi« j a m 半・ jj.^(]!4M r A ).i i Fv.? > t 盯・・口©・ *-C5 4 3 a pfUkb)A F IB 4 ft 1J ji«L4ib)X|t 4 1 1,4 •EE i 3 2;a Jt Ct < 5 1.4 ■£L -2 J -L J -i & -J,2 I 2 -2P r «^(b 2 ]]',1 i 1J l !*«/■■ 1]X14N3 g 3.3 I T 5.S 3 5 l.|.b-[14Mi 1 6 3.3 I r 9.2 3 1 d|il>±(14rt if山n 4 I 2 4 I 4 3,9 3 r t,3 ) 6 lixim KJ Hip.EDM 酉52IDiU|i -a v -i ,s -i b o s ? ar■AT“n4 a M H 4 3 IQ:\・B I 各聲a&14+3 3l :gi52図邸H - g ><k 申r 5.71 %门.・口0医2 d ).] i. ?3 S i|,b-{^94 I■IWr=iIMIS» M 【l I 3 ・l"・l •> 4.1 5 V -«),tell < •】•.”心”」UTIMntrtE ex J 9 Q, " Si・ V12M)l»724?»n« Ut9・ i/i2«e )in^4rmi« m|g 门“t—SJ. *Mb 4 ) 1.4 2 ・).3 I r e.4 ) 1MH 4 >:.< 2 • X> I r «.? ) t ibMOHM “ 4 > 2.4 2 e X )I r 5.2 ) 3ibUOUMA^li 4 ) 2.4 2 « >.> I I C.2 ) < l)#b-(l«M IJWU.WMIS 4 > 2.4 7 • J.5 I f 5.2 S 1 IJUU.b>A F 5 < > >.4 < 3.S I > 6.J > « l).^(l«M 1 Mb <>:.<? « XI I r o.2 ) 9 lbW (l«M I "4 2 6 3.3 I 7 6.J 1 5l),W(l<M I4 > 2.4 2 • >.> t r B.2 > ■ IA=!l -2 3 -l.> -I 5 -3.2 I 2 -2!.bs(> 2 «* J A*|l 1 J -I i ・(・1 4.1 i -• -l|.b-(l 4 •)•*nu *" >«w “5*a□ Jk fi W 2f » -ute«twec»>x - €>»»<» M S^*9V«9<aa >4X<t * * J (J)Mg ■ r.Tp■"daStn m 一「一 . M4te~ 3144-18S44 3B • r *H» " MIL X14 4-189 15 M SmM*lte 3314^21719X3M4・ X144-3215152® .dbr«4M»U RMUMXH4^259O4C N 1 Qf* n M 低 an 心 2( aooTXT Mr201H-2 Id 1)518)0 &1Q @6 ■.U, _ B Ulw« Mi . : MUI 4iwAM« .。

gauss消去法求解方程组matlab

gauss消去法求解方程组matlab

高斯消去法是一种用于求解线性方程组的经典方法,它可以通过矩阵的初等变换将方程组化为上三角形式,然后通过回代的方式求解方程组。

在Matlab中,我们可以利用高斯消去法求解方程组,这样可以更加高效地进行数值计算。

下面我们将简要介绍高斯消去法的原理,并通过Matlab代码演示如何使用高斯消去法求解方程组。

一、高斯消去法原理及步骤高斯消去法是一种通过矩阵的初等变换将线性方程组化为上三角形式的方法,其求解过程主要包括以下几个步骤:1. 将系数矩阵增广为增广矩阵;2. 首先通过初等行变换将增广矩阵化为上三角矩阵;3. 然后通过回代的方式求解方程组。

通过这样的步骤,我们可以将原始的线性方程组化简为上三角形式,从而更容易求解方程组。

二、Matlab代码演示在Matlab中,我们可以通过编写代码实现高斯消去法来求解线性方程组。

下面是一个简单的例子代码,用来演示如何在Matlab中使用高斯消去法求解方程组:```matlabfunction x = gauss_elimination(A, b)[n, m] = size(A);if n ~= merror('A must be a square matrix');endAb = [A, b];for k = 1 : n - 1for i = k + 1 : nfactor = Ab(i, k) / Ab(k, k);Ab(i, k : n + 1) = Ab(i, k : n + 1) - factor * Ab(k, k : n + 1); endendx = zeros(n, 1);x(n) = Ab(n, n + 1) / Ab(n, n);for i = n - 1 : -1 : 1x(i) = (Ab(i, n + 1) - Ab(i, i + 1 : n) * x(i + 1 : n)) / Ab(i, i); endend```通过以上的Matlab代码,我们可以实现高斯消去法的求解过程,并得到方程组的解。

高斯消去、追赶法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求线性方程组的解

matlab求线性方程组的解

matlab求线性方程组的解求解线性方程分为两种方法–直接法和迭代法常见的方法一共有8种直接法Gauss消去法Cholesky分解法迭代法Jacobi迭代法Gauss-Seidel迭代法超松弛迭代法共轭梯度法Bicg迭代法Bicgstab迭代法这里我从计算代码的角度来解释一下,代码按以下顺序给出。

把方程组直接带入已知条件,就可以得到答案。

适用条件Gauss消去法:求解中小规模线性方程(阶数不过1000),一般用于求系数矩阵稠密而且没有任何特殊结构的线性方程组Cholesky分解法:对称正定方程优先使用,系数矩阵A是n 阶对称正定矩阵Jacobi迭代法非奇异线性方程组,分量的计算顺序没有关系Gauss-Seidel迭代法与Jacobi迭代法相似,但计算的分量不能改变超松弛迭代法Jacobi迭代法和Gauss-Seidel迭代法的加速版,由Gauss-Seidel迭代法改进而来,速度较快共轭梯度法需要确定松弛参数w,只有系数矩阵具有较好的性质时才可以找到最佳松弛因子。

但好处是不用确定任何参数,他是对称正定线性方程组的方法也是求解大型稀疏线性方程组最热门的方法Bicg迭代法本质是用双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求Bicgstab迭代法本质是用稳定双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求Gauss消去法第一、二个函数ltri、utri是一定要掌握的,后面的几乎每个函数都要用到ltri简单来说,当Ly=bb,L(非奇异下三角矩阵)已知求yfunction y =ltri(L,b)n=size(b,1);y=zeros(n,1);for j =1:n-1y(j)=b(j)/L(j,j);b(j+1:n)=b(j+1:n)-y(j)*L(j+1:n,j); endy(n)=b(n)/L(n,n);utri简单来说,当Ux=yy,U(非奇异上三角矩阵)已知求xfunction x =utri(U,y)n=size(y,1);x=zeros(n,1);for j = n:-1:2x(j)=y(j)/U(j,j);y(1:j-1)=y(1:j-1)-x(j)*U(1:j-1,j);endx(1)=y(1)/U(1,1);gauss算法,计算时粘贴过去就好function[L,U]=gauss(A)n=size(A,1);for k =1:n-1A(k+1:n,k)=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k +1:n)-A(k+1:n,k)*A(k,k+1:n);endL=tril(A,-1)+eye(n);U=triu(A);使用例子已经知道一个线性方程组,这里我就不写出数学形式了,A是系数矩阵,直接把上面写好的函数复制过来在运算就可以。

高斯消元法(含MATLAB编程)

高斯消元法(含MATLAB编程)

第2次选列主元后的增广矩阵
1 6 5 6 6 0 11/ 3 4 13/ 3 11 0 5/ 3 5 11/ 3 4 2 0 1 0 0
第2次消元后的增广矩阵
1 6 5 6 6 0 11/ 3 4 13 / 3 11 0 0 75 /11 62 /11 9 0 0 24 /11 37 /11 6
(1)输入增广矩阵A=[-3 2 6 4;10 -7 0 7;5 -1 5 6] 第1次选列主元后的增广矩阵 10 -3 -7 2 6 0 4 6 7 61/10 5/2 7
第1次消元后的增广矩阵 5 -1 5 10 -7 0 0 0 -1/10 5/2 6 5
第2次选列主元后的增广ห้องสมุดไป่ตู้阵 10 -7 0 0 0 5/2 -1/10 5 6
3 2 1 1 4 3 2 1 1 4 3/4 4 3 2 1 3/4 7/4 3/2 5/4 1/4 ( 2) A : b 1/2 3 4 3 1 1/2 6/7 4 3 1 4 1 1/4 2 3 4 1 1/4 5/7 3 3 2 1 1 4 3 2 1 1 4 3/4 7/4 3/2 5/4 1/4 3/4 7/4 3/2 5/4 1/4 , 1/2 6/7 12/7 10/7 -12/7 1/2 6/7 12/7 10/7 -12/7 1 1/4 5/7 5/6 5/3 0 1/4 5/7 5/6 4 2 1 1 4 3 3/ 4 1 7 / 4 3/ 2 5/ 4 ,U L 1/ 2 6 / 7 1 12 / 7 10 / 7 1 5/ 3 1/ 4 5 / 7

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目1.1 实验目的:(1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。

(2)学会用Matlab 编写各种方法求解线性方程组的程序。

1.2 实验题目:1. 用列主元消去法解方程组:1241234123412343421233234x x x x x x x x x x x x x x x ++=⎧⎪+-+=⎪⎨--+=-⎪⎪-++-=⎩2. 用LU 分解法解方程组,Ax b =其中4824012242412120620266216A --⎛⎫⎪-⎪= ⎪ ⎪-⎝⎭,4422b ⎛⎫ ⎪ ⎪= ⎪- ⎪-⎝⎭ 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组:1232341231234102118311210631125x x x x x x x x x x x x x -+=-⎧⎪-+=-⎪⎨-+=⎪⎪-+-+=⎩二、实验原理、程序框图、程序代码等2.1实验原理2.1.1高斯列主元消去法的原理Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式:1111221122222n n n n nn n nb x b x b x g b x b x g b x g +++=⎧⎪++=⎪⎨⎪⎪=⎩这个过程就是消元,然后再回代就好了。

具体过程如下: 对于1,2,,1k n =-,若()0,k kk a ≠依次计算()()(1)()()(1)()()/,,1,,k k ik ik kk k k k ij ij ik kjk k k i i ik k m a a a a m a b b m b i j k n++==-=-=+然后将其回代得到:()()()()()1/()/,1,2,,1n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+⎧=⎪⎨=-=--⎪⎩∑以上是高斯消去。

LU分解高斯消元列主元高斯消元matlab代码

LU分解高斯消元列主元高斯消元matlab代码

数学实验作业一、矩阵LU分解:function [L,U,p]=lutx(A)[n,n]=size(A);p=(1:n)';for k=1:n-1[r,m]=max(abs(A(k:n,k)));m=m+k-1;if (A(m,k)~=0)if (m~=k)A([k m],:)=A([m k],:);p([k m])=p([m k]);endi=k+1:n;A(i,k)=A(i,k)/A(k,k);j=k+1:n;A(i,j)=A(i,j)-A(i,k)*A(k,j);endendL=tril(A,-1)+eye(n,n)U=triu(A)pend高斯消元法求解方程:n=3;a=[1 2 3 ;4 5 6 ;7 8 9 ];b=[17 18 19];l=eye(n);y=1;for i=1:(n-1)for j=1:(n-i)if a(j+(i-1)*n+y)~=0l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j)for k=1:(n-i+1)a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j)*l(j+(i-1)*n+y) endb(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y);endendy=y+1;endsum=0;for j=1:nsum=sum+x(j)+a(k,j);endsum=0;for j=1:nx(j)=0;endfor k=n:-1:1for j=1:nsum=sum+x(j)*a(k,j)endx(k)=(b(k)-sum)/a(k,k) sum=0;end列主元高斯消元法代码:n=3;a=[1 2 3 ;4 5 6 ;7 8 9 ]; b=[17 18 19];l=eye(n);p=eye(n);ma=0for i=1:(n-1)for j=i:nif a(j,i)>ma;ma=a(j,i)endendfor k=i:nif a(k,i)==mam=k;endendfor j=1:na1=a(m,j);a(m,j)=a(i,j);a(i,j)=a1p1=p(m,j);p(m(1),j)=p(i,j);p(i,j)=p1;endb1=b(m);b(m)=b(i);b(i)=b1;ma=0;endy=1;for i=1:(n-1)for j=1:(n-i)if a(j+(i-1)*n+y)~=0l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j)for k=1:(n-i+1)a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j )*l(j+(i-1)*n+y)endb(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y);endendy=y+1;endsum=0;for j=1:nx(j)=0;endfor k=n:-1:1for j=1:nsum=sum+x(j)*a(k,j)endx(k)=(b(k)-sum)/a(k,k)sum=0;end全主元高斯消元法代码:n=3;a=[1 2 3 ;4 5 6 ;7 8 9 ];b=[17 18 19];l=eye(n);p=eye(n);q=eye(n);max=0;for i=1:(n-1)for j=i:nfor k=i:nif max<abs(a(j,k)) max=abs(a(j,k));endendendfor j=i:nfor k=i:nif max==abs(a(j,k)) m=[j,k];endendendfor j=1:na1=a(m(1),j);a(m(1),j)=a(i,j);a(i,j)=a1;p1=p(m(1),j);p(m(1),j)=p(i,j);p(i,j)=p1;endb1=b(m(1));b(m(1))=b(i);b(i)=b1;for j=1:na1=a(j,m(2));a(j,m(2))=a(j,i);a(j,i)=a1;q1=q(j,m(2));q(j,m(2))=q(j,i);q(j,i)=q1;endmax=0;endy=1;for i=1:(n-1)for j=1:(n-i)if a(j+(i-1)*n+y)~=0l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j)for k=1:(n-i+1)a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j )*l(j+(i-1)*n+y);endb(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y);endendy=y+1;endsum=0;for j=1:nx(j)=0;endfor k=n:-1:1for j=1:nsum=sum+x(j)*a(k,j)endx(k)=(b(k)-sum)/a(k,k)sum=0;end解:编写矩阵:0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 0 A= 0 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a 1B= (0 10 0 0 0 0 0 15 0 20 0 0 0)’F= (f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13)’AF=B F=A\B程序及运算结果:>> a=sym(1/sqrt(2))a =2^(1/2)/2>> A=[0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a -1]A =[ 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0] [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [ 2^(1/2)/2, 0, 0, -1, -2^(1/2)/2, 0, 0, 0, 0, 0, 0, 0, 0][ 2^(1/2)/2, 0, -1, 0, -2^(1/2)/2, 0, 0, 0, 0, 0, 0, 0, 0][ 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0] [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] [ 0, 0, 0, 0, 2^(1/2)/2, 1, 0, 0, -2^(1/2)/2, -1, 0, 0, 0] [ 0, 0, 0, 0, 2^(1/2)/2, 0, 1, 0, -2^(1/2)/2, 0, 0, 0, 0] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0] [ 0, 0, 0, 0, 0, 0, 0, 1, 2^(1/2)/2, 0, 0, -2^(1/2)/2, 0] [ 0, 0, 0, 0, 0, 0, 0, 0, 2^(1/2)/2, 0, 1, 2^(1/2)/2, 0] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2^(1/2)/2, 1]>> B=[0;10;0;0;0;0;0;15;0;20;0;0;0] B =101520>> F=A\BF =10*2^(1/2)-101010-1010-15*2^(1/2)520-5*2^(1/2)5LU分解:>> a=2^(1/2)/2a =0.7071>> A=[0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a 1]A =Columns 1 through 80 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00.7071 0 0 -1.0000 -0.7071 0 0 00.7071 0 -1.0000 0 -0.7071 0 0 00 0 0 1.0000 0 0 0 -1.00000 0 0 0 0 0 1.0000 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0.7071 0 1.0000 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 01.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 0-0.7071 0 0 0 00 1.0000 0 0 -1.00000 0 1.0000 0 00.7071 0 0 -0.7071 00.7071 0 1.0000 0.7071 00 0 0 0.7071 1.0000>> [L,U,P]=lu(A)L =Columns 1 through 81.0000 0 0 0 0 0 0 00 1.0000 0 0 0 0 0 00 0 1.0000 0 0 0 0 01.0000 0 -1.0000 1.0000 0 0 0 00 0 0 0 1.0000 0 0 00 0 0 0 1.0000 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 1.0000 0 0 01.00000 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 01.0000 0 0 0 00 1.0000 0 0 00 0 1.0000 0 01.0000 0 1.0000 1.0000 00 0 0 0.5000 1.0000U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0 -1.0000 1.0000 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 1.0000 0 0 00 0 0 0 00 0 0 0 00.7071 0 0 -0.7071 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 1.4142 00 0 0 0 1.0000P =0 0 1 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 00 0 0 0 0 1 0 0 0 0 0 0 00 0 0 0 1 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 0 1>> F=U\(L\B)F =10.606637.500010.606627.5000-15.000010.606627.5000-10.60667.5000解:程序及运算结果:Lutx.m文件:function [L,U,p,sig] = lutx(A) %LU Triangular factorization% [L,U,p,sig] = lutx(A) computes a unit lower triangular % matrix L, an upper triangular matrix U, a permutation % vector p, and a scalar sig, so that L*U = A(p,:) and% sig = +1 or -1 if p is an even or odd permutation. [n,n] = size(A);p = (1:n)';w=0for k = 1:n-1% Find largest element below diagonal in k-th column [r,m] = max(abs(A(k:n,k)));m = m+k-1;% Skip elimination if column is zeroif (A(m,k) ~= 0)% Swap pivot rowif (m ~= k)A([k m],:) = A([m k],:);p([k m]) = p([m k]);w=w+1;end% Compute multipliersi = k+1:n;A(i,k) = A(i,k)/A(k,k);% Update the remainder of the matrixj = k+1:n;A(i,j) = A(i,j) - A(i,k)*A(k,j);endend% Separate resultL = tril(A,-1) + eye(n,n)U = triu(A)psig=(-1)^wmydet.m文件:function det=mydet(A)[L,U,p,sig] = lutx(A)det=sig*prod(diag(U))运行结果:>> a=2^(1/2)/2a =0.7071>> A=[0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a 1]A =Columns 1 through 80 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00.7071 0 0 -1.0000 -0.7071 0 0 00.7071 0 -1.0000 0 -0.7071 0 0 00 0 0 1.0000 0 0 0 -1.00000 0 0 0 0 0 1.0000 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0.7071 0 1.0000 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 01.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 0-0.7071 0 0 0 00 1.0000 0 0 -1.00000 0 1.0000 0 00.7071 0 0 -0.7071 00.7071 0 1.0000 0.7071 00 0 0 0.7071 1.0000>> mydet(A)w =L =Columns 1 through 81.0000 0 0 0 0 0 0 00 1.0000 0 0 0 0 0 00 0 1.0000 0 0 0 0 01.0000 0 -1.0000 1.0000 0 0 0 00 0 0 0 1.0000 0 0 00 0 0 0 1.0000 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 1.0000 0 0 01.00000 0 0 0 0 0 0-1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 01.0000 0 0 0 00 1.0000 0 0 00 0 1.0000 0 01.0000 0 1.0000 1.0000 00 0 0 0.5000 1.0000U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0 -1.0000 1.0000 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 1.0000 0 0 00 0 0 0 00 0 0 0 00.7071 0 0 -0.7071 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 1.4142 00 0 0 0 1.0000p =31247865119101213sig =-1L =Columns 1 through 81.0000 0 0 0 0 0 0 00 1.0000 0 0 0 0 0 00 0 1.0000 0 0 0 0 01.0000 0 -1.0000 1.0000 0 0 0 00 0 0 0 1.0000 0 0 00 0 0 0 1.0000 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 1.0000 0 0 01.00000 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 01.0000 0 0 0 00 1.0000 0 0 00 0 1.0000 0 01.0000 0 1.0000 1.0000 00 0 0 0.5000 1.0000U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0 -1.0000 1.0000 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 1.0000 0 0 00 0 0 0 00 0 0 0 00.7071 0 0 -0.7071 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 1.4142 00 0 0 0 1.0000 p =31247865119101213sig =-1ans =-0.5000解:程序及运算结果:function [L,U,p] = lutx1(A)[n,n] = size(A);p = (1:n)';for k = 1:n-1[r,m] = max(abs(A(k:n,k)));m = m+k-1;if (A(m,k) ~= 0)if (m ~= k)A([k m],:) = A([m k],:);p([k m]) = p([m k]);endfor i=k+1:nA(i,k)=A(i,k)/A(k,k);endfor j=k+1:nA(i,j)=A(i,j)-A(i,k)*A(k,j);endendendL=tril(A,-1)+eye(n,n)U=triu(A)运行结果:>> lutx1(A)L =1 0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 01 0 -1 0 1 0 0 0 0 0 0 0 00 0 0 0 -1 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 00 0 0 0 -1 0 1 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 -1 0 1 1 00 0 0 0 0 0 0 0 0 0 0 1 1 U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 -1.00000 0 0 0 -0.7071 0 0 00 0 0 0 0 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 01.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 0 0 0 00.7071 0 0 -0.7071 0-0.7071 0 0 0 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 0.7071 00 0 0 0 1.0000ans =1 0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 01 0 -1 0 1 0 0 0 0 0 0 0 00 0 0 0 -1 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 00 0 0 0 -1 0 1 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 -1 0 1 1 00 0 0 0 0 0 0 0 0 0 0 1 1。

高斯消元法,列主元素消元法及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: 用高斯消元法求解下面的非齐次线性方程组。

matlab---列主元高斯消元法

matlab---列主元高斯消元法

3线性代数方程组数值解法39.(上机题)列主元高斯消去法对于某电路的分析,归结为求线性方程组RI=V ,其中⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡−−−−−−−−−−−−−−−−−−−−=2920009000227005000000413000000003047700000507573000090003079100000000103190000011093513000100001331R ()15,27,23,0,20,12,7,7,10TT V =−−−−(1)编制解n 阶线性方程组Ax b =的列主元高斯消去法的通用程序;(2)用所编程序解线性方程组RI V =,并打印出解向量,保留5位有效数;(3)本题编程中,你提高了那些编程能力?本程序用matlab 编写(1)通用程序如下function [x,det,flag ]=Gauss(A,b)%A 为方程组的系数矩阵%b 为方程组的右端项%x 为方程组的解%det 为系数矩阵A 的行列式的值%flag 为指标向量,flag=‘failure ’表示失败,flag=‘OK ’表示成功[n,m]=size(A);nb=length(b);if n~=merror('A 不是方阵')return;endif m~=nberror('b 的长度不等于A 的阶数')return;endflag='OK';det=1;x=zeros(n,1);for k=1:n-1max1=0;for i=k:nif abs(A(i,k))>max1max1=abs(A(i,k));r=i;endendif max1<1e-10flag='failure';return;endif r>kfor j=k:nz=A(k,j);A(k,j)=A(r,j);A(r,j)=z;endz=b(k);b(k)=b(r);b(r)=z;det=-det;endfor i=k+1:nm=A(i,k)/A(k,k);for j=k+1:nA(i,j)=A(i,j)-m*A(k,j);endb(i)=b(i)-m*b(k);enddet=det*A(k,k);enddet=det*A(n,n)if abs(A(n,n))<1e-10flag='failure';return;endfor k=n:-1:1for j=k+1:nb(k)=b(k)-A(k,j)*x(j);endx(k)=b(k)/A(k,k);endx(k)=b(k)/A(k,k);endvpa(x)digits(5)(2)在命令栏输入矩阵,并执行guass命令如下>>A=[31-13000-10000-1335-90-1100000-931-100000000-1079-30000-9000-3057-70-500000-747-300000000-3041000000-50027-2000-9000-229];>>b=[-15;27;-23;0;-20;12;-7;7;10];>>x=Gauss(A,b);fprintf('%.5g\n',x)运行结果如下:det=6.1817e+013X=-0.289230.34544-0.71281-0.22061-0.43040.15431-0.0578230.201050.29023(3)通过此次编程,让我更加熟悉了matlab程序的编辑,对选择语句,循环语句,循环嵌套等的运用更加熟练,也对列主元Guass消去法解方程组的思想理解更加深刻。

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