Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПР_КТіООР.doc
Скачиваний:
38
Добавлен:
11.05.2015
Размер:
9.89 Mб
Скачать

Завдання до практичної роботи:

Завдання 1. Задати матрицю А за допомогою операції конкатенації.

Завдання 2. Згенеруйте масив В розміром 3х3 з випадковими елементами, рівномірно розподіленими на інтервалі від 0 до 1.

Завдання 3. Виконайте дії:

  • А + 10*B, A*B, BT, поелементно помножити А на В,

  • розташувати елементи матриці А за збільшенням (по стовпцях),

  • визначити максимальний і мінімальний елементи матриці В,

  • обчислити визначника матриці В.

Завдання 4. Задати масив С, використовуючи операцію індексації і одну з функцій: ones або zeros.

Завдання 5. Вирішити систему лінійних рівнянь алгебри: A*X = В.

Завдання 6. Визначити масив D:

D =| sin(A)+ B3/5| .

Завдання 7. Для двох векторів:

а = {3,2; 2,8; -1,4} b= {0,6; 3,2; -4,8}

визначте: ;, а також відповідні поелементні операції.

Практична робота №5 Написання програм з використанням умовних операторів

Мета: Ознайомлення з умовними операторами системи MATLAB

Теоретичні питання

Управління потоками

MATLAB має вісім видів структур управління потоками:

  • оператор if;

  • оператор switch;

  • цикли for;

  • цикли while;

  • оператор break;

  • оператор continue;

  • try…catch;

  • return.

Усі конструкції програм, засновані на логічних умовах, використовують команду end для вказівки кінця відповідного блоку.

if. Оператор if обчислює логічний вираз і виконує групу операторів, якщо вираз істинний. Необов'язкові ключові слова elseif і else служать для виконання альтернативних груп операторів. Ключове слово end, яке узгоджується з if, завершує останню групу операторів. Таким чином, всі групи операторів поміщено між чотирма ключовими словами, без використання фігурних або звичайних дужок.

if (логічний вираз) logical_expression

оператори

end

Якщо логічний вираз істинний, тобто рівний 1, MATLAB виконує усі оператори між рядками, що містять команди if і end. Після цього він продовжує виконувати команди. що знаходяться за рядком з end. Якщо логічний вираз помилковий, тобто дає логічний 0, MATLAB перескакує через усі вирази між рядками з if і end, і продовжує свою роботу з рядка, що йде за командою end.

При використанні з if, команди else і elseif дають наступні додаткові можливості створення програм:

  • команда else не має логічної умови. Оператори, пов'язані з цією командою виконуються, якщо попередня умова команди if (і, можливо, elseif) являється хибною.

  • команда elseif має логічну умову, яка оцінюється, якщо попередня умова команди if (і, можливо, elseif) помилкова. Якщо логічна умова даної команди elseif є істинною, то виконуються відповідні оператори, що слідують за цією командою. Ви можете мати довільне число команд elseif в межах одного блоку з if.

Алгоритм MATLAB для створення магічного квадрата порядку n включає три різні випадки : n непарне, n парне, але не ділиться на 4, і n парне і ділиться на 4. Нижче наведений приклад відповідного коду.

if rem(n,2)~= 0

M = odd_magic(n)

elseif rem(n,4)~= 0

M = single_even_magic(n)

else

M = double_even_magic(n)

end

В даному прикладі три випадки є тими, що взаємно виключають, але якби це було не так, то виконувалася б перша істинна умова.

Важливо зрозуміти, як оператор відношення і оператор if працюють з матрицями. Коли ви хочете взнати, чи рівні дві змінні, потрібно використовувати сле-дуючу конструкцію

if А == B, . . .

Це правильний код MATLAB і він здійснює те, що ви чекаєте, якщо А і В є скалярами. Але коли А і В - матриці, А == В не працює, якщо вони не рівні. Рівність матриць означає поелементну рівність. Фактично, якщо А і В мають різні розміри, MATLAB видасть помилку.

Якщо логічна умова, пов'язана з if, призводить до нульового масиву, то вона оцінюється як помилкова. Наприклад, якщо А є порожнім масивом, то наступний блок

if A

S1

else

S0

end

виконує оператор S0.

Правильний спосіб визначення рівності між двома змінними - це використовування функції isequal

if isequal(A,B), . . .

Далі наведений інший приклад, який досліджує це питання. Якщо А і B являються скалярами, то нижчеприведена програма ніколи не приведе до неочікуваної ситуації. Але для більшості пар матриць, що використовуються, включаючи наші магічні квадрати з переставленими стовпцями, жодна з умов А > B, А < B або А ==B не є істиною для всіх елементів і тому виконується випадок else.

if А > B

' greater '

elseif А < B

' less'

elseif А == B

' equal '

else

error ( ' Непередбачена ситуація ' )

end

Деякі функції можуть бути корисними для матричного порівняння при використанні оператора if, наприклад

isequal

isempty

all

any

switch і case. Оператор switch виконує групу операторів, базуючись на значенні змінної або виразу. Ключові слова case і otherwise розділяють ці групи. Виконується тільки перший відповідний випадок. Необхідно використовувати end для узгодження з switch.

switch вираз % Скаляр або рядок символів

case значення 1

оператори % Виконуються якщо вираз == значення 1

case значення 2

оператори % Виконуються якщо вираз == значення 2

……………………………………………………………………..

otherwise

оператори % Виконуються якщо вираз не відповідає ні

% одному значенню, пов'язаному з командами case

end

Даний блок складається з:

  • Слова switch за яким йде вираз, який треба оцінити.

  • Будь-якого числа блоків з командами case. Ці блоки складаються із слова case, за яким в тому ж рядку слідує можливе значення виразу за словом switch. Наступні рядки містять оператори, які необхідно виконати при вказаному значенні виразу в першому рядку за словом switch. Ці рядки можуть бути будь-ким допустимими виразами, включаючи інші цикли switch. Виконання групи операторів, пов'язаних з даною командою case припиняється, коли MATLAB зустрічає наступну команду case або слово otherwise. Відмітимо, що завжди виконується тільки перший відповідний блок з case.

  • Не обов'язкової групи операторів, що починаються словом otherwise; ця група оброблюється, якщо значення виразу не було перехоплене яким-небудь попереднім блоком з case. Обробка групи операторів за словом otherwise припиняється на команді end.

  • Завершальної команди end.

Блок з командою switch працює шляхом порівняння вхідного вираження, який може бути чисельним скаляром або рядком символів, з кожним значенням ключів case. У разі багатьох виразів виконується який-небудь (перший) блок, якщо справедлива логічна рівність значення==вираз. При виразах у вигляді рядка символів, блок виконується, якщо істинний вираз strcmp(значення, вираз) (команда strcmp здійснює логічне порівняння рядків символів).

Логіка алгоритму магічних квадратів може бути описана на наступному прикладі

switch (rem(n,4)==0) + (rem(n,2)==0)

case 0

M = odd_magic(n)

case 1

M = single_even_magic(n)

case 2

M = double_even_magic(n)

otherwise

error( ' Це неможливо ' )

end

Зауваження: в Matlab на відміну від С, оператор switch не «провалюється». Якщо перший випадок являється істиною, то інші випадки не перевіряються, виконуються. Таким чином немає необхідності використовувати оператор break.