%用高斯消去法把矩阵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)求得的线性方程组解是一样的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)