Skip to main content

linear algebra - What if do NOT want Mathematica to normalize eigenvectors with Eigenvectors[N[matrix]]?


ORIGINAL QUESTION


Question speaks for itself. Mathematica normalizes the eigenvectors automatically when you type Eigenvectors[N[matrix]]. What if I do NOT want the vectors to be normalized? I looked around and found that N[Eigenvectors[matrix]] would in principle do the trick. I mean, that is the form I would like to have them expressed. However, I can't do it because I get this message (which by the way I don't fully grasp):


"Incorrect number 20 of eigenvectors for eigenvalue 1/2 (-1+Sqrt[5]) with multiplicity 2."



The size of the matrix is $2^8$ by $2^8$.


EDIT


I see that there's some confusion on what I am asking. Obviously, as any (nonzero scalar) multiple of an eigenvector is equivalent to the same eigenvector, my question is not making that much sense the way it is asked. Apologies for that, I asked in a rush. I will try to put in context what I am doing so that maybe it will be more clear what my point is.


I have a $2^8$ by $2^8$ matrix, call it $H$. I want to construct the matrix $Q$ which is the linear combination of the density matrices (projectors) coming from the eigenvectors of $H$ weighted by some coefficients $c_j$. In formula, this is:


$Q=\sum_{j=0}^{2^8}c_j v_j^T v_j$


where $v_j$ are the eigenvectors of $H$ and $v^T$ denotes the transpose of $v$. I do not want to specify the $c_j$'s, they remain (possibly complex) variables. I calculate the $v$'s using Eigenvectors[N[H]] because N[Eigenvectors[H]] is both too slow and ineffective (see the error message above).


My point is that when I am doing this, I have entries which are so close to zero that I am not able to recognize which zeroes are actually zeroes and which ones are just due to the precision of my calculation (let's call these ones "numerical zeroes").


How do I know this? I tried to make things simpler and did the same calculation for a smaller matrix, $2^5$ by $2^5$. This time N[Eigenvectors[H]] works well. However, when using Eigenvectors[N[H]] and N[Eigenvectors[H]] I get two very different matrices $Q$. That is of course expected, because of the normalization in Eigenvectors[N[H]]. But what got me was the fact that the number of zero entries in $Q$ is very different in the two cases, namely, there are much more zeroes when I use N[Eigenvectors[H]]. This is of course puzzling, seeing that Mathematica supposedly maintains the same order of the eigenvectors in the two cases. I suspect that that is due to what I called the "numerical zeroes". Chopping is not helping much, because say that one of your entries is of order $10^{-5}$ because of the rescaling of the normalization, then already you will have something of order $10^{-10}$ in $v^T v$. So in principle you don't know if you're chopping something meaningful or not.
So my idea was the following: if I can tell someway Mathematica to NOT normalize the eigenvectors of my matrix, the entries of the eigenvectors won't scale down to small numbers and I could easily distinguish between exact zeroes and "numerical" zeroes and I could Chop nicely.


Also what tells me that something is wrong is that when I take the commutator $[H,Q]$ I get zero in one case and non-zero in the other one. Of course, the right result should be zero by construction.



Another motivation is of course the following: the size of the output I get for $Q$ when using N[Eigenvectors[H]] is WAY less than when I'm using Eigenvectors[N[H]], because the amount of zeroes is much more. We're talking 800 kB vs 100 MB in the $2^5$ case. So when I try to construct $Q$ in the $2^8$ case it takes forever. And seeing that in the future I will need to increase the size exponentially up to $2^{12}$ or more, I have to fix this.


Hope this made it clearer.




Comments

Popular posts from this blog

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Mathematica: 3D plot based on combined 2D graphs

I have several sigmoidal fits to 3 different datasets, with mean fit predictions plus the 95% confidence limits (not symmetrical around the mean) and the actual data. I would now like to show these different 2D plots projected in 3D as in but then using proper perspective. In the link here they give some solutions to combine the plots using isometric perspective, but I would like to use proper 3 point perspective. Any thoughts? Also any way to show the mean points per time point for each series plus or minus the standard error on the mean would be cool too, either using points+vertical bars, or using spheres plus tubes. Below are some test data and the fit function I am using. Note that I am working on a logit(proportion) scale and that the final vertical scale is Log10(percentage). (* some test data *) data = Table[Null, {i, 4}]; data[[1]] = {{1, -5.8}, {2, -5.4}, {3, -0.8}, {4, -0.2}, {5, 4.6}, {1, -6.4}, {2, -5.6}, {3, -0.7}, {4, 0.04}, {5, 1.0}, {1, -6.8}, {2, -4.7}, {3, -1.