Matrix inverse for non-square matrix
Show older comments
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 Comments
David Goodmanson
on 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
on 13 Apr 2019
Edited: David Wilson
on 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
on 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
on 15 Apr 2019
Edited: John Chesser
on 15 Apr 2019
Answers (0)
Categories
Find more on Linear Algebra in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!