Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ispolzovanie_Matlab_Dlya_Modelirovania_Dvizheni...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

Полезные команды

Пара команд tic и toc позволяет вычислить время выполнения системой той или иной операции. Если в командной строке набрать приведенную ниже последовательность команд:

tic, операция, toc

где операция – это команда или набор команд, то будет отображен не только результат выполнения заданной операции, но и приблизительное время ее выполнения (в секундах). При этом функция tic запускает секундомер, а функция toc выводит вычисленное время. Это время зависит от нескольких различных факторов и может изменяться, поэтому для получения более точных значений времени следует провести несколько измерений, а результаты усреднить.

Пары команд tic-toc могут вкладываться друг в друга.

Команда rand(m,n) возвращает матрицу размерностью m×n, содержащую псевдослучайные числа из равномерного распределения на открытом интервале (0, 1).

Пример вычисления числа π методом Монте-Карло:

Команда comet(x) отображает график кометы вектора x. Это анимированный график, в котором кружок (голова кометы) вычерчивает точки на экране. Тело кометы – это замыкающий участок, следующий за головой кометы. Хвост кометы – это сплошная линия, фиксирующая целую функцию.

Команда comet3(x) отображает 3-D график кометы вектора x.

Команда rotate(h,direction,alpha) вращает графический объект с дескриптором h в трехмерном пространстве в соответствии с правилом правой руки. Здесь alpha – угол вращения, direction – двух-или трех-мерный вектор, определяющий ось вращения

Решение систем дифференциальных уравнений

Используемая в следующих разделах стандартная функция ode45 предназначена для решения задачи Коши обыкновенных дифференциальных уравнений методом Рунге-Кутты 4 и 5 порядка.

Синтаксис:

[t, Y]=ode45(odefun,tspan,y0)

[t, Y]=ode45(odefun,tspan,y0,options)

Входные параметры:

odefun – указатель функции, которая возвращает правые части обыкновенных дифференциальных уравнений;

tspan – вектор, содержащий значения моментов времени, для которых интегрируется система.

y0 – вектор начальных условий;

options – параметр, предназначенный для изменения свойств интегрирования по умолчанию. Структура параметра option получается в результате выполнения стандартной функции odeset, которая принимает в качестве параметров пары «свойство»-«значение».

Выходные параметры: t – вектор временных точек; Y – вектор результатов интегрирования, соответствующих временным точкам из t.

Для настройки в программном коде используются следующие свойства интегратора [2]:

Свойство

Значение

Описание

RelTol

Положительная скалярная величина (значение по умолчанию 1e-3)

Допустимая относительная погрешность, которая относится ко всем компонентам вектора решения.

AbsTol

Положительная скалярная величина или вектор (значение по умолчанию 1e-6)

Допустимые абсолютные погрешности, которые относятся к отдельным компонентам вектора решения.

OutputFcn

Указатель функции

Функция, которую должен вызывать ode45 после каждого успешного шага интегрирования.

OutputSel

Вектор индексов

Указывает, какие компоненты вектора решения должны быть переданы функции вывода (OutputFcn).

Refine

Целое положительное

Увеличивает количество точек вывода на коэффициент Refine.

InitialStep

Положительная скалярная величина

Предлагаемый начальный размер шага.

В качестве примера работы функции ode45 будет рассмотрена задача визуализации движения математического маятника. Вектор фазовых переменных данной системы .

В качестве параметров системы задаются длина l маятника, начальные условия интегрирования:

global l;

l = 2;

y0= [0.5 0]

Следующими командами интегрируются дифференциальные уравнения движения с начальными условиями y0 в промежутке времени от 0 до 20 с шагом 0.01.

tout=[0:0.01:20];

options = odeset('RelTol',1.e-4,'AbsTol', [1e-5 1e-5],'OutputFcn','odeplot');

[t,y]=ode45(@f,tout,y0,options)

Символом @ обозначается указатель на функцию. Физически указатель хранит адрес функции. Правые части уравнений движения являются выходными параметрами функции f, описанной ниже.

Результатом вызова функции odeplot на каждом шаге интегрирования будет следующий график:

Далее для визуализации маятника понадобятся значения угла отклонения маятника от вертикали – y(:,1), вектор этих значений трансформируется и сохраняется в переменную q:

q=y(:,1)'

Далее строится изображение.

figure('Name', 'Математический маятник');

Устанавливаются свойства осей

xlim([-3 3]);

axis('equal')

hold on;

ylim([-3 0.5]);

Чертится подвес маятника со штриховкой:

line([0 -0.1 0.1 0],[0 0.1 0.1 0],'LineWidth',2,'Color','k');

line([-0.1 0],[0.1 0.2 ],'LineWidth',2,'Color','k')

line([0 0.1],[0.1 0.2 ],'LineWidth',2,'Color','k')

line([0.1 0.2],[0.1 0.2 ],'LineWidth',2,'Color','k')

text(0.1,0,'O')

Чертится вертикальная линия:

line([0 0],[0.5 -3],'LineWidth',1,'Color','k','LineStyle','--')

Вычисляются координаты конца маятника

xo = l*sin(q(1,1));

yo = l*cos(q(1,1));

Рисуется маятник:

h_sterjen1 = line([0 -xo],[0 -yo],'LineWidth',2,'Color','k');

На рисунке ставится точка А:

dist = 0.2;

a_txt = text(-xo-dist ,-yo-dist ,'A');

R=0.5 %расстояние от т.О до метки угла фи.

Указывается угол ϕ:

fi_txt = text(-(R+dist)*sin(q(1,1)/2),-(R+dist)*cos(q(1,1)/2),'\phi');

fi=0:0.01:q(1,1)

h_angle=line(-R*sin(fi),-R*cos(fi),'Color','k', 'LineStyle', '--')

Указывается текущее время:

info_txt = text(-2,1,'t = 0');

Рисуется точка на конце маятника:

h_circle=line(xo,yo, 'Marker','.','MarkerSize',30,'Color','k');

Далее с использованием дескрипторов визуализируется положение маятника в каждый момент времени (len – конечный момент времени)

len=length(t);

for i=1:len

xo = l*sin(q(1,i)); %Координаты центра диска

yo = l*cos(q(1,i));

x_fi_txt=(R+dist)*sin(q(1,i)/2);% Координаты метки угла фи

y_fi_txt=(R+dist)*cos(q(1,i)/2);

set(h_sterjen1,'XData',[0 -xo]);

set(h_sterjen1,'YData',[0 -yo]);

set(h_circle,'XData',-xo);

set(h_circle,'YData',-yo);

if q(1,i)>0

fi = 0:0.01:q(1,i);

else

fi = - (0:0.01:-q(1,i));

end

set(h_angle,'XData',-R*sin(fi));

set(h_angle,'YData',-R*cos(fi));

set(a_txt,'Position',[-xo-dist -yo-dist]);

set(fi_txt, 'Position', [-x_fi_txt, -y_fi_txt]);

set(info_txt,'String',['t = ',num2str(t(i))]);% Текущее время

pause(0.02);

end;

Ниже указан программный код функции, возвращающей правые части уравнений движения.

function dydt = f(t, y)

g = 9.8

global l

fi = y(1)

fit = y(2)

dydt(1)=fit;

dydt(2)= -g/l * sin(fi);

dydt=dydt';

В следующих главах рассматривается визуализация более сложных примеров с такими дополнительными возможностями, как ввод численных значений параметров пользователем, вывод графиков системы, визуализация системы при помощи определенных пользователей функций – графических примитивов.

Задания.

Выведите на экран графики решений систем дифференциальных уравнений:

  1. при , , , ;

  2. при , , , ;

  3. при , , , .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]