首页 > 解决方案 > Scipy fsolve 不接受虚构值

问题描述

我目前正在尝试为自旋系统的海森堡运动方程数值求解非线性微分方程组。我目前正在使用 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 是期望值。

标签: pythonscipynumeric

解决方案


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


推荐阅读