Форум сайта python.su
помогите написать код !
нужно смоделировать движение тела котрое описывается системой дифференциальных уравнений
Входные параметры модели:
• m  масса тела;
• v  величина начальной скорости;
• a угол начального наклона вектора скорости к горизонту;
* величины, определяющие коэффициенты сопротивления среды k1 и k2.
БУДУ БЛАГОДАРЕН ЗА ЛЮБУЮ ПОМОЩЬ!!
Офлайн
честно говоря даже идей нет (
Офлайн
http://docs.scipy.org/doc/scipy/reference/integrate.html
посмотрите Integrators of ODE systems
они предназначены для рашения обыкновенных дифференциальных уравнений. Какой метод использовать - зависит от Коэффициентов системы.
Офлайн
http://www.toehelp.ru/theory/informat/lecture14.html
Метод Рунге-Кутта четвертого порядка для дифференциальных уравнений второго порядка.
Офлайн
А может сначала “причесать” систему? Похоже vy==vx + C (из первых двух ур-ий), а vy~1/t.
Отредактировано (Янв. 7, 2011 20:16:47)
Офлайн
я учусь в 11 класе из 2 закона Ньютона получилась такая система. пытался вникнуть в в метод рунге-кутта но как-то безуспешно немного не догоняю её . как систему описать в Python я не знаю (( а самое обидное что от этого зависит моё поступление ) помогите плиз)
Офлайн
Тогда вам по простому надо:
dvx/dt заменяете на (vx(t+dt)-vx(t))/dt
тогда применяя этот подход к каждому уравнению можно получить vx(t+dt) если известно значение vx в предидущий момент.
vx(t+dt)=vx(t)+dt*(-k1+…)
задаете в начальный момент значения vx(0),…
задаете шаг интегрирования dt - достаточно маленький - а то вообще неправильный результат получится,
и находите по формулам значения скорости и координат. Проводите расчеты с разными шагами чтобы убедиться что все правильно, проверяете с какой точностью выполняются законы сохранения, строите графики.
Все у вас получится.
Офлайн
спасибо
Офлайн
vell
Надо бы допилить уравнение. Тут подойдёт замена v = v_x + v_y, затем тупо сложить 1 со 2 а 3 с 4. Путём нехитрых вычислений получаем dv/dt = -(k_1 + k_2 \sqrt(v^2_x + v^2_y))v/m.
Затем возведя в квадрат v: v^2 = (v^2_x +2(v_x,v_y)+v^2_y), полагая что в условиях задачи индексы x и y отвечают декартовой системе координат, то скалярное произведение двух перпендикулярных векторов даёт нулевой результат. Таким образом уравнение можно записать в новом виде dv/dt = -(k_1 + k_2 |v|)v/m, или выбрав удобную новую систему координат можно избавится от модуля.
Дифур решается переносом dt вправо а всего выражения влево так что бы -m dv/((k_1 + k_2 |v|)v) = dt.
Проинтегрируем обе части: m(ln(k_1+k_2 v)-ln v)/k_1 = t + C (под руку попался http://integrals.wolfram.com/index.jsp),
из чего, преобразованием получаем: exp(k_1 (t+C)/m) = (k_1 + k_2 v)/v,
или v = k_1/(exp(k_1 (t+C)/m) - k_2). Собственно я не знаю что здесь моделировать, можно так же найти x, просто проинтегрировав правую часть плюс С_2, получим траекторию движения x(t).
Офлайн
спасибо ) вообще спомощью этой системы надо смоделировать траекторию движения снаряда в графическом интерфейсе)
“Затем возведя в квадрат v: v^2 = (v^2_x +2(v_x,v_y)+v^2_y), полагая что в условиях задачи индексы x и y отвечают декартовой системе координат, то скалярное произведение двух перпендикулярных векторов даёт нулевой результат. Таким образом уравнение можно записать в новом виде dv/dt = -(k_1 + k_2 |v|)v/m”
не совсем понял, как так получилось?
Офлайн