
- •Лабораторная работа №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
- •Задания на лабораторную работу
- •Варианты задания

Пример использования данной программы:
>> simpleDialog Главное меню
1.Разложить число на множители
2.Выход
> 3 Ошибка ввода, повторите ввод
Главное меню
1.Разложить число на множители
2.Выход
> 1 Введите целое положительно число: 90
Разложение введенного числа на множители 2 3 3 5
Главное меню
1.Разложить число на множители
2.Выход
> 1 Введите целое положительно число: 4.3
Ошибка, введены некорректные данные Главное меню
1.Разложить число на множители
2.Выход
> 2
Для простого вывод содержимого переменных удобно использовать функцию disp, однако для форматированного вывода она не подходит, поэтому далее рассмотрим функцию fprintf.
Функция fprintf
Данная функция представляет широкие возможности по форматированному выводу в командное окно. Функция fprintf имеет переменное число аргументов:
fprintf(форматированная_строка ,A1 ,..., An)
где форматированная_строка — обычна строка, состоящая из элементов двух типов. Первый тип это обычные символы, которые непосредственно выводятся в консоль. Второй тип это управляющие последовательности, которые определяют некоторые специальные символы или то каким образом будут отображаться следующие аргументы функции (A1 ,..., An). Все управляющие последовательности начинаются с символа \ или %. Поэтому непосредственно включить эти символы в выводимый текст не получится.
Сначала рассмотрим вывод некоторых специальных символов. Перечислим наиболее важные из них:
53

•\n — перевод строки;
•\\ — обратная косая черта;
•%% - знак процента.
Продемонстрируем вывод этих символов и покажем отличие функции fprintf от
disp.
>>fprintf('30%% \\ 70%%\nEscape sequence\n'); 30% \ 70%
Escape sequence
>>disp('30%% \\ 70%%\nEscape sequence\n'); 30%% \\ 70%%\nEscape sequence\n
Как видно из примера функция disp выводит строку без изменения, в отличи от fprintf, которая заменять последовательность \n символом новой строки, последовательность \\ - \ и %% на %. Однако более интересным является управляющий символ %, задающий формат следующих аргументов в данном месте.
Общий формат управляющей последовательности начинающийся с символом % следующий:
%[номер_параметра][флаги][ширина][.точность] [подтип]спецификатор_преобразования
Например: «%3$0-12.5bu».
Обязательным полем в управляющей последовательности является только спецификатор преобразования. Спецификатор преобразования определяет каким способом будут отображаться последующие аргументы функции fprintf. Приведем некоторые спецификаторы формата, которые нам понадобятся в дальнейшем:
%d или %i — целое числа со знаком; %f — число с фиксированной запятой; %e — число в экспоненциальной форме; %s — строка.
Приведем пример использования данных спецификаторов:
>>fprintf('%s = %d\n', 'x', 10); x = 10
>>fprintf('%s = %e + %f\n', 'x', 105.15, 105.15); x = 1.051500e+02 + 105.150000
>>fprintf('%s = %d / %d', 'x', 1, 2);
x = 1 / 2>>
Как видно из данного примера аргументы, следующие после строки форматирования, должны следовать именно в тома порядке, в котором они используется в строке
54

форматирования. Т.е. например, если строка форматирования имеет вид '%s = %d\n', то первым аргументом после нее в функции fprintf должно быть строковое значение или совместимо с ним (MATLAB может выполнять неявные преобразования), которое будет подставлено вместо %s, аналогично последний аргумент будет подставлен на место %d.
Так же из примера видно отличие числа в форме с фиксированной запятой и числа в экспоненциальной форме. Число в экспоненциальной форме удобно использовать, когда выводимое значение очень большое или очень маленькое.
Из последней строки примера видно, что функция fprintf в отличии от disp не производит автоматический перевод строки, поэтому желательно в конце строки форматирования ставить символ перевода на новую строку.
Рассмотрим далее на примере поля отвечающие за ширину и точность. Например управляющую последовательность %10.5f. Первое число указывает минимальную ширину поля для вывод (при выводе числа в ширине учитывается знак числа, точка, числа и прочее). Второе число указывает точность, т. е. число знаков после запятой.
Приведем примеры:
>> fprintf('|%12.5f|\n|%12.2f|\n|%12.8f|\n', 12.3, -3, 1/3);
|12.30000|
| -3.00|
|0.33333333|
>> fprintf('|%12.5e|\n|%12.2e|\n|%12.8e|\n', 12.3, -3, 1/3); | 1.23000e+01|
| -3.00e+00| |3.33333333e-01|
Более подробное описание функции fprintf можно найти в справочной документации MATLAB.
Организация диалога с пользователем и вывод таблицы с использованием форматированного вывод
В предыдущих пунктах уже был продемонстрирован пример простого диалога с пользователем. В этом пункте будет рассмотрен более сложный пример, решающий следующую задачу:
Организовать диалог с пользователем для решения задачи составления таблиц со значениями следующих функций:
f (x )=e x
|
1 |
|
x |
− |
y2 |
|
|
f (x )= |
|
y=−∞∫ e |
2 |
dy |
|||
√ |
|
|
|
|
|||
(2 π) |
|
|
55

Для этих вычисления функций можно воспользоваться функций можно воспользоваться функциями MATALB exp и normcdf. Программа должна выводить информацию о данных функция в главном меню. Меню программы должно содержать следующие пункты:
•задание интервал для построения таблицы;
•построение таблицы;
•выход.
Приведем пример программы, реализующая данный функционал (файл exmpleLab5.m):
function exampleLab5( )
%пример организации диалога с пользователем и форматированного вывода в
%данном примере будет приведена программа для расчета и вывода таблиц
%значений функций exp(x) и normcdf(x)
%инициализируем параметры для построения таблицы значениями по умолчанию
xMin = -1; dx = 0.1; xMax = 1;
%выбранный пункт меню
choiceMenu = 0;
% организация главного меню while choiceMenu~= 3
% выводим главном меню
fprintf('Построение таблиц для функций:\n'); fprintf('e^x\n');
fprintf('( 1 / (2 * pi)^0.5 ) * e^( - x^-2 / 2 )\n'); fprintf('Текущий диапазон: %8.2f : %8.2f : %8.2f\n', xMin, dx,
xMax);
fprintf('Меню:\n');
fprintf('1. Построить таблицу:\n'); fprintf('2. Изменить диапазон:\n'); fprintf('3. Выход:\n');
%получить выбор пользователя choiceMenu = input('> ');
%проверить корректность полученного значения
if ~isscalar(choiceMenu) || ~isreal(choiceMenu) || (choiceMenu ~= round(choiceMenu))
fprintf('Ошибка ввода, повторите ввод.\n'); elseif choiceMenu == 1
% печать таблицы
56

printTable(xMin, dx, xMax); elseif choiceMenu == 2
%получим значения для нового диапазона [codeRes, xMinNew, dxNew, xMaxNew] = getRange();
%если ошибок не произошло, то запомним новые значения if codeRes == 0
xMin= xMinNew; dx = dxNew; xMax = xMaxNew;
else
fprintf('Ошибка ввода.\n');
end
end
% пропустим строку, чтобы отделить предыдущие действия fprintf('\n');
end
end
function [codeRes, xMin, dx, xMax] = getRange()
%Получить от пользователя диапазон значений для построения таблицы.
%Выходные данные: codeRes - успешность получения данных от пользователя: 0
%- данные успешно введены 1 - пользователь прекратил ввод или произошла
%ошибка ввода (для упрощения программы, в случае если введены
%некорректные данные прекратим ввод и вернемся в главное меню) xMin : dx :
%xMax - значения х в таблице
%инициализация переменных
codeRes = 0; xMin = 0; dx = 1; xMax = 1;
% получим xMin
xMin = input('Введите минимальное значение: ');
%проверка корректности введенного значения if ~isscalar(xMin) || ~isreal(xMin)
codeRes = 1; return;
end
%получим dx
dx = input('Введите шаг: ');
% проверка корректности введенного значения
57

if ~isscalar(dx) || ~isreal(dx) codeRes = 1;
return;
end
% получим xMax
xMax = input('Введите максимальное значение: '); % проверка корректности введенного значения
if ~isscalar(xMax) || ~isreal(xMax) codeRes = 1;
return;
end end
function printTable(xMin, dx, xMax)
%Вывод таблицы для заданных функций в диапазоне xMin : dx : xMax
%вывод шапки таблицы
fprintf('/ |
--------------------------------- x | |
exp(x) | |
\\\n'); |
fprintf('| |
normcdf(x) |\n'); |
||
fprintf('|------- ------------ ------------ |
| |
| |
|\n'); |
%вывод содержимого таблицы for x = xMin : dx : xMax
fprintf('|%7.3f|%12.4f|%12.4f|\n', x, exp(x), normcdf(x));
end
%закроем таблицу
fprintf('\\--------------------------------- |
/\n'); |
end
Пример работы с данной программой:
>> exampleLab5
Построение таблиц для функций: e^x
( 1 / (2 * pi)^0.5 ) * e^( - x^-2 / 2 )
Текущий диапазон: -1.00 : 0.10 : 1.00 Меню:
1.Построить таблицу:
2.Изменить диапазон:
3.Выход:
> 2 Введите минимальное значение: -4
Введите шаг: 0.5 Введите максимальное значение: 4
Построение таблиц для функций: e^x
58