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

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值