You need to enable JavaScript to run this app. Python使用数组参数调用bvp求解器求解四阶边值问题
优惠活动
大模型
产品
解决方案
定价
更多

Python使用数组参数调用bvp求解器求解四阶边值问题

四阶边值问题多参数t批量求解方案

核心思路

你预定义的一维t数组中每个元素对应独立的边值问题,直接遍历t数组对每个参数单独调用solve_bvp求解即可,建议用solve_bvp自带的fun_args参数传参替代全局变量,代码更易维护。

可运行示例代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_bvp

# 预定义的t数组,可根据你的需求修改
t_arr = np.linspace(1, 5, 10)

# 微分方程定义,增加t作为入参
def fun(x, y, t):
    return np.vstack([y[1], y[2], y[3], t/(t-y[0])])

# 边界条件不变
def bc(ya, yb) :
    return np.array([ya[0], ya[1], yb[0], yb[1]])

xmesh = np.linspace(0, 10, 100)
# 存储所有t对应的求解结果
sol_results = []

for t in t_arr:
    # 初始化猜测值
    y_init = np.zeros((4, len(xmesh)))
    # 传入当前t参数求解
    sol = solve_bvp(fun, bc, xmesh, y_init, fun_args=(t,))
    # 校验求解状态
    if sol.success:
        sol_results.append(sol)
    else:
        print(f"t={t:.2f}求解失败:{sol.message}")

# 批量绘制所有结果
plt.figure(figsize=(8, 5))
for idx, sol in enumerate(sol_results):
    plt.plot(xmesh, sol.sol(xmesh)[0], label=f't={t_arr[idx]:.2f}')
plt.xlabel('x')
plt.ylabel('w(x)')
plt.legend()
plt.show()

注意事项

  • 如果你的t是随x变化的数组(即t是x的函数,不是全局常量),只需要在fun内部根据当前x值索引获取对应的t值即可,比如你预先将t和x的对应关系存为t_x = np.array([...]),则在fun中可以用current_t = t_x[np.argmin(np.abs(xmesh - x))]获取对应位置的t值。
  • 注意t的取值范围不要过小,避免出现t - y[0]趋近于0的奇点,导致求解报错。

内容的提问来源于stack exchange,提问作者Anweshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 15:54:04