Jet-not-Jet
Программа для расчета положения и скоростей объектов при реактивном и "нереактивном" разделении компонентов.
Полный расчет можно скачать здесь
> | restart; |
> | with(plots): |
Warning, the name changecoords has been redefined
> |
Объявление процедуры.
Параметр n - количество "дробинок"
Процедура для системы с центрифугой
> | Non_jet:=proc(n) # |
Объявление глобальных переменных.
> | global w,r,V,S,Vc,Sc,DD,DS,VDS,f,dt,Time,CMc,CM,MVc1,MVc2; |
w - угловая скорость вращения, const;
r - радиус, по которому движутся элементы системы;
V - таблица значений абсолютных скоростей отдельных дробинок после отделения;
S -таблица значений расстояний: от начала координат до положения дробинки по завершении всего цикла.
Vc -таблица значений скоростей ЦМ остатка.
Sc -таблица значений расстояний: от начала координат до ЦМ остатка.
DS -таблица значений расстояний: от ЦМ остатка до оси вращения, т.е до точки отделения частицы, так называемая величина "Delta";
DD -таблица значений "дельта дельты": отскок ЦМ остатка при отделении одной элементарной частицы;
VDS -таблица значений скоростей. Относительная скорость смещения оси вращения (т.е точки отделения частицы), относительно ЦМ остатка .;
f -таблица значений углов;
dt -интервал времени между отделениями частиц
Time -таблица значений времен. Совершенно простая и необязательная, но удобна при организации графика;
CMc -таблица значений положения ЦМ всей системы;
CM -таблица значений ЦМ "цепочки" отделившихся частиц в каждый момент времени;
MVc1 и MVc2 -таблицы значений импульсов "остатка" до отделения элементарной частицы и после.
Разница между этими значениями аналогична величине DD. Только это "скачок" импульса остатка, т.е. та величина, что и заставляет двигаться остаток.
dt -интервал времени между отделениями частиц.
Определяется, как деление всего времени (2Pi/w) на число элементарных частиц (n)
> | dt:=2*Pi/(w*n); |
> | m1:=M1c/n; |
> |
> |
Заполнение Time -таблицы значений времен. Совершенно простая и необязательная, но удобна при организации графика;
> | for i from 0 to n do |
> | Time[i]:=dt*i; |
> | end do; |
Заполнение f -таблицы значений углов
> | f[0]:=0; |
> | df:=2*Pi/n; |
> | for i from 1 to n do |
> | f[i]:=i*df; |
> | end do; |
> |
Таблица суммарного импульса остатка до отделения
> | MVc1[0]:=0; |
> | for i from 1 to n do |
> | MVc1[i]:=(m1*w*r*sum(cos(f[k]),k=i..n)); |
> | end do; |
> |
Таблица суммарного импульса остатка после отделения
> | MVc2[0]:=0; |
> | for i from 1 to n do |
> | MVc2[i]:=(m1*w*r*sum(cos(f[k]),k=i..n-1)); |
> | end do; |
> |
Заполнение DS -таблицы значений расстояний: от ЦМ остатка до оси вращения M0, т.е до точки отделения частицы
> | DS[0]:=0; |
> | for i from 1 to n do |
> | DS[i]:=-r*m1*sum(sin(f[k]),k=i..n)/(M0+m1*(n-i)); |
> | end do; |
> |
Скорость изменения величины DS в момент предшествующий отделению i-ой дробинки
> | VDS[0]:=0; |
> | for i from 1 to n do |
> | VDS[i]:=-r*m1*w*sum(cos(f[k]),k=i..n)/(M0+m1*(n-i)); |
> | end do; |
Дельта дельты :)
> | DD[0]:=0; |
> | for i from 1 to n do |
> | DD[i]:=-r*m1*sum(sin(f[k]),k=i..n-1)/(M0+m1*(n-i))+r*m1*sum(sin(f[k]),k=i..n)/(M0+m1*(n-i+1)); |
> | end do; |
> |
> |
Стартовые значения
> |
> | V[0]:=0;Vc[0]:=0;Sc[0]:=0;S[0]:=0; CMc[0]:=0; CM[0]:=0; |
> |
Цикл заполнения V[i],S[i],Vc[i],Sc[i],CM[i],CMc[i]
> | for i from 1 to n do |
> |
Скорость дробинки.
> | V[i]:=Vc[i-1]+VDS[i-1]+w*r; |
Расстояние, пройденное дробинкой
> | S[i]:=Sc[i-1]+DS[i-1]+V[i]*(n-i)*dt; |
Скорость остатка.
> | Vc[i]:=(Vc[i-1]*(M0+m1*(n-i+1))-m1*V[i])/(M0+m1*(n-i)); |
> |
Координаты центра масс остатка!
> | Sc[i]:=Sc[i-1]+DD[i-1]+Vc[i]*dt; |
> |
Координаты центра масс дробинок!
Вычисление должно быть похоже на вычисление S[i]
> | CM[i]:=sum(Sc[k-1]+DS[k-1]+V[k]*(i-k+1)*dt,k=1..i)/i; |
Координаты центра масс всей системы!
> | CMc[i]:=(m1*i*CM[i]+(M0+m1*(n-i))*Sc[i])/(M0+m1*n); |
> | end; |
> |
конец процедуры
> | end: |
> |
> |
Warning, `m1` is implicitly declared local to procedure `Non_jet`
Warning, `i` is implicitly declared local to procedure `Non_jet`
Warning, `df` is implicitly declared local to procedure `Non_jet`
> |
> |
> |
> |
Объявление процедуры Jet - расчет для системы с реактивным отделением
Здесь все, практически, то же самое.
Величины такие же, помечены буквой "j".
Разумеется, отсутствуют величины: DD, DS, VDS.
> | Jet:=proc(n) |
> | global Vj,Sj,Vcj,Scj,dt,CMcj,CMj; |
> |
> |
> | dt:=2*Pi/(w*n); |
> | m1:=M1c/n; |
> |
> | Vj[0]:=0;Vcj[0]:=0;Scj[0]:=0;Sj[0]:=0;CMcj[0]:=0; CMj[0]:=0; |
> |
Цикл заполнения Vj[i],Sj[i],Vcj[i],Scj[i],CMj[i],CMcj[i]
> | for i from 1 to n do |
Скорость дробинки.
> | Vj[i]:=Vcj[i-1]+w*r; |
Расстояние, пройденное дробинкой
> | Sj[i]:=Scj[i-1]+Vj[i]*(n-i)*dt; |
Скорость ЦМ остатка .
Я просто беру суммарный импульс летящих дробинок. Импульс остатка равен этой величине.
Делим на массу - получаем скорость!
> | Vcj[i]:=-(m1*sum(Vj[k],k=1..i))/(M0+m1*(n-i)); |
> |
Координаты Центра Масс остатка!
> | Scj[i]:=Scj[i-1]+Vcj[i]*dt; |
Координаты Центра Масс дробинок!
> | CMj[i]:=sum(Scj[k-1]+Vj[k]*dt*(i-k+1),k=1..i)/i; |
Центр масс всей системы!
> | CMcj[i]:=(m1*i*CMj[i]+(M0+m1*(n-i))*Scj[i])/(M0+m1*n); |
> | end; |
> |
> | end:#конец процедуры Jet |
Warning, `m1` is implicitly declared local to procedure `Jet`
Warning, `i` is implicitly declared local to procedure `Jet`
> |
> |
Начало расчета
> |
> |
> |
Количество "дробинок"
> | n:=4; |
> |
> |
> | Non_jet(n): |
> |
> |
> | Time[j] $j=0..n: |
> | f[j] $j=0..n: |
> | DS[j] $j=0..n: |
> | VDS[j] $j=0..n: |
> | DD[j] $j=0..n: |
> | V[j] $j=0..n: |
> | S[j] $j=0..n: |
> | Vc[j] $j=0..n: |
> | Sc[j] $j=0..n: |
> | CM[j] $j=0..n: |
> | CMc[j] $j=0..n: |
> |
> | Jet(n): |
> | Vj[j] $j=0..n: |
> | Sj[j] $j=0..n: |
> | Vcj[j] $j=0..n: |
> | Scj[j] $j=0..n: |
> | CMj[j] $j=0..n: |
> | CMcj[j] $j=0..n: |
"оцифровка" переменных.
Необходима для построения графиков
r -радиус центрифуги
w -угловая скорость вращения центрифуги
M1c -суммарная масса дробинок, находящихся в каждой системе
M0 -масса пустого корпуса каждой системы
> | w:=w;M1c:=4; M0:=M1c/n; |
> |
> | Time[j] $j=0..n; |
> | f[j] $j=0..n; |
> | DS[j] $j=0..n; |
> | VDS[j] $j=0..n; |
> | DD[j] $j=0..n; |
> | V[j] $j=0..n; |
> | S[j] $j=0..n; |
> | Vc[j] $j=0..n; |
> | Sc[j] $j=0..n; |
> | CM[j] $j=0..n; |
> | CMc[j] $j=0..n; |
> |
Реактивное:
> | Vj[j] $j=0..n; |
> | Sj[j] $j=0..n; |
> | Vcj[j] $j=0..n; |
> | Scj[j] $j=0..n; |
> | CMj[j] $j=0..n; |
> | CMcj[j] $j=0..n; |
> |
Десятикратное:::
> | w:=w;M1c:=4; M0:=10*M1c/n; |
> |
> | DS[j] $j=0..n; |
> | VDS[j] $j=0..n; |
> | DD[j] $j=0..n; |
> | V[j] $j=0..n; |
> | S[j] $j=0..n; |
> | Vc[j] $j=0..n; |
> | Sc[j] $j=0..n; |
> | CM[j] $j=0..n; |
> | CMc[j] $j=0..n; |
> |
Реактивное:
> | Vj[j] $j=0..n; |
> | Sj[j] $j=0..n; |
> | Vcj[j] $j=0..n; |
> | Scj[j] $j=0..n; |
> | CMj[j] $j=0..n; |
> | CMcj[j] $j=0..n; |
> |
Продолжение оцифровки: :)
> | w:=1;r:=1; |
> |
Результаты расчетов :
> |
> | #================================================================================================= |
Графики относительных смещений "Дельта" и "Дельта-дельты"
> | PDD:=[[Time[i],DD[i]] $i=0..n]: # набор для графика DD (дельта дельты) |
> | PDS:=[[Time[i],DS[i]] $i=0..n]:# набор для графика DS (дельты) |
> | plot(PDD,x=0..2*Pi/w,title="Дельта дельты"); |
> | plot([PDS,PDD],x=0..2*Pi/w,title="Большая кривая - смещение 'дельта', малая - 'дельта дельты', ",axes=frame,legend=["дельта DS","дельта дельты DD"]); |
В первом полупериоде, расстояние DS положительно и возрастает.
> |
> |
> |
> | #================================================================================================= |
График относительной скорости перемещения оси вращения (точки отделения дробинок) относительно ЦМ остатка .
> | PVDS:=[[Time[i],VDS[i]] $i=0..n]:# набор для графика относительной скорости VDS |
> | plot(PVDS,t=0..2*Pi/w); |
> |
В первом полупериоде, скорость VDS положительна.
И направление совпадает с направлением движения оторвавшейся дробинки!
> |
> |
> |
> | #================================================================================================= |
Sc и Scj - координаты ЦМ "остатка". Данный график иллюстрирует изменение этих координат со временем.
> | PScj:=[[Time[i],Scj[i]] $i=0..n]:# набор для графика положения ЦМ остатка при реактивном движ. |
> | PSc:=[[Time[i],Sc[i]] $i=0..n]:# набор для графика того же самого для центрифуги. |
> | plot([PSc,PScj],t=0..2*Pi/w,title="Перемещение ЦМ остатков",legend=["ЦМ остатка центриф","ЦМ остатка реактив"]); |
Графики совпадают
> |
> |
> | #================================================================================================ |
График "цепочек" дробинок, т.е. положение дробинок в момент окончания цикла.
> | PSj:=[[Sj[n-j],j] $j=0..n-1]:# набор для графика положения дробинок (реактивное движ) |
> | PS:=[[S[n-j],j] $j=0..n-1]:# набор для графика положения дробинок (центрифуга) |
> | plot([PS,PSj,PS,PSj],s=S[n]..S[1],title="Положение дробинок в момент окончания цикла.( Временной срез)", labels=["расстояние от точки старта в момент времени t=2Pi/w","Номер дробинки"],legend=["цепочка от центрифуги","цепочка от реактив"," "," "],style=[line,line,point,point],color=[red,blue,red,blue],symbol=circle,symbolsize=5); |
> |
> |
> |
> |
На графике виден явный "горб".
> |
> |
> | #================================================================================================ |
Графики перемещения Центров масс всех компонентов систем
> |
> | PCMj:=[[Time[j],CMj[j]] $j=0..n]:# набор для графика Центра масс цепочек дробинок при "обычном" реактивном. |
> | PCM:=[[Time[j],CM[j]] $j=0..n]:# набор для графика того же самого для центрифуги |
> |
> | plot([PSc,PScj,PCM,PCMj],t=0..2*Pi/w,title="Нижняя часть графика-перемещение ЦМ остатка,верхняя- перемещение ЦМ цепочки дробинок",legend=["ЦМ остатка центрифуги","ЦМ остатка реактив","ЦМ шлейфа центриф","ЦМ шлейфа реактив"],color=[red,green,brown,blue]); |
Две кривые в нижней части графика совпадают.
Это графики перемещения Центров Масс корпусов с остатками груза.
> |
> | #================================================================================================ |
> |
Этот график - "верхняя часть" предыдущего графика, где собраны 4 кривые.
> |
Подчеркну: CM и CMj - это именно центры масс цепочек дробинок в каждый момент времени.
> | plot([PCM,PCMj],t=0..2*Pi/w,title="Перемещения ЦМ дробинок в течение рабочего периода",legend=["ЦМ шлейфа выброса центрифуги","ЦМ шлейфа выброса реактив"]); |
> |
> | #================================================================================================ |
Специальное построение графика,на котором видно изменение плотности распределения частиц груза в цепочках выброса.
> | PSj:=[[Sj[n-j],0] $j=0..n-1]:# набор для условного графика реактив. |
> | PS:=[[S[n-j],0.1] $j=0..n-1]:# набор для условного графика центриф. |
> | plot([PS,PSj,[[0,1],[S[1],1]],[[0,-1],[S[1],-1]]],S=0..S[1],title="Визуализация распределения дробинок в цепочке",style=point,axes=none,scaling=unconstrained,legend=["центрифуга","реактив","_","_"],color=[red,blue,white,white],symbol=circle,symbolsize=5);# |
> |
> | #================================================================================================ |
График траекторий дробинок
DS[0] DS -таблицы значений расстояний: от ЦМ остатка до оси вращения M0, т.е до точки отделения частицы
Sc[i] Координаты центра масс остатка!
S[i] Расстояние, пройденное дробинкой
> | PScDs:=[[[Sc[j]+DS[j],n-j],[S[j],0]] $j=1..n ]:#набор для графика движения дробинок not_jet. |
> | Pl1:=plot(PScDs,s=S[1]..S[n],color=red): |
> |
> | PScDsj:=[[[Scj[j],n-j],[Sj[j],0]] $j=1..n ]:#набор для графика движения дробинок jet. |
> | Pl2:=plot(PScDsj,s=Sj[0]..Sj[n],color=blue,linestyle=DASH): |
> | Pl_axe_X0:=plot([[0,n],[0,0]],color=green): |
> | display([Pl1,Pl2,Pl_axe_X0],axes=frame);#,legend=["центрифуга","реактив"] |
> |
> | #================================================================================================ |
График абсолютных скоростей дробинок в цепочках выбросов.
> | PVj:=[[j,Vj[j]] $j=1..n]:# набор для графика изменения скоростей реактив. |
> | PV:=[[j,V[j]] $j=1..n]:# набор для графика изменения скоростей центриф. |
> | plot([PV,PVj],number=1..n,title="Абсолютные скорости дробинок", legend=["центрифуга","реактив"],color=[red,blue]);# |
> |
> | #================================================================================================ |
График, иллюстрирующий изменение скоростей дробинок в цепочке выброса.
Т.е. разница в скоростях последующей "дробинки" от предыдущей.
> | PDVj:=[[j,evalf(Vj[j+1]-Vj[j])] $j=2..n-1]:# набор для графика изменения скоростей реактив. |
> | PDV:=[[j,V[j+1]-V[j]] $j=2..n-1]:# набор для графика изменения скоростей центриф. |
> | plot([PDV,PDVj],t=2..n-1,title="Изменение скоростей дробинок",legend=["центрифуга","реактив"],color=[red,blue]);# |
> |
> | #================================================================================================ |
> |
График, иллюстрирующий изменение скоростей Центров масс цепочек дробинок и ЦМ остатков [корпус+остаток груза]
> |
> | PVCMj:=[[Time[j],(CMj[j+1]-CMj[j])/dt] $j=1..n-1]:# набор для графика изменения скоростей реактив. |
> | PVCMcj:=[[Time[j],(CMcj[j+1]-CMcj[j])/dt] $j=1..n-1]:# набор для графика изменения скоростей реактив. |
> | PVCM:=[[Time[j],(CM[j+1]-CM[j])/dt] $j=1..n-1]:# набор для графика изменения скоростей центриф. |
> | PVCMc:=[[Time[j],(CMc[j+1]-CMc[j])/dt] $j=1..n-1]:# набор для графика изменения скоростей центриф. |
> |
> | plot([PVCM,PVCMj],t=dt..2*Pi/w,title="Изменение скоростей ЦМ дробинок",legend=["шлейф центрифуга","шлейф реактив"],color=[red,blue]);# |
> | plot([PVCMc,PVCMcj],t=dt..2*Pi/w,title="Изменение скоростей ЦМ остатков",legend=["остаток центриф","остаток реактив"],color=[red,blue],axes=frame);# |
> | #================================================================================================ |
> |
Здесь представлена разность двух кривых с графика "Изменение скоростей ЦМ дробинок"
> | PDCM:=[[Time[j],CM[j]-CMj[j]] $j=0..n]:# набор для графика разницы в положении ЦМ цепочек дробинок. |
> | plot(PDCM,t=0..2*Pi/w,axes=frame,title="Разница в положении ЦМ цепочек дробинок с течением времени"); |
> |
> | #=============================================================================================== |
График координат ЦЕНТРОВ МАСС систем за рабочий период
> |
> |
> |
> |
> |
> | PCMcj:=[[Time[j],CMcj[j]] $j=0..n]:# набор для графика ЦМ всей реактивной системы |
> | PCMc:=[[Time[j],CMc[j]] $j=0..n]: # набор для графика ЦМ системы с центрифугой |
> | plot([PCMc,PCMcj],t=0..2*Pi/w,axes=frame,title="Положение ЦМ всех систем",legend=["ЦМ Центрифуга","ЦМ реактив"],style=[line,line]); |
> |
> |
> | #============================================================================================== |
Проверка!
Проверка заключается в вычислении суммарного импульса системы с центрифугой.
Рассчитывается импульс "остатка" через скорость ЦМ, и импульс, как сумма импульсов всех компонентов, входящих в "остаток".
Эти величины сравниваются с суммарным импульсом цепочки "дробинок".
> |
> |
> | m1:=M1c/n: |
Абсолютная скорость оси центрифуги:
> | for i from 0 to n do |
> | Vos[i]:=Vc[i]+VDS[i]; |
> | end do: |
> |
> |
Импульс остатка, как сумма импульсов компонентов системы:
> | for i from 0 to n do |
> | Qost[i]:=MVc1[i]+Vos[i]*((n-i)*m1+M0); |
> | end do: |
Количество движения цепочки дробинок:
> | for i from 0 to n do |
> | Qdr[i]:=m1*sum(V[k],k=0..i); |
> | end do: |
> |
Импульс остатка через скорость ЦМ:
> | for i from 0 to n do |
> | Qcm[i]:=Vc[i]*(M0+m1*(n-i)); |
> | end do: |
> |
> | PQost:=[[Time[j],Qost[j]] $j=0..n]: |
> | PQdr:=[[Time[j],Qdr[j]] $j=0..n]: |
> | PQcm:=[[Time[j],Qcm[j]] $j=0..n]: |
> | Psumm:=[[Time[j],Qost[j]+Qdr[j]] $j=0..n]: |
> | plot([PQost,PQdr,PQcm,Psumm],t=0..2*Pi/w,title="Импульсы компонентов системы с центрифугой",legend=["Импульс остатка через сумму импульсов компонентов","Импульс летящих дробинок","Импульс остатка через скорость ЦМ","сумма"],color=[red,green,brown,blue],style=[line,line,point,line],symbol=circle,symbolsize=5); |
> |
График суммарного импульса системы
> |
> |
> | plot(Psumm,x=0..2*Pi/w,title="Сумма",color=blue,axes=boxed); |