Дифференциальные уравнения с начальным условием в Python (изменить рабочий код) - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в Python. У меня есть рабочий код, который выглядит как

import numpy as np
import scipy.integrate as sp
import sys
g, l, k = 9.81, 10, float(input())
PTS = 6
def rhs( y, t, g, l, k ): return [ k*t/l * np.cos(y[1]) - g/l * np.sin(y[1]),y[0] ]
y0 = [ 0, 0 ]
t = np.linspace( 0, 6, PTS+1 )
y = sp.odeint( rhs, y0, t, args = (g, l, k) )
for i in range(PTS): print( t[i], np.arctan(k*t[i]/g) *180/np.pi )

, где вам нужно написать значение 0,5 (это значение «k»). Вывод этого кода:

время значение y
0,0 0,0
1,0 2,91774937823
2,0 5,82044363971
3,0 8,69348861202
4,0 11,5231772897
5,0 14,297051396

Теперь я хочу использовать значение во времени t = 5 ( y = 14.297051396 ) в качестве моего начального условия и найти значения y за время t = 6, ..., 16 для k = 1.1 . Как мне изменить свой код?

Я попробовал этот код

   import numpy as np
   import scipy.integrate as sp
   import sys
   g, l, k = 9.81, 10, float(input())
   PTS = 12
   def rhs( y, t, g, l, k ): return [ k*t/l * np.cos(y[1]) - g/l * np.sin(y[1]), y[0] ]
   y0 = [ 14.297051396, 5 ]
   t = np.linspace( 5, 17, PTS+1 )
   y = sp.odeint( rhs, y0, t, args = (g, l, k) )
   for i in range(PTS): print( t[i], np.arctan(k*t[i]/g) *180/np.pi )

и написал 1.1 , но результат такой же, как и в случае, когда я пишу y0 = [0, 0].

Что я сделал не так? Может ли кто-нибудь объяснить мне , как его изменить? (Я самоучка в python и не изучаю программирование).

...