在每个时间步解微分方程的正确方法是什么?



是否有任何方程求解器适用于时间步长情况?

我一直在实现ODEint, Solve_ivp甚至sympy来解决一阶的diff_eq,像这样:

dTsdt = t * A - B + c#在函数中设置。这是一个数学模型。

,其中A,B,C是依赖于时间的向量(例如:(1、3、4、5…])。tloop = [t(张),[我]]

Sol_Ts = solve_ivp (dTsdt tloop, [Ts0], arg游戏= (B[我],[我]C[我]))

我只是想知道,这种方法在每个时间步解方程是否正确。因为我每次都要替换这些常量的值,因此要求在特定时间获得结果,然后将其存储在变量中。

我不确定这些求解器是否适合这项任务,或者事实上,我应该使用另一种方法,如"有限差分法",尽管后者会花费更多时间,并且容易出现时间问题。

目前得到的结果不符合标准。如有任何建议,我将不胜感激!

是的,这是一个有效的策略

for i in range(N):
Sol_Ts = solve_ivp(dTsdt,t[[i,i+1]],[Ts0],args=(A[i],B[i],C[i],))
Ts_arr.append(Sol_Ts.y.copy())
time_arr.append(Sol_Ts.t.copy)
Ts0 = Sol_Ts.y[:,-1]
Ts_arr = np.concatenate(Ts_arr, axis=1)
time_arr = np.concatenate(time_arr)

您也可以使用sympy.interpolate.interp1d函数生成器对各种类型的插值函数在整个区间内进行积分,这里您将使用"零阶保持器",即给定函数表的分段常数扩展。

相关内容

最新更新