我有一个微分方程,我想用数值方法来解。
的数据
我试图寻找在python中使用scipy中的循环或其他方法解决这个问题的方法,当n很大时,比如说,50。
当n=1时,我们可以解决它。
的
下面是我用来做这件事的代码。
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.integrate import odeint
from scipy.integrate import solve_ivp
#SOLVING THE GOVERNING DIFFERENTIAL EQUATION
t = np.linspace(0, 100, 1000)
A = 2
B = 3
a = 2
b = -3
c = 2
omega = 20
def dSdt(t, S):
y, P = S
dSdt = [P, (A/a)*np.cos(omega*t) + (B/a)*np.sin(omega*t) - (b/a)*P - (c/a)*y]
return dSdt
y_0 = 0
P_0 = 0
sol = solve_ivp(dSdt, t_span = (0, max(t)), y0 = [y_0, P_0], t_eval=t)
time = sol.t
disp_value = sol.y[0]
plt.plot(time, disp_value)
字符串
但我如何将其推广到更一般的情况呢?
2条答案
按热度按时间33qvvth11#
您可以更新模型以直接包含整个总和,为什么不将其参数化:
字符串
然后执行以下调用,求解IVP:
型
由于线性,它返回与@YakovDan相同的解决方案,但只调用了
solve_ivp
。agxfikkp2#
你的ODE是线性的,所以你可以只对参数求和,然后求和:
字符串
注意,函数
get_dSdt
接受一个整数i
并返回dSdt
函数,除了为索引i
定义的参数值