如何求解线性方程xA = x,其中A是非方形

时间:2015-12-11 11:46:20

标签: matlab linear-algebra

我有一个线性方程式xA = b,其中

A=[1/4   1/4   0    1/2
   1/3   1/3   1/3  0
   0     1/4   1/2  1/4
   1/2   0     1/4  1/4]

x=[x1 x2 x3 x4]

b=[x1 x2 x3 x4]

  1. 如何获得解决方案

    x2 = 3/4 x1    X3 = X1    X4 = X1

  2. 添加x1+x2+x3+x4=1的更多条件。如何找到x1=4/15...

  3. 的解决方案

    我想用MATLAB解决上述两个问题?你能告诉我MATLAB代码吗?谢谢

2 个答案:

答案 0 :(得分:4)

这是典型的最小二乘问题。如果您认为bI*b并将其移至左侧,则您有(A-I)*x=0,并且总和可以表示为x次幂必须等于1的行向量。

将它们结合起来你就得到了

>> [A-eye(4);ones(1,4)]\[zeros(4,1);1]
ans =
    0.2500
    0.2500
    0.2500
    0.2500

检查这是否是一个解决方案

>> A*ans
ans =
    0.2500
    0.2500
    0.2500
    0.2500

对于等式xA = y,您只需使用矩阵A

的转置
>> [A'-eye(4);ones(1,4)]\[zeros(4,1);1]
ans =
    0.2667
    0.2000
    0.2667
    0.2667
>> A'*ans
ans =
    0.2667
    0.2000
    0.2667
    0.2667

与您的解决方案相匹配

您还可以将另一行的未知数值强制执行。通过

x=4/15
[A'-eye(4);ones(1,4);eye(4,1)']\[zeros(4,1);1;4/15]

答案 1 :(得分:1)

clc
clear all
A      = sym('a%d%d',      [4 4], 'real');
x      = sym('x%d%d',      [4 1], 'real');
B      = sym('b%d%d',      [4 1], 'real');

rank(A)
A(4,:) = 2*A(1,:)
B(4) = 2*B(1)

%confirm rank deficiency
rank(A)


% equaion system is A*x==B
%Solve case 1:
sol1= solve(A*x==B, [x(2), x(3), x(4)])

%solve case 2:
sol2 = solve([A*x==B, x(1)+x(2)+x(3)+x(4)==1], [x(1) x(2), x(3), x(4)])