
- •Лабораторная работа №1. Введение в MATLAB
- •Краткая характеристика MATLAB
- •Описание интерфейса MATLAB
- •Работа с MATLAB в режиме командной строки
- •Объявление переменных
- •Удаление созданных переменных
- •Создание матриц и векторов
- •Поэлементные операции над матрицами
- •Основы построения графиков
- •Задания на лабораторную работу
- •Примечание к заданию
- •Варианты задания
- •Лабораторная работа №2. Программы в MATLAB
- •Скрипты
- •Рабочая область в MATLAB
- •Комментарии
- •Функции
- •Фактические и формальные параметры функции
- •Рабочая область функции
- •Скрипты и функции
- •Передача параметров по значению
- •Анонимные функции
- •Документирование функций
- •Отладка
- •Задание на лабораторную работу
- •Варианты заданий
- •Лабораторная работа №3. Условные выражения и циклы
- •Управление потоками в MATLAB
- •Оператор ветвления if/elseif/else
- •Оператор цикла for
- •Оператор цикла while
- •Проверка корректности входных переменных
- •Задания на лабораторную работу
- •Варианты задания
- •Лабораторная работа №4. Вектора и матрицы
- •Создание векторов и матриц в MATLAB.
- •Обращение к элементам матриц.
- •Заполнение матриц
- •Операции деления, умножения и возведения в степень.
- •Создание матриц специального вида
- •Объединение матриц
- •Удаление строк и столбцов
- •Задания на лабораторную работу
- •Лабораторная работа №5. Ввод-вывод
- •Организация ввод-вывод в MATLAB
- •Строки
- •Функция disp
- •Функция input
- •Функция fprintf
- •Организация диалога с пользователем и вывод таблицы с использованием форматированного вывод
- •Задания на лабораторную работу
- •Варианты задания
- •Лабораторная работа №6. Графические возможности в MATLAB
- •Основы графики в MATALB
- •Оформление графиков
- •Вывод нескольких графиков в текущее окно
- •Функция eval
- •Задания на лабораторную работу
- •Варианты задания

Функция eval
Для выполнения команд MATLAB их необходимо записать в m-файл или ввести в
командное окно MATLAB, однако иногда бывает необходимо выполнить некоторые команды или выражения, которые заранее неизвестны, и например, вводятся пользователем во время работы программы. Для решения подобных проблем можно использовать функцию eval, которая имеет следующий синтаксис:
eval('выражение')
Функция eval принимает в качестве входного аргумента строку, которую интерпретирует интерпретирует как выражение MATLAB и вычисляет его.
Так например, данная функция будет полезна, если необходимо, чтобы пользователь программы ввел некоторую функцию, которая будет участвовать в работе программы. В качестве примера приведем небольшую функцию, которая предлагает пользователю ввести функцию и интервал для построения ее на графике, и на основе введенных данных строит график:
function simplePlotDialog()
%функция для организации простого диалога для построения графика fprintf('Построение графика функции\n');
%попросим пользователя ввести функцию
67

%корректность введенных данных проверять не будем fBody = input('Введите функцию: f(x) = ', 's');
%тело функции введено пользователем, теперь
%осталось составить саму функцию
%как помните, в лабораторной работе №2 упоминались анонимные функции,
%для объявления которых использовалось выражения типа:
%переменная = @(список_аргументов) тело_функции;
%так как тело функции уже введено пользователем, то
%создадим анонимную функция, которую используем
%для вычисления точек графика
f = eval(['@(x)' fBody]);
%помните что строки это векторы-строки, поэтому
%для их конкатенации (объединения строк)
%можно использовать выражение:
%[срока_1 строка_2]
fprintf('Введите диапазон в которых будем строить график\n');
% ввод нижней границы диапазона xMin = NaN;
while isnan(xMin)
xMin = input('Нижняя граница диапазона: '); % проверка, что xMin это число
if ~isscalar(xMin) || isnan(xMin) || ~isreal(xMin) xMin = NaN;
fprintf('Ошибка, некорректные данные\n');
end
end
% ввод верхней границы диапазона xMax = NaN;
while isnan(xMax)
xMax = input('Верхняя граница диапазона: '); % проверка, что xMin это число
if ~isscalar(xMax) || isnan(xMax) || ~isreal(xMax) xMax = NaN;
fprintf('Ошибка, некорректные данные\n');
end
end
%подготовка данных к построению графика x = xMin : (xMax-xMin) / 200 : xMax;
y = zeros(size(x)); for i = 1:length(x); y(i) = f(x(i));
end
%строим график
plot(x, y);
68

xlabel('x');
ylabel('y'); xlim([xMin xMax]);
title(['f(x) = ' fBody]); grid on;
end
Приведем пример работы данной программы:
>> simplePlotDialog Построение графика функции
Введите функцию: f(x) = sin(x) / x
Введите диапазон в которых будем строить график Нижняя граница диапазона: [3 3] Ошибка, некорректные данные Нижняя граница диапазона: -30 Верхняя граница диапазона: 30
>>
В результате выполнения программы появится следующий график:
Задания на лабораторную работу
В соответствии в вариантом выбрать 3 функции. Написать программу, которая попросит пользователя ввести четвертую функцию (по аналогии с примером функции simplePlotDialog, которая была продемонстрирована выше). Попросить пользователя ввести диапазон для построения функций. Далее все четыре функции построить на одном графике. График и оси подписать, так же добавить к графику легенду с формулами построенных функций. На графике включить сетку. Стили линий, маркеров и цвета линий выбрать самостоятельно.
69
Варианты задания
Номер |
функция 1 |
|
|
|
|
|
|
функция 2 |
|
|
функция 3 |
|
|
|
|
|||||||||
варианта |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
−x |
|
|
|
|
|
|
|
|
|
f 3 |
(x )=10sin(0.1 x + |
π |
||||||||
1 |
f 1 (x )=10sin( x)e 6 π |
|
f 2(x )=−x2+5 x |
2 ) |
||||||||||||||||||||
2 |
|
|
|
−x2 |
|
f 2(x )=x 2−5 x |
f 3(x )=5sin (0.2 x ) |
|
|
|||||||||||||||
f 1 (x )=5cos( x)e |
4 π |
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
3 |
f 1 (x )=sin(1.1 x )+sin(0.9 x) |
f 2(x )=0.5 x |
2 |
+5 x |
f 3 |
(x )=2sin (0.3 x− |
π |
) |
||||||||||||||||
|
|
|
2 |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||||
4 |
f 1(x )=cos(x ) sin(20 x) |
f 2(x )=0.5 x |
2 |
−5 x |
f 3 |
(x )=cos(0.1 x + |
π |
) |
|
|||||||||||||||
|
|
|
2 |
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||||
5 |
f 1 (x )=sin( x) cos(20 x) |
f 2 (x )=−0.3 x2 +x +10 |
|
f 3 (x )=sin(0.2 x) |
|
|
|
|||||||||||||||||
6 |
f 1 (x )=sin(20 x) x |
2 |
|
|
f 2 (x )=−0.6 x |
2 |
+2 x+5 |
f 3 |
(x )=cos(0.3 x + |
π |
) |
|
||||||||||||
|
|
|
|
|
|
2 |
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
2 |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
π |
|
|
||||
7 |
f 1(x )=sin( x ) |
|
|
|
|
|
f 2(x )=2 x |
|
|
−15 |
f |
3 |
(x )=sin(0.4 x+ |
4 |
) |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
8 |
f 1 (x )=cos(x2 ) |
|
|
|
f 2 (x )=−2 x2 +15 |
|
f 3 (x )=cos(0.1 x) |
|
|
|
||||||||||||||
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
f 3 |
(x )=sin(0.2 x− |
π |
) |
|
|||
9 |
f 1 (x )=sin( x ) |
|
|
|
|
|
f 2 (x )=−0.1 x +x |
2 |
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
10 |
f 1(x )=sin (x ) |
|
|
|
|
|
f 2(x )=0.1 x2 −x |
f 3 |
(x )=2cos(0.3 x + |
π ) |
||||||||||||||
|
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
||
11 |
f 1 (x )=sin(10 x) e |
|
x |
|
f 2(x )=0.1 x2 −3 |
|
f 3 ( x)=sin (0.4 x ) |
|
|
|
||||||||||||||
10 |
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
12 |
f 1 (x )=sin( x)cos(x) |
|
f 2 (x )=0.3 x |
2 |
−3 x |
f 3 |
(x )=cos(0.5 x + |
π |
) |
|
||||||||||||||
|
|
|
|
2 |
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
2 |
|
|
|
|
|
π |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f 3 |
(x )=3sin(0.1 x− |
|
) |
||||||
13 |
f 1(x )=sin(10 x)(50−x ) |
f 2(x )=0.4 x +4 |
2 |
|||||||||||||||||||||
|
|
|
|
|
||||||||||||||||||||
|
|
2 |
|
|
|
|
|
|
|
2 |
|
|
|
|
f 3 |
(x )=2cos(0.2 x + |
π |
) |
||||||
14 |
f 1 (x )=sin(5 x )(x −10 x−5) |
f 2 (x )=0.5 x |
|
|
|
−x +1 |
2 |
|||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||||
15 |
f 1(x )=cos(4.9 x )+cos(5.1 x) |
f 2(x )=0.16 x 2−x +5 |
f 3(x )=2sin (0.3 x) |
|
|
70