Как решить дифференциальное уравнение для разных начальных условий - PullRequest
2 голосов
/ 12 июля 2019

Я хочу непрерывно решать дифференциальное уравнение, изменяя только начальные условия. Я много пробовал, но не нашел подходящего способа сделать это правильно. Может кто-нибудь, пожалуйста, поделитесь любой идеей об этом. Для вашего удобства я приведу ниже код, который может решить дифференциальное уравнение:

from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt


c = 1.0   #value of constants

#define function
def exam(y, x):
    theta, omega = y
    dydx = [omega, - (2.0/x)*omega - theta**c]
    return dydx


#initial conditions
y0 = [1.0, 0.0] ## theta, omega

x = np.linspace(0.1, 10, 100)

#call integrator
sol = odeint(exam, y0, x)

plt.plot(x, sol[:, 0], 'b')
plt.legend(loc='best')
plt.grid()
plt.show()

Итак, мой вопрос состоит в том, как я могу решить приведенное выше дифференциальное уравнение для разных начальных условий одновременно (предположим, для y = [1.0, 0.0]; y = [1.2, 0.2]; y = [1.3, 0.3]) и построить их вместе.

1 Ответ

1 голос
/ 12 июля 2019

Таким образом, вы можете использовать функцию и перебирать начальные значения.Просто убедитесь, что у вас есть список y0 в правильном формате для цикла.Используя функцию, вы также можете указать изменения c.

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint


def solveit(c,y0):
    def exam(y, x):
        theta, omega = y
        dydx = [omega, - (2.0/x)*omega - theta**c]
        return dydx
    #initial conditions
#    y0 = [1.0, 0.0] ## theta, omega

    x = np.linspace(0.1, 10, 100)

    #call integrator
    sol = odeint(exam, y0, x)

    plt.plot(x, sol[:, 0], label='For c = %s, y0=(%s,%s)'%(c,y0[0],y0[1]))




ys= [[1.0, 0.0],[1.2, 0.2],[1.3, 0.3]]

fig = plt.figure()
for y_ in ys:
    solveit(c=1.,y_)

plt.legend(loc='best')
plt.grid()
plt.show()

enter image description here

...