Ask Your Question
1

Inverse of real sparse matrix

asked 2019-08-25 20:39:38 +0200

IV gravatar image

updated 2023-01-09 23:59:51 +0200

tmonteil gravatar image

Dear sagemath community,

I'm a bit surprised in the result that I obtain when I compute the inverse of a real, sparse matrix. The problem occurs in Sagemath 8.7, (on windows).

In my case the matrix is

B=matrix(RR, [[1/6, -1/24, -1/30, 1/120,1/12, 0, 0, 0, 0],
[-1/24,1/60,1/60, 1/420, -1/24, 0, 0, 0, 0],
[-1/30,1/60, 2/105, 1/140, -1/20, 0, 0, 0, 0],
[1/120, 1/420, 1/140, 13/1260, -1/40, 0, 0, 0, 0],
[1/12, -1/24, -1/20, -1/40, 1/3, -1/24, -1/30, 1/120,1/12],
[0, 0, 0, 0, -1/24,1/60,1/60, 1/420, -1/24],
[0, 0, 0, 0, -1/30,1/60, 2/105, 1/140, -1/20],
[0, 0, 0, 0, 1/120, 1/420, 1/140, 13/1260, -1/40],
[0, 0, 0, 0,1/12, -1/24, -1/20, -1/40, 1/6]],sparse=true)
(B.inverse()*B).norm(1)

The result is 138.4999999999923, which is very far from the expected value: 1. If one replaces sparse=true by sparse=false, the result becomes reasonable.The problem also does not occur when I replace RR by QQ.

I suspect that this will not happen in all versions of Sagemath, since I stumbled upon this strange behaviour when I was executing a code that used to work fine years ago. Sadly I do not recall which version I used to have back then. I wanted to ask: what is currently the right way to compute the inverse of a sparse real matrix?

cheers,

IV

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
0

answered 2019-08-25 23:04:19 +0200

tmonteil gravatar image

updated 2019-08-26 00:12:53 +0200

We have to inspect further for the reasons of that behaviour. It might "only" be the naiveness of the algorithm, since the matrix B is ill-conditionned: its inverse has a huge norm.

I bet there is something wrong in the formulas, since when i do the computation on certified fields such as RBF and RIF, the correct answer does not belong to the possible values provided by Sage.

Meanwhile, you can always turn your matrix into a dense one by doing:

sage: B.dense_matrix()

Thanks for reporting anyway.

EDIT The culprit seems to be trac ticket 24122 if you revert it, you get something close to 1 again.

This bug is tracked at trac ticket 28402

edit flag offensive delete link more

Comments

Can't reproduce:

sage: sage.version.version
'8.9.beta7'
sage: B=matrix(RR, [[1/6, -1/24, -1/30, 1/120,1/12, 0, 0, 0, 0], [-1/24,1/60,1/60
....: , 1/420, -1/24, 0, 0, 0, 0], [-1/30,1/60, 2/105, 1/140, -1/20, 0, 0, 0, 0],
....:  [1/120, 1/420, 1/140, 13/1260, -1/40, 0, 0, 0, 0], [1/12, -1/24, -1/20, -1
....: /40, 1/3, -1/24, -1/30, 1/120,1/12], [0, 0, 0, 0, -1/24,1/60,1/60, 1/420, -
....: 1/24], [0, 0, 0, 0, -1/30,1/60, 2/105, 1/140, -1/20], [0, 0, 0, 0, 1/120, 1
....: /420, 1/140, 13/1260, -1/40], [0, 0, 0, 0,1/12, -1/24, -1/20, -1/40, 1/6]],
....: sparse=true)
sage: (B.inverse()*B ...
(more)
Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 2019-08-26 08:41:33 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2019-08-25 20:39:38 +0200

Seen: 301 times

Last updated: Aug 26 '19