Структура программы.
Отчет по построению орбиты луны в гелиоцентрической системе отчета при помощи matlab. Автор: студент гр. Т07-35 Погосбекян Э.Л. Москва - 2012 г.
Цель работы. Получить навык моделирования процесса движения небесных тел. Постановка задачи. Построить графический интерфейс, в котором: 1. Отображаются параметры, влияющие на вид траектории движения Луны, а именно: · Радиус орбиты Земли · Радиус орбиты Луны · Период обращения Земли вокруг Солнца · Период обращения Луны вокруг земли 2. Есть возможность редактировать эти параметры 3. В соответствии с введенными параметрами строится траектория движения Луны в гелиоцентрической системе координат. 4. В соответствии с введенными параметрами строится график зависимости мгновенных значений разности между модулем скорости Земли и проекцией скорости движения Луны на направление скорости движения Земли. 5. На выбор пользователя, для одного из указанных выше параметров производится поиск значения, при достижении которого на траектории появляются петли. В окне это значение должно отображаться. Структура программы. Программа состоит из ряда функций. Ниже будет приведено их описание. 1. Функция luna.m. В этой функции выполняются все вычисления, необходимые для построения указанных в постановке задачи графиков. У этой функции входные параметры: · r1 – радиус траектории Земли · r2 - радиус траектории Луны в системе отсчета, связанной с Землей · t1 – период обращения Земли вокруг Солнца · t2 – период обращения Луны вокруг Земли выходные параметры: · Xotn, Yotn – Точки, из которых состоит траектория движения Луны в гелиоцентрической системе координат. Xotn – x-вая компонента, Yotn – y-вая компонента. · V - мгновенное значение разности между модулем скорости Земли и проекцией скорости движения Луны на направление скорости движения Земли · t11 – вектор значений времени, при которых вычисляются указанные выше выходные параметры. Представляет собой столбец из 2000 точек, полученных путем разбиения интервала от 0 до t1 на равные промежутки. Текст подпрограммы luna.m:
function [Xotn Yotn V t11] = luna(r1,r2,t1,t2)
dt = t1/2000; %разбиение интервала времени на равные промежутки t = 0:dt:t1; Xz = r1*cos(2*pi*t/t1); %координаты Земли в гелиоцентрической системе координат Yz = r1*sin(2*pi*t/t1); Xm = r2*cos(2*pi*t/t2); %координаты Луны в системе отсчета, связанной с Землей Ym = r2*sin(2*pi*t/t2); Xotn = Xz+Xm; %координаты Луны в гелиоцентрической системе координат Yotn = Yz+Ym; Vx = diff(Xz)/dt; %скорость Земли в гелиоцентрической системе координат Vy = diff(Yz)/dt; vx = diff(Xm)/dt; %скорость Луны в системе отсчета, связанной с Землей vy = diff(Ym)/dt; V = (Vx.^2 + Vy.^2).^0.5 - (Vx.*vx + Vy.*vy)./((Vx.^2+Vy.^2).^0.5); %абсолютное значение скорости Луны %в гелиоцентрической системе координат
t11 = 0:dt:t1 - dt;
2. Функция petli2.m. В этой функции вычисляется предельное значение параметра, при котором появляются петли на траектории движения Луны. Предельные значения, на выбор, вычисляются для: · радиуса траектории Земли - r1 · радиуса траектории Луны - r2 · периода обращения Земли вокруг Солнца - t1 · периода обращения Луны вокруг Земли – t2 входные параметры: · r1 – радиус траектории Земли · r2 - радиус траектории Луны в системе отсчета, связанной с Землей · t1 – период обращения Земли вокруг Солнца · t2 – период обращения Луны вокруг Земли · n – переменная, обозначающая для какого параметра искать предельное значение · V - мгновенное значение разности между модулем скорости Земли и проекцией скорости движения Луны на направление скорости движения Земли
Выходной параметр один – искомое предельное значение, при котром появляются петли. Текст подпрограммы petli2.m:
function X = petli2(r1,r2,t1,t2,n,V)
if n == 1 dt = t1/2000; t = 0:dt:t1; cosFi = cos(2*pi*t*(t1 - t2)/(t1*t2)); mcos = max(cosFi); r11 = r2 * (t1/t2) * mcos; %при этом значении или меньшем появляются петли X = r11; end;
if n == 2 dt = t1/2000; t = 0:dt:t1; cosFi = cos(2*pi*t*(t1 - t2)/(t1*t2)); mcos = max(cosFi); r22 = r1*t2/(t1*mcos); %при этом значении или большем появляются петли X = r22; end;
if n == 3 dt = t1/2000; t = 0:dt:t1; cosFi = cos(2*pi*t*(t1 - t2)/(t1*t2)); mcos = max(cosFi); t11 = r1*t2/(r2 * mcos); %при этом значении или большем появляются петли X = t11; end;
if n == 4 dt = t1/2000; t = 0:dt:t1; cosFi = cos(2*pi*t*(t1 - t2)/(t1*t2)); mcos = max(cosFi); t22 = r2*t1*mcos/r1; %при этом значении или меньшем появляются петли X = t22; end;
Выражения для предельных значений параметров были получены аналитически из уравнений, описывающих траектроию движения Луны. Указанные выше функции luna.m и petli2.m вызываются из файла Interface.m. Он был создан после того, как интерфейс программы был нарисован и сохранен. Так как в нашей программе действия происходят после нажатия кнопки «start», то запускать наши подпрограммы будем из секции файла, связанного с этим элементом интерфейса. Секция «pushbutton1_Callback» отвечает за нажатие кнопки «Пуск». В эту секцию добавляем следующий текст:
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
%получаем значаения параметров из полей ввода r1 = str2double(get(handles.editR1,'String')); r1 = r1*(10^8); r2 = str2double(get(handles.editR2,'String')); r2 = r2*(10^5); t1 = str2double(get(handles.editT1,'String')); t1 = t1*(10^7); t2 = str2double(get(handles.editT2,'String')); t2 = t2*(10^6);
[Xm Ym V t11] = luna(r1,r2,t1,t2);
%определяем положение радиокнопки v(4) = 0; v(1) = get(handles.radiobutton1,'Value'); v(2) = get(handles.radiobutton2,'Value'); v(3) = get(handles.radiobutton3,'Value'); v(4) = get(handles.radiobutton4,'Value'); for i = 1:4 if v(i) == 1 n = i; end; end; Res = petli2(r1,r2,t1,t2,n,V; %находим предельное значение set(handles.resultText,'String',Res); %выводим его в окне
%строим графики axes(handles.axes1); plot(Xm,Ym); axes(handles.axes2); plot(t11,V);
|