Solving under-determined matrix equations

I need to Solve : A1*x+B1*y=c; A2*x+B2*y=d in Matlab where A1, A2, B1 and B2 are m-by-n complex matrices with m<n and rank=m. x, y, c and d are n-by-1 vectors. Hence the system is under-determined. I have seen solution techniques for solving system of equations in the form Ax=b, but how can I apply that to my case? Please let me know..
Thanks in advance S.Paul

2 commentaires

Youssef  Khmou
Youssef Khmou le 18 Fév 2013
hi, are you sure that x,y,c and are nx1? just to make sure
Subhra
Subhra le 19 Fév 2013
You are right. c and d are m x 1. only x and y are n x 1.

Connectez-vous pour commenter.

Réponses (1)

Youssef  Khmou
Youssef Khmou le 19 Fév 2013
Modifié(e) : Youssef Khmou le 19 Fév 2013
Hi Subhra,
try to check the lengths you assigned to vectors c,d ; Under-determined system means you have more variables and less equations , in your example c and d must be mx1 vectors to get under-determined system : In this case the matrix A is not square and other techniques must be used : like
1)The Moore-Penrose pseudoinverse matrix or
2)The Least squares algorithm , TLS,..etc
Try this example :
m=4;
n=6; % m<n
A1=randn(m,n)+j*randn(m,n);
B1=randn(m,n)+j*randn(m,n);
A2=randn(m,n)+j*randn(m,n);
B2=randn(m,n)+j*randn(m,n);
rank(A1) % rank(A1)=rank(A2)=rank(B1)=rank(B2)
c=rand(m,1);
d=rand(m,1);
% Matrices concatenation to get AX=B
A=[A1 B1;A2 B2]; % size{A} is 2mx2n and rank{A} is 2m .
B=[c;d]; % size{B}is 2mx1
% Solution
% Moore-Penrose pseudoinverse of matrix since A is not square :
X=pinv(A)*B;
error=X*A-B;
% LS
X2=pinv(A'*A)*A'*B;
% Now get x and y :
%x=X(1:4); y=X(5:end);

4 commentaires

Subhra
Subhra le 19 Fév 2013
Modifié(e) : Subhra le 19 Fév 2013
Hi Youssef,
Thanks a lot for your quick reply. That was really a simple idea to convert to AX=B form! Should have got that. One point though. I think, as A is 2m x 2n and rank is 2m, its right pseudoinverse exists, not the left. i.e. A*pinv(A)=I, but pinv(A)*A is not identity matrix. SO, the solution X can be modified as X=A'*pinv(A*A'). However, I have tried this and also your solutions for X. But neither of these is working. Although they are giving very small residual A*X-B, but the final field solution is erratic. My m =31, n=63.
Youssef  Khmou
Youssef Khmou le 19 Fév 2013
Modifié(e) : Youssef Khmou le 19 Fév 2013
hi,
ok, did you try the function "linsolve" ?
X=linsolve(A,B); %
Subhra
Subhra le 19 Fév 2013
Nope. Ok I will see.
Subhra
Subhra le 19 Fév 2013
No! Its not working either. My problem is ill-conditioned.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Linear Algebra dans Centre d'aide et File Exchange

Question posée :

le 18 Fév 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by