使用Python解决带整数微分耦合方程组。

3

我正在尝试使用Python来数值求解一组由这篇论文中描述的方程(第30和31式),简化形式如下:

enter image description here

其中G(k)D(k)是一些已知函数,与Y无关。当然,所有量也是t的函数。作者指出,由于各种函数所呈现的依赖性,需要数值解。

我通常按照这里或者这里所示的方式实施解决此类耦合方程组的解法,但现在额外的k依赖性使我有些困惑。

有什么建议吗?非常感谢。


1
你尝试了什么?遇到了什么问题?告诉我们更多关于这个k系数,以及它如何阻止你解决这个问题。 - jlandercy
@jlandercy k不是一个参数,而是另一个变量;我已经编辑了问题,明确显示了S。老实说,我甚至不知道该如何开始。 - surrutiaquir
@Patol75中,'k'是一个连续变量,它将在一定范围内进行积分。 - surrutiaquir
@Patol D(k) 是已知的,且它与Y无关。 - surrutiaquir
我认为我会离散化定义k的范围,比如100个值。然后,对于每个k的值,将solve_ivp应用于第一个方程。这将给你在t中连续但在k中不连续的f。然后,将solve_ivp应用于第二个方程,并使用Simpson公式(在SciPy中实现)来获得S。那应该可以解决问题。 - Patol75
显示剩余2条评论
1个回答

1

IDESolver是由Josh Karpel创建的通用数值积分微分方程求解器。其最新版本允许用户解决多维耦合的IDE问题。从提供的示例中,IDE类似于

enter image description here

使用以下代码可以解决带有解析解(sin x, cos x)的问题:
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接