线性方程组的分解法——列主元消去法

  1.代码

%%列主元消去法
function ECPE = Elimination_of_column_pivot_entries(M,b)
global n;
[n,n] = size(M);
B  =[M,b];
R_A = rank(M);R_B = rank(B);
if R_A ~= R_B
    disp(‘方程无解‘);
elseif (R_A == R_B)&&(R_A == n)
    disp(‘此方程有唯一解‘);
    for k = 1:n-1
        B = Column_pivot_transformation(B,k);
        B = Elimination_method(B,k);
    end
    X = Upper_trig_iterative_solution(B);
else
    disp(‘方程有无穷多组解‘);
end
disp(‘解向量为:‘);
ECPE = X;
%%列主元变换
%%指定p列,找出列最大值,以此值为主元进行行变换
    function CPT = Column_pivot_transformation(M,p)
        [m,n] = size(M);
        s = max(M(p:m,p));
        [x,y] = find(M(p:m,p) == s);
        H = x+p-1;
        Ch1 = M(H,:);
        Ch2 = M(p,:);
        M(H,:) = Ch2;
        M(p,:) = Ch1;
        CPT = M;
    end
%%p列消元函数
    function EM = Elimination_method(M,p)
        [m,n] = size(M);Div = zeros(1,m);
        for i = p+1:m
            Div(i) = M(i,p)/M(p,p);
        end
        for j = p:n
            for i = p:m
                M(i,j) = M(i,j)-M(p,j)*Div(i);
            end
        end
        EM = M;
    end
%%上三角迭代法
    function UTIS = Upper_trig_iterative_solution(M)
        [m,n] = size(M);
        A = M(:,1:n-1);ba = M(:,n);
        x = zeros(1,m);
        x(m) =ba(m)/A(m,m);
        for i = m-1:-1:1
            sum = 0;
            for j = i+1:1:m
                sum = sum+A(i,j)*x(j);
            end
            x(i) = (ba(i)-sum)/A(i,i);
        end
        UTIS = x‘;
    end
end

  2.例子

clear all
clc
M = rand(9)
b = reshape(rand(3),9,1)

S = Elimination_of_column_pivot_entries(M,b)

M\b

  结果

M =
  列 1 至 7
    0.2089    0.3502    0.8699    0.6473    0.4046    0.1389    0.7413
    0.7093    0.6620    0.2648    0.5439    0.4484    0.6963    0.5201
    0.2362    0.4162    0.3181    0.7210    0.3658    0.0938    0.3477
    0.1194    0.8419    0.1192    0.5225    0.7635    0.5254    0.1500
    0.6073    0.8329    0.9398    0.9937    0.6279    0.5303    0.5861
    0.4501    0.2564    0.6456    0.2187    0.7720    0.8611    0.2621
    0.4587    0.6135    0.4795    0.1058    0.9329    0.4849    0.0445
    0.6619    0.5822    0.6393    0.1097    0.9727    0.3935    0.7549
    0.7703    0.5407    0.5447    0.0636    0.1920    0.6714    0.2428
  列 8 至 9
    0.4424    0.3309
    0.6878    0.4243
    0.3592    0.2703
    0.7363    0.1971
    0.3947    0.8217
    0.6834    0.4299
    0.7040    0.8878
    0.4423    0.3912
    0.0196    0.7691
b =
    0.3968
    0.8085
    0.7551
    0.3774
    0.2160
    0.7904
    0.9493
    0.3276
    0.6713
此方程有唯一解
解向量为:
S =
   19.6917
    7.6005
   17.0314
   -1.6699
   -5.7675
  -12.1059
  -19.9661
   10.5792
  -18.0751
ans =
   19.6917
    7.6005
   17.0314
   -1.6699
   -5.7675
  -12.1059
  -19.9661
   10.5792
  -18.0751

  

原文地址:https://www.cnblogs.com/guliangt/p/12119393.html

时间: 2024-08-02 02:22:01

线性方程组的分解法——列主元消去法的相关文章

线性方程组的分解法——LU分解法

1.代码 %%LU分解法 function LUDM = LU_Decomposition_method(A,b) global n;global B;global U;global L;global M; [n,n] = size(A); B = [A,b]; R_A = rank(A);R_B = rank(B); if R_A ~= R_B disp('方程无解'); elseif (R_A == R_B) && (R_A == n) disp('此方程有唯一解'); M = LU_

Guass列选主元消去法和三角分解法

最近数值计算学了Guass列主消元法和三角分解法解线性方程组,具体原理如下: 1.Guass列选主元消去法对于AX =B 1).消元过程:将(A|B)进行变换为,其中是上三角矩阵.即: k从1到n-1 a. 列选主元 选取第k列中绝对值最大元素作为主元. b. 换行 c. 归一化 d. 消元 2).回代过程:由解出. 2.三角分解法(Doolittle分解) 将A分解为如下形式 由矩阵乘法原理 a.计算U的第一行,再计算L的第一列 b.设已求出U的1至r-1行,L的1至r-1列.先计算U的第r行

经验模态分解法简析 (转)

http://blog.sina.com.cn/s/blog_55954cfb0102e9y2.html 美国工程院士黄锷博士于1998年提出的一种信号分析方法:重点是黄博士的具有创新性的经验模态分解(Empirical Mode Decomposition)即EMD法,它是一种自适应的数据处理或挖掘方法,非常适合非线性,非平稳时间序列的处理,本质上是对数据序列或信号的平稳化处理. 1:关于时间序列平稳性的一般理解: 所谓时间序列的平稳性,一般指宽平稳,即时间序列的均值和方差为与时间无关的常数,

线性方程组的迭代解法数值结果分析

纸上得来终觉浅,绝知此事要躬行. ----(宋)陆游 在使用有限差分法的五点格式求解偏微分方程组时,把问题转化为求解数量级从10直到为10^4个未知数的稀疏矩阵的线性方程组,然后使用了Jocobi迭代,G-S迭代,SOR迭代以及CG迭代求解. 不管从程序的运行时间还是结果精度来看,SOR迭代和CG迭代较另外两种迭代法占优,而数值结果显示SOR迭代和CG迭代的收敛速度基本相当(后者稍微占优一点儿),这和理论的推导结果吻合地很好. 从程序使用的内存空间考虑的话,问题变得复杂了.简言之,CG方法依旧胜

推荐系统——隐因子的矩阵分解法

在新手接触推荐系统这个领域时,遇到第一个理解起来比较困难的就是协同过滤法.那么如果这时候百度的话,得到最多的是奇异值分解法,即(SVD).SVD的作用大致是将一个矩阵分解为三个矩阵相乘的形式.如果运用在推荐系统中,首先我们将我们的训练集表示成矩阵的形式,这里我们以movielen数据集为例.这个数据集包含了用户对电影的评分.那么矩阵形式大致为:   movie1 movie2 movie3 moive4 user1 1       user2 2     3 user3   5 4   user

系统架构正交分解法

[Architecture] 系统架构正交分解法 [Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大蓝图去做分析设计.先前在InfoQ上看到一篇文章:「亿级用户下的新浪微博平台架构 - 卫向军」,在这篇文章里使用正交分解法,来分析设计新浪微博平台的系统架构. 透过正交分解法这样表格式的条列与分解,可以让开发人员清楚理解每个象限的关注点,进而去理解与

Gauss列主元消去法函数

%列主元消去法解方程组Ax=b,实现PA=LU function [x,detA] =gauss(A,b) n=length(b);[p,q]=size(A); if p~=q||p~=n      fprintf('方阵的维数不同,请重新输!'); %检错 end %为提高运行速度,给L,U,x,c,d1赋初值 L=zeros(n,n); U=zeros(n,n); x=zeros(n,1); c=zeros(1,n); d1=0; %按列选主元,并进行行交换,记录行信息 for i=1:n-

[Architecture] 系统架构正交分解法

[Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大蓝图去做分析设计.先前在InfoQ上看到一篇文章:「亿级用户下的新浪微博平台架构 - 卫向军」,在这篇文章里,使用正交分解法,来分析设计新浪微博平台的系统架构. 透过正交分解法这样表格式的条列与分解,可以让开发人员清楚理解每个象限的关注点,进而去理解与组织整个系统架构所使用到的框架技术.本篇文章介绍

线性方程组的迭代解法

简介 求解线性方程组有直接解法和迭代解法两种方法.与直接解法相比,迭代解法能够比较好地保持系数矩阵的稀疏性,在大型线性方程组的求解问题中得到了广泛应用. 比较典型的迭代算法有三种,古典迭代法.共轭梯度法和广义极小剩余(GMRES)法. 古典迭代法从系数矩阵构造(分裂)出单步迭代格式,具有算法简单的优点,但是不易收敛,速度较慢. 共轭梯度法是一种多步算法.首先利用对称正定的系数矩阵,将方程组的求解问题转换成等价的优化问题,零点解向量变成极点解向量.其次以迭代点.剩余向量和搜索方向构造迭代格式.可以