如何传递用于scipy的sympy表达式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何传递用于scipy的sympy表达式?相关的知识,希望对你有一定的参考价值。
我想使用scipy.optimize
中的root求解由循环创建的非线性方程组。我想用一种方法创建方程,然后用另一种方法求解。我用sympy创建了等式,并想用scipy求解。我的真实代码有太多循环,每次scipy中的root都会迭代这些循环。
这是我尝试过的非常简化的版本。我用sympy符号制作了方程,然后用lambdify
从sympy中取出了方程,但求解器向我发送了一个错误。
from scipy.optimize import root
from sympy import Symbol, lambdify
y = [Symbol('x%d' % i) for i in range(2)]
def ecuacion():
global c,cakeo,mellado
c = []
cakeo = y[0] +1 + y[1]
c.append(cakeo)
mellado = y[1] + 4 + -y[0]
c.append(mellado)
print(c)
return c
ecuacion()
f = lambdify(y, c, 'numpy')
def solver():
Guess = [1,-1]
sol = root(f, Guess,method='hybr', jac=False) # Entrega el resultado
print(sol.x)
return sol
solver()
它向我发送此错误TypeError:root()得到了意外的关键字参数'jac'。如果删除jac,它将向此sme发送此TypeError:不支持的操作数/的类型:'int'和'list'
这些是与江淮的回溯
文件“”,第1行,在runfile('C:/Users/gian_/Documents/Irri-trickle/speed/i.py',wdir ='C:/ Users / gian_ / Documents / Irri-trickle / speed')
文件“ C: Users gian_ Anaconda3 lib site-packages spyder_kernels customize spydercustomize.py”,行文件中的第827行execfile(文件名,命名空间)
文件“ C: Users gian_ Anaconda3 lib site-packages spyder_kernels customize spydercustomize.py”,行110,在execfile中exec(compile(f.read(),文件名,'exec'),命名空间)
文件“ C:/Users/gian_/Documents/Irri-trickle/speed/i.py”,第54行,Solver()
文件“ C:/Users/gian_/Documents/Irri-trickle/speed/i.py”,行49sol = root(f,Guess,method ='krylov')#Entrega el resultado
TypeError:root()得到了意外的关键字参数'jac'
文件“”,第1行,在runfile('C:/Users/gian_/Documents/Irri-trickle/speed/i.py',wdir ='C:/ Users / gian_ / Documents / Irri-trickle / speed')
文件“ C: Users gian_ Anaconda3 lib site-packages spyder_kernels customize spydercustomize.py”,行文件中的第827行execfile(文件名,命名空间)
文件“ C: Users gian_ Anaconda3 lib site-packages spyder_kernels customize spydercustomize.py”,行110,在execfile中exec(compile(f.read(),文件名,'exec'),命名空间)
文件“ C:/Users/gian_/Documents/Irri-trickle/speed/i.py”,第54行,Solver()
文件“ C:/Users/gian_/Documents/Irri-trickle/speed/i.py”,行49sol = root(f,Guess,jac = False)#Entrega el resultado
TypeError:root()得到了意外的关键字参数'jac'
提供的代码还给我一个错误:TypeError:_lambdifygenic()缺少1个必需的位置参数:'y1'。如y
所建议,用y = DeferredVector('y')
代替this post的声明解决了该问题。假设您使用的是最新版本的sympy和scipy。
我不了解关于jac的奇怪错误消息,因为您输入的很好。也许您无意中使用了另一个软件包中的root
?
尝试使用明确的名称导入,如:
from scipy.optimize import root as scipy_root
from sympy import Symbol, lambdify, DeferredVector
y = DeferredVector('y')
...
def solver():
guess = [1,-1]
sol = scipy_root(f, guess, method='hybr', jac=False) # Entrega el resultado
print(sol.x)
return sol
以上是关于如何传递用于scipy的sympy表达式?的主要内容,如果未能解决你的问题,请参考以下文章
Task1:动手学高等数学(sympy、scipy、matplotlib)
使用 Sympy 生成 C 代码。将 Pow(x,2) 替换为 x*x