用高斯消元法解线性方程组 的MATLAB程序

用高斯消元法解线性方程组 的MATLAB程序,第1张

1、下图是需要求解的线性方程组。

2、打开MATLAB,利用左除法(\)求解上述线性方程组。输入如下代码:close allclear allclc% MATLAB左除法(\)求解线性方程组,A = [1 2 3-1 3 79 0 3]b = [1 4 7]'x = A\b。

3、保存和运行上述代码,利用左除法(\)得到线性方程组的解。

4、用求逆法(inv)求解线性方程组,输入如下代码:close allclear allclc,% MATLAB求逆法(inv)求解线性方程组,% A是线性方程组等号左边系数构成的矩阵

5、保存和运行上述代码,利用求逆法(inv)得到线性方程组的解如下。

6、最后,可以看到左除法(\)和求逆法(inv)求得的线性方程组解是一样的。

一楼翻译是什么东西啊?直接复制到google在线里翻译出来,还累?我看别人要想看懂才真是累!给楼主翻译了下,如果楼主对高斯消去法比较了解的话就很容易懂。

%用高斯消去法把矩阵A转换为上三角阵

[m,n]=size(A) %获得A的行和列分别存入m和n中

% 列主元素消去法

for k=1:n-1

[v,u]=max(abs(A(k:n,k))) %选出A的第k列中绝对值最大元素存入v, 而u是记录多少的行或列,并取最大值,比如有m行,n列,且n>m,则u=n

%计算矩阵A中这些元素 A(k:n,1:k)

u=u+k-1

%因为函数返回矩阵A(k:n,1:k)中最大元素,因此我们应该变换矩阵A的值,下面进行变换

p(k)=u%用p(k)来记录u的值

%交换第k行和第u行的数据

t1 = A(k,k:n) %为了实现交换,定义一个中间变量t1

A(k,k:n) = A(u,k:n)

A(u,k:n) = t1

t2 = b(k) %t2是一个临时变量

b(k) = b(u)

b(u) = t2

%前面主要是对A进行变换,即在进行消去之前,第一次先比较A中第一列绝对值最大的元素,然后再将第一列中有最大元素的那行交换到第1行,

然后用下面方法进行消去,将除第一行外的元素的第一列都消去为0;第二次然后比较A中第二列元素(此时第一行不用参与比较),将最大元素那行

交换到第二行,将3,4,5…行的第二列也变为0;依此类推,直到把A变为上三角阵,这也是为什么下面的A(k,k) ~= 0不为0的原因(有0就可省去一步)

% 高斯消去法

if A(k,k) ~= 0

%下面是高斯法消去的主要步骤,可参考有关书看看。

rows=k+1:n

A(rows,k)=A(rows,k)/A(k,k)

A(rows,rows)=A(rows,rows)-A(rows,k)*A(k,k)

L(rows,rows)=A(rows,rows)

end

end

% 计算矩阵 U

for k=2:n

A(k,1:k-1)=0

end

二、求解三角方程组的程序:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 用转换为三角矩阵法来求解Ax=b

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[m,n]=size(A) %获得A的行和列分别存入m和n中

%x(n)=b(n)/A(n,n) %计算x(n)

% 下面进行求解

for i = n : -1 : 1

t = 0

for j = n : -1 : i+1

t = t+A(i,j)*x(j)

end

x(i) = (b(i)-t)/A(i,i)

end

三、主程序:

function Examples_Eqn_Root

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 用高斯消去法求解线性方程 Ax=b

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

A = [ 1 3 6 8 9 2 %i输入矩阵 'A'

2 5 3 1 6 3

3 6 1 2 8 5

2 6 8 9 3 8

5 8 9 3 2 3

3 5 8 1 7 2]

b= [2 -3 2 55 16 -6] %i输入 'b'

b = b' %转换 'b'

[A,b]= Gauss(A,b) %把[A b]变换为A为上三角阵的形式

%同时将变换后的'b'返还给b

b = b'

x= Eqn_Root(A,b)%通过三角阵方法求解

end

程序如下function

x=gauss(A,b)

%高斯求解方程组%x=gauss(A,b)n=length(A)a=[A,b]for

k=1:n-1

maxa=max(abs(a(k:n,k)))

if

maxa==0

return

end

for

i=k:n

if

abs(a(i,k))==maxa

y=a(i,k:n+1)a(i,k:n+1)=a(k,k:n+1)a(k,k:n+1)=y

break

end

end

for

i=k+1:n

l(i,k)=a(i,k)/a(k,k)

a(i,k+1:n+1)=a(i,k+1:n+1)-l(i,k).*a(k,k+1:n+1)

endend%回代if

a(n,n)==0

returnendx(n)=a(n,n+1)/a(n,n)for

i=n-1:-1:1

x(i)=(a(i,n+1)-sum(a(i,i+1:n).*x(i+1:n)))/a(i,i)end

调用示例如下:>>

A=[2,-1,34,2,51,2,0]

>>

b=[147]

>>

x=gauss(A,b)x

=

9

-1

-6


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7737669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存