高斯消元法——matlab实现

目录

基本原理

实验部分

主要代码

部分代码解析

运行结果

个人心得


基本原理

 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实现_第1张图片


个人心得

        MATLAB是一种强大的数值计算和科学计算软件,提供了丰富的矩阵运算功能。在日常的矩阵运算中可以直接对矩阵的行,列,乃至矩阵整体进行操作,比其他语言减少了循环这一操作。因此,在MATLAB使用时,尽量避免使用显式的循环,如果需要对单一元素操作时,使用向量化的操作,例如使用点运算符来执行元素级运算。

你可能感兴趣的:(笔记,matlab,开发语言)