【matlab基础知识代码】(十五)线性方程求解(三种情况)

>>  A=[1 2 3 4; 4 3 2 1; 1 3 2 4; 4 1 3 2]; B=[5 1; 4 2; 3 3; 2 4];
 x=inv(A)*B,norm(A*x-B)

x =

   -1.8000    2.4000
    1.8667   -1.2667
    3.8667   -3.2667
   -2.1333    2.7333


ans =

   7.2911e-15
>> y=inv(sym(A))*B,norm(A*y-B)
 
y =
 
[  -9/5,   12/5]
[ 28/15, -19/15]
[ 58/15, -49/15]
[-32/15,  41/15]
 
 
ans =
 
0

>> A=[1,4,0,-1,0,7,-9;2,8,-1,3,9,-13,7;0,0,2,-3,-4,12,-8;-1,-4,2,4,8,-31,37];
 B=[3; 9; 1; 4]; C=[A B]; 
rank(A), rank(C)

ans =

     3


ans =

     3

 通解与检验

>>  Z=null(sym(A)), x0=sym(pinv(A)*B), 
syms a1 a2 a3 a4; 
x=Z*[a1;a2;a3;a4]+x0, E=A*x-B
 
Z =
 
[-4, -2, -1,  3]
[ 1,  0,  0,  0]
[ 0, -1,  3, -5]
[ 0, -2,  6, -6]
[ 0,  1,  0,  0]
[ 0,  0,  1,  0]
[ 0,  0,  0,  1]
 
 
x0 =
 
 92/395
368/395
459/790
 -24/79
347/790
247/790
303/790
 
 
x =
 
3*a4 - 2*a2 - a3 - 4*a1 + 92/395
                    a1 + 368/395
      3*a3 - a2 - 5*a4 + 459/790
      6*a3 - 2*a2 - 6*a4 - 24/79
                    a2 + 347/790
                    a3 + 247/790
                    a4 + 303/790
 
 
E =
 
0
0
0
0

`pinv()` 是计算矩阵的伪逆。`pinv(A)` 会计算矩阵A的伪逆
`syms` 用来声明符号变量。在这里,`a1`、`a2`、`a3` 和 `a4` 被声明为符号变量
`Z=null(sym(A))`:这行代码计算矩阵A的零空间,将其转换为符号表示,并将其赋值给Z。零空间是指所有乘以该矩阵后得到零向量的向量集合。(求基础解系)
`x0=sym(pinv(A)*B)`:这行代码计算矩阵A的伪逆,将其乘以矩阵B,将结果转换为符号表示,并将其赋值给x0。本质上,它解决了方程Ax=B,找到了x的解。(特解)
x=Z*[a1;a2;a3;a4]+x0:这行代码为向量x定义了一个符号表达式。它将Z中的零空间向量与符号变量`[a1;a2;a3;a4]`相乘,然后加上x0的结果。所以,x是矩阵A的零空间向量和方程Ax=B的特解的线性组合。(方程通解)

基本行变换方法

>> C=[A B]; D=rref(C)

D =

     1     4     0     0     2     1    -3     4
     0     0     1     0     1    -3     5     2
     0     0     0     1     2    -6     6     1
     0     0     0     0     0     0     0     0

>> A=[4,7,1,4; 3,7,4,6]; B=[3; 4]; C=[A B]; rank(A), rank(C)

ans =

     2


ans =

     2
>> syms a1 a2 b1 b2; x1=null(sym(A))*[a1; a2]+sym(A\B), A*x1-B,
 
x1 =
 
                 3*a1 + 2*a2
8/21 - (12*a2)/7 - (13*a1)/7
                    a1 + 1/3
                          a2
 
 
ans =
 
0
0
>> a=rref(sym([A B])); x2=[a(:,3:5)*[-b1; -b2; 1]; b1; b2], A*x2-B
 
x2 =
 
          3*b1 + 2*b2 - 1
1 - (12*b2)/7 - (13*b1)/7
                       b1
                       b2
 
 
ans =
 
0
0

>>  A=[1 2 3 4; 2 2 1 1; 2 4 6 8; 4 4 2 2]; B=[1:4]'; C=[A B];rank(A), rank(C)

ans =

     2


ans =

     3
>>  x=pinv(A)*B, norm(A*x-B)


x =

    0.5466
    0.4550
    0.0443
   -0.0473


ans =

    0.4472

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值