Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matlab / Лекция 16.docx
Скачиваний:
142
Добавлен:
19.03.2016
Размер:
47.55 Кб
Скачать

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.

Соседние файлы в папке Matlab