Input('Комментарий','s')
При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример:
>> S=input('Введите выражение ','s')
Введите выражение (Вводим) 2*sin(1)
S =
2*sin(1)
>> eval(S)
ans =
1.6829
Обратите внимание на то, что функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде. Вообще говоря, возможность ввода любого символьного выражения в сочетании с присущими языку программирования MATLAB управляющими структурами открывает путь к созданию диалоговых программ любой сложности.
Условный оператор if…elseif…else…end. Условный оператор if в общем виде записывается следующим образом:
If Условие
Инструкции_1
elseif Условие
Инструкции_2
else
Инструкции_3
end
Эта конструкция допускает несколько частных вариантов. В простейшем, типа if…end:
If Условие Инструкции end
пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются Инструкции, составляющие тело структуры if…end. При этом оператор end указывает на конец перечня инструкций. Инструкции в списке разделяются оператором , (запятая) или ; (точка с запятой). Если Условие не выполняется (дает логическое значение 0, то есть «ложь»), то Инструкции также не выполняются.
Еще одна конструкция
If Условие Инструкции_1 else Инструкции_2 end
выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае.
Условия записываются в виде:
Выражение_1 Оператор_отношения Выражение_2
причем в качестве Операторов_отношения используются следующие операторы: ==, <, >, <=, >= или ~=. Все эти операторы представляют собой пары символов без пробелов между ними.
Циклы типа for…end. Циклы типа for…end обычно используются для организации вычислений с заданным числом повторяющихся циклов. Конструкция такого цикла имеет следующий вид:
for var=Выражение, Инструкция, …, Инструкция end
Выражение чаще всего записывается в виде s:d:e, где s — начальное значение переменной цикла var, d — приращение этой переменной и e — конечное значение управляющей переменной, при достижении которого цикл завершается. Возможна и запись в виде s:e (в этом случае d=1). Список выполняемых в цикле инструкций завершается оператором end.
Точка с запятой после выражения в теле цикла предотвращает повторения вывода результатов на экран.
Хорошим стилем являются отступы при использовании циклов для лучшей читаемости, особенно, когда они вложенные.
Пример 1. Применение цикла для получения квадратов значений переменной цикла:
for i=1:5
i^2,
end;
ans = 1
ans = 4
ans = 9
ans = 16
ans = 25
for x=0:.25:1
x^2,
end;
ans = 0
ans = 0.0625
ans = 0.2500
ans = 0.5625
ans = 1
Возможны вложенные циклы.
Пример 2. Программа создания вектора A:
n=10;
for k = 1:n;
if k<=3
A(k)=k+1;
elseif (k>3 & k<=10)
A(k)=k+2;
else
A(k)=k+3;
end;
end;
A =
2 3 4 6 7 8 9 10 11 12
Пример 3. Программа создания матрицы H:
for i = 1:m
for j = 1:n
H(i,j) = 1/(i+j);
end;
end;
Пример 4. Программа создания матрицы A:
for i=1:3
for j=1:3
A(i,j)=i+j;
end
end
В результате выполнения этого цикла формируется матрица A:
>> A
A =
2 3 4
3 4 5
4 5 6
Следует отметить, что формирование матриц с помощью оператора : (двоеточие) обычно занимает меньше места при записи и дает меньшее время исполнения, чем с помощью цикла. Однако применение цикла нередко оказывается более наглядным и понятным.
MATLAB допускает использование в качестве переменной цикла массива A размера mn. При этом цикл выполняется столько раз, сколько столбцов в массиве A, и на каждом шаге переменная var представляет собой вектор, соответствующий текущему столбцу массива A:
>> A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
>> for var=A; var, end
var =
1
4
2
5
3
6
Пример 5. Для функции, заданной графически, вычислите значения функции для всех значений аргументана заданном интервале с заданным шагом .
%Вычисление функции
deltax=0.05;
xn=-2;
xk=2;
i=1;
for xx=xn:deltax:xk;
if xx<0;
y(i)=xx;
end;
if xx<=1 && xx>=0;
y(i)=0;
end;
if xx>1;
y(i)=log(xx);
end;
x(i)=xx;
i=i+1;
end;
plot(x,y);
grid on;
Конструкция переключателя switch…case…end. Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch:
switch switch_Выражение
case case_Выражение
Список_инструкций
case {case_Выражение1, Сase_выражение2, case_Выражение3,…}
Список_инструкций
...
otherwise,
Список_инструкций
end
Если выражение после заголовка switch имеет значение одного из выражений case_Выражение…, то выполняется блок операторов case, в противном случае — список инструкций после оператора otherwise. При выполнении блока case исполняются те списки инструкций, для которых case_Выражение совпадает с switch_Выражением. Обратите внимание на то, что case_Выражение может быть числом, константой, переменной, вектором ячеек или даже строчной переменной. В последнем случае оператор case истинен, если функция strcmp(значение, выражение) возвращает логическое значение «истинно».
Выполняется только первый соответствующий случай.
Замечание для программистов Си. В отличие от языка Си, оператор switch в Matlab не «проваливается». Если первый случай является истинным, другие случаи не выполняются. Таким образом, нет необходимости в использовании оператора break.
Пример 6.
g=3
switch g
case {1}
h=10;
case {2}
h=20;
case {3}
h=30;
end;
Циклы типа while…end. Цикл while повторяет группу операторов определенное число раз, пока выполняется логическое условие. Ключевое слово end очерчивает используемые операторы.
Пример 7. Программа создания меню для выбора пользователем действия:
clear all;
id=0;
while not(id==1); %выход из программы
id=menu([{'ГЛАВНОЕ МЕНЮ ПРОГРАММЫ'};{''}],...
'1. Выход из программы',...
'2. Ввод исходных данных');
switch id
case {1}
case {2}
clc;
data; %вызов программы ввода исходных данных
end;
end;
clear id;
Пример 8. Программа создания меню для выбора пользователем действия:
g=0;
while not(g==1);
g=menu([{'Результаты кинематического расчета робота'};{''}],...
'1. Продолжить',...
'2. Обход роботом запретных зон',...
'3. Трехмерный график обрабатываемой поверхности',...
'4. Графики ошибок декартовых координат');
switch g
case {1}
dinamica; %вызов файла
case {2} %Инструкции
case {3} %Инструкции
case {4} %Инструкции
end;
end;
Операторы break, continue и return. В управляющих структурах, в частности в циклах for и while, часто используются операторы, влияющие на их выполнение. Так, оператор break может использоваться для досрочного прерывания выполнения цикла. Как только он встречается в программе, цикл прерывается. Во вложенных циклах break осуществляет выход только из самого внутреннего цикла.
Пример 9.
for i=1:10
i,
if i==5
break,
end,
end;
i = 1
i = 2
i = 3
i = 4
i = 5
Оператор continue передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла.
Оператор return обеспечивает нормальный возврат в вызывающую функцию или в режим работы с клавиатурой.
Пример 10.