如何定义适配Scipy solve_bvp的向量输入函数?
使用Scipy的
solve_bvp定义一阶微分方程的RHS函数 你的目标是实现微分方程 $y' = \frac{1+y^2}{2(1-x)}$ 的右侧(RHS)函数,适配Scipy的solve_bvp接口。对比你给出的麻疹模型示例(三阶系统),你的问题是一阶常微分方程,函数结构会更简单,核心是理解solve_bvp对RHS函数的输入输出要求:
- 输入参数:
x是自变量的数组(形状为(m,),m为采样点数);y是状态变量的二维数组(形状为(n, m),n是方程阶数,这里n=1) - 输出:返回状态变量的导数数组,形状必须和
y一致(即(n, m))
适配的RHS函数实现
import numpy as np def fun_rhs(x, y): # y[0] 对应微分方程中的y(x),因为是一阶系统,仅一个状态变量 dy_dx = (1 + y[0] ** 2) / (2 * (1 - x)) # 用np.vstack将一维结果转为二维数组,满足solve_bvp的输出要求 return np.vstack((dy_dx))
关键说明
- 向量化运算:
y是二维数组,y[0]取出对应y(x)的所有采样点值,运算时会自动对每个x点计算导数,符合solve_bvp的向量化要求 - 输出格式:必须返回二维数组,所以用
np.vstack把一维的dy_dx转为(1, m)的形状,和输入y的结构匹配
这个函数可以直接传入solve_bvp使用,配合你定义的边界条件即可求解该微分方程。
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

