Get eigenvalues of symbolic matrix
12 views (last 30 days)
Show older comments
Yanghui Kang
on 6 Mar 2012
Commented: Walter Roberson
on 15 Jun 2022
I want to get the symbolic eigenvalues from a 8x8 symbolic matrix. But after I used the eig(A) function, Matlab ran for a while and returned a very very very long expression begin with "RootOf{..." which I believed meant no solution. Here is the code.
syms t1 t2 t11 t22 t3 t33 t4 t44;
syms H;
syms kx ky;
a=1.05*pi/180;
v=0.3;
w=0.11;
d=4*pi/(3*2.46);
H=[-v/2 t1 w w w*exp(-i*2*pi/3) w w*exp(i*2*pi/3) w;t11 -v/2 w w w*exp(i*2*pi/3) w*exp(-i*2*pi/3) w*exp(-i*2*pi/3) w*exp(i*2*pi/3);w w v/2 t2 0 0 0 0;w w t22 v/2 0 0 0 0; w*exp(i*2*pi/3) w 0 0 v/2 t3 0 0; w*exp(-i*2*pi/3) w*exp(i*2*pi/3) 0 0 t33 v/2 0 0; w*exp(-i*2*pi/3) w 0 0 0 0 v/2 t4; w*exp(i*2*pi/3) w*exp(-i*2*pi/3) 0 0 0 0 t44 v/2 ];
dd=eig(H);
Can anyone give me a hint the way to calculate the symbolic eigenvalues of the matrix "H"? And how long will it take? My ultimate goal is to plot the 8 eigenvalues in the range of kx=[-1:0.1:1] and ky=[-1:0.1:]. Thanks very much.
0 Comments
Accepted Answer
Walter Roberson
on 6 Mar 2012
The RootOf() was probably a valid part of the solution. MuPAD sometimes expresses even square-roots as RootOf()
Maple took approximately 1 second to find the eigenvalue formula. The eigenvalues are the roots of an 8th order polynomial in your t* variables.
Internal note: in Maple format, the matrix is
eval(`<,>`(`<|>`(-(1/2)*v, t1, w, w, w*exp(-2*i*pi*(1/3)), w, w*exp(2*i*pi*(1/3)), w), `<|>`(t11, -(1/2)*v, w, w, w*exp(2*i*pi*(1/3)), w*exp(-2*i*pi*(1/3)), w*exp(-2*i*pi*(1/3)), w*exp(2*i*pi*(1/3))), `<|>`(w, w, (1/2)*v, t2, 0, 0, 0, 0), `<|>`(w, w, t22, (1/2)*v, 0, 0, 0, 0), `<|>`(w*exp(2*i*pi*(1/3)), w, 0, 0, (1/2)*v, t3, 0, 0), `<|>`(w*exp(-2*i*pi*(1/3)), w*exp(2*i*pi*(1/3)), 0, 0, t33, (1/2)*v, 0, 0), `<|>`(w*exp(-2*i*pi*(1/3)), w, 0, 0, 0, 0, (1/2)*v, t4), `<|>`(w*exp(2*i*pi*(1/3)), w*exp(-2*i*pi*(1/3)), 0, 0, 0, 0, t44, (1/2)*v)), [i = I, pi = Pi, a = (1/180)*(105/100)*Pi, v = 3/10, w = 11/100, d = 4*Pi/(3*246/100)])
======
Using your full equations as per email:
Working here because it is not possible to format comments:
Maple:
vars := [a = (1/180)*(105*(1/100))*Pi, v = 3/10, w = 11/100, d = 4*Pi/(3*(246*(1/100))), t1 = 3*(d*cos((1/2)*a)+kx-I*(d*sin((1/2)*a)+ky)), t11 = 3*(d*cos((1/2)*a)+kx+I*(d*sin((1/2)*a)+ky)), t2 = 3*(d*cos((1/2)*a)+kx-I*(d*sin(-(1/2)*a)+ky)), t22 = 3*(d*cos((1/2)*a)+kx+I*(d*sin(-(1/2)*a)+ky)), t3 = 3*(d*cos(2*Pi*(1/3)-(1/2)*a)+kx-I*(d*sin(2*Pi*(1/3)-(1/2)*a)+ky)), t33 = 3*(d*cos(2*Pi*(1/3)-(1/2)*a)+kx+I*(d*sin(2*Pi*(1/3)-(1/2)*a)+ky)), t4 = 3*(d*cos(4*Pi*(1/3)-(1/2)*a)+kx-I*(d*sin(4*Pi*(1/3)-(1/2)*a)+ky)), t44 = 3*(d*cos(4*Pi*(1/3)-(1/2)*a)+kx+I*(d*sin(4*Pi*(1/3)-(1/2)*a)+ky)), we3 = w*exp(-(1/3)*(I*2)*Pi)]; H := `<,>`(`<|>`(-(1/2)*v, t1, w, w, we3, w, we3, w), `<|>`(t11, -(1/2)*v, w, w, we3, we3, we3, we3), `<|>`(w, w, (1/2)*v, t2, 0, 0, 0, 0), `<|>`(w, w, t22, (1/2)*v, 0, 0, 0, 0), `<|>`(we3, w, 0, 0, (1/2)*v, t3, 0, 0), `<|>`(we3, we3, 0, 0, t33, (1/2)*v, 0, 0), `<|>`(we3, w, 0, 0, 0, 0, (1/2)*v, t4), `<|>`(we3, we3, 0, 0, 0, 0, t44, (1/2)*v));
HH := eval(eval(H,vars),vars);
dd := LinearAlgebra[Eigenvalues](HH);
I am waiting for the results at the moment.
6 Comments
Walter Roberson
on 7 Mar 2012
No problem. Writing up the bug report took longer than the plot computation did.
I might be able to play with it a bit more at home.
More Answers (1)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!