EKh / Материалы по электра / NeLTU-a
.docПрограмА NELТU
Вирішення нелінійних та трансцендентних рівнянь або системи рівнянь
Зміст задачі такий. Існує деякий складний математичний вираз - рівняння загального типу Y= f(X), яке неможливо алгебраїчним способом вирішити відносно аргумента “Х” , тобто записати в оберненій формі X = f(Y), коли аргумент “х” та функція “у” міняються місцями. В той же час для подальшого використання потрібна саме така обернена форма, тобто потрібно підраховувати значення “х” при заданому значенні “y”. Така задача часто виникає в математичному (комп”ютерному) моделюванні як окремий частковий елемент складніших завдань
Первинна (вхідна) залежність Y= f(X) може бути задана у вигляді системи з декількох рівнянь.
Приклад. Розглянемо конкретний технологічний об’єкт: технологічний процес та аппарат-електролізер відомої конструкції. Для такого об’єкта можна записати в загальній формі математичну модель вольт-амперної характеристики (ВАХ), яка складається з ряду вже відомих зі спеціальних дисциплін рівнянь, наприклад
;
; ; ; . (1)
Фактично це вольт-амперна характеристика, задана в формі складної функціональної залежності U(I), яка складається з 5 співвідношень (формул). Підставивши вирази для поляризацій А, К , опору R та граничної густини струму iГР в перше рівняння, одержимо єдине, але складніше за формою і менш зручне для використання рівняння. Якщо підставити в нього значення всіх констант та аргумента I (струм), з нього легко підрахувати значення напруги U .
Завдання ж полягає в тому, щоб вирішити обернену задачу – визначити струм I при заданому значенні напруги U, що вже неможливо виконати алгебраїчним способом.
Один з найпростіших алгоритмів вирішення нелінійних рівнянь - алгоритм половинного ділення. Його зручно розглянути на графіку вольт-амперної характеристики U(I), показаному на рисунку 1.
Рисунок 1. Cхема роботи алгоритму половинного ділення при вирішенні нелінійного рівняння.
Рішення Іх = f (Uх) будемо шукати в інтервалі струмів від ІL=0 (початок графіка, нульовий струм) до максимального значення струму, близького до струму короткого замикання ІP . Ці значення в алгоритмі вважаємо початковими ( на першому крокові) лівою та правою межею області пошуку. Далі ці межі повинні наближатись одна до другої, до того моменту, коли відстань між ними досягне значення, меншого за допустиму помилку. Це і буде рішенням задачі. Процес поступового просування лівої та правої межі в алгоритмі організований так, що невідома точка рішення завжди залишається всередині інтервалу ІL…ІP.
Поділимо інтервал пошуку (ІL,… ІP ) на дві рівні частини, визначимо значення струму в середині інтервалу І1/2 = (ІP - ІL)/ 2 , і по ньому підрахуємо за системою рівнянь напругу U = U1/2 .
Далі порівнюємо між собою два значення напруги – розраховане в середній точці інтервалу U1/2 та задане UХ. З рисунка видно, що на першому крокові підраховане значення напруги більше заданого (U1/2 > U Х) , тому очевидно, що рішення - точка перетину графіка з лінією UХ , знаходиться в правій половині рисунка. Тоді ліву половину інтервалу, де рішення немає – відкидаємо. На графіку ця операція матиме такий вигляд: пересуваємо ліву межу ІL=0 в середню точку І1/2.
Якби рішення знаходилось в лівій частині початкового інтервалу пошуку – тоді в середню точку І1/2 треба було б пересунути праву межу ІP.
Саме таким способом і здійснюється поступове звуження інтервалу пошуку, при якому точка рішення завжди залишається в середині інтервалу.
Далі вказані операції повторюються. На кожному наступному крокові область пошуку зменшується вдвічі - в частках початкового інтервалу 1-0.5-0.25-0.13-0.07-0.04-0.02-0.01, тобто вже на 8-му крокові відносна помилка рішення менша від 1 %.
Запишемо тепер робочий фрагмент алгоритму на алгоритмічній мові ПАСКАЛЬ.
Program NELTU
Var IL,IP,I12,UX,U12: real; k: integer;
BEGIN
ІL:=0; ІP:=****; UХ:=*****;
for k:=1 to 10 do
begin
І12:= (ІL+ІP)/2;
U12 := { ======================= }
if U12 =< UX then ІP := І12;
if U12 > UX then IL := I12;
writeln (k:6, ‘ I12=’, I12:6:2, ‘ U12=’, U12:7:2);
end;
readln;
END
В цьому запису позначення змінних з індексами повністю відповідають попереднім позначенням в тексті. Символи **** означають конкретні числа, а фрагмент { ======= } означає групу арифметичних операторів, які у відповідності з системою рівнянь (1) підраховують значення U1/2 (позначення в програмі U12) в середній точці інтервала пошуку І1/2
На кожному кроці алгоритму, реалізованого в циклі (for k:=1 to 10 do) на 10 кроків, логічні оператори if U12 < UX та if U12 > UX пересувають або праву IP або ліву IL межу інтервала пошуку в середню точку І1/2 .