Програмування у MATLAB. Цикл в матлаб for – Ілюстрований самовчитель MatLab › Основи програмування › Цикли типу for…end. Цикли типу while…end Нескінченний цикл matlab

Мова технічних обчислень

Мільйони інженерів та вчених у всьому світі використовують MATLAB ® , щоб аналізувати та розробити системи та продукти, що перетворюють наш світ. Матрична мова MATLAB є найприроднішим способом у світі висловити обчислювальну математику. Вбудована графіка полегшує візуалізацію та розуміння даних. Оточення робочого столу сприяє експериментуванню, дослідженням та відкриттям. Ці засоби MATLAB та можливості всі строго протестовані та розроблені, щоб працювати спільно.

MATLAB допомагає вам втілювати свої ідеї за межами робочого столу. Можна запустити дослідження великих наборів даних та масштабувати до кластерів та хмар. Код MATLAB може бути інтегрований з іншими мовами, дозволивши вам розгорнути алгоритми та програми в мережі, підприємстві та промислових системах.

Початок роботи

Вивчіть основи MATLAB

Основи мови

Синтаксис, індексація та обробка масиву, типи даних, оператори

Імпорт та аналіз даних

Імпорт та експорт даних, у тому числі й великих файлів; попередня обробка даних, візуалізація та дослідження

Математика

Лінійна алгебра, диференціювання та інтегрування, перетворення Фур'є та інша математика

Графіка

2D та 3D графіки, зображення, анімація

Програмування

Скрипти, функції та класи

Створення додатків

Розробка програм за допомогою App Designer, програмованого робочого процесу або GUIDE

Інструменти розробки програмного забезпечення

Налагодження та тестування, організація великих проектів, інтеграція із системою контролю версій, упаковка тулбоксів

Умовний оператор if

У найпростішому випадку синтаксис даного оператора if має вигляд:

if<выражение>
<операторы>
end

Звертаю Вашу увагу, що на відміну від сучасних мов програмування не використовуються таке поняття як складовий оператор. Блок умовного оператора обов'язково закінчується службовим словом end.

Нижче наведено приклад реалізації функції sign(), яка повертає +1, якщо число більше за нуль, -1 – якщо число менше за нуль і 0, якщо число дорівнює нулю:

x = 5;
if x > 0
disp(1);
end
if x< 0
disp(-1);
end
if x == 0
disp(0);
end

Аналіз наведеного прикладу показує, що ці умови є взаємовиключними, тобто. при спрацьовуванні одного з них не потрібно перевіряти інші. Реалізація саме такої логіки дозволить збільшити швидкість виконання програми. Цього можна досягти шляхом використання конструкції

if<выражение>
<операторы1>% виконуються, якщо істинна умова
else
<операторы2>% виконуються, якщо умова хибна
end

Тоді наведений вище приклад можна записати так:

X = 5;
if x > 0
disp(1);
else
if x< 0
disp(-1);
else
disp(0);
end
end

У програмі спочатку виконується перевірка на позитивність змінної x, і якщо це, то екран виводиться значення 1, проте інші умови ігноруються. Якщо ж перша умова виявилася хибною, то виконання програми переходить по else (інакше) на другу умову, де виконується перевірка змінної x на негативність, і у разі істинності умови на екран виводиться значення -1. Якщо обидві умови виявилися помилковими, виводиться значення 0.

Наведений вище приклад можна записати у простішій формі, використовуючи ще одну конструкцію оператора if мови MatLab:

if<выражение1>
<операторы1>% виконуються, якщо істинно вираз1
elseif<выражение2>
<операторы2>% виконуються, якщо істинно вираз2
...
elseif<выражениеN>
<операторыN>% виконуються, якщо істинно вираз N
end

і записується наступним чином:

x = 5;
if x > 0
disp(1); % виконується, якщо x > 0
elseif x< 0
disp(-1); % виконується, якщо x< 0
else
disp(0); % виконується, якщо x = 0
end

За допомогою умовного оператора if можна виконувати перевірку складніших (складених) умов. Наприклад, необхідно визначити: чи змінна x потрапляє в діапазон значень від 0 до 2? Це можна реалізувати одночасною перевіркою одразу двох умов: x >= 0 та x<=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.

Для реалізації складових умов у MatLab використовуються логічні оператори:

& - логічне І
| - логічне АБО
~ - логічне НЕ

Розглянемо приклад використання складових умов. Нехай потрібно перевірити влучення змінної x в діапазон від 0 до 2. Програма запишеться таким чином:

x = 1;
if x >= 0 & x<= 2
else
end

У другому прикладі виконаємо перевірку на не належність змінної x діапазону від 0 до 2. Це досягається спрацьовуванням однієї з двох умов: x< 0 или x > 2:

x = 1;
if x< 0 | x > 2
disp("x не належить діапазону від 0 до 2");
else
disp("x належить діапазону від 0 до 2");
end

Використовуючи логічні оператори І, АБО, НЕ, можна створювати різноманітні складові умови. Наприклад, можна перевірити, що змінна x потрапляє в діапазон від -5 до 5, але не належить діапазону від 0 до 1. Очевидно, це можна реалізувати таким чином:

x = 1;
if (x >= -5 & x<= 5) & (x < 0 | x > 1)
disp("x належить [-5, 5], але не входить до ");
else
disp("x або не входить до [-5, 5] або в");
end

Зверніть увагу, що за складної складової умови були використані круглі дужки. Справа в тому, що пріоритет операції І вище пріоритету операції АБО, і якби не було круглих дужок, то умова виглядала б так: (x> = -5 і x<= 5 и x < 0) или x >1. Очевидно, що така перевірка давала б інший результат очікуваного.

Круглі дужки у програмуванні використовуються для зміни пріоритетів виконання операторів. Подібно до арифметичних операторів, логічні також можуть бути змінені за бажанням програміста. Завдяки використанню круглих дужок спочатку виконується перевірка всередині них, а, потім, за їх межами. Саме тому у наведеному вище прикладі вони необхідні досягнення необхідного результату.

Пріоритет логічних операцій наступний:

НЕ (~) – найвищий пріоритет;
І (&) – середній пріоритет;
АБО (|) – найнижчий пріоритет.

Оператор циклу while

Мова програмування MatLab має два оператори циклу: while та for. З їхньою допомогою, наприклад, виконується програмування рекурентних алгоритмів, підрахунку суми ряду, перебору елементів масиву та багато іншого.

У найпростішому випадку цикл у програмі організується за допомогою оператора while, який має наступний синтаксис:

while<условие>
<операторы>
end

Тут<условие>означає умовний вираз подібне до того, що застосовується в операторі if, і цикл while працює до тих пір, поки ця умова істинна.

Слід звернути увагу на те, що якщо умова буде помилковою до початку виконання циклу, то оператори, що входять до циклу, не будуть виконані жодного разу.

Наведемо приклад роботи циклу while для підрахунку суми ряду:


i=1; % лічильник суми
while i<= 20 % цикл (работает пока i <= 20)

end % кінець циклу
disp(S); % відображення суми 210 на екрані

Тепер ускладнимо завдання і будемо підраховувати суму ряду, поки що. Тут в операторі циклу виходить дві умови: або лічильник i доходить до 20, або значення суми S перевищить 20. Дану логіку можна реалізувати за допомогою складеного умовного вираження в операторі циклу while:

S = 0; % початкове значення суми
i=1; % лічильник суми
while i<= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20
S = S + i; % підраховується сума
i=i+1; % збільшується лічильник на 1
end % кінець циклу

Наведений приклад показує можливість використання складових умов у циклі while. У випадку умовного висловлювання можна записувати такі самі умови, як у умовному операторі if.

Роботу будь-якого оператора циклу, у тому числі й while, можна примусово завершити за допомогою оператора break. Наприклад, попередню програму можна переписати так з використанням оператора break:

S = 0; % початкове значення суми
i=1; % лічильник суми
while i<= 20 % цикл (работает пока i<=10
S = S + i; % підраховується сума
i=i+1; % збільшується лічильник на 1
if S > 20% якщо S > 20,
break; % то цикл завершується
end
end % кінець циклу
disp(S); % відображення суми 21 на екрані

У цьому прикладі друга умова завершення циклу, коли S буде більше 20, записано в самому циклі і за допомогою оператора break здійснюється вихід із циклу на функцію disp(), що стоїть відразу після циклу while.

Другий оператор управління виконанням циклу continue дозволяє пропускати виконання фрагмента програми, що стоїть після нього. Наприклад, потрібно підрахувати суму елементів масиву

a =;

виключаючи елемент з індексом 5. Таку програму можна записати так:

S = 0; % початкове значення суми
a =; % масив
i=0; % лічильник індексів масиву
while i< length(a) % цикл (работает пока i меньше
% довжини масиву а)
i=i+1; % збільшується лічильник індексів на 1
if i == 5 % якщо індекс дорівнює 5
continue; % то його не підраховуємо
end
S=S+a(i); % підраховується сума елементів
end % кінець циклу
disp(S); % відображення суми 40 на екрані

Слід зазначити, що в цій програмі збільшення індексу масиву відбувається до перевірки умови. Це зроблено у тому, щоб значення індексу збільшувалося на 1 кожної ітерації роботи циклу. Якщо збільшення лічильника i записати як на попередніх прикладах, тобто. Після підрахунку суми, то через оператора continue його значення зупинилося б на 5 і цикл while працював би «вічно».

Оператор циклу for

Часто при організації циклу потрібно перебирати значення лічильника в заданому діапазоні значень та із заданим кроком зміни. Наприклад, щоб перебрати елементи вектора (масиву), потрібно організувати лічильник від 1 до N з кроком 1 де N – число елементів вектора. Щоб обчислити суму ряду, також визначається лічильник від a до b з необхідним кроком зміни step. І так далі. У зв'язку з тим, що подібні завдання часто зустрічаються в практиці програмування, для їх реалізації був запропонований свій оператор циклу for, який дозволяє простіше та наочніше реалізовувати цикл із лічильником.

Синтаксис оператора циклу for має такий вигляд:

for<счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
end

Розглянемо роботу даного циклу на прикладі реалізації алгоритму пошуку максимального значення елемента у векторі:

a =;
m = a(1); % поточне максимальне значення
for i=1:length(a) % цикл від 1 до кінця вектора з
% кроком 1 (за замовчуванням)
if m< a(i) % если a(i) >m,
m = a(i); % то m = a(i)
end
end % кінець циклу for
disp(m);

В даному прикладі цикл for задає лічильник i і змінює його значення від 1 до 10 з кроком 1. Зверніть увагу, якщо величина кроку не вказується явно, то він береться за умовчанням рівним 1.

У прикладі розглянемо реалізацію алгоритму зміщення елементів вектора вправо, тобто. передостанній елемент ставиться місце останнього, наступний – місце передостаннього, тощо. до першого елемента:

a =;
disp(a);
for i=length(a):-1:2 % цикл від 10 до 2 з кроком -1
a(i)=a(i-1); % зміщуємо елементи вектора
end % кінець циклу for
disp(a);

Результат роботи програми

3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1

Наведений приклад показує, що з реалізації циклу з лічильником від більшого значення до меншого, потрібно явно вказувати крок, у разі, -1. Якщо цього не зробити, цикл відразу завершить свою роботу і програма працюватиме некоректно.

Рішення рівняння

Кафедра: Інформаційні технології

ПРОГРАМУВАННЯ ВMATLAB


ОператориMATLAB

· Оператори циклу

Циклfor

Синтаксис

for count=start:step:final

команди MATLAB

Опис

count – змінна циклу,

start – її початкове значення,

final – її кінцеве значення,

step - крок, на який збільшується count при кожному наступному заході в цикл

цикл закінчується, як тільки значення count стає більшим за final.

приклад

Нехай потрібно вивести сімейство кривих для x€, яке задано функцією, яка залежить від параметра

y(x, a) = e -ax sin x,

для значень параметра від -0.1 до 0.1. Нижче наведено листинг файл-програми для виведення сімейства кривих.

Лістинг програми

x =;

for a = -0.1:0.02:0.1

y = exp (-a * x). * sin (x);

В результаті виконання програми з'явиться графічне вікно, яке містить потрібне сімейство кривих.

Циклwhile

Синтаксис

while умова циклу

команди MATLAB

Опис

Цикл працює, поки виконується (істинно) умова циклу. Для завдання умови виконання циклу допустимі такі операції:

Завдання складніших умов проводиться із застосуванням логічних операторів. Логічні оператори наведено у наступній таблиці


приклад

Оператори розгалуження

Умовний операторif

Синтаксис

if умова

команди MATLAB

Опис

Якщо умова вірна, то виконуються команди MATLAB, розміщені між if і end, а якщо умова не вірна, відбувається перехід до команд, розташованих після end.

приклад

Умовний операторelseif

Синтаксис

if умова1

elseif умова2

………………………

elseif умов

Опис

Залежно від виконання тієї чи іншої умови працює відповідна гілка програми, якщо всі умови неправильні, виконуються команди, розміщені після else.

приклад

Операторswitch

Синтаксис

switch змінна

case значення1

case значення2

……………………

case значенняn


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

приклад

Переривання циклу. Виняткові ситуації.

Операторbreak

Синтаксис

Оператор break використовується для організації циклічних обчислень: for…end, while…end. При виконанні умови

if умова

оператор break закінчує цикл (for або while) і відбувається виконання операторів, які розташовані у рядках, що настають за end. У разі вкладених циклів break здійснює вихід із внутрішнього циклу.

Обробка виняткових ситуацій, операторtrycatch

Синтаксис

оператори, виконання яких

може призвести до помилки

оператори, які слід виконати

при виникненні помилки у блоці

між try та catch

Опис

Конструкція try…catch дозволяє обійти виняткові ситуації (помилки, що призводять до закінчення роботи програми, наприклад, звернення до неіснуючого файлу) і вжити деяких дій у разі їх виникнення.

приклад

Сервісні функції

dispздійснює виведення тексту або значення змінної у командне вікно

input- Здійснює запит на введення з клавіатури. Використовується для створення програм з інтерфейсом з командного рядка.

evalвиконує вміст рядка або рядкової змінної, як команди MATLAB

clear- Видаляє змінні робочого середовища.

зlc– здійснює очищення командного вікна

Більш детальну інформацію про ці та інші функції можна дізнатися, виконавши в командному рядку

helpім'я_функції


Завдання на виконання лабораторної роботи

Номер конкретного варіанта завдання визначається викладачем.

Завдання №1

Дане завдання має на увазі знаходження для деякої сукупності даних алгебраїчного інтерполяційного багаточлена ступеня n: P n(x) .

Мета роботи:

Необхідно скласти програму обчислення коефіцієнтів алгебраїчного інтерполяційного багаточлена P n(x)= a 0 + a 1 x+ … + a n x n.

Методичні вказівки:

0 1 2 3

хi

1,2 1,4 1,6 1,8
8,3893 8,6251 8,9286 8,9703

Коефіцієнти a 0 , a 1 , …, a nвизначаються з розв'язання системи рівнянь:

Тут n- Порядок інтерполяційного багаточлена,

n+1 – кількість заданих пар точок ( x, y),

a 0 , a 1 ,… a n- Коефіцієнти, що шукаються, багаточлена P n(x)= a 0 + a 1 x+ … + a n x n).

Вимоги до програми

· Задати межі відрізка , на якому будується інтерполяційний багаточлен P(x)

· Задати n– кількість відрізків інтерполяції (або, що те саме, ступінь багаточлена)

Примітка: x0, xn, nвводяться із клавіатури.

· Для отримання вихідних даних (x, y)(кількість пар точок (x i, y i), за якими будується інтерполяційний багаточлен P(x)n1=n+1) передбачити:

ü Введення довільно розташованих вузлів x i, i = 0, nз клавіатури

ü Розрахунок вузлів x i , i=0, n,відповідних рівномірному розташуванню аргументу xна відрізку

ü У пп. 1,2 значення y i , i=0, nабо вводяться з клавіатури (якщо вихідна функція невідома), або обчислюються за заданою функцією f(x). Вираз, що визначає функцію, вводиться з клавіатури та має відповідати правилам запису виразів у MATLAB

ü Введення даних ( x i, y i, i = 0, n) із файлу

· Розв'язати систему рівнянь визначення коефіцієнтів многочлена P(x)

· Побудувати графіки вихідної таблично заданої функції та багаточлена P(x)

· Якщо вихідні дані задані як функції f(x), побудувати графік похибки інтерполяції /f(x) – P(x)/. Розрахувати максимальне значення похибки інтерполяції на заданому проміжку.


Завдання №2

Інтерполяція сплайнами

Мета роботи:

Необхідно скласти програму обчислення коефіцієнтів та побудови сплайн-функції S(x), «склеєної» зі шматків багаточленів 3-го порядку S i(x), які мають спеціальну форму запису:

функція S i(x) визначено на відрізку ,

Вимоги до програми

При виконанні цієї роботи необхідно:

· Задати межі відрізка, на якому будується сплайн-функція S(x)

· Задати n – кількість відрізків інтерполяції, кожному з яких будується кубічний многочлен Si(x).

· Примітка: x0, xn, n вводяться з клавіатури.

· Організувати введення вихідних даних (x, y) (кількість пар точок (xi, yi), якими будується сплайн-функція S(x), n1=n+1), передбачивши:

ü Введення довільно розташованих вузлів xi, i=0, n з клавіатури

ü Розрахунок вузлів xi, i=0, n, що відповідають рівномірному розташуванню аргументу x на відрізку

ü У пп. 1,2 значення yi, i=0, n або вводяться з клавіатури (якщо вихідна функція невідома), або обчислюються заданою функцією f(x). Вираз, що визначає функцію, вводиться з клавіатури та має відповідати правилам запису виразів у MATLAB

ü Введення даних (xi, yi, i=0, n) з файлу

ü S1""(x0)=0, S3""(x3)=0

ü S1"(x0)=f"(x0), S3"(x3)=f"(x3)

ü S1""(x0)=f"(x0), S3""(x0)=f"(x3)

· Для визначення коефіцієнтів природного кубічного сплайну (крайові умови 1) необхідно вирішити таку систему рівнянь:

Коефіцієнти 0 =0, n =0

· Побудувати графіки вихідної функції та сплайн-функцій для всіх трьох типів крайових умов.

· Побудувати графіки функцій похибки сплайн-інтерполяції f(x) – S(x) для всіх трьох типів крайових умов.

Примітка:

У пакеті MATLAB індекси одновимірних та двовимірних масивів починаються з 1, а не з 0. Врахувати це при складанні програми.


Завдання №3

Апроксимація функції шляхом найменших квадратів (МНК).

Дане завдання має на увазі знаходження для деякої сукупності даних апроксимуючої функції (багаточлена ступеня m), побудованої методом найменших квадратів (МНК).

Мета роботи:

Необхідно скласти програму знаходження коефіцієнтів багаточлена? (x)= a 0 + a 1 * x+… a n * x mшляхом найменших квадратів.

Нехай, наприклад, є така сукупність даних:

хi

1,2 1,4 1,6 1,8 2,0 2,2 2,4 2,6 2,8 3,0
8,3893 8,6251 8,9286 8,9703 9,1731 9,1784 8,8424 8,7145 8,3077 7,9611

Пошук необхідних коефіцієнтів здійснюється так:

де n - Кількість точок ( x, y),

m - Ступінь шуканого багаточлена,

a 0 , a 1 , …, a m - Шукані коефіцієнти ( φ ( x )= a 0 + a 1 x + … + a m x m ).

Вимоги до програми

При виконанні цієї роботи необхідно:

· Задати межі відрізка , на якому будується апроксимуюча функція φ(x)=a0+a1*x+… an * xm

· Задати m - ступінь многочлена

· Примітка: x1, xn, m вводяться з клавіатури.

· Для отримання вихідних даних (x, y), за якими будується апроксимуюча функція φ(x)=a0+a1*x+… an* x m передбачити:

ü Введення довільно розташованих вузлів xi, i=1, n з клавіатури

ü Розрахунок вузлів xi, i=1, n, що відповідають рівномірному розташуванню аргументу x на відрізку

ü У пп. 1,2 значення yi, i=1, n або вводяться з клавіатури (якщо вихідна функція невідома), або обчислюються заданою функцією f(x). Вираз, що визначає функцію, вводиться з клавіатури та має відповідати правилам запису виразів у MATLAB

ü Введення даних (xi, yi, i=1, n) з файлу

· Розв'язати систему рівнянь визначення коефіцієнтів многочлена φ(x)

· Побудувати графіки вихідної таблично заданої функції та багаточлена φ(x)

· Якщо вихідні дані задані як функції f(x), побудувати графік похибки інтерполяції /f(x) – φ(x)/. Розрахувати максимальне значення похибки інтерполяції на заданому проміжку.

Під час виконання останнього пункту на відрізку взяти щонайменше 500 точок щодо розрахунків


Вимоги до оформлення лабораторної роботи

Звіт повинен містити:

1. Постановку задачі

2. Текст програми

3. Результати тестування

Примітка Тексти програм повинні бути забезпечені коментарями.


1. Ануфрієв І.Є. Самовчитель Matlab 5.3/6.x - СПб.: БХВ-Петербург, 2003. - 736 с.: іл.

2. В.П. Дияконів MATLAB 6.5 SPI/7 + Simulink 5/6 в математиці та моделюванні. Серія "Бібліотека професіонала". - М.: СОЛОН-Прес, 2005. - 576 с.: Іл.

3. Ануфрієв І.Є., Смирнов А.Б., Смирнова О.М. MathLab 7. - СПб.: БХВ-Петербург, 2005. - 1104 с.: Іл.

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

Найпростіший спосіб створити цикл – це використовувати
вираз for. Нижче показаний простий приклад, де обчислюється та відображається 10! = 10*9*8...*2*1.

f = 1;
for n =2:10
f = f * n;
end

f =
3628800

Цикл у матлаб починається з виразу for і закінчується виразом end. Команда
між цими висловлюваннями виконується загалом дев'ять разів, по одному разу для кожного
значення п від 2 до 10. Для переривання проміжного виведення всередині циклу ми
використовували крапку з комою. Щоб побачити кінцевий результат, потрібно
ввести f після завершення циклу. Якщо не використовувати точку з комою, програма
MATLAB відображатиме кожне проміжне значення 2!, 3!, і т.д.

У модулі Editor (Редактор) команди for та end автоматично виділяються
синім кольором. Це надає кращу читабельність, якщо ви вставляєте між
ними команди (як ми це зробили); модуль Editor (Редактор) робить це
автоматично. Якщо ви введете for у вікні Command Window (Командне вікно),
програма MATLAB не видасть нове запрошення командного рядка >>, доки ви не
введіть команду end, при якій програма MATLAB виконає повний цикл та
відобразить новий командний рядок.

  • Якщо ви використовуєте цикл у М-файлі-сценарії з ефектом відображення echo on, команди будуть відображатися щоразу у всьому циклі. Ви можете запобігти цьому, вставивши команду echo off прямо перед виразом end та команду echo on відразу після нього; тоді кожна команда у циклі буде відображена один раз (крім end).

Примітка: є три види циклів у матлаб, які наведені нижче

1. Цикл for Matlab

a=0;
for i=1:10
a=a+1;
end

2. Цикл while у Матлаб

a=0;
while a<10
a=a+1;
end

3. Цикл if у Матлаб

a=10;
if a==10
"перший випадок"
else
"другий випадок"
end

ans =
перший випадок

Тому з вище сказаного можна зробити висновок, що вам необхідно переглянути багато додаткової інформації та альтернатив!


Кафедра: Інформаційні технології

ПРОГРАМУВАННЯ ВMATLAB


ОператориMATLAB

· Оператори циклу

Циклfor

Синтаксис

for count=start:step:final

команди MATLAB

Опис

count – змінна циклу,

start – її початкове значення,

final – її кінцеве значення,

step - крок, на який збільшується count при кожному наступному заході в цикл

цикл закінчується, як тільки значення count стає більшим за final.

приклад

Нехай потрібно вивести сімейство кривих для x€, яке задано функцією, яка залежить від параметра

y(x, a) = e -ax sin x,

для значень параметра від -0.1 до 0.1. Нижче наведено листинг файл-програми для виведення сімейства кривих.

Лістинг програми

x =;

for a = -0.1:0.02:0.1

y = exp (-a * x). * sin (x);

В результаті виконання програми з'явиться графічне вікно, яке містить потрібне сімейство кривих.

Циклwhile

Синтаксис

while умова циклу

команди MATLAB

Опис

Цикл працює, поки виконується (істинно) умова циклу. Для завдання умови виконання циклу допустимі такі операції:

Завдання складніших умов проводиться із застосуванням логічних операторів. Логічні оператори наведено у наступній таблиці


приклад

Оператори розгалуження

Умовний операторif

Синтаксис

if умова

команди MATLAB

Опис

Якщо умова вірна, то виконуються команди MATLAB, розміщені між ifі end, а якщо умова не вірна, то відбувається перехід до команд, розташованих після end.

приклад

Умовний операторelseif

Синтаксис

if умова1

elseif умова2

………………………

elseif умов

Опис

Залежно від виконання тієї чи іншої умови працює відповідна гілка програми, якщо всі умови неправильні, виконуються команди, розміщені після else.

приклад

Операторswitch

Синтаксис

switch змінна

case значення1

case значення2

……………………

caseзначенняn


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

приклад

Переривання циклу. Виняткові ситуації.

Операторbreak

Синтаксис

Оператор break використовується для організації циклічних обчислень: for…end, while…end. При виконанні умови

if умова

оператор break закінчує цикл (for або while) і відбувається виконання операторів, які розташовані у рядках, що настають за end. У разі вкладених циклів break здійснює вихід із внутрішнього циклу.

Обробка виняткових ситуацій, операторtrycatch

Синтаксис

оператори, виконання яких

може призвести до помилки

оператори, які слід виконати

при виникненні помилки у блоці

між try та catch

Опис

Конструкція try…catch дозволяє обійти виняткові ситуації (помилки, що призводять до закінчення роботи програми, наприклад, звернення до неіснуючого файлу) і вжити деяких дій у разі їх виникнення.

приклад

Сервісні функції

dispздійснює виведення тексту або значення змінної у командне вікно

input- Здійснює запит на введення з клавіатури. Використовується для створення програм з інтерфейсом з командного рядка.

evalвиконує вміст рядка або рядкової змінної, як команди MATLAB

clear- Видаляє змінні робочого середовища.

зlc– здійснює очищення командного вікна

Більш детальну інформацію про ці та інші функції можна дізнатися, виконавши в командному рядку

helpім'я_функції

Завдання на виконання лабораторної роботи

Номер конкретного варіанта завдання визначається викладачем.

Завдання №1

Дане завдання має на увазі знаходження для деякої сукупності даних алгебраїчного інтерполяційного багаточлена ступеня n: P n(x) .

Мета роботи:

Необхідно скласти програму обчислення коефіцієнтів алгебраїчного інтерполяційного багаточлена P n(x)= a 0 + a 1 x+ … + a n x n.

Методичні вказівки:

Нехай, наприклад, є така сукупність даних:

i 0 1 2 3
хi 1,2 1,4 1,6 1,8
y i 8,3893 8,6251 8,9286 8,9703

Коефіцієнти a 0 , a 1 , …, a nвизначаються з розв'язання системи рівнянь:

Тут n- Порядок інтерполяційного багаточлена,

n+1 – кількість заданих пар точок ( x, y),

a 0 , a 1 ,… a n- Коефіцієнти, що шукаються, багаточлена P n(x)= a 0 + a 1 x+ … + a n x n).

Вимоги до програми

· Задати межі відрізка , на якому будується інтерполяційний багаточлен P(x)

· Задати n– кількість відрізків інтерполяції (або, що те саме, ступінь багаточлена)

Примітка: x0, xn, nвводяться із клавіатури.

· Для отримання вихідних даних (x, y)(кількість пар точок (x i, y i), за якими будується інтерполяційний багаточлен P(x)n1=n+1) передбачити:

Введення довільно розташованих вузлів x i, i = 0, nз клавіатури

Розрахунок вузлів x i , i=0, n,відповідних рівномірному розташуванню аргументу xна відрізку

У пп. 1,2 значення y i , i=0, nабо вводяться з клавіатури (якщо вихідна функція невідома), або обчислюються за заданою функцією f(x). Вираз, що визначає функцію, вводиться з клавіатури та має відповідати правилам запису виразів у MATLAB

Ввід данних ( x i, y i, i = 0, n) із файлу

· Розв'язати систему рівнянь визначення коефіцієнтів многочлена P(x)

· Побудувати графіки вихідної таблично заданої функції та багаточлена P(x)

· Якщо вихідні дані задані як функції f(x), побудувати графік похибки інтерполяції /f(x) – P(x)/. Розрахувати максимальне значення похибки інтерполяції на заданому проміжку.

Під час виконання останнього пункту на відрізку взяти щонайменше 500 точок щодо розрахунків

Завдання №2

Інтерполяція сплайнами

Мета роботи:

Необхідно скласти програму обчислення коефіцієнтів та побудови сплайн-функції S(x), «склеєної» зі шматків багаточленів 3-го порядку S i(x), які мають спеціальну форму запису:

,

функція S i(x) визначено на відрізку ,

Вимоги до програми

При виконанні цієї роботи необхідно:

· Задати межі відрізка, на якому будується сплайн-функція S(x)

· Задати n – кількість відрізків інтерполяції, кожному з яких будується кубічний многочлен Si(x).

· Примітка: x0, xn, n вводяться з клавіатури.

· Організувати введення вихідних даних (x, y) (кількість пар точок (xi, yi), якими будується сплайн-функція S(x), n1=n+1), передбачивши:

Введення довільно розташованих вузлів xi, i=0, n з клавіатури

Розрахунок вузлів xi, i=0, n, що відповідають рівномірному розташуванню аргументу x на відрізку

У пп. 1,2 значення yi, i=0, n або вводяться з клавіатури (якщо вихідна функція невідома), або обчислюються заданою функцією f(x). Вираз, що визначає функцію, вводиться з клавіатури та має відповідати правилам запису виразів у MATLAB

Введення даних (xi, yi, i=0, n) із файлу

S1""(x0)=0, S3""(x3)=0

S1"(x0)=f"(x0), S3"(x3)=f"(x3)

S1""(x0)=f"(x0), S3""(x0)=f"(x3)

· Для визначення коефіцієнтів природного кубічного сплайну (крайові умови 1) необхідно вирішити таку систему рівнянь:

Коефіцієнти 0 =0, n =0

· Побудувати графіки вихідної функції та сплайн-функцій для всіх трьох типів крайових умов.

· Побудувати графіки функцій похибки сплайн-інтерполяції f(x) – S(x) для всіх трьох типів крайових умов.

Примітка:

У пакеті MATLAB індекси одновимірних та двовимірних масивів починаються з 1, а не з 0. Врахувати це при складанні програми.