scipy.integrate.odeint 每个时间步更新初始条件



我正在使用scipy.integrate.odeint使用脚本求解给定系统的运动方程,从中选择与该特定问题最相关的部分:

# Equations of Motion function to integrate 
def solveEquationsofMotion(y0, t, nRigidBodies, nCoordinates, nConstraintsByType, dataConst, Phi, dPhidq, niu, gamma, massMatrix, gVector, alpha, beta, sda_Parameters):
...
Some calculations 
matA = numpy.array
...
dydt = np.hstack((qp,qpp))
return dydt
#Integrator results 
solution = odeint(solveEquationsofMotion, y0, time_span,args=(nRigidBodies, nCoordinates, nConstraintsByType, dataConst, Phi, dPhidq, niu, gamma, massMatrix, gVector, alpha, beta), full_output=0)

它工作正常。

但是现在我需要在每个时间步中将积分结果的一部分(解决方案变量(乘以 matA 变量,以再次用作下一个时间步的初始条件。

我查看了scipy.integrate.odeint文档,但我没有看到任何相关信息。 任何帮助将不胜感激。

亲切问候

伊沃

如果您必须在每一步都更改解决方案,那么使用分步集成器ode更合乎逻辑。无论如何,它应该在循环中使用,因此不妨同时更改条件。下面是求解y' = -sqrt(t)*y(向量值(的示例,其中 y 在每一步后乘以matA

t 变量中的步骤由数组t确定。主要步骤是y[k, :] = r.integrate(t[k])它得到下一个解决方案值,然后初始条件由r.set_initial_value(matA.dot(y[k, :]), t[k])更改。

import numpy as np
from scipy.integrate import ode
def f(t, y):
return -np.sqrt(t)*y 
matA = np.array([[0, 1], [-1, 0]])
t = np.linspace(0, 10, 20)
y_0 = [2, 3]
y = np.zeros((len(t), len(y_0)))
y[0, :] = y_0
r = ode(f)
r.set_initial_value(y[0], t[0])
for k in range(1, len(t)):
y[k, :] = r.integrate(t[k])
r.set_initial_value(matA.dot(y[k, :]), t[k])

这样获得的y值既不是单调的也不是正的,就像常微分方程的实际解一样 - 这表明乘以 matA 产生了影响。

[[ 2.00000000e+00  3.00000000e+00]
[ 1.55052494e+00  2.32578740e+00]
[ 1.46027833e+00 -9.73518889e-01]
[-5.32831945e-01 -7.99247918e-01]
[-3.91483887e-01  2.60989258e-01]
[ 1.16154133e-01  1.74231200e-01]
[ 7.11807536e-02 -4.74538357e-02]
[-1.79307961e-02 -2.68961942e-02]
[-9.45453427e-03  6.30302285e-03]
[ 2.07088441e-03  3.10632661e-03]
[ 9.57623940e-04 -6.38415960e-04]
[-1.85274552e-04 -2.77911827e-04]
[-7.61389508e-05  5.07593005e-05]
[ 1.31604315e-05  1.97406472e-05]
[ 4.85413044e-06 -3.23608696e-06]
[-7.56142819e-07 -1.13421423e-06]
[-2.52269779e-07  1.68179853e-07]
[ 3.56625306e-08  5.34937959e-08]
[ 1.08295735e-08 -7.21971567e-09]
[-1.39690370e-09 -2.09535555e-09]]

最新更新