- •А.К. Ефремов интегрированная
- •Рекомендовано редсоветом мгту им. Н.Э. Баумана
- •Isbn 5-7038-2301-3 мгту им. Н.Э. Баумана, 2003
- •1. Интерфейс системЫ matlab
- •1.1. Программная группа matlab
- •1.2. Командное окно matlab
- •1.2.1. Главное меню
- •1.2.2. Панель инструментов
- •1.3. Настройка параметров рабочего пространства
- •1.4. Справочная система matlab
- •2. Работа в режиме прямых вычислений
- •3. Базовые объекты системы matlab
- •3.1. Способы формирования матриц и векторов
- •3.2. Матричные операции и функции
- •3.3. Решение линейных уравнений
- •3.4. Вычисление корней полиномов
- •3.5. Обработка данных
- •4. Графические средства системы matlab
- •4.1. Графические объекты на плоскости
- •4.1.1. Функция plot
- •4.1.2. Функции fplot и ezplot
- •4.1.3. Другие графические функции
- •4.1.5. Обработка данных
- •4.2. Построение трехмерных поверхностей и тел
- •4.2.1. Основные графические функции
- •4.2.2. Дополнительные возможности
- •5. Основы программирования в среде matlab
- •5.1. Общие положения
- •5.2. Примеры простых программ
- •Xlabel('sin(X)') % Надпись по оси х
- •Xlabel('X') % Надпись по оси абсцисс
- •5.3. Программа с использованием внешней функции
- •5.4. Дополнительные программы
- •5.4.1. Дифференцирование функций
- •Xlabel('Число элементов массивов')
- •Xlabel('Число элементов массивов')
- •5.4.2. Функции eval, feval
- •Xlabel(‘t’), ylabel(‘y, dy/dt’)
- •Xlabel(‘y’), ylabel(‘dy/dt’)
- •6. Символьные вычисления
- •6.1. Определение символьной переменной
- •6.2. Основные функции
- •6.3. Математический анализ
- •6.3.1. Функция limit – предел функции одной переменной
- •6.3.2. Функция diff – дифференцирование функции одной переменной
- •6.3.3. Функция int – интегрирование функции одной переменной
- •6.3.4. Функция symsum – суммирование членов рядов
- •6.3.5. Функция taylor – разложение функции в ряд Тэйлора
- •6.4. Символьное решение уравнений
- •6.4.1. Решение отдельных уравнений
- •6.4.2. Решение систем уравнений
- •6.4.3. Решение дифференциальных уравнений
- •7. Пакет моделирования динамических систем simulink
- •7.1. Рабочая среда Simulink
- •7.2. Представление динамической системы в виде структурной схемы
- •7.3. Основные приемы работы в среде Simulink
- •7.4. Модель с ветвлением соединений
- •7. 5. Интегрирование дифференциального уравнения
- •Список литературы
- •Оглавление
- •Приложение
- •Разделы справочной системы
- •Программирования и отладки программ
- •Графические средства matlab
- •Символьные вычисления (symbolic math toolbox)
5.2. Примеры простых программ
В разд. 4 было показано, как фигуры Лиссажу можно построить в командном режиме с помощью одного из важных элементов программирования – цикла.
Входим в меню File-New-M-file, открывается окно текстового редактора (рекомендуется использовать встроенный редактор, поскольку он совмещен с отладчиком), в котором необходимо набрать следующую программу:
% Построение фигур Лиссажу
x=pi*[0:0.01:2]; % Диапазон значений x (вектор)
X=sin(x);
figure % Открываем графическое окно
for k=1:6 % Кратность частот до 6
Y=cos(k*x); % Гармоническая функция k-й кратности
plot(X,Y)) % Построение фигур Лиссажу
grid % Координатная сетка
pause % Пауза до нажатия клавиши [Enter]
end
title('Фигуры Лиссажу') % Название графика
Xlabel('sin(X)') % Надпись по оси х
ylabel('cos(kx)') % Надпись по оси y
pause
close % Закрываем графическое окно
Фигуры Лиссажу относятся к числу параметрических зависимостей Y(X), поскольку исключена переменная х.
Структура текста приведенной упрощена для большей наглядности, хотя в принципе MATLAB не накладывает жесткие требования, за исключением того, что операторы, записываемые в одну строку, должны отделяться запятыми (как в командном режиме). В тексте script-файла символы (,) в конце строки могут быть опущены 3. В первой же строке символ (;) должен быть оставлен, чтобы подавить вывод значений x на экран. Сохраняем файл в пользовательской папке, присвоив ему имя lissajou.m (расширение *.m присваивается автоматически), и закрываем окно редактора.
Чтобы запустить программу, с помощью главного меню (File-Run Script…) вызываем диалоговое окно.
Теперь можно в соответствии с приглашением (Type the name of the script you want to run = Введите имя script-файла, который вы хотите запустить на исполнение) ввести полный путь к файлу или воспользоваться поисковой системой (Browse…).
Чтобы автоматизировать процедуру запуска программы в дальнейшем, набирая обычную команду системы MATLAB (» lissajou), необходимо воспользоваться кнопкой Path Browser на панели инструментов, которая вызывает диалоговое окно. С помощью этого окна находят нужную папку (Browse…), а затем вводят команду File-Save Path. В этом случае путь сохраняется до конца текущей сессии. Чтобы зафиксировать этот путь, необходимо ввести команду Path-Add to Path… (путь хранится в файле pathdef.m); для удаления пути из памяти используют команду Path-Remove from Path.
Семейство экспонент (файл exponent.m)
% Построение экспонент
x=0:0.025:6; % Диапазон значений x
figure % Открываем графическое окно
for k=0.5:0.5:4 % Параметр экспоненты задан с шагом 0.5
y=1-exp(-k*x); % Уравнение экспоненты
plot(x,y) % Построение графика экспоненты
pause(1) % Пауза 1 с
hold on % Фиксация графика на экране
end
grid
Xlabel('X') % Надпись по оси абсцисс
ylabel('y') % Надпись по оси ординат
gtext('k=0.5') % Надпись около первой кривой
gtext('k=4.0') % Надпись около последней кривой
gtext('Экспоненты: 1-exp(-kx)’) % Название графика
pause % Пауза (до нажатия клавиши [Enter])
close % Закрываем графическое окно
Программа построения семейства спиралей в многооконном формате (файл spiral.m):
% Многооконная графика
tet=0:0.01:20;
teta0=input('teta0 => ') % Начальное значение полярного угла
teta=tet+teta0;
m=input('m ==> '); % Ввод числа подокон по вертикали
n=input('n ==> '); % и по горизонтали
p=m*n; % Общее число окон
figure % Открываем графическое окно
k=1;
for b=0:0.1:1
subplot(m,n,k) % Открываем k-е подокно (k <= p)
r=exp(-b*tet); % Уравнение спирали
polar(teta,r)
grid
pause(1)
k=k+1;
if k>p % Если k > p, начинается новый
k=1; % отсчет подокон
clf % Очистка окна
end
end
pause
close
Построим графики эпициклоиды и гипоциклоиды. Кривую, называемую эпициклоидой, описывает точка окружности радиусом a, которая катится без скольжения по направляющей окружности радиусом b. Ее уравнения в параметрической форме:
![]()
Вид кривых зависит от значения параметра
:
если m – целое число, кривая состоит
из m равных дуг (при
получается кардиоида, или улитка
Паскаля); если
,
где p и q – целые числа, кривая
состоит из p равных пересекающихся
дуг; если m – число иррациональное,
кривая состоит из бесконечного числа
равных друг другу дуг (кривая не замкнута).
Если множитель
отличен от единицы, то получаем,
соответственно, либо укороченную
(
),
либо удлиненную (
)
эпициклоиду.
Программа epi.m реализует построение графика параметрической зависимости:
% Построение эпициклоиды
fi=0:0.01:8*pi;
lam=input(‘lam ==> ‘);
a=input('a ==> ');
b=input('b ==> ');
m=b/a
x=(a+b)*cos(fi)-lam*a*cos((a+b)*fi/a);
y=(a+b)*sin(fi)-lam*a*sin((a+b)*fi/a);
plot(x,y)
grid
title('Эпициклоида')
pause
close
Если окружность радиусом a катится внутри окружности радиуса b, точка описывает кривую, называемую гипоциклоидой; ее уравнения:
![]()
В этом случае очевидно, что всегда
:
при
получаем гипоциклоиду с тремя ветвями;
при
– астроида.
В зависимости от значения параметра , как и в предыдущем случае, гипоциклоида будет укороченной или удлиненной.
Данную кривую можно построить с помощью программы (hipo.m):
% Построение гипоциклоиды
fi=0:0.01:8*pi;
lam=input(‘lam ==> ‘);
a=input('a ==> ');
b=input('b ==> ');
m=b/a
x=(b-a)*cos(fi)+lam*a*cos((b-a)*fi/a);
y=(b-a)*sin(fi)-lam*a*sin((b-a)*fi/a);
plot(x,y)
grid
title('Гипоциклоида')
pause
clf
