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

Learn moreOpportunities for recent engineering grads.

Apply Today
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

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];

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

## 0 Comments