gpt4 book ai didi

Python - Sympy - 以数值方式求解网格中多个参数的方程

转载 作者:行者123 更新时间:2023-12-01 02:52:07 25 4
gpt4 key购买 nike

给定的方程取决于未知变量 (y) 和一组参数。给定带有参数值的网格的每个元素,我想对 y 进行数值求解。

我尝试的解决方案的简化示例如下(y 是未知变量,x 是参数):

import numpy as np
import sympy as sp
x,y=sp.symbols('x y')
xgrid=np.arange(1,6)
f = sp.lambdify(x,sp.nsolve(x**2+y,y,2),"numpy")
print(f(xgrid))

但是,我收到以下错误:

expected a one-dimensional and numerical function.

我期望为 xgrid 中的每个值 x 接收一个带有 y=-x**2 的向量。

请注意,实际感兴趣的函数不是示例中的 y=-x**2,而是隐含在 x 中的非线性函数> 在 y 中。

我是否被迫对网格中的每个值进行循环,或者我仍然可以以某种方式使用lambdify?提前致谢!

最佳答案

sympy.lambdify 的目的是将符号表达式转换为数值表达式。 “lambdyfing”sympy.nsolve 没有任何意义,因为后者(默认情况下)是一个数值函数。如果您需要为 sympy.nsolve 定义“包装器”函数,您应该使用标准 python 方法来实现。

def f(x):
y = sp.symbols('y')
return float(sp.nsolve(x**2+y,y,2))

现在调用 f(xgrid),其中 xfridndarray 没有任何意义,因为该函数接受标量参数。你需要写一个循环。如果您感到懒惰,则可以使用方便的 np.vectorize 函数,该函数使函数评估 ndarrays,即使它仅为标量参数定义。但是,请注意,这种方法本质上是循环的简写,即,它执行与您显式编写循环完全相同的计算。

f = np.vectorize(f)
f(xgrid)

array([ -1., -4., -9., -16., -25.])

关于Python - Sympy - 以数值方式求解网格中多个参数的方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com