Найти - Пользователи
Полная версия: Решение ОДУ с scipy.inegrate.odeint.
Начало » Python для новичков » Решение ОДУ с scipy.inegrate.odeint.
1 2 3
Olmer
fongostev
Да! Я про эту ссылку говорил. Вот мой вариант кода
from matplotlib import pyplot as plt
import numpy as np
from scipy.integrate import odeint
G=6.67*10**-8
M=2*10**33.
def motion(x_vec, t):
    x, y = x_vec  # tuple unpacking
    
    return [y, G*M/y**2.]
y0 = [10**13., 10**13.]
t_output = np.arange(0, 10**7, 10**3)
y_result = odeint(motion, y0, t_output)
plt.plot(y_result[:,0],y_result[:,1])
plt.show()
Я не понимаю, что происходит в теле функции, перед return.
fongostev
Olmer
Там идет распаковка набора аргументов. Грубо говоря, там происходит следующее:
a, b, c = (a, b, c)

UPD: Т.е. принимается левая часть уравнений, а возвращается правая.
Olmer
fongostev
x, y = x_vec
Вот здесь? “x, y = x_vec ” Немного не догоняю…
fongostev
Olmer
Да, именно. Просто в интерпретаторе введи
t = (1,2)
a, b = t
И посмотри, что получится.
Olmer
fongostev
Но x_vec, что такое? Что это за вектор?
fongostev
Olmer
это твой набор независимых переменных, в твоем случае х и х с точкой.
Olmer
fongostev
А ты можешь записать, как будет выглядеть тело функции, или у меня правильно написано?
fongostev
Ты просто неаккуратно расписал систему. Замени строку и попробуй. Должно быть так:
return [y,  G*M/x**2]
Знаки только проверь
Olmer
fongostev
Ты просто неаккуратно расписал систему. Замени строку и попробуй. Должно быть так:
Он рисует, что-то похожее. Но если поменять знак на минут перед G*M, то получается страшное решение.
fongostev
Ясное дело, ты же меняешь вектор действия потенциала на противоположный
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB