目录
基本原理
1. 构造增广矩阵:将线性方程组的系数矩阵和常数向量合并成一个增广矩阵。
2. 选取主元:从第一列开始,找到当前列中绝对值最大的元素,将其作为主元素。
3. 行交换:交换包含主元素的行与当前处理的行,确保主元素在当前处理行的位置上。
4. 主元归一化:将主元所在的行除以主元素的值,使主元素变为1。
5. 消元操作:使用主元所在行的倍数,将当前处理行下方的其他行的主元素所在列的元素消为零。
6. 重复步骤2-5:从第二列开始,依次处理每一列,直到所有的列都处理完毕。
7. 解的表示:将未知变量的值组合成一个向量,即为线性方程组的解。
高斯消元法的目标是将线性方程组转化为上三角形式或行阶梯形式,从而方便求解。通过消元和主元归一化的操作,可以将线性方程组的解求得。注意:高斯消元法可能会遇到主元为零的情况或存在多解的情况。在实际应用中,需要考虑这些特殊情况并进行相应的处理。
实验部分
主要代码
clc,clear,close all;
A=[1 -1 3 -3;-1 0 -2 1;2 2 4 0];
[m, n] = size(A);
for i = 1:min(m,n)
% 找到列i中第i行及以下的绝对值最大的元素,作为主元素
[~, index] = max(abs(A(i:m, i)));
index = index + i - 1;
% 交换第i行和index行
A([i, index], :) = A([index, i], :);
% 将第i行的主元素缩放为1
A(i, :) = A(i, :) / A(i, i);
% 使用消元法将第i列的其他元素消为0
for j = 1:m
if j ~= i
A(j, :) = A(j, :) - A(j, i) * A(i, :);
end
end
end
disp('最简矩阵A:');
disp(A);
disp('x的解向量为:');
x=A(:,n);
disp(x);
部分代码解析
[~, index]
表示忽略第一个返回值,将第二个返回值存储在变量index
中。max(abs(A(i:m, i)))
会找到A
的第i列中从第i行到第m行之间的元素的绝对值的最大值,并返回该最大值以及其索引。然而,由于我们只对最大值的索引感兴趣,所以使用~
来忽略最大值,将索引存储在变量index
中。A([i, index], :)
表示选取矩阵A的第i行和第index行,A([index, i], :)
表示选取矩阵A的第index行和第i行。给矩阵A的第i行和第index行赋值矩阵A的第index行和第i行,即可交换第i行和第index行。
运行结果
个人心得
MATLAB是一种强大的数值计算和科学计算软件,提供了丰富的矩阵运算功能。在日常的矩阵运算中可以直接对矩阵的行,列,乃至矩阵整体进行操作,比其他语言减少了循环这一操作。因此,在MATLAB使用时,尽量避免使用显式的循环,如果需要对单一元素操作时,使用向量化的操作,例如使用点运算符来执行元素级运算。