Теоретична частина.
У даній розрахунково-графічної роботи (далі РГР) потрібно скласти програму
для розв'язання системи нелінійних рівнянь методом послідовної ітерації
оберненої матриці Якобі.
Суть методу в наступному:
Хай потрібно вирішити систему нелінійних алгебраїчних або трансцендентних
рівнянь:
F1 (X1, X2 ,..., Xn) = 0; i = 1,2 ,..., n,
з початковим наближенням до вирішення:
X0 = (x10, x20, ... xn0).
Обчислювальна схема реалізованого методу полягає в наступному:
На початку ітераційного процесу матриця H покладається рівною одиничною:
H0 = E.
Потім для k = 0,1 ,...< br />
1. Обчислюється
Pk = - Hk * F (Xk);
2. Знаходяться
Xk 1 = Xk + tk * Pk.
Спочатку tk = 1. Потім шляхом послідовного ділення tk на 2 знаходимо таке
tk, щоб виконувалася нерівність:
| F (Xk +1) | <| F (Xk) |>
Ітераційний процес закінчується при виконанні умови:
| F (Xk +1) |
де E - задана точність.
3. Визначається
Yk = F (Xk 1) - F (Xk)
4. Знаходиться нове наближення матриці:
Hk +1 = Hk - (Hk * Yk - Pk * tk) * (Pk) T * (Hk) T/((Pk) T * Hk * Yk)
і знову повторюється обчислювальний процес з пункту 1.
Порядок роботи з програмою
Дана РГР представлена у вигляді 3 виконуваних модулів:
OBRJ.M, OBRF.M і FUN1.M. Рішенням поставленого завдання займається модуль OBRF.M,
а два інших є допоміжними:
OBRJ.M - головний модуль, в якому вводяться вхідні дані і виводяться
результати обчислень, а FUN1.M - модуль, який пише сам користувач і
який повертає обчислені ліві частини для необхідного рівняння.
У головній програмі задаються початкові наближення, у вигляді вектора X0 а також
запитується допустима помилка. Потім викликається модуль OBRJ.M, який і
реалізує рішення даної системи рівнянь методом послідовної ітерації
оберненої матриці Якобі. Всередині себе даний модуль в міру необхідності викликає
функцію FUN1.M, яку пише сам користувач.
Опис роботи програм
У зв'язку з тим, що дана РГР складається з 3 частин, то опишемо їх поодинці
(роздруківки даних модулів наведено в додатку):
1. OBRJ.M
Головний модуль
Вхідні дані: відсутні.
Вихідні дані: відсутні.
Мова реалізації: PC MathLab.
Операційна система: MS-DOS 3.30 or Higher.
Пояснення до тексту модуля:
"Стандартний" головний модуль. У даному модулі задаються початкові значення в
вигляді вектора, наприклад:
X0 = [0.4 0.9]
Також в даному модулі запитується допустима помилка, очищається екран, а також
виробляються інші підготовчі дії.
Потім відбувається виклик модуля OBRF.M з отриманими вхідними даними. Формат
виклику даного модуля описаний далі (в описі самого модуля).
Після обчислень в головну програму повертаються результати обчислень на
основі яких будуються графіки а також виводяться оцінки за витратами машинного
часу і швидкодії.
2. OBRF.M
Обчислювальний модуль
Вхідні дані:
FunFcn - ім'я функції, написаної користувачем, що обчислює ліві частини
для необхідної системи в певній точці.
X0 - вектор-рядок, що визначає початкові значення (початкове наближення).
E - припустима помилка.
Вихідні дані:
Tout - Стовпець ітерацій ( "Час")
Xout - стовпці значень обчислених на кожному етапі для кожної ітерації
DXout - стовпці похибок по кожній компоненті, обчислені на певному
етапі
Мова реалізації: PC MathLab
Операційна система: MS-DOS 3.30 or Higher
Пояснення до тексту модуля:
Даний "обчислювальний" модуль реалізує метод послідовної ітерації
оберненої матриці Якобі. Загальна структура виклику даного модуля:
[Tout, Xout, DXout] = OBRF (FunFcn, X0, E);
Значення кожного з параметрів були описані вище.
На початковому етапі в даному модулі ініціалізувалися внутрішні змінні
(наприклад, задається одинична матриця H, відповідно до розмірністю X0),
формуються (на основі початкових значень) первинні елементи матриць
Tout, Xout, DXout.
Потім ця функція, як і багато інших в чисельних методах, має вигляд:
While ПОМИЛКА> ПРИПУСТИМА ПОМИЛКИ
Оператор1
Оператор2
.........< br />
.........< br />
ОператорN
End
Всередині даного циклу відбуваються обчислення внутрішньої змінної Pk на кожному
кроці K і, обчислюється початкове наближення Xk 1. Спочатку t = 1 (Не номер
ітерації, а внутрішній параметр!). Потім, в черговому циклі While ... End в
випадку, якщо | F (Xk +1) | <| F (Xk) | t = t/2 і знову обчислюється Xk 1. Коли чергове>
Xk 1 знайдено, обчислюється Yk, а потім і нове наближення матриці H.
Ітераційний процес закінчується, якщо | F (Xk +1) |
виконується - ітераційний процес триває заново.
Формування вихідних значень-матриць відбувається всередині даного циклу і тому
ніяких додаткових дій не потрібно, тобто із закінченням даного циклу
закінчується і сама функція.
3. FUN1.M
Модуль, що обчислює ліві частини
Вхідні дані:
X - вектор-рядок, що задає точки для обчислень по кожній компоненті.
Вихідні дані:
FF - вектор-рядок, який повертає значення кожної компоненти в певній точці
Мова реалізації: PC MathLab
Операційна система: MS-DOS 3.30 or Higher
Пояснення до тексту модуля:
У принципі, текст даного модуля не потребує пояснень. У ньому користувач
реалізує систему рівнянь, яка підлягає вирішенню. Тобто на вхідні
значення X дана функція повертає ліві частини по кожному рівнянню.
Єдина вимога до даного модулю - дотримання формату, тобто вхідні і
вихідні дані повинні бути представлені у вигляді вектор-рядків.
Порівняльний аналіз і
оцінка швидкодії.
Порівняльний аналіз показав, що даний метод має непоганий збіжністю,
так як спробувати метод простої ітерації з параметром взагалі відмовився
сходитися для даної системи. Однак добре підходить для порівняння дискретний
метод Ньютона, тому що дані методи практично однакові що за точністю що
за витратами.
1. Метод послідовної ітерації оберненої матриці Якобі Число операцій:
порядку 682
Швидкодія: близько 0.11 секунди
2. Метод Ньютона дискретний
Кількість операцій: близько 990
Швидкодія: близько 0.22 секунди
Як видно з наведених вище даних, ці два методи дуже близькі між собою, але
метод Ньютона дискретний більш складний в реалізації, однак має кращу
збіжністю, наприклад при початкових значеннях X0 = [2.0 2.0]; метод
послідовної ітерації оберненої матриці Якобі вже не справляється, в той час
як дискретний метод Ньютона продовжує непогано працювати. Однак метод Ньютона
вимагає великих витрат машинного часу і тому при виборі методу необхідно
виходити їх конкретних умов завдання і якщо відомо досить точне
наближення і потрібна швидкість обчислень, то до таких умов відмінно
підходить розроблений метод послідовної ітерації оберненої матриці Якобі.
Висновки
У даній РГР був розроблений і реалізований метод послідовної ітерації
оберненої матриці Якобі, призначений для рішення системи нелінійних
рівнянь. Програма, реалізована на мові PC MathLab хоча і не є
оптимальної, однак виконує поставлене завдання і вирішує системи рівнянь.
Реалізований метод не відрізняється підвищеною збіжністю і вимагає досить
точного початкового наближення, однак досить швидко сходиться до точного
рішенням, тобто його можна порекомендувати для обчислення непростих систем
нелінійних рівнянь за наявності досить точного початкового наближення і
наявності тимчасових обмежень.
Список літератури
1. О. М. Саричева. "Чисельні методи в економіці. Конспект лекцій", Новосибірський
державний технічний університет, Новосибірськ 1995р.
2. Д.Мак-Кракен, У. Дорн. "Чисельні методи та програмування на Фортране",
Видавництво "Світ", М. 1977р.
3. Н. С. Бахвалов. "Чисельні методи", Видавництво "Наука", М. 1975р.