我有一个线性方程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]
我如何获得的解决方案
x2=3/4 x1x3=x1x4=x1
添加更多条件
x1+x2+x3+x4=1
。如何找到x1=4/15...
的解决方案
我想用MATLAB来解决以上两个问题?你能给我推荐MATLAB代码吗?感谢
这是一个典型的最小二乘问题。如果你认为b
是I*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)])