- •Інститут підприємництва та перспективних технологій Матвійчук я.М. Методи та алгоритми обчислень на еом
- •Передмова
- •Розділ 1. Обчислювальний метод та обчислювальний алгоритм
- •Практичне заняття 1. Обрахунок степеневого поліному в системі matlab
- •Практичне заняття 2. Розв’язування систем лінійних рівнянь у системі matlab
- •Лабораторна робота 2. Розв’язування систем лінійних рівнянь у системі matlab
- •Практичне заняття 3. Інтерполяція та апроксимація функції Рунге в системі matlab
- •Лабораторна робота 3. Інтерполяція та апроксимація функції Рунге в системі matlab
- •Практичне заняття 4. Сплайн-інтерполяція та сплайн-апроксимація в системі matlab.
- •Лабораторна робота 4. Сплайн-інтерполяція та сплайн-апроксимація в системі matlab.
- •Практичне заняття 5. Обчислення означених інтегралів у системі matlab
- •Практичне заняття 6. Розв’язування нелінійних рівнянь у системі matlab
- •Лабораторна робота 6. Розв’язування нелінійних рівнянь у системі matlab
- •Практичне заняття 7. Оптимізація функції однієї змінної у системі matlab
- •Лабораторна робота 7. Оптимізація функції однієї змінної у системі matlab
- •Практичне заняття 8. Розв’язування задачі лінійного програмуван ня в системі matlab
- •Практичне заняття 9. Розв’язування системи Ван-дер-Поля в системі matlab.
Практичне заняття 4. Сплайн-інтерполяція та сплайн-апроксимація в системі matlab.
Мета MATLAB-програми сплайн-інтерполяції та сплайн-апроксимації – показати якість відтворення не лише функції Рунге кубічним сплайном, але також її першої та другої похідних відповідними похідними сплайна. Програма дозволяє побачити, як диференціювання сплайна збільшує шумову добавку функції Рунге, і як згладити цей шум апроксимуючим сплайном.
%**************************************************************************
%** Spline interpolation and approximation of the Runge function **
%**************************************************************************
clear;
xx=-5:0.01:5; yy=1./(1+xx.*xx);
yy1=-2.*xx./(1+xx.*xx).^2;
yy2=-2./(1+xx.*xx).^2+8.*xx.^2./(1+xx.*xx).^3;
x=-5:0.05:5; y=1./(1+x.*x)+1e-4*randn(1,length(x));
sp=csapi(x,y);
%sp=csaps(x,y,0.999999);
%sp=spapi(5,x,y);
sp1=fnder(sp); sp2=fnder(sp1);
plot(xx,yy,'r', xx,fnval(xx,sp),'b'); pause;
plot(xx,yy1,'r', xx,fnval(xx,sp1),'b'); pause;
plot(xx,yy2,'r', xx,fnval(xx,sp2),'b');
er=max(abs(yy2-fnval(xx,sp2))); title(sprintf('er=%g',er));
У перших операторах програми задано точки для подальшого виводу графіків функції Рунге (вектори xx, yy), її першої похідної (вектори xx, yy1) та другої похідної (вектори xx, yy2).
Точки інтерполяції (вектори x, y) задано з кроком у п’ять раз більшим (0.05), ніж крок виводу графіків (0.01). До точних значень функції Рунге у вузлах інтерполяції додано невеликі випадкові відхилення (функція randn).
Функція csapi будує за точками x, y інтерполюючий кубічний сплайн. Коефіцієнти сплайна записано до матриці sp. Перша і друга похідні сплайна обраховані подвійним звертанням до функції fnder.
Далі у графічному вікні побудовано графіки функції Рунге та кубічного сплайна. Значення сплайна обраховано функцією fnval для всіх значень аргумента (вектор xx).
Аналогічно побудовано графіки похідних функції Рунге та похідних кубічного сплайна. Для других похідних обраховано найбільше значення абсолютної різниці er між другою похідною функції Рунге та другою похідною сплайна і відповідний графік надписано значенням цієї різниці.
В програмі передбачена побудова кубічного апроксимуючого сплайна функцією csaps. Треба лише у відповідному операторі в тексті програми прибрати символ коментаря %. Третій аргумент функції csaps є коефіцієнтом згладження ≤1. Зменшення цього коефіцієнта збільшує ефект згладження. Підбираючи коефіцієнт згладження, можна досягти потрібної якості сплайн-апроксимації функції Рунге із випадковими відхиленнями.
Ще один оператор, який в наведеному тексті програми є коментарем, містить функцію spapi, що будує інтерполюючий сплайн довільного степеня. Перший аргумент цієї функції на одиницю більше за степінь сплайна.
Лабораторна робота 4. Сплайн-інтерполяція та сплайн-апроксимація в системі matlab.
1. Набрати в системі MATLAB та відлагодити текст програми сплайн-інтерполяції та сплайн-апроксимації функції Рунге.
2. Змінюючи множник функції randn, дослідити вплив випадкової добавки на якість кубічного інтерполюючого сплайна та його похідних.
3. Підбираючи коефіцієнт згладження функції csaps, досягти задовільної якості сплайн-апроксимації похідних функції Рунге.
4. Дослідити якість інтерполяції сплайнами, степені яких вище і нижче третього (функція spapi).
5. Пояснити всі оператори MATLAB-програми.
На рис. 8 графіки функції Рунге і кубічного інтерполюючого сплайна візуально співпали, бо випадковий шум у точках інтерполяції досить малий. Натомість на рис. 9 і особливо на рис. 10 видно, як диференціювання сплайна збільшує шум. Це явище є наслідком некоректності операції диференціювання і пояснено в наступному розділі. На рис. 11 величина шумових відхилень у вузлах інтерполяції така ж, як на попередніх рисунках. Але підбором згладжуючого коефіцієнта кубічного апроксимуючого сплайна вдалось майже усунути її вплив навіть у другій похідній.
На рис. 12 у збільшеному масштабі показано фрагмент інтерполяції функції Рунге сплайном нульового степеня, а на рис. 13 – фрагмент другої похідної сплайна другого степеня. Випадкові відхилення тут відсутні.
Контрольні завдання до розділу 4
1. В чому полягає ідея сплайн-інтерполяції?
2. Дайте визначення кубічного інтерполюючого сплайна.
3. Яка фізична аналогія кубічного інтерполюючого сплайна?
4. Дайте визначення кубічного апроксимуючого сплайна.
Розділ 5. Наближене обчислення означених інтегралів і похідних.
Обчислення означеного інтеграла є поширеною задачею, що має очевидне практичне застосування. Означений інтеграл обчислюється за знаменитою формулою Ньютона-Лейбніца:
; (5.1)
де: [a,b] – відрізок інтегрування; F(x) – первісна функції f(x), тобто dF(x)/dx=f(x).
В назві формули (5.1) зустрілись прізвища двох геніальних вчених – англійця Isaak Newton, і німця Gottfried Wilhelm von Leibniz, які в другій половині 17-го сторіччя заснували математичний аналіз. Між ними навіть була пріоритетна суперечка, де вони показали не найкращі людські якості. Ньютон власноручно написав на свою користь висновок спеціальної комісії Королівської академії наук, що вирішувала питання першості. Лейбніц навзаєм у листі до англійської принцеси німецького походження звинуватив Ньютона у безбожжі, що на той час було дуже небезпечно. Але сумні обставини цієї суперечки, що отруїла останні роки їхнього життя, не змогли затьмарити всесвітню славу гігантів науки.
Повертаючись до формули (5.1), зазначимо, що первісні відомі для небагатьох функцій, а часто взагалі не існують. Тому треба знати надійні числові методи обрахунку означеного інтеграла, які з гарантованою точністю дають його наближене значення.
На рис. 14 означений інтеграл (5.1) чисельно рівний площі криволінійної трапеції під графіком підінтегральної функції f(x)
Розіб’ємо вірізок [a, b] на рівні кроки довжиною h. На кожному кроці замінимо частину криволінійної трапеції прямокутником, як це показано на фрагменті 1 рис. 14. Площа такого прямокутника рівна h∙f(xі) або h∙f(xі+1).
Загальна площа прямокутників, побудованих на всіх кроках, є наближеним значенням інтеграла:
. (5.2)
Формули (5.2), що їх називають формулами прямокутників, є найпростішими й найменш точними формулами наближеного обрахунку означеного інтеграла.
Точнішою є формула прямокутників, що використовує середнє значення функції на кожному кроці (f(xі)+f(xі+1))/2:
(5.3)
Формулу (5.3) можна отримати інакше, якщо на кожному кроці замінити криволінійну трапецію прямолінійною, як показано на фрагменті 2 рис. 14. Площа прямолінійної трапеції дорівнює h(f(xі)+f(xі+1))/2, а сума площ таких трапецій утворює формулу (5.3). Тому цю формулу називають формулою трапецій.
Можна ще підвищити точність, якщо на кожному кроці криволінійну трапецію замінити також криволінійною, але з відрізком параболи, що замінить відрізок функції f(x). Так побудована формула Сімпсона:
; (5.4)
де f(xі+0.5) – значення функції посередині і-го елемента.
Наступне підвищення точності, очевидно, полягатиме в заміні підінтегральної функції на кроці кубічною параболою. Уважний читач вже помітив, що ми підійшли до використання сплайн-інтерполяції функції f(x) (дивись розділ 4). Справді, точніші методи означеного інтегрування застосовують сплайни.
Можна помітно зменшувати кількість обчислень, якщо крок розбиття відрізка [a, b] робити не постійним, а пристосовувати його до змін функції f(x), контролюючи похибку інтегрування. Такі методи інтегрування називають адаптивними (що пристосовуються).
Спільною рисою всіх методів обрахунку означеного інтеграла є те, що зі зменшенням кроку h їх похибка неухильно зменшується. Формули (5.2)-(5.4) прямують до точних, якщо h→0.
Зовсім інша ситуація при числовому обрахунку похідної. Справа в тому, що диференціювання є некоректною (неправильною) математичною задачею.
На початку 20-го сторіччя знаменитий французький математик Жак-Саломон Адамар (Hadamard) сформулював поняття коректних математичних задач – таких, що мають єдиний розв’язок і цей розв’язок є стійким щодо умов задачі. Некоректні задачі Адамар запропонував не розглядати, бо вони нібито не мають реального змісту. Ця заборона проіснувала до середини сторіччя, коли вимоги практики примусили розв’язувати численні некоректні задачі. В наступні десятиріччя була створена теорія розв’язування некоректних задач, яку назвали „теорія регуляризації”. Основна ідея регуляризації полягає в заміні некоректної задачі такою коректною, розв’язок якої можна як завгодно точно наблизити до розв’язку некоректної задачі.
Неважко продемонструвати некоректність диференціювання. Нехай задана функція u(x)=f(x)+sin(ωt), що складається з гладкої функції f(x) та гармонічного доданка, який розглядаємо як похибку, відхилення функції f(x). Похідна має вигляд: du(x)/dx=df(x)/dx+ωcos(ωt). Похибка похідної може бути як завгодно великою, якщо не обмежувати параметр ω, тоді як похибка функції u(x) обмежена. Отже, похибки похідних можуть бути як завгодно великі при обмежених похибках початкових даних, тобто диференціювання є нестійким щодо змін початкових даних.
Некоректність диференціювання суттєво ускладнює числовий обрахунок похідних.
Найпростіші формули похідних для функції дискретного аргумента ui, (i=1,…,n) такі:
; (5.5)
де h=(xi–xi-1)=(xi+1–xi) – крок за аргументом.
Здається
на перший погляд, що зменшення h
повинно зменшувати похибку наближених
формул (5.5), аж поки похідна не стане
точною при h→0.
Але нехай дискретне значення функції
має похибку: ũi=ui+δ.
Тоді, за першою формулою (5.5),
,
тобто похибка похідної нескінченно
зростає зі зменшенням h.
Отже, крок числового диференціювання
дискретної функції з похибками не можна
необмежено зменшувати, а треба узгоджувати
його з похибками значень функції.
Вперше
помітив це геніальний Ньютон. Загалом
правильний вибір кроку числового
диференціювання дискретної функції з
похибками є непростою задачею.
Існує багато формул числового диференціювання, аналогічних (5.5). Всі вони походять з інтерполюючих поліномів, як (5.5) походить з лінійної інтерполяції.
Універсальними засобами числового обрахунку похідних є сплайн-інтерполяція та сплайн-апроксимація (дивись розділ 4). Після побудови сплайна похідні знаходять аналітично, а застосування апроксимуючого сплайна дозволяє „згладжувати” похибки у вузлах (дивись лабораторну роботу 4). По суті, апроксимуючий сплайн регуляризує диференціювання дискретної функції з похибками.
