关于matlab高斯消去法,翻译下注释就可以了,在线等

关于matlab高斯消去法,翻译下注释就可以了,在线等,第1张

一楼翻译是什么东西啊?直接复制到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

昨天才回销消橘答过这个问题..你可以再搜搜的Gauss消去亏团法的分析。其包括两个过程:消去过程:把方程组系数矩阵A化为同解的上三角矩阵;回代过程:按相反的顺序,从xn至x1逐个求解上三角方程组。

%高斯消去法的MATLAB程序function

x=gauss(a,b)

%编写高斯消去法函数%a表示方程组的系数矩阵,b表示方程组的值%X表示最终的输出结果,即方程组的解n=length(b)

%计算方程组的维数%下面的程序在不断的消去,直到变成a变成上三角矩阵未知

for

k=1:n-1

for

i=k+1:n

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

for

j=k+1:n

a(i,j)=a(i,j)-a(i,k)*a(k,j)

end

b(i)=b(i)-a(i,k)*b(k)

end

end

%表示高斯消去法的回带桥敏过程x=zeros(n,1)x(n)=b(n)/a(n,n)

for

k=n-1:-1:1

s=b(k)

for

j=k+1:n

s=s-a(k,j)*x(j)

end

x(k)=s/a(k,k)end实例验证:

%调用编好的消去法函数>>

A=[1,2,32,2,3-1,-3,10]B=[0,3,2]gauss(A,B)ans

=

3.0000

-1.5517

0.0345

>>

A=[1,2,32,2,3-1,-3,10]B=[0,3,2]x=gauss(A,B)

x

=

3.0000

-1.5517

0.0345

>>

A*x

%反代求解进行比较

ans

=

0.0000

3.00002.0000

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)求得的线性方程组解是一样的。


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

原文地址: http://outofmemory.cn/yw/12325850.html

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

发表评论

登录后才能评论

评论列表(0条)

保存