在编写程序寻找方程的解时,我得到以下类型的错误:“exp”对象不可调用。我不明白我的错误是什么。。。在
代码如下:
from scipy import *
from numpy.linalg import *
from sympy import *
import sys
import numpy
import cmath
import math
from scipy import optimize
from sympy.solvers import solve
file=open('solve1.txt','w')
print 'Start'
y=Symbol('y')
equat1=exp(-1.0j*(36.96*y**0.5+1.367*(-1.25*y+2.33)**0.5+30.996*(1.25*y-0.675)**0.5))
Solution1 = optimize.brenth(equat1, 0.11, 0.14)
print 'Solution first:'
print Solution1
file.write(str(Solution1))
file.close()
brenth的第一个参数必须是可调用的(Python函数),表示目标函数。您的
equat1
是一个SymPy表达式(属于exp
类,因为它的最外层是exp
函数),这是不可调用的。在可以使用^{} 使SymPy表达式可调用:
这会执行,但会发出关于复杂值的(适当的)警告。^{value函数需要exp永远不会变成零,那么您真正期望得到什么呢?考虑一下,如果你想把实部,虚部,或者别的什么东西等于零。在
您根本不需要SymPy;直接定义callable允许
^{pr2}$这样您就可以更好地控制复杂值的处理;可能使用
cmath
,或者在NumPy中声明complex
dtype。也就是说,负数的sqrt
存在问题,因为NumPy不会自动将real转换为复杂的数据类型。下面是一个基于你的公式的工作片段:我用cmath.sqrt公司从而正确处理负数的根。在旁白:对多个模块使用
from module import *
不是一个好主意,因为导入会相互覆盖,导致混乱。在exp是numpy的函数,您必须导入它或使用numpy调用它
相关问题 更多 >
编程相关推荐