一、Gauss消去法与列主元素消去法的联系与区别

Gauss消去法有以下两个主要缺陷:

1)如果某个主元akk=0,则消元无法进行;

2)在akk=0,但相对很小,当其作为除数时,会导致其他元素数量级的增长,容易造成严重的舍入误差。

而主元素消去法则是对Gauss消去法存在的两个主要问题的一种解决方法。

联系:主元素消去法本质上还是Gauss消去法,前者克服了后者存在的主要缺陷;两种方法都只适合于低维的计算。

区别:主元素消去法的鲁棒性更强,但计算量比Gauss相对来说要多出排序这一部分。

主元素消去法使用地比较多的是列主元素消去法,与Gauss消去法的主要区别是在进行第k次更新时,首先需要对第k列的第k行以及该列后续元素进行排序,并交换得到最大元素的行。由于消元过程与Gauss过程基本相同,回代过程完全一样,因此不再赘述,详细过程请参考《 Gauss消元法的Matlab实现 》

二、算法描述

1)消去过程

对k = 1,2,...,n-1,有:

(1)按列选主元,即:

(2)若,则停止计算(此时det(A)=0)

(3)若ik = k,则转向(4),否则换行,即:

(4)消元计算

i = k+1, k+2, ..., n,

lik = aik/akk, (|lik |≤1),

j = k+1, k+2, ..., n,

aij←aij - likakj,

bi←likbk

2)回代过程

1)若ann = 0,则停止计算,det(A) = 0,否则

bn←bn/ann

2)对i = n-1, n-2, ..., 1,

三、列主元素消去法的Matlab实现

实现代码如下:

主函数:

function [r_matrix,time_] = MainElementElimination(Coefficient_matrix,Load_matrix)
%  主元素消去法的matlab实现
%  2017-11-05 by xh_scu
%  inputs:
%         A_matrix:系数矩阵,维度为n*n
%         B_matrix:载荷矩阵,维度为n*1
%  outputs:
%         result:未知量矩阵,维度n*1
% 计时开始
t1 = clock;
% 判断输入矩阵维度是否满足要求
[row_coeff,col_coeff] = size(Coefficient_matrix);
[row_load,~] = size(Load_matrix');
% 初始化r_matrix矩阵
r_matrix = zeros(row_load,1);
% 判断输入的维度是否满足要求
if (row_coeff ~= col_coeff) || (row_coeff ~= row_load) % if-1% 不满足则输出错误提示print('输入错误!');
else% 满足则进行下一步运算for k = 1:row_coeff-1 % for-1% 检查主对角元素第i行的第i个元素是否为0if Coefficient_matrix(k,k) == 0 % if-2print('主对角元素错误!');break;else% 找到第k列从第k行开始的最大元素% 获取第k列col_k = Coefficient_matrix(:,k);max_index = find_max(col_k,row_coeff,k); % 注:此处需要调用函数max_find()%如果最大值索引不是k,则交换第k行与max_index行if max_index ~= k % if-3for i_change = k:col_coeff % for-2temp = Coefficient_matrix(max_index,i_change);Coefficient_matrix(max_index,i_change) = Coefficient_matrix(k,i_change);Coefficient_matrix(k,i_change) = temp;end % for-2% 交换负荷矩阵temp_k = Load_matrix(k);Load_matrix(k) = Load_matrix(max_index);Load_matrix(max_index) = temp_k;end % if-3% 循环计算第k+1行到最后一行for i = k+1:row_coeff % for-3L_ik = Coefficient_matrix(i,k) / Coefficient_matrix(k,k); %更新L_ik% 更新每一行从第i个元素开始后的所有元素for j = k+1:col_coeff % for-4Coefficient_matrix(i,j) = Coefficient_matrix(i,j) - ...L_ik*Coefficient_matrix(k,j); % 更新a(i,j)end % for-4Load_matrix(i) = Load_matrix(i) - Load_matrix(k)*L_ik; % 更新b(i)Coefficient_matrix(i,1) = 0; end % for-3end % if-2end % for-1% 回代过程r_matrix(row_coeff) = Load_matrix(row_coeff)/Coefficient_matrix(row_coeff,col_coeff);for k = row_coeff-1:-1:1 % for-5sum_temp = 0;for j = k+1:col_coeff % for-6sum_temp = sum_temp + Coefficient_matrix(k,j)*r_matrix(j);end % for-6r_matrix(k) = (Load_matrix(k) - sum_temp)/Coefficient_matrix(k,k);end % for-6
end % if-1
% 计时结束
t2 = clock;
time_ = etime(t2,t1);
end % 函数结束

子函数:

%%  寻找第k列从第k行开始的最大元素
function  [max_index] = find_max(input_k,row_,k)
%  inputs:
%         input_k:第k列的所有元素
%         row_   :矩阵的总行数
%         k      :第k列序号
%  outputs:
%         max_index:第k列从第k行以后最大元素的行下标% 初始化参数
max_index = k;
max_val = input_k(k);
for i = k:row_   % for-1if max_val < input_k(i)  % if-1max_val = input_k(i);max_index = i;end % if-1
end % for-1
end

四、测试与分析

设有如下方程组:

则矩阵A与B分别为:

调用代码:

a = [1,1,-5,1;1,-3,0,-6;0,2,-1,2;1,4,-7,6];
b = [8,9,-5,0];
[result,time] = MainElementElimination(a,b);

计算结果为:

与准确结果[-9,-10/3,-13/3,-3/4]'相等(存在计算舍入误差)。

有兴趣的小伙伴还可以测试一下代码的计算效率,从理论上来讲,主元素消去法比Gauss消去法计算量更大,计算时间更长。这里就不再做进一步分析了。

列主元素消去法的Matlab实现相关推荐

  1. 数值线性代数之列主元Gauss消去法(MATLAB)

    1. 这是啥? 在使用Gauss变换的过程中,如果矩阵对角线的元素太小,会干扰计算结果,所以我们尽量把每列较大的元素通过行变换挪到对角线上. 2. 第二个红框只是普通的Guass变换,第一个红框就是选 ...

  2. 高斯主元素消去法c语言,列主元Gauss消去法(C++实现)

    列主元Gauss消去法(C++) 目的:编写解n阶线性方程组AX=b的列主元三角分解法的通用程序: 原理:列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响 ...

  3. matlab之列主元素高斯消去法

    技术小白的我第一次接触MATLAB这个软件,今早上课学习了高斯列主元素高斯消去法,不是很熟练,决定用matlab写一个可以完成这个算法的小程序以加深自己对这个算法的印象.借鉴了网上给的各种代码,基本大 ...

  4. 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法

    对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...

  5. 数值分析-列主元消去法

    列主元消去法 列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响,其基本思想是:在进行第 k(k=1,2,-,n-1)步消元时,从第k列的 akk及其以下的 ...

  6. matlab求解代数方程组,matlab求解代数方程组.doc

    matlab求解代数方程组.doc 1第三讲Matlab求解代数方程组理论介绍:直接法+迭代法,简单介绍相关知识和应用条件及注意事项软件求解:各种求解程序讨论如下表示含有个未知数.由个方程构成的线性方 ...

  7. 列主元高斯消元法(Python实现)

    列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响,其基本思想是:在进行第 k(k=1,2,...,n-1)步消元时,从第k列的 akk及其以下的各元素中选 ...

  8. C#,数值计算,高斯消元法与列主元消元法的源代码及数据动态可视化

    高斯消元法! 一.高斯消元法 Gaussian Elimination 高斯消元法(或译:高斯消去法),是线性代数中的一个常用算法,常用于求解线性方程组和矩阵的逆. 本程序的运行效果: 1.高斯消元法 ...

  9. 高斯列主元消元法求解线性方程组

    一.高斯消去法的基本思想     例1. 解方程组:                  解 方程组矩阵形式为: AX=b ,其中:               第一步,消元过程:对增广矩阵进行消元 即 ...

最新文章

  1. 20155303 2016-2017-2 《Java程序设计》第二周学习总结
  2. python 柱状图-python 柱状图
  3. 利用javascript onclick实现网页跳转
  4. String Primitive和String Object
  5. Windows7下UEFI开发EDK2环境搭建(VS2013+UDK2015+IASL+patch+Openssl)
  6. 下载的ContentType设置
  7. Flash遮罩之溜光字制作二
  8. 2019字节跳动实习面试
  9. 推荐3个干净、资源多的看剧网站给大家
  10. 书架html特效代码,原生JS写的一个书架式的图片缩放滚动展示特效代码
  11. a4纸尺寸是多少厘米 a4纸是多少k2022
  12. 031:vue+openlayers加载GPX数据(代码示例)
  13. wwbizsrv.exe-应用程序错误
  14. vue-amap 实现定位+跑步路程+跑步时间计算功能
  15. Learn Computer Vision-计算机视觉学习
  16. php1.6t发动机机油选择,1.6t用什么机油选择啊!?
  17. 关于 pygame中,检测按键按下
  18. 部署DNS从服务失败,nslookup访问www.linuxprobe.com失败
  19. CIMPLICITY标签导入导出功能简单介绍
  20. 正则表达式:不匹配特定的字符串

热门文章

  1. 调用HINSTANCE hInst = AfxGetInstanceHandle();程序在ASSERT(afxCurrentInstanceHandle != NULL);崩溃
  2. 世界上排名前100的英文歌详细名单及介绍
  3. 面向接口编程的个人理解
  4. 74LS139改3―8线译码器_数字译码器
  5. 2022电大国家开放大学网上形考任务-建设项目管理非免费(非答案)
  6. MySQL之DML操作
  7. python编程语言可以做游戏吗_python合不合适用来写游戏
  8. 数据分析,如何挖掘业务机会
  9. WPF 从最底层源代码了解 AllowsTransparency 性能差的原因
  10. 超可爱的文字表情大全 (ーー゛)  (--〆)zz~~~~