IDESolver
是由Josh Karpel创建的通用数值积分微分方程求解器。其最新版本允许用户解决多维耦合的IDE问题。从提供的示例中,IDE类似于
import numpy as np
import matplotlib.pyplot as plt
from idesolver import IDESolver
solver = IDESolver(
x=np.linspace(0, 7, 100),
y_0=[0, 1],
c=lambda x, y: [0.5 * (y[1] + 1), -0.5 * y[0]],
d=lambda x: -0.5,
f=lambda y: y,
lower_bound=lambda x: 0,
upper_bound=lambda x: x,
)
solver.solve()
fig = plt.figure(dpi = 600)
ax = fig.add_subplot(111)
exact = [np.sin(solver.x), np.cos(solver.x)]
ax.plot(solver.x, solver.y[1], label = 'IDESolver Solution', linestyle = '-', linewidth = 3)
ax.plot(solver.x, exact[1], label = 'Analytic Solution', linestyle = ':', linewidth = 3)
ax.legend(loc = 'best')
ax.grid(True)
ax.set_title(f'Solution for Global Error Tolerance = {solver.global_error_tolerance}')
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y(x)$')
plt.show()
S
。老实说,我甚至不知道该如何开始。 - surrutiaquirD(k)
是已知的,且它与Y无关。 - surrutiaquirk
的范围,比如100个值。然后,对于每个k
的值,将solve_ivp
应用于第一个方程。这将给你在t
中连续但在k
中不连续的f
。然后,将solve_ivp
应用于第二个方程,并使用Simpson公式(在SciPy中实现)来获得S
。那应该可以解决问题。 - Patol75