The determinants of huge matrices in MATLAB

From the simulation problem, I want to calculate complex square matrices of the order of 1000x1000 in MATLAB. Since the values ​​refer to the values ​​of the Bessel functions, the matrices are not generally sparse.

Since I'm interested in changing the determinant for some parameter (the energy of the desired eigenfunction in my case), I currently overcome the problem by first examining the scaling factor for the range under study, and then calculating the determinants,

result(k) = det(pre_factor*Matrix{k});

Now this is a very inconvenient solution and works only for the matrix dimension, say, a maximum of 500x500.

Does anyone know a good solution to the problem? Interaction with Mathematica may work in principle, but I have doubts about feasibility. Thank you in advance

Robert

Edit: I did not find a convincing solution to the computational problem, since this would require a change to a higher accuracy. Instead, I used

ln det M = trace ln M

which when i print it relative to k

A = trace(inv(M(k))*dM/dk)

So, at least I had a change in the logarithm of the determinant in k. From the physical background of the problem, I could get restrictions on A, which eventually gave me a workaround applicable to my problem. Unfortunately, I do not know if it is possible to generalize such a workaround.

+5
source share
4 answers

, det(e^A) = e^(tr A) A ( A - I ).

EDIT: MatLab (logm) . (, , ). , : , , .

+4

, k, k ^ n, n - . , n = 1000 k = 2

>> 2^1000
ans =
     1.07150860718627e+301

, , , , , MATLAB , , realmax.

>> realmax
ans =
     1.79769313486232e+308

, , , , .

+5

, 10 -300.

, 1? , : ill-conditioned, , , . , .

, .


R ( ), , .

> n=100
> M=matrix(rnorm(n**2),n,n)
> det(M)
[1] -1.977380e+77
> kappa(M)
[1] 2318.188
+1

Matlab, Mahout. . (1000x1000 , .)

java / Mahout.

+1

All Articles