Matrix inverse for non-square matrix
Ältere Kommentare anzeigen
I am trying to create a code that solves viscoelastic mechanical behavior problems using the collocation method. In order to do this I need to solve the following;
[A]{D}={B} where is D is the array needing to be solved. Therefore {D}=[A]^-1 {B} where A is a (j x k) matrix and B is a (k x 1) array making the resulting D a (j x 1) array. In my current code j = 11 and k = 1,400,000. I've tried the following codes but the results are not correct;
Dj = pinv(Akj).*Bk;
However, this results in a k x j matrix for D.
and;
Dj = (Akj.^(-1))*Bk;
Which does result in the correct j x 1 array for D, but I do not believe it is given the correct values.
Thank you for your time.
4 Kommentare
David Goodmanson
am 13 Apr. 2019
Hi John,
If A is (j x k) then D has to be (k x 1) and B is (j x 1). Do you mean that A is (k x j)?
David Wilson
am 13 Apr. 2019
Bearbeitet: David Wilson
am 13 Apr. 2019
If A is (j*k), however that is less likely given that A then is "short and wide".
In any case, a better computational approach is never to compute the inverse explicitly, but rather use "backslash",
D = A\B
Read the help on mldivide.
If A is sparse, you might want to take advantage of that.
Christine Tobler
am 15 Apr. 2019
I agree with David, probably the best would be to just use backslash.
Also, in your call
pinv(Akj).*Bk
the .* operator does an elementwise multiplication, not a matrix multiplication as you were probably intending.
The inv function errors for non-square matrices, so it should just not work, not give you any wrong results.
John Chesser
am 15 Apr. 2019
Bearbeitet: John Chesser
am 15 Apr. 2019
Antworten (0)
Kategorien
Mehr zu Linear Algebra finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!