我正在尝试使用scipy中的solve_bvp
。为此,我需要创建RHS函数,在纸上我将其命名为(1+y^2) / 2(1-x)
我不确定如何定义将vecotrs作为输入的函数,并根据我的情况重写它。
也就是说,我正在尝试将函数fun_measles
in 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
))
2条答案
按热度按时间0lvr5msh1#
y[1] / l - y[2] / eta
这一行计算的是标量而不是向量,因此,当np.vstack
被调用时,它无法执行,因为输入的维数不匹配。你固定公式(这一行),你将能够向量化函数。
cclgggtu2#
在你的例子中,你可以像标量一样实现它,你只需要注意在标量和向量之间使用不同的操作,比如基于
y
值的分支,而在数组的例子中,你需要使用numpy函数,比如p.where
。我们必须关心返回数组的形状。所以它要么是
或
(我不确定显式数值化是否真的有用,无论如何求解器都会正确地完成,所以问题只是开销发生在哪里。)