Форум сайта python.su
По всей видимости нужно все-таки подставить небольшую программку на питоне для численного решения :)
Офлайн
Isem Дак всю работу ТС на себя никто не возьмёт. Я лишь предоставил аналитическое решение, с которым можно сверится при реализации программки, и следствия вытекающие из решения.
Офлайн
в python есть класс векторов ?
Офлайн
Скачайте и установите библиотеку numpy для этого.
http://numpy.scipy.org/
Офлайн
написал программу которая расчитывает координаты х и у (х и у масивы ) как теперь графйик построить??
Офлайн
Скачайте и установите библиотеку matplotlib для этого.
http://matplotlib.sourceforge.net/
Офлайн
Посмотрите пример я ведь вам и ссылку дал и текст (2011-01-13 20:49:57) где и интегратор работает и картинка строится.
в ivp++ сделайте у себя также
Офлайн
ivp там представленно много методов . взял рк4 ( рунге кутта) пишит не правльный синтаксис в чём дело ?
Офлайн
Народ вот написал программу
from numpy import *
from matplotlib import *
import matplotlib.pyplot as plt
v=120
a=45
m=1
vx0=v*math.cos(a)
vy0=v*math.sin(a)
x0=0
y0=0
k1=0.1
k2=0.3
dt=0.001
g=9.8
x=[x0]
vx=[vx0]
vy=[vy0]
y=[y0]
i=0
while y[i]>=0:
z=vx[i]-(k1/m*vx[i]+(k2/m)*vx[i]**2)*dt
vx.append(z)
f=vy[i]-(k1/m*vy[i]+(k2/m)*vy[i]**2+g)*dt
vy.append(f)
d=x[i]+vx[i]*dt
x.append(d)
r=y[i]+vy[i]*dt
y.append(r)
i=i+1
w=max(y)
print(x,y)
plt.plot(x,y)
plt.xlabel('x')
plt.ylabel('y')
o=x[i]
plt.axis([0, x[i]+2, 0, w+2])
plt.show()
Отредактировано (Фев. 3, 2011 11:56:55)
Офлайн
Красивый ввод можно сделать но это сложнее - вы ведь оконное приложение тогда получите.
посмотрите например здесь: http://matplotlib.sourceforge.net/examples/user_interfaces/embedding_in_wx2.html
но думаю игра не стоит свеч.
Мне обычно хватает pyscripter поскольку и текст программы доступен и график одновременно.
Правильно сделано или нет - не понятно у вас схема решения не отделена от оператора - кто его поймет что у вас получилось. Если схема отдельно - можно решить простые тестовые задачи для которых известно решение. У вас непонятно где что.
Скорее всего код сделан неправильно. Поскольку если положить в вашем коде k1=k2=0 получается парабола какая-то - а должна быть прямая по моему.
“не правльный синтаксис в чём дело?” - это наверное у вас питон 3.x надо print a,b,c ->print(a.b.c) заменить или еще что-нибудь в этом духе. Я бы посмотрел, но я не ставил пока третий питон.
В случае ошибок, обычно принято присылать то, что сказал интерпретатор. Тогда мы могли-бы понять чем он недоволен.
Я вам посоветовал-бы всетаки выделить расчет производных в функцию. Взять схему попроще - явный эйлер и тогда все будет ок.
x_{k+1}=x_{k}+dt*f(t,x_{k})
Выражаю вам мое глубокое уважение. Ваше упорство в решении этой задачи воистину безгранично!
Отредактировано (Фев. 4, 2011 20:30:48)
Офлайн