Scipy/numpy如何计算函数作为向量?

jfgube3f  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(149)

我正在尝试使用scipy中的solve_bvp。为此,我需要创建RHS函数,在纸上我将其命名为
(1+y^2) / 2(1-x)
我不确定如何定义将vecotrs作为输入的函数,并根据我的情况重写它。
也就是说,我正在尝试将函数fun_measlesin this tutorial重写到我的函数中。

mu = 0.02
l = 0.0279
eta = 0.01
def fun_measles(x, y):
    beta = 1575 * (1 + np.cos(2 * np.pi * x))
    return np.vstack((
        mu - beta * y[0] * y[2],
        beta * y[0] * y[2] - y[1] / l,
        y[1] / l - y[2] / eta
    ))
0lvr5msh

0lvr5msh1#

y[1] / l - y[2] / eta这一行计算的是标量而不是向量,因此,当np.vstack被调用时,它无法执行,因为输入的维数不匹配。
你固定公式(这一行),你将能够向量化函数。

cclgggtu

cclgggtu2#

在你的例子中,你可以像标量一样实现它,你只需要注意在标量和向量之间使用不同的操作,比如基于y值的分支,而在数组的例子中,你需要使用numpy函数,比如p.where
我们必须关心返回数组的形状。所以它要么是

return (1+y**2) / (2*(1-x))

return [ (1+y[0]**2) / (2*(1-x)) ]

(我不确定显式数值化是否真的有用,无论如何求解器都会正确地完成,所以问题只是开销发生在哪里。)

相关问题