pinv returned wrong solution

5 visualizaciones (últimos 30 días)
junqi yang
junqi yang el 6 de Mayo de 2017
Comentada: John D'Errico el 9 de Mayo de 2017
I am trying to solve a equation:
a = Ae
Where a is a is 4 by 5 matrix , A is a 4 by 4 matrix and e is another 4 by 5 matrix
So I transfer the equation into
A = a * pinv(e)
to find the A,
When I justify my result by take A back to my equation with e, I got a completely different a
Here is what I did:
if true
a = x(1:5,:);
a(:,4) =1;
a
a = transpose(ref_p)
e = [0,0,0,1; 1,0,0,1; 0,1,0,1; 0,0,1,1; 1.17,-0.09, 4.2,1; ]
e = transpose(cano)
A = ref_p * pinv(cano)
cc = A * e
end
  2 comentarios
Wilson A N
Wilson A N el 9 de Mayo de 2017
Can you please share the values you had used for 'ref_p', 'x' and 'cano'?
Jan
Jan el 9 de Mayo de 2017
Please post the input values in a form, which can be used by the readers. Defining e explicitely and overwriting it in the next line looks at least confusing. You have defined a also and overwrite it later.

Iniciar sesión para comentar.

Respuestas (1)

John D'Errico
John D'Errico el 9 de Mayo de 2017
It is not that pinv returns the "wrong" solution, but in your understanding of the problem.
I don't have enough of your variables to reconstruct your problem. What is x, what is ref_p, what is cano? Regardless, e is non-square, and 4x5. You are trying to solve the problem
a = A*e
(By the way, learn to use variable names that make sense. One letter variable names, a,A,e, etc., are BAD ideas. They lead to confusing code. They lead to bugs.)
a is 4x5
A is 4x4
e is 4x5
There is no exact solution to the problem in general. So the solution will be a least squares solution, minimizing the sum of squares of errors.
Again, this is not a problem with pinv. There is no matrix A that will yield an exact solution. So the result is the best possible, over all matrices A, that minimizes the sum of the squares of the errors.
  1 comentario
John D'Errico
John D'Errico el 9 de Mayo de 2017
Let me give an example. Again, since I have no access to your variables, I'll make some up.
a = rand(4,5);
e = rand(4,5);
Apinv = a*pinv(e);
a
a =
0.029258 0.40809 0.10367 0.66646 0.63295
0.70231 0.24895 0.53556 0.84774 0.71043
0.0076356 0.65246 0.16487 0.76266 0.68866
0.61092 0.32028 0.88344 0.80701 0.32095
A*e
ans =
0.075545 0.6519 0.095332 0.52852 0.42334
0.7681 0.59546 0.52371 0.65171 0.41252
0.04162 0.83147 0.15875 0.66139 0.53476
0.64048 0.476 0.87811 0.71892 0.18707
The two are reasonably close, but not identical. Is it exact? Of course not! I said it cannot be so in general.
apinverr = norm(A*e - a)
apinverr =
0.7031
But perturb A by a wee bit, and the error will be randomly worse.
norm((A+randn(size(A))/100)*e - a)
ans =
0.70449

Iniciar sesión para comentar.

Categorías

Más información sobre Linear Algebra en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by