首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scipy fsolve不接受imginary值

Scipy fsolve不接受imginary值
EN

Stack Overflow用户
提问于 2019-11-26 16:35:19
回答 1查看 24关注 0票数 0

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

代码语言:javascript
复制
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是期望值。

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 16:49:43

事实上,fsolve只适用于实值函数。您可能希望将实部和虚部分开,并解决两倍大小的系统。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59046742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档