РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ ПЯТИТОЧЕЧНЫМ МЕТОДОМ АДАМСА – БАШФОРТА - (курсовая)
p>Как типичный пример решения систем линейных дифференциальных уравнений , рассмотрим систему четырех линейных алгебраических уравнений . Для решения системы четырех линейных алгебраических уравнений с четырьмя неизвестными модифицированным методом Гаусса необходимоСоставить систему : (2. 2. 1)
1) Каждое уравнение делиться на коэффициент при X1
2) Теперь образуем нули в первом столбце матрицы системы : вычитаем 2-ое из 1-ого , 3-е из 2-ого , 4-ое из 3-его :
(2. 2. 2)
3) Повторив еще раз эти операции получим систему двух уравнений с двумя неизвестными , решение которой можно получить по формулам Крамера :
(2. 2. 3)
Решение же X1 и X2 можно получить , подставив в какое-либо из уравнений систем (2. 2. 1) и (2. 2. 2) и разрешив эти уравнения относительно соответствующей переменной .
3. ОПИСАНИЕ АЛГОРИТМА
Программа начинается с вывода сообщения о программе . После происходит считывание необходимых исходных данных из файла , для дальнейшей работоспособности алгоритма , а именно – начальных условий и матрицы коэффициентов системы линейных дифференциальных уравнений первого рода , начального шага интегрирования , левого и правого условий Рунге , время интегрирования по трех шаговому методу прогноза и коррекции , время интегрирования по пяти точечному методу Адамса-Башфорта . С помощью метода Эйлера находим дополнительные начальные условия. Решение систем линейных дифференциальных уравнений мы описываем отдельной процедурой , что облегчает дальнейшую алгоритмизацию . Далее составляем цикл , для реализации алгоритма нахождения всех Yk+1 точек на заданном малом промежутке времени , и проверкой на условия Рунге , по трех шаговому методу прогноза и коррекции с авто подбором шага . После чего мы организовываем цикл , реализующий алгоритм нахождения точек по методу Адамса-Башфота , на заданном большом промежутке времени и с шагом автоматически подобранным предыдущим методом . Вычисленные данные записываем файл , по ним формируем массив данных , которые выводим в сответствии с масштабированием на экран в виде графиков . Блок-схема приведена в Приложении 1 .
4. ОПИСАНИЕ ПРОГРАММЫ
Программа реализующая универсальный алгоритм для решения систем линейных дифференциальных уравнений первого порядка произвольного вида , - построена по принципам объектно-ориентированного программирования . Основная программа построена на объектной библиотеке VFH , реализующей возможности реализации гибкого интерфейса между программой и пользователем . Основная программа включает в себя только один модуль PACM , и использует всего два метода объекта TApplPandC , - метод Application - рабочий цикл программы ; деструктор Done – реализует разрушение таблицы виртуальных методов , и операций , связанных с завершением программы . Модуль PACM включает в себя модули библиотек - реализующих построение интерфейса . Модуль реализующий алгоритм метода Адамса-Башфорта , и по вычесленным данным строящий график , есть – PACMBtn . Главным родителем всех объектов есть объект – Tobject . Основным рабочим объектом библиотеки VFH есть объект Tform . Рассмотрим потомка являющегося типичным представителем родителя TForm - TApplPandC . Он имеет два виртуалых метода : MouseHandler : Boolean Б – выходным параметром которого есть признак закрытия формы , и метод FormCreate - реализующий построение интерфейса формы . Не виртуальный метод Application - предназначен для создания формы , конфигурирования программной среды , и дальнейшего управления программой . Модуль реализующий создание и управления главного и субменю , есть – PACMMenu , позволяющий пользователю изменять параметры и настройки системы , предоставляющий справку о разработчике , а также дает доступ к справочной системе PrandCo M Help System . Данные свойства меню реализуют объекты TMenu , и THelpForm , объектной библиотеки VFH . Теперь рассмотрим модуль PACMBtn – рреализующий алгоритм построения вычисленных данных . Процедура реализующая алгоритм пяти точечного метода прогноза и коррекции Адамса-Башфорта , - MethodAdamsaBashforta ( h, tp, ta : real ; NU : array[1...N] of real ) – параметры которой представляют : h - начальный шаг интегрирования ; tp – время интегрирования трех точечным методом прогноза и коррекции , ta – время интегрирования по методу Адамса-Башфорта , NU – массив начальных условий . Данная процедура способна производить решения систем линейных дифференциальных уравнений произвольного размера , на произвольном промежутке времени интегрирования . Вычисленные данные записываются в файлы prandcom*. df . Метод реализующий алгоритм построения вычисленных данных произвольной степени сложности , с возможностью построения графиков с не линейно изменяющимся шагом , построения одновременно любого количества графиков , - есть объект TCartFile , обладающего всеми свойствами родителей Tform , Tchart . К заключению стоит заметить , что программа PrandCo M version 2. 41 - разработана на языке Borland Pascal под защищенный режим работы процессора и имеет доступ ко всей оперативной памяти компьютера . Реализует гибкий интерфейс , облегчающим работу с программным обеспечением . Позволяет решить систему линейных дифференциальных уравнений первого порядка методом Адамса-Башфорта , с возможность просмотра результатов вычисления в виде графиков . Как показали тестовые программы – разработанный алгоритм предоставляет точность вычислений , погрешность которых не превышает 1% . Тексты программной оболочки PrandCo M version 2. 41 приведены в приложении 4 .
5. ПРИМЕРЫ РАСЧЕТОВ
Для анализа достоверности получаемых результатов рассмотрим следующие примеры :
5. 1. Решение одного дифференциального уравнения
Первым этапом анализа достоверности была проверка правильности решения одного дифференциального уравнения . Полученное численное решение сравнивается с аналитическим . Пусть требуется решить уравнение :
при начальном условии y(0)=1 , 0
которое поможет нам сравнить точность численного решения для случая с постоянным шагом , т. к. точность решений с переменным шагом выше . Результаты расчета представлены в Таблице 1 . Как видно из таблицы, отличие между численными и аналитическими решениями удовлетворительное даже для такого большого шага , и не превышает 2% . Теперь решим этот же пример тем же методом , но с переменным шагом . Получаем любопытные зависимости точности от выбора шага , а также шага сходимости , - которые носят периодический характер . Результаты исследования приведены в таблице 2 . Как мы видим, погрешность резко уменьшается с использованием метода с переменным шагом , и показывает очень высокую точность решения для численных методов , не превышающею 1% .
Таблица 1
Таблица 2
Начальный шаг
Максимальная погрешность
Сведение к шагу
0. 1
1. 683 %
0. 0250
0. 01
1. 163 %
0. 0100
0. 001
0. 744 %
0. 0040
0. 0001
0. 568 %
0. 0032
0. 00001
0. 451 %
0. 0025
0. 000001
0. 723 %
0. 0040
0. 0000001
0. 578 %
0. 0032
0. 00000001
0. 462 %
0. 0026
0. 000000001
0. 740 %
0. 0041
0. 0000000001
0. 592 %
0. 0033
0. 00000000001
0. 473 %
0. 0026
Иллюстрация решения данного дифференциального уравнения в виде графика – приведена в Приложении 2 .
5. 2. Решение системы дифференциальных уравнений
Вторым этапом анализа достоверности полученных результатов была проверка правильности решения системы линейных дифференциальных уравнений с аналитическим решением . Рассмотрим следующую систему дифференциальных уравнений , которую требуется решить методом Адамса-Башфорта :
Начальными условиями здесь являются :
. Возьмем начальный шаг интегрирования h=0. 00001 , время интегрирования по трех точечному методу прогноза и коррекции tp=0. 1 и время интегрирования по методу Адамса-Башфорта ta=1 . Результаты исследования для разных начальных шагов интегрирования приведены в таблице 2 . Мы приходим к выводу , что точность решения одного уравнения и системы дифференциальных уравнений совпадают . Иллюстрация решения данной системы дифференциальных уравнений приведены в виде графика в приложении 3 .
ЗАКЛЮЧЕНИЕ
В данной курсовой научно-исследовательской работе разработан алгоритм и программа решения систем линейных дифференциальных уравнений первого порядка пяти точечным методом прогноза и коррекции Адамса-Башфорта . Проведены тестовые расчеты , подтвердившие высокую эффективность и точность метода Адамса-Башфорта со стартованием трех точечным методом прогноза и коррекции с переменным шагом . Проведены ряд исследований решения систем как с постоянным шагом , так и с переменным шагом на сходимость к постоянному шагу . Во всех случаях получены результаты высокой точности .
Список используемой литературы
1. Дж. Ортега , У. Пул “Введение в численные методы решения дифференциальных уравнений ”. Пер. с англ. ; под редакцией А. А. Абрамова - М. ;Наука. Гл. ред. физ. мат. лит. 1986. -288с. 2. Р. В. Хемминг “Численные методы для научных работников и
инженеров ”: Пер с англ. :Под редакцией Р. С. Гутера .
Гл. ред. физ. мат. лит. 1968. -203 с.
Т. Шуп. ”Решение инженерных задач наЭВМ. Практическое пособие “ Пер. с англ. -М. Мир. 1982. -238с.
Приложение 1 :
Блок схема Алгоритма
+
+
Приложение 2:
Решение одного дифференциального уравнения
Приложение 3 :
Решение системы линейных дифференциальных уравнений
1-ое уравнение 2 –ое уравнение
3 – е уравнение 4 –ое уравнение
Приложение 4 : Тексты программ
{$M 10000, 0, 0}
(****************************************************************************) (****** Дата последней разработки : 05. 05. 2001 **********************) (****************************************************************************) Program Prognoz_and_Correction_Modification;
(****************************************************************************) Uses PACM;
(****************************************************************************) var
TPC : TApplPandC;
(****************************************************************************) (******************************) begin (*************************************) TPC. Application;
TPC. Done;
(*******************************) end. (*************************************) (****************************************************************************)
NetMail ( FidoNet ) 2: 461/212. 21
(****************************************************************************) (**** Дата последней разработки модуля : 15. 04. 2001 *****************) (****************************************************************************)
(****************************************************************************) (*******************************) Unit PACM; (*******************************) (****************************************************************************) (*******************************) INTERFACE (********************************) (****************************************************************************) Uses FormObj, MouseObj, PACMEr, PACMMenu, PACMBtn, PACMPnl, PACMPC, PACMCnst; (****************************************************************************) type
TApplPandC = object ( TForm )
Function MouseHandler : boolean; Virtual;
Procedure FormCreate; Virtual;
Procedure Application;
end;
(****************************************************************************) (******************************) IMPLEMENTATION (****************************) (****************************************************************************) Procedure TApplPandC. FormCreate;
var
Pnl : TPanel;
Pnl1 : TPanel;
TMenu1 : TCreateMenus;
begin
Pnl. Init(548, 35, 619, 50, 1, 7, 1, 1, 1, 1, false, false);
Pnl. Panel;
Pnl1. Init(470, 407, 630, 460, 1, 7, 1, 0, 1, 4, true, false);
Pnl1. Panel;
TPnl1. ToolBarCreate;
TPnl1. PanelCreate;
TPageControl1. PageControlCreater;
TBitBtns. BitBtnCreaters;
TMenu1. MenusCreate;
end;
(********************************)
Function TApplPandC. MouseHandler;
var
TMouse1 : TMouse;
b, x, y : word;
TMenu1 : TCreateMenus;
TSubMenu1 : TCreateMenus;
ST1 : TSystemTime;
begin
MouseHandler: =false;
TMouse1. GetMouseState(b, x, y);
ST1. Init(549, 36, 618, 49, 1, 15);
ST1. SystemTime;
TBitBtns. BitBtnHandlers(b, x, y);
MouseHandler: =fExitBtn;
TMenu1. MenusVisible(x, y);
TMenu1. MenusHandlers(b, x, y);
TPageControl1. PageControlHandlers(b, x, y);
end;
Procedure TApplPandC. Application;
var
TIEr : TInitErrors;
begin
TIEr. FatalErrorVFH;
TIEr. LoadFont('km_defj8. fnt');
TIEr. FindImEr1('x. bi');
InitObjGraph;
if InitMouseJVU then
begin
TIEr. LfLoad('Lf. sys');
TIEr. ErrorExec('x. bi');
TIEr. FindFile('f1. dat');
TIEr. FindFile('f2. dat');
TIEr. FindFile('f3. dat');
TIEr. FindFile('f4. dat');
TIEr. FindFile('km_defj8. fnt');
TIEr. FindFile('f_nfrj8. fnt');
TIEr. FindFile('t_nfrj8. fnt');
TIEr. FindFile('asdf. bi');
TIEr. FindFile('pacm_n1. bi');
TIEr. FindFile('pacm_n2. bi');
TIEr. FindFile('pacm_n3. bi');
TIEr. FindFile('pacm_n4. bi');
TIEr. FindFile('PrandCoM. hlp');
TIEr. FindFile('litj. chr');
TIEr. FindFile('scri. chr');
TIEr. FindFile('trip. chr');
TIEr. FindFile('tscr. chr');
TIEr. FindFile('initm. mtr');
TIEr. FindFile('initnu. mtr');
if not fQuickHalt then
begin
TIEr. LoadCFG('PrandCom. cfg');
With HT do
begin
hx1: =575;
hy1: =20;
hx2: =637;
hy2: =34;
hc: =true;
hs: ='Закрыть';
end;
Init(1, 1, 639, 479, 7, 1, 'Prognoz & Corrections Modifications'); Form;
end;
end
else
begin
TIEr. ErrorVFH;
end;
end;
(****************************************************************************) (***********************************) END. (*********************************) (****************************************************************************)
Страницы: 1, 2