python - 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 是期望值。
解决方案
实际上, fsolve 仅适用于实值函数。您可能想要分离实部和虚部并求解两倍大小的系统。
推荐阅读
- ios - "error":"Bad Request","message":"必需的 int 参数 'customerId' 不存在",
- mysql - 在 MySQL 查询中的一系列联合选择后无法创建总计行
- python - 不支持的 BMP 压缩 - BMP 到 JPEG - PIL - Python
- java - 使用replace()在java中用不同的字符串替换字符串的3个相同字符
- java - 为什么我的编译文件夹有一个名为棒包路径的子文件夹
- docker - 从图像 ufomy/deepo 导入 mxnet 时 docker 非法指令(核心转储)
- java - 为什么在包含 jar 文件并设置构建路径后,我无法在 Eclipse photon 中导入 org.apache.commons.math3?
- c# - IIS 卷影复制
- php - 具有不同方案的同一站点上的不同证书主题AltName
- reactjs - react如何改变Echart条形图中Select Bar的颜色