MATLAB中矩阵方程求解的实现

本文介绍了MATLAB中如何实现矩阵方程的求解,包括矩阵方程的定义、分类以及具体的M代码实现。通过三个实例展示了齐次方程和非齐次方程(包括无限解和唯一解)的求解过程。
摘要由CSDN通过智能技术生成

MATLAB中矩阵方程求解的实现

一、矩阵方程

1、定义:

 

 

2、分类

http://naotu.baidu.com/file/14d36860667d356a54490320cdab2950?token=56a299fe0e0815fe

二、M代码实现

1、M代码

  1 function d=CDBH_for_sov_JZFC(a,b)
  2 [m1,n1]=size(a);
  3 [m2,n2]=size(b);
  4 c=[a,b];
  5 ra=rank(a);             %矩阵a的秩
  6 rb=rank(b);             %矩阵b的秩
  7 rc=rank(c);             %矩阵[a,b]的秩
  8 zero=zeros(m2,n2);      %构造与b规格相同的零矩阵
  9 pj=zero~=b;             %确定b中非零元素的个数
 10 pj=sum(pj);
 11 pj=sum(abs(b));         %更新,把判据改为b中所有值的绝对值之和
 12 global i1;              %用于阶梯型的计算
 13 global i0;              %用于阶梯型的计算,其值为当前列于当前行的差值
 14 global cx;              %用于记录阶梯型的首个元素的位置
 15 i1=0;
 16 i0=0;
 17 x_fqc=[];                  %非齐次计算中,用于记录阶梯型的首个元素的位置
 18 x_qc=[];                  %在齐次计算中,用于记录阶梯型的首个元素的位置
 19 cx=[];
 20 if m1~=m2
 21     error('输入有误,无法计算');
 22     return;
 23 end
 24 switch pj
 25     %这种情况为其次方程组
 26     case 0
 27         switch rc
 28             %这种情况只有零解
 29             case n1
 30                 
 31                 d=zeros(n1,1);
 32                 %disp(d);
 33                 
 34                 %这种情况有基础解系
 35             case num2cell([0:n1-1])
 36                 %求解思路:
 37                 %一.矩阵变换
 38                 %1)化为行阶梯型
 39                 %2)化为标准型
 40                 %二.求基础解系
 41                 %1)分别取非线性向量
 42                 %2)则线性向量的值为,上述向量对应元素的相反数
 43                 %三.输出结果
 44                 
 45                 %一、矩阵变换
 46                 for i=1:m1-1;    %需要对行数-1行进行行变换
 47                     %选中了第i行
 48                     %如果都为非线性相关的向量,则阶梯的行列数相等,若存在线性相
 49                     %的向量,则需要构造一个i0来表示阶梯对应的列,并用i1表示列于
 50                     %行数的差值。
 51                     i0=i1+i;
 52                     %因为i1的值根据本行元素具体情况确定,因此需要注意,应当在这
 53                     %个for循环内完成下三角、化为1、上三角的所有操作。
 54                     %Step01 检查阶梯元素是否等于零
 55                     %       若等于零,则需要与第一个不为零的行对调,若全为零,
 56                     %       则i1+1,并再次循环。
 57                     pj_01=0;%初始化以下循环的判据
 58                     while pj_01==0 %利用判据pj_01来判断是否需要再次循环,在循环中,通过修改pj的值来跳出循环。
 59                         pj_01=1;    %没有特殊情况执行完跳出循环
 60                         i0=i+i1;
 61                         if c(i,i0)==0
 62                             %01 找到第i0列,i行及以下第一个非零元素的位置k
 63                             k=find(c([i+1:end],i0));
 64                             %k=k(1);
 65                             %02 将k行与i行对调(若k为空集,应当i1+1并再循环)
 66                             if k~=[];           %k不为空集时,将k行与i行对调
 67                                 k=k(1);
 68                                 e=
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值