繁体   English   中英

Scipy fsolve 不会接受虚数值

[英]Scipy fsolve wont accept imginary values

我目前正在尝试对自旋系统的海森堡运动方程的非线性微分方程组进行数值求解。 我目前正在使用 scipy 的 fsolve 来做到这一点,但是它一直抱怨我的方程使用的是复数。 是否可以将此函数用于复数? 下面是我的代码

import numpy as np
from scipy.optimize import fsolve

DELTA=1
OMEGA=10
GAMMA=1
J=6

def myFunction(z):
   SZ1 = z[0]
   SZ2 = z[1]
   SZ3 = z[2]
   SP1 = z[3]
   SP2 = z[4]
   SP3 = z[5]
   SM1 = z[6]
   SM2 = z[7]
   SM3 = z[8]

   F = np.empty((9))
   F[0] = -2*1j*OMEGA*(SP1-SM1)-2*1j*J*(SP1*SM2-SM1*SP2)-GAMMA*(SZ1+1)
   F[1] = -2*1j*OMEGA*(SP2-SM2)-2*1j*J*(SM1*SP2-SP1*SM2+SP2*SM3-SM2*SP3)-GAMMA*(SZ2+1)
   F[2] = -2*1j*OMEGA*(SP3-SM3)-2*1j*J*(SM2*SP3-SP2*SM3)-GAMMA*(SZ3+1)
   F[3] = -1j*OMEGA*(SZ1)+1j*DELTA*(SP1)-1j*J*(SZ1*SP2)-0.5*GAMMA*SP1
   F[4] = -1j*OMEGA*(SZ2)+1j*DELTA*(SP2)-2*1j*J*(SP1*SZ2-SZ2*SP3)-0.5*GAMMA*SP2
   F[5] = -1j*OMEGA*(SZ3)+1j*DELTA*(SP3)-1j*J*(SP2*SZ3)-0.5*GAMMA*SP3
   F[6] = 1j*OMEGA*SZ1-1j*DELTA*SM1+1j*J*(SZ1*SM2)-GAMMA*(SM1)
   F[7] = 1j*OMEGA*SZ2-1j*DELTA*SM2+2*1j*(SM1*SZ2-SZ2*SM3)-0.5*GAMMA*SM2
   F[8] = 1j*OMEGA*SZ3-1j*DELTA*SM3+1j*J*(SM2*SZ3)-0.5*GAMMA*(SM3)
   return F

zGuess = np.array([0,0,0,0,0,0,0,0,0])
z = fsolve(myFunction,zGuess)
print(z)

我预测的是稳态特性,所以方程等于 0。SZ、SM 和 SP 是期望值。

事实上, fsolve 只适用于实值函数。 您可能想要分离实部和虚部并求解两倍大小的系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM