Velocity Reviews > Java > Matrix inversion algorithm examples

# Matrix inversion algorithm examples

Robert M. Gary
Guest
Posts: n/a

 02-10-2006
Does anyone have any code examples of doing a Matrix inversion that I
could look at? I'm trying to get a sense of strategies to go about it.
I understand inversions from a pure mathematical/algebra point of view
but it seems like there could be different ways of going about
implmenting it in code. I"m working on a website to do financial
portfolio modeling and a lot of the algorithms are matrix based. I
understand the graphics guys use matrices a lot too.

-Robert

Chris Smith
Guest
Posts: n/a

 02-10-2006
Robert M. Gary <(E-Mail Removed)> wrote:
> Does anyone have any code examples of doing a Matrix inversion that I
> could look at? I'm trying to get a sense of strategies to go about it.
> I understand inversions from a pure mathematical/algebra point of view
> but it seems like there could be different ways of going about
> implmenting it in code. I"m working on a website to do financial
> portfolio modeling and a lot of the algorithms are matrix based. I
> understand the graphics guys use matrices a lot too.

First of all, there are several ways to represent matrices. If your
matrices are "dense" (that is, most cells contain non-zero values), then
you just store all the values. If your matrices are "sparse" (that is,
most cells are zero... or some other known value), then you get far
better performance from a sparse matrix structure that just stores the
non-zero values. This makes huge differences in the code to perform
operations.

Beyond that, I'll let someone else respond who has the time to write a

--
www.designacourse.com
The Easiest Way To Train Anyone... Anywhere.

Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation

Chris Lamb
Guest
Posts: n/a

 02-10-2006
On 10 Feb 2006 08:52:03 -0800, Robert M. Gary wrote:

> Does anyone have any code examples of doing a Matrix inversion that I
> could look at? I'm trying to get a sense of strategies to go about it.
> I understand inversions from a pure mathematical/algebra point of view
> but it seems like there could be different ways of going about
> implmenting it in code. I"m working on a website to do financial
> portfolio modeling and a lot of the algorithms are matrix based. I
> understand the graphics guys use matrices a lot too.
>
> -Robert

An example using Gaussian Elimination:

Jama - http://math.nist.gov/javanumerics/jama/

Most times, if you are inverting a matrix, you should be inverting
something small so sparse/dense representation shouldn't matter. If
you are inverting a matrix so large that sparse representation
improves algorthm performance, you are doing the wrong thing. Almost
always if you are inverting say a 1,000x1,000 matrix you havn't
understood the problem. Also, forming the direct inverse of a large
matrix will buld up errors such that your answer is near meaningless.

HTH

Chris

Chris Uppal
Guest
Posts: n/a

 02-10-2006
Robert M. Gary wrote:

> Does anyone have any code examples of doing a Matrix inversion that I
> could look at? I'm trying to get a sense of strategies to go about it.

You could take a look at JAMA or Jampack from NIST:

http://math.nist.gov/javanumerics/jama/
ftp://math.nist.gov/pub/Jampack/Jamp...utJampack.html

They might be more "advanced" than you want, though.

-- chris

Patricia Shanahan
Guest
Posts: n/a

 02-10-2006
Chris Lamb wrote:
> On 10 Feb 2006 08:52:03 -0800, Robert M. Gary wrote:
>
>
>>Does anyone have any code examples of doing a Matrix inversion that I
>>could look at? I'm trying to get a sense of strategies to go about it.
>>I understand inversions from a pure mathematical/algebra point of view
>>but it seems like there could be different ways of going about
>>implmenting it in code. I"m working on a website to do financial
>>portfolio modeling and a lot of the algorithms are matrix based. I
>>understand the graphics guys use matrices a lot too.
>>
>>-Robert

>
>
> An example using Gaussian Elimination:
>
> Jama - http://math.nist.gov/javanumerics/jama/
>
> Most times, if you are inverting a matrix, you should be inverting
> something small so sparse/dense representation shouldn't matter. If
> you are inverting a matrix so large that sparse representation
> improves algorthm performance, you are doing the wrong thing. Almost
> always if you are inverting say a 1,000x1,000 matrix you havn't
> understood the problem. Also, forming the direct inverse of a large
> matrix will buld up errors such that your answer is near meaningless.
>
> HTH
>
> Chris

Are you saying that you should never solve large systems of linear
equations, or just that it is a mistake to do it by directly inverting
the matrix rather than e.g. by LU factorization?

Patricia

Chris Lamb
Guest
Posts: n/a

 02-10-2006
On Fri, 10 Feb 2006 20:50:02 GMT, Patricia Shanahan wrote:

> Chris Lamb wrote:
>> On 10 Feb 2006 08:52:03 -0800, Robert M. Gary wrote:
>>
>>
>>>Does anyone have any code examples of doing a Matrix inversion that I
>>>could look at? I'm trying to get a sense of strategies to go about it.
>>>I understand inversions from a pure mathematical/algebra point of view
>>>but it seems like there could be different ways of going about
>>>implmenting it in code. I"m working on a website to do financial
>>>portfolio modeling and a lot of the algorithms are matrix based. I
>>>understand the graphics guys use matrices a lot too.
>>>
>>>-Robert

>>
>>
>> An example using Gaussian Elimination:
>>
>> Jama - http://math.nist.gov/javanumerics/jama/
>>
>> Most times, if you are inverting a matrix, you should be inverting
>> something small so sparse/dense representation shouldn't matter. If
>> you are inverting a matrix so large that sparse representation
>> improves algorthm performance, you are doing the wrong thing. Almost
>> always if you are inverting say a 1,000x1,000 matrix you havn't
>> understood the problem. Also, forming the direct inverse of a large
>> matrix will buld up errors such that your answer is near meaningless.
>>
>> HTH
>>
>> Chris

>
> Are you saying that you should never solve large systems of linear
> equations, or just that it is a mistake to do it by directly inverting
> the matrix rather than e.g. by LU factorization?

I hope we do need to solve large systems of equations. After all, my PhD
was entirely based on that! Your second statement is right, but I prefer
(well, they perform best in my field) Conjugate Gradients and related
methods.
Yes, it is almost invariably a mistake to do it by direct inversion.

Chris

Roedy Green
Guest
Posts: n/a

 02-10-2006
On 10 Feb 2006 08:52:03 -0800, "Robert M. Gary" <(E-Mail Removed)>
wrote, quoted or indirectly quoted someone who said :

>Matrix inversion

nearly always you just grab a matrix inversion routine from a package.
Anything you write will almost inevitably be slower or blow up more
often. It takes quite a bit of cleverness to avoid error propagation.
--
http://mindprod.com Java custom programming, consulting and coaching.

Robert M. Gary
Guest
Posts: n/a

 02-10-2006
I may end up just using a package, however I would like to also see an
algorithm just to understand how its working.

-Robert

Robert M. Gary
Guest
Posts: n/a

 02-10-2006
> your matrices are "dense" (that is, most cells contain non-zero values), then you just store all the values.

Sorry, mine are dense. Mostly they are matrices of asset price
variance.

-Robert

Jos A. Horsmeier
Guest
Posts: n/a

 02-10-2006
"Robert M. Gary" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) ups.com...
> Does anyone have any code examples of doing a Matrix inversion that I
> could look at? I'm trying to get a sense of strategies to go about it.
> I understand inversions from a pure mathematical/algebra point of view
> but it seems like there could be different ways of going about
> implmenting it in code. I"m working on a website to do financial
> portfolio modeling and a lot of the algorithms are matrix based. I
> understand the graphics guys use matrices a lot too.

Never explicitly inverse a matrix; both for performance and numerical
stability reasons. You only need the inverse of a matrix conceptually,
i.e. Ax = b --> x = A^-1 b. For such purposes google for 'LUP decomposition'
of a matrix. It's faster and introduces far less numerical instability.

kind regards,

Jos