Conputation with symbolic elements

3 次查看(过去 30 天)
Hello,
I'm trying to make symbolic computation with matlab. My problem is that, since the moment there is symbol in the expression, it doesn't want to compute the rest.
To be explicit I have this kind of probleme: let suppose 'eps' symbolic variable: my output are kind of: 213263172/3216586391302232716*eps while I would like it compute 213263172/3216586391302232716 and then multiply by 'eps'.
I heard it is because he take each element as string now and not as number... ??
Thank you for any help,
Here is the code:
expup=[0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1; 1 0 0 0 0];
expdown=transpose(expup);
ket0=[1 0];
ket1=[0 1];
qx=[0 0 1 0 0];
qy=[0 0 1 0 0];
qz=[0 0 1 0 0];
point=kron(qx,qz);
syms alpha beta eps phi;
alpha=1/sqrt(2);
beta=1/sqrt(2);
phi=pi/4;
m=alpha*ket0+beta*ket1;
vec=kron(m,point).';
sigma_x=[0 1; 1 0];
sigma_y=[0 -i; i 0];
sigma_z=[1 0; 0 -1];
up_p=-i*eps*logm(expup)
down_p=i*eps*logm(expdown)
droite=expm(i*(kron(kron(sigma_x,up_p),eye(5))+kron(kron(sigma_z,eye(5)),up_p)));
gauche=expm(-i*(kron(kron(sigma_x,up_p),eye(5))+kron(kron(sigma_z,eye(5)),up_p)));
the result of up_p is:
up_p =
[ (eps*7998807863191437i)/10141204801825835211973625643008, -(eps*4814164849790005i)/4503599627370496, (eps*5950635009230501i)/9007199254740992, -(eps*5950635009230503i)/9007199254740992, (eps*4814164849790003i)/4503599627370496]
[ (eps*2407082424895001i)/2251799813685248, (eps*1663548296596613i)/5070602400912917605986812821504, -(eps*4814164849790009i)/4503599627370496, (eps*743829376153813i)/1125899906842624, -(eps*5950635009230501i)/9007199254740992]
[ -(eps*5950635009230499i)/9007199254740992, (eps*601770606223751i)/562949953421312, -(eps*6027246515204799i)/20282409603651670423947251286016, -(eps*4814164849790009i)/4503599627370496, (eps*1487658752307625i)/2251799813685248]
[ (eps*2975317504615257i)/4503599627370496, -(eps*5950635009230511i)/9007199254740992, (eps*4814164849790011i)/4503599627370496, -(eps*6827359916614769i)/40564819207303340847894502572032, -(eps*4814164849790005i)/4503599627370496]
[ -(eps*2407082424895003i)/2251799813685248, (eps*5950635009230509i)/9007199254740992, -(eps*5950635009230503i)/9007199254740992, (eps*2407082424895001i)/2251799813685248, (eps*215792426952591i)/316912650057057350374175801344]
I would like he compute number and then times epsilon.
The next step is to get 'droite' (which is 50x50 matrix) in function of 'eps'

采纳的回答

Steven Lord
Steven Lord 2021-5-17
Call double (if the result doesn't contain any symbolic variables) or vpa (if it does) on the result.
two = sym(2);
y = (sqrt(two)+1)^100
y = 
double(y)
ans = 1.8948e+38
vpa(y)
ans = 
1.894822502992738668357461598418e+38

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Calculus 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by