Tag Info

New answers tagged

0

I had a chance to experiment with large matrices (up to 1000 x 1000 and beyond). The main problem might be coming from a completely different angle. From my experience, you absolutely must use high precision arithmetic (by using SetPrecision with some fairly large number) in order to obtain meaningful results, especially for the extreme values of eigenvalues ...


0

The function sortify[] given in this question: Should eigenvalues be ordered? Tells you how to sort the eigenvalues AND eigenvectors in the canonical order for real numbers.


5

Dense blocks One can split matrices by blocks and use these blocks as a dense matrices blockSize = 100; m1[a_] m2[b_] ^:= a.b; part = Developer`PartitionMap[If[Length@#@"NonzeroValues" > 0, m1@Normal@#, 0] &, a, {blockSize, blockSize}]; a2.u_ ^:= Flatten[Developer`ToPackedArray[ part.Developer`PartitionMap[m2, u, blockSize]], 1] I have ...


5

The basic reason is that once you convert a tensor expression into a SparseArray, you've "given control" of all levels of that expression to SparseArray to manage on your behalf in an efficient way (the number of levels is the rank of the tensor, to mix jargon). SparseArray will then try to maintain the illusion that those levels are still really there. ...


3

One can decrease the difficulty of the problem by reducing the Dyson series to a matrix ODE. Let's start from the definition $$ U(x,x_0) = 1 + \int_{x_0}^{x}{dy_1V(y_1)}+\int_{x_0}^x{dy_1\int_{x_0}^{y_1}{dy_2V(y_1)V(y_2)}}+\ldots $$ and take the derivative with respect to $x$ $$ \frac{\partial}{\partial x}U(x,x_0) = ...


6

You can use ParallelTable and generate the SparseArray form the table. f[i_, j_] := i + j; imax = 50; AbsoluteTiming[ M = SparseArray[{}, {imax, imax}]; SetSharedVariable[M]; ParallelDo[If[j < i, M[[i, j]] = f[i, j]], {i, 1, imax}, {j, 1, imax}] ] (*{8.259472, Null}*) AbsoluteTiming[ M2 = SparseArray[Flatten[ParallelTable[{{i, j} -> f[i, j]}, {i, ...



Top 50 recent answers are included