我怎样才能解线性方程xA=x,其中A是非平方的



我有一个线性方程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 x1x3=x1x4=x1

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

我想用MATLAB来解决以上两个问题?你能给我推荐MATLAB代码吗?感谢

这是一个典型的最小二乘问题。如果你认为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]
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)])

相关内容

最新更新