Лабораторная работа № 6
ПРОГРАММИРОВАНИЕ В MATLAB.
УПРАВЛЕНИЕ ПРОЦЕССОМ ВЫЧИСЛЕНИЯ.
ПРИКЛАДНЫЕ ЗАДАЧИ ПРОГРАММИРОВАНИЯ
Цель. Ознакомление с основными способами программирования всреде MATLAB, возможностями управления процессом вычисления, организации диалога и ввода данных.
6.1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Программа в MATLAB представляется последовательностью предложений (команд, функций), входящих в алфавит языка. После ввода команды и нажатия Enter она выполняется и результаты выводятся на экран. Если вывод результатов не нужен, то после предложения ставится ";". Таким образом можно последовательно наращивать программу, отслеживая результаты вычислений.
1. Управление процессом вычислений осуществляется с помощью ряда конструкций.
Цикл for (цикл с параметром). Формат оператора:
for <параметр цикла> = <начальное значение>:<конечное значение>;
<тело цикла>
end;
Например, для формирования матрицы Гильберта размерностью M×N можно использовать такую последовательность предложений:
for i=1:m;
for j=1:n;
A(i,j)=1/(i+j-1);
end; % конец цикла по j
end; % конец цикла по i
MATLAB запускает циклы с нецелочисленным приращением.
for <параметр> = <нач. значение>:<шаг>:<конечное значение>;
<тело цикла>;
end;
Цикл while (цикл с предусловием). Выполнение тела цикла производится до тех пор, пока некоторое логическое условие является истинным.Простой пример: чему равно первое положительное число, факториал которого содержит 100 десятичных цифр?
n=1;
while prod(1:n)<1.e100;
n=n+1;
end
Ветвление if – else. Формат оператора:
if <условие> Оператор1; else Оператор2; end;
Если условие истинно, то выполняется группа: Оператор1, иначе – Оператор2.
Переключатели switch. Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch:
switch Bыражение1
case Выражение2
Список инструкций
case {Выражение3, Выражение4, Выражение5....}
Список инструкций
otherwise Список инструкций end
Если выражение после заголовка switch имеет значение одного из выражений, то выполняется блок операторов case, в противном случае – список инструкций после оператора otherwise. При выполнении блока case исполняются те списки инструкций, для которых Выражение совпадает с Выражением1. Обратите внимание на то, что Выражения 2–5 могут быть числами, константами, переменными, векторами ячеек и строчными переменными. В последнем случае оператор case истинен, если функция strcmp (значение, выражение) возвращает логическое значение «истина».
2. Диалоговый ввод. При написании программ может возникатьнеобходимость ввода с клавиатуры параметров без остановки процесса вычисления и запуска скрипов или функций заново. Приведем пример программы, реализующей диалоговый ввод. Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r.
% Вычисление длины окружности с диалоговым вводом радиуса
r=0;
while r>=0,
r = input('Введите радиус окружностиr=');
if r>=0 disp(' Длина окружности L='); disp(2*pi*r), end
end
Обратите внимание на то, что здесь показывается пример организации простейшего диалога. Он реализован с помощью команды input:
input('Введите радиус окружностиr=');
При выполнении этой команды вначале выводится запрос в виде строки, затем происходит остановка работы программы и ожидается ввод значения радиуса r (в общем случае числа). Ввод подтверждается нажатием клавиши Enter, после чего введенное число присваивается переменной г. C помощью команды disp при r>=0 выводится надпись «Длина окружности L=» и вычисленное значение длины окружности.
Приведенные строки включены в управляющую структуру while...end. Это необходимо для циклического повторения вычислений вводом значений r. Пока r>=0, цикл повторяется. Но стоит задать r<0, вычисление длины окружности перестает выполняться, а цикл завершается.
Функция Input может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде:
input('Комментарий', V)
При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример:
» S=input('Введите выражение ','s') Введите выражение (Вводим)
2*sin(l)
S =
2*sin(l)
» eval(S)
ans =
1.6829
Обратите внимание на то, что функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде.
3. Функции с переменным числом аргументов. Часто имеется необходимость создавать универсальные функции, производящие те или иные действия в зависимости от числа входных переменных.
При создании таких функций весьма полезны две приведенные ниже функции:
nargin – возвращает число входных параметров данной функции;
nargout – возвращает число выходных параметров данной функции.
Пусть, к примеру, мы хотим создать функцию, вычисляющую сумму квадратов пяти аргументов xl, х2, хЗ, х4 и х5.
Обычный путь состоит в следующем – создаем функцию с именем sum2_5:
function f=sum2_5(x1,x2,x3,x4,x5) ;
f=x1^2+x2^2+x3^2+x4*2+x5^*2;
При наличии всех пяти аргументов функция работает корректно. Но если аргументов менее пяти, она выдает сообщение об ошибке. С помощью функции nargin можно создать функцию sum2_5m, которая работает корректно при любом числе заданных входных аргументов в пределах от 1 до 5:
function f=sum2m_5(x1 ,x2 , хЗ ,x4 , x5) ;
n=nargin;
if n==1 f=x1^2; end
if n==2 f=x1^2+x2^2;end
if n==3 f=x1^2+x2^2+x3^2; end
if n==4 f=x1^2+x2 ^ 2+x3^2+x4 ^ 2: end
if n==5 f=x1^2+x2^2+x3^2+x
Итак, можете проверить, что при изменении числа входных параметров от 1 до 5 вычисления проходят корректно. При большем числе параметров выводится сообщение об ошибке. Это уже действуетвстроенная в интерпретатор MATLAB система диагностики ошибок