%用高斯消去法把矩阵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
高斯消去法,又称高斯消元法,实际上就是我们俗称的加减消元法。 数学上,高斯消去法或称高斯-约当消去法,由高斯和约当得名(很多人将高斯消去作为完整的高斯-约当消去的前半哪桥乱部分),它是线性代数中的一个算法,用于决定线性方程组的解,决定矩阵的秩,以及决定可逆方矩阵的逆。当用于一个矩阵时,高斯消去产生“行消去梯形形式”。 一个二元一次方程组,设法对每个等式进行变形,使两个等式中的同一个未知数的系数相等,这两个等式相减,得到一个新的等式,在这个新的等式中,系数相等的未知数就被除去了(系数为0)。 同样的也适合多元多次方程组。高斯消元是求解线性方程组的李档重要方法,在OI中有广泛的应用。本文就来讨论这个方法。 什么是线性方程组?含m个方程和n个未知量的方程组定义为 a(11)x(1)+a(12)x(2)+...+a(1n)x(n)=b(1) a(21)x(1)+a(22)x(2)+...+a(2n)x(n)=b(2) ... a(m1)x(1)+a(m2)x(2)+...+a(mn)x(n)=b(m) 这个方程组称为m*n线性方程组,其中a(ij)和b(i)为实数,括号中为下标。 这个方程组有多种消颂表示方法。例如,我们知道m*n矩阵(用大写字母表示)是一个m行n列的数阵,n维向量(用加粗的小写字母表示)是n个数的数组,也就是一个n*1矩阵(列向量。我们不考虑行向量)。另外,大家也都知道矩阵乘法。因此一个m*n线性方程组可以表示为 Ax=b,其中A是由系数aij组成的m*n矩阵即系数矩阵,x是n维的未知数向量,b是m维的结果向量。如果把向量b写到A的右边得到m*(n+1)的矩阵,得到的新矩阵称为这个方程组的增广矩阵。每一个方程组均对应于一个增广矩阵。高斯-约旦法(全选主元)宏物求逆的步骤如下:首先,对于 k 从 0 到 n - 1 作如下几步:
从第 k 行蔽做液、第 k 列开始的右下角子阵中选取绝对值最大的元素,并记住次元素所在的行号和列号,在通过行交换和列交换将它交换到主元素位置上。这一步称胡培为全选主元。
m(k, k) = 1 / m(k, k)
m(k, j) = m(k, j) * m(k, k),j = 0, 1, ..., n-1;j != k
m(i, j) = m(i, j) - m(i, k) * m(
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)