Лекція 1.3 MATLAB у задачах прикладної математики

Сайт: Навчально-інформаційний портал НУБіП України
Курс: Комп'ютерно-інтегровані технології. Ч1 ☑️
Книга: Лекція 1.3 MATLAB у задачах прикладної математики
Надруковано: Гість-користувач
Дата: понеділок, 13 січня 2025, 09:48

Опис

Розвиток науки змусив дослідників інтенсивно застосувати чисельні методи для рішення різних математичних задач. Чисельні методи створюються математиками і, як у системі MATLAB, пропонуються для застосування у вигляді готового інструменту. Програми, що реалізують певний чисельний метод, необхідно записувати в М-файл. Якщо не дати імені М-файлові, то він запишеться при виконанні програми в робочу папку під ім'ям Untitled (Безіменний). Такої ситуації варто уникати для виключення появи безлічі файлів з невизначеним ім'ям. Розглянемо рішення різних проблем обчислювальної математики, що мають важливе значення при вивчені різних наук.

1. Табулювання функцій

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

Розглянемо два випадки табулювання функції:

1. З постійним кроком зміни аргументів.

2. З довільним набором значень аргументу.

Алгоритм реалізується шляхом організації циклу.

Приклад.

Обчислити 

при: R = 4,28 × 10-2; λ = 2,87;

хi  змінюється з кроком Δх = 2; хп = 2; хк = 10.

Введемо позначення λ →la = 2,87.

Протокол програми:

R = 4.28е-02; la = 2.87;

 % Задається початкове значення х, крок dx і кінцеве значення х

х = 2.0 : 2.0 : 10.0;

% Для виведення значення y наприкінці рядка символ ; не ставиться!

 

У вікні команд з'являються після натискання кнопки виконати значення функції y, що потім можна скопіювати в інший файл.

Результати обчислень:

ans =

2.0000

4.0000

6.0000

8.0000

10.0000

0.0682

0.1634

0.2517

0.3386

0.4250

 

Приклад.

Обчислити і вивести на екран значення функції

при х1 = 12,8; х2 = 23,4; х3 = 27,2; х4 = 17,8; х5 = 16,3; х6 = 14,9; а = 1,35; b = 0,98.

Таку задачу можна програмувати не змінюючи позначення змінних. Цикл організується для одномірного масиву.

Протокол програми:

а = 1.35; b = 0.98; х(1) = 12.8; х(2) = 23.4; х(3) = 27.2; х(4) = 17.8; х(5) = 16.3;  х(6) = 14.9;

 % Наприкінці рядка обчислення функції y символ ; не ставиться.

у

=

 

 

 

0.3609

у

=

 

 

 

0.2327

у

=

 

 

 

0.1473

у

=

 

 

 

0.1800

у

=

 

 

 

0.1771

у

=

 

 

 

0.1658

 

Дані обчислень можна вивести у виді таблиці, якщо використовувати запис [x; y] без крапки з комою або [x y].

 

2. Розв’язок системи лінійних алгебраїчних рівнянь методом виключення Гаусса

До розв’язання систем лінійних рівнянь зводяться численні практичні задачі, наприклад різні крайові задачі для звичайних і в частинних похідних диференційних рівнянь. Можна стверджувати, що проблема є однієї з найпоширеніших і важливих задач прикладної математики.

Нехай задана система п лінійних алгебраїчних рівнянь з n невідомими:

                   3.1

Система рівнянь (3.1) у матричній формі представляється в такий спосіб:

АХ = Y,                                           (3.2)

де: А – квадратна матриця коефіцієнтів, розміром п ´ п рядків і стовпців;

Х – вектор-стовпець невідомих;

В – вектор-стовпець правих частин.

 

Систему рівнянь (3.2) можна вирішити різними методами. Один з найбільш простих і ефективних – метод виключення Гаусса і його модифікації. Його алгоритм базується на приведенні матриці А до трикутнокового вигляду (прямій хід) і послідовному обчисленні невідомих (зворотний хід). Ці процедури можна виконувати над невиродженими матрицями, у противному випадку метод Гаусса не застосовується.

Недоліком методу є нагромадження похибок у процесі округлення, тому метод Гаусса без вибору головних елементів використовується звичайно для рішення порівняно невеликих (п £ 100) систем рівнянь із щільно заповненою матрицею і не близьким до нуля визначником.

Якщо матриця А сильно розріджена, а її визначник не близький до нуля, то метод Гаусса придатний для рішення великих систем рівнянь. У MATLAB мається великий арсенал методів рішення систем рівнянь (3.2) методом виключення Гаусса. Для цього застосовуються наступні оператори:

/

- правий розподіл;

 

 

\

- лівий розподіл;

 

 

^ - 1

- зведення в степінь –1;

 

 

inv(A)

- звертання матриці А.

 

 

Вирази

Х

=

Y/A

Х

=

Y* А^ - 1

Х

=

Y* inv(A)

Х

=

A\Y

дають рішення ряду систем лінійних рівнянь АХ = Y, де А – матриця розміром m × n, Y – матриця розміром n × к.

 

Приклад.

Розв’язати систему 4-х лінійних рівнянь:

Протокол програми (у М-файлі)

а

=

[1.1161    0.1397   0.1254   0.1490 ;

 0.1582    0.1768   1.1675   0.1871 ;

 0.1968    1.2168   0.2071   0.2271 ;

 0.2368    0.2568   0.2471   1.2671] ;

b

=

[1.5471 ; 1.6471 ; 1.7471 ; 1.8471] ;

 

<< Х4 = а \ b

 

Ця програма видає розв’язок заданої системи за допомогою четвертого оператора у виді матриці – стовпця:

Х4

=

 

1.0406

0.9351

0.9870

0.8813

 

Увага. У М-файлі матриця а набирається по рядках, а елементи матриці правих частин b відокремлюються символом ; , тобто теж набираються по рядках. Рішення іншими операторами системи рівнянь (3.2) вимагає набору матриці а по стовпцях, а елементи правих частин b відокремлюються тільки пробілом!

 

а

=

[1.1161    0.1582   0.1968   0.2368 ;

 0.1397    0.1768   1.2168   0.2568 ;

 0.1254    1.1675   0.2071   0.2471 ;

 0.1490    0.1871   0.2271   1.2671] ;

b

=

[1.5471    1.6471   1.7471   1.8471] ;

 

<< Х1 = b/а

<< Х2 = b* a ^ - 1

<< Х3 = b* inv(a)

 

Результати розв‘язку:

 

Х1

=

 

1.0406   0.9351   0.9870   0.8813

Х2

=

 

1.0406   0.9351   0.9870   0.8813

Х3

=

 

1.0406   0.9351   0.9870   0.8813

3. Апроксимація функцій

Одним із розповсюджених і практично важливих випадків зв'язку між аргументом і функцією є задання цього зв'язку у виді деякої таблиці {xi ; yi}, наприклад, експериментальні дані. На практиці часто доводиться використовувати табличні дані для наближеного обчислення y при будь-якому значенні аргументу х (з деякої області).

Цій меті служить задача про наближення (апроксимації) функцій: функцію f(x) потрібно приблизно замінити деякою функцією g(х) так, щоб відхилення g(х) від f(x) у заданій області було найменшим. Функція g(х) при цьому називається апроксимуючої. Якщо наближення будується на заданій дискретній множині {xi}, то апроксимація називається дискретною. До неї відносяться інтерполяція, середньоквадратичне наближення тощо.

При побудові наближення на безперервній множині (наприклад, на відрізку [a, b]) апроксимація називається безперервною або інтегральною.

MATLAB має засоби дискретної та безперервної апроксимації з візуалізацією результату.

Розглянемо дискретну апроксимацію (обробка експериментальних даних).

 

Приклад.

 

Використовуючи лінійну і поліноміальну апроксимації, одержати емпіричні формули для функції y=f(x), заданої в табличному виді:

 

xi

0,75

1,50

2,25

3,00

3,75

 yi

2,50

1,20

1,12

2,25

4,28

 

Оцінити погрішність емпіричних формул.

 

Протокол програми. У вікні команд набираються значення xi і yi. Далі виконується команда побудови графіка тільки вузлових точок.

>> x = [0.75, 1.50, 2.25, 3.00, 3.75] ;

>> y = [2.50, 1.20, 1.12, 2.25, 4.28] ;

>> рlot (x, y, ¢ о ¢) ;

 Рис. 3.1. Вузлові точки

 

Увага. Варто пам'ятати, що при поліноміальній апроксимації максимальний степінь полінома на 1 менше числа експериментальних точок.

На панелі інструментів вікна графіка вузлових точок у меню Tools виконуємо команду Basic Fitting. З’являється вікно Основний Монтаж. У цьому вікні виділяються необхідні дані апроксимації. Зокрема, можна задати наступні операції:

  • показати рівняння апроксимуючої функції y = g(х);
  • вибрати метод підбору.

У нашій задачі вибираємо лінійну і поліноміальну апроксимації. У вікні графіка з’являються відповідні графіки і формули апроксимуючих функцій (рис. 3.2).

Рис. 3.2. Графіки і формули апроксимуючих функцій

 

Щоб встановити погрішність апроксимації, треба виділити параметр Графік залишку у вікні Основний Монтаж, і  Показати норму залишків. Графік похибок з нормами можна винести в окреме вікно, або разом із графіком і апроксимуючими функціями – суб-графік.

Норма погрішностей вказує на статистичну оцінку средньоквадратичної похибки. Чим вона менше, тим точніше апроксимуюча функція    y = g(х). У нашому прикладі:

Linear : norm of residuals (норма погрішності) = 2.1061

Quadratic : norm of residuals = 0.10736

Cubic : norm of residuals = 0.035857

4 th degree : norm of residuals = 9.6305e-015.

Графік погрішностей можна виводити у виді діаграм (зони), ліній (лінії) або окремих крапок (фрагменти). Сам графік погрішностей являє собою залежність різниці g(х) - f(x) в умовних точках, з'єднаних прямими лініями.

Крім лінійної і поліноміальної апроксимацій можна вибрати сплайн- апроксимацію – коли на кожнім інтервалі наближення використовується кубічний поліном з новими коефіцієнтами. У цьому випадку не можна одержати вираз для апроксимуючої функції, тобто така апроксимація є неповною. 

4. Чисельний розв’язок звичайних диференціальних рівнянь

Багато задач фізики, хімії, екології, механіки й інших розділів науки і техніки при їхньому математичному моделюванні зводяться до диференційних рівнянь. Тому розв’язок диференціальних рівнянь є однієї з важливих математичних задач. У прикладній математиці вивчаються чисельні методи рішення диференційних рівнянь, що особливо ефективні з використанням комп’ютерно-інтегрованих технологій.

Серед чисельних методів розв’язків диференціальних рівнянь найбільш прості – це явні однокрокові методи. До них відносяться різні модифікації методу Рунге-Кутта.

Постановка задачі:

Потрібно знайти функцію y = f(х), що задовольняє рівнянню:

                                              (3.3)

 і приймаючу при х = х0 задане значення y0:

                                                (3.4)

 При цьому рішення необхідно одержати в інтервалі х0 £ х £ хк.. З теорії диференційних рівнянь відомо, що розв’язок y(х) задачі Коші (3.3), (3.4) існує, і є гладкою функцією, якщо права частина F(x, y) задовольняє деяким умовам гладкості.

Чисельне рішення задачі Коші методом Рунге-Кутта 4-го порядку полягає в наступному. На заданому інтервалі [х0, хк] вибираються вузлові точки. Значення розв’язку в нульовій точці відомо y(х0) = у0. У наступній точці y(х1) визначається за формулою:

      (3.5)

 тут

(3.6)

h – крок.                                                                                        

 

тобто, такий варіант методу Рунге-Кутта вимагає на кожнім кроці чотириразового обчислення правої частини рівняння (3.3). Цей алгоритм реалізовано у програмі ode45. Крім цієї програми MATLAB має у своєму розпорядженні великий набір аналогічних програм, що дозволяють успішно вирішувати звичайні диференційні рівняння.

Приклад.

Вирішити задачу Коші:

,             (3.7)

 Точний розв’язок має вигляд:

Розв’яжемо задачу за допомогою програми ode45. Спочатку в М-файл записуємо праву частину рівняння (3.7), сам М-файл оформляється як файл – функція, даємо йому ім'я F:

 

function dydx = F(x, y)

dydx = zeros(1,1);

dydx(1) = 2*(x^2+y(1));

 

Для чисельного рішення задачі Коші у вікні команд набираються відповідні оператори.

 

Протокол програми,

>>[X Y] = ode45 ( @ F , [0 1] , [1] ) ;

 

% Дескриптор @ забезпечує зв'язок з файлом – функцією правої частини

% [0 1] – інтервал на якому необхідно одержати розв’язок

% [1] – початкове значення розв’язоку

>> рlot (X,Y);

 

>> % Побудова графіка чисельного рішення задачі Коші (3.7)

>> hold on; gtext ( ¢ y(x) ¢)

 

% Команда дозволяє за допомогою мишки нанести на графік напис у(х)

>> [X  Y]

>> % Остання команда виводить таблицю чисельного рішення задачі.

 

Результати рішення. Графік розв’язку задачі Коші (3.7) показаний на рисунку 3.3. Чисельне рішення представлене в таблиці 3.4, де наведено лише окремі вузлові точки. У програмі ode45 за замовчуванням інтервал розбивається на 40 точок із кроком h = 1/40 = 0,025.

Рис. 3.3. Графік рішення задачі Коші

 

Таблиця 3.4

Табличне представлення чисельного рішення задачі Коші

хi

Метод Рунге-Кутта

Точне рішення

0,0

1,0

1,0

0,1

1,2221

1,2221

0,2

1,4977

1,4977

0,3

1,8432

1,8432

0,4

2,2783

2,2783

0,5

2,8274

2,8274

0,6

3,5202

3,5202

0,7

4,3928

4,3928

0,8

5,4895

5,4895

0,9

6,8645

6,8645

1,0

8,5836

8,5836

 

Як продемонстровано у таблиці 3.4 чисельне рішення програмою ode45 є точним.

5. Наближене обчислення визначених інтегралів

До обчислень визначених інтегралів зводиться багато практичних задач фізики, хімії, екології, механіки й іншій природних наук. На практиці формулою Ньютона-Лейбніца не завжди вдається скористатися. У цьому випадку використовуються методи чисельного інтегрування. Вони базуються на наступних підходах: з геометричної точки зору визначений інтеграл  являє собою площу криволінійної трапеції. Ідея методів чисельного інтегрування зводиться до розбивки інтервалу [a; b] на безліч менших інтервалів і перебуванню шуканої площі як сукупності елементарних площ, отриманих на кожному частковому проміжку розбивки. У залежності від використаної апроксимації виходять різні формули чисельного інтегрування, що мають різну точність. Розглянемо методи трапецій і Сімпсона (парабол).

Метод трапецій.

Тут використовується лінійна апроксимація, тобто графік функції y = f(x) представляється у вигляді ламаної, з'єднаної точками yi. Формула трапецій при постійному кроці , де n – число ділянок, має вигляд:

.                             (3.8)

 

У MATLAB цю формулу реалізує програма trapz (x,y).

Метод Сімпсона

Якщо підінтегральну функцію замінити параболою, то формула Сімпсона з постійним кроком інтегрування:

 

.(3.9)

 

У MATLAB формула Сімпсона реалізується програмою quad, Підінтегральна функція може задаватися за допомогою дескриптора @, тоді вона програмується у файлі – функції, або за допомогою апострофів, тоді вона записується у самій програмі quad. Точність обчислення інтегралів за замовчуванням прийнята рівною 1×10-6.

 

Приклад.

Обчислити за методами трапецій і Сімпсона значення інтеграла

Протокол програми методу трапецій

>> x = 0 : 0.0001 : 1.0 ;

>> y = 1./ (1+x.^2) ;

>> z = trapz(x, y)

Результат обчислень

z =

        0.7854

Протокол програми методу Сімпсона

>> quad ( ¢ (1./(1+x.^2)) ¢, 0, 1)

Результат обчислень

ans =

0.7854

 

Точне значення інтегралу дорівнює 0,785398163.

 

Як видно з прикладу отримані результати є практично точними, а самі протоколи досить прості.

6. Чисельне рішення нелінійних рівнянь

Задача знаходження коренів нелінійних рівнянь зустрічається в різних областях науково-технічних досліджень. Проблема формулюється в такий спосіб: нехай задана безперервна функція f(x) і потрібно знайти корінь рівняння

f(x) = 0.

Припустимо, що відомо інтервал зміни х [a; b], на якому необхідно досліджувати функцію f(x) і знайти значення х0, при якому f(x0) дорівнює або досить мало відрізняється від нуля.

Дана задача в системі MATLAB може бути вирішена в такий спосіб, Спочатку необхідно побудувати графік функції f(x) на заданому інтервалі і переконатися в існуванні кореня або декількох коренів. Потім застосувати програми пошуку коренів. Якщо існує один корінь і графік f(x) перетинає вісь х, то можна застосувати програму fzero. Якщо f(x) має більше одного кореня х, то варто застосувати більш функціональний оператор fsolve з пакету Optimization Toolbox, що вирішує задачу методом найменших квадратів. Програма fzero використовує відомі чисельні методи: розподіл відрізка навпіл, зворотної квадратичної інтерполяції.

Приклад.

Знайти корінь нелінійного рівняння 10х + 2х – 100 = 0 на інтервалі [1,0; 2,0].

Протокол програми

 

>> % Будуємо графік заданої функції

>> x = 1.0 : 0.001:2.0;  y = 10.0.^x + 2.0*x – 100.0;

>> рlot (x, y) ;  grid on

 

З'являється вікно з графіком функції 10х + 2х – 100 (рис. 3.4), з якого випливає, що корінь функції на заданому інтервалі існує. Для точного визначення кореня застосовуємо fzero і fsolve.

 

Рис. 3.4. Графік функції 10х + 2х – 100

 

>> Х1=fzero('(10.^x+2*x-100)',[1 2])

Результат розв’язку

Х1 =

         1,9824

 

>> X2 = fsolve ( '(10.^x + 2.0*x - 100.0)', 1:2);

Результат рішення

Х2 =

         1.9824

Accessibility

Шрифти

Розмір шрифта

1

Колір тексту

Колір тла