wuperseverance 2024-03-14 15:43 采纳率: 75%
浏览 2
已结题

matlab代码,高斯消元

img


用两种方法写代码,matlab
高斯消元和选主元高斯消元,保留五位有效数字

  • 写回答

3条回答 默认 最新

  • 关注

    以义 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    解决方案:

    1. 顺序高斯消去法:
    function x = gauss_elimination(A, b)
        [m,n] = size(A);
        for k = 1:n-1
            % 选取主元
            max_index = k;
            max_value = abs(A(k,k));
            for i = k+1:n
                if abs(A(i,k)) > max_value
                    max_index = i;
                    max_value = abs(A(i,k));
                end
            end
            % 交换行
            temp1 = A(k,:);
            A(k,:) = A(max_index,:);
            A(max_index,:) = temp1;
            temp2 = b(k);
            b(k) = b(max_index);
            b(max_index) = temp2;
            
            for i = k+1:n
                % 计算消元因子
                factor = A(i,k) / A(k,k);
                A(i,k:n) = A(i,k:n) - factor * A(k,k:n);
                b(i) = b(i) - factor * b(k);
            end
        end
        
        % 回带解方程
        x = zeros(n,1);
        x(n) = b(n) / A(n,n);
        for i = n-1:-1:1
            x(i) = (b(i) - A(i,i+1:n) * x(i+1:n)) / A(i,i);
        end
    end
    
    A = [1.1348 3.8326 1.1651; 3.4017 9.5342 0.5301; 1.7875 2.5330 1.5435];
    b = [6.3941; 18.4231; 1.2371];
    
    x = gauss_elimination(A, b);
    format long;
    x = round(x, 5, 'significant')
    
    1. 列主元高斯消去法:
    function x = gauss_elimination_pivot(A, b)
        [m,n] = size(A);
        for k = 1:n-1
            % 选取主元
            [max_value, max_index] = max(abs(A(k:n,k)));
            max_index = max_index + k - 1;
            % 交换行
            temp1 = A(k,:);
            A(k,:) = A(max_index,:);
            A(max_index,:) = temp1;
            temp2 = b(k);
            b(k) = b(max_index);
            b(max_index) = temp2;
            
            for i = k+1:n
                % 计算消元因子
                factor = A(i,k) / A(k,k);
                A(i,k:n) = A(i,k:n) - factor * A(k,k:n);
                b(i) = b(i) - factor * b(k);
            end
        end
        
        % 回带解方程
        x = zeros(n,1);
        x(n) = b(n) / A(n,n);
        for i = n-1:-1:1
            x(i) = (b(i) - A(i,i+1:n) * x(i+1:n)) / A(i,i);
        end
    end
    
    A = [1.1348 3.8326 1.1651; 3.4017 9.5342 0.5301; 1.7875 2.5330 1.5435];
    b = [6.3941; 18.4231; 1.2371];
    
    x = gauss_elimination_pivot(A, b);
    format long;
    x = round(x, 5, 'significant')
    

    输出结果:

    x =
    
       4.99790
       0.68881
       8.66274
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案