Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

matlab error: matrix dimension must agree

Asked by Sat m on 10 Mar 2013

i am trying to solve linear equation by SVD. i get the error, "matrix dimension must agree" at the line x = V*((U'*B)./diag(S));

this is the code

% question (6) part (1) ...[show how to use SVD to solve linear systems of
% equation
%how SVD is used to solve systems of linear equations
% we have taken a system of linear equation 
a = 0.00:100.00;
b = 0.00:100.00;
c = 0.00:100.00;
d = 0.00:100.00;
p = 0.00:100.00;
q = 0.00:100.00;
A = [a b;c d];
B = [p;q];
prompt = 'enter a number';
a = input(prompt);
b = input(prompt);
c = input(prompt);
d = input(prompt);
p = input(prompt);
q = input(prompt);
%if A*x = B is a nxn linear system then 
%SVD of A is 
[U,S,V]=svd(A,0);
%solution of the equation A*x = B is 
x = V*((U'*B)./diag(S));% if we multiply U, S, V transpose then with some rounding error, we get A.
%so US(V(transpose))=A, so USVt.x = B, so x = (USVt)t*B (where t is the
%transpose. so x = Ut.st.(vt)T*b. now U is orthogonal matrix so, Ut = U
%inverse or U'. S is diagonal matrix so St=diag(S) and (Vt)t= V
disp(x);

please let me know how to solve this

0 Comments

Sat m

Products

1 Answer

Answer by Matt J on 10 Mar 2013
Accepted answer

Shouldn't A,B be created after the a,b,...q data are entered?

prompt = 'enter a number';
a = input(prompt);
b = input(prompt);
c = input(prompt);
d = input(prompt);
p = input(prompt);
q = input(prompt);
A = [a b;c d];
B = [p;q];

2 Comments

Matt J on 10 Mar 2013

Or, if you are doing this for a sequence of a(i)...q(i)

    a = 0.00:100.00;
    b = 0.00:100.00;
    c = 0.00:100.00;
    d = 0.00:100.00;
    p = 0.00:100.00;
    q = 0.00:100.00;
    f=@(z) reshape(z,1,1,[]);
    As=[f(a),f(b);f(c) f(d)]; 
    Bs=[f(p);f(q)];
   for i=1:length(a)
    A=As(:,:,i);
    B=Bs(:,:,i);
     etc...
   end
Sat m on 10 Mar 2013

thank you. it solved the problem. thank you

Matt J

Contact us