Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Інститут комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління
ЗВІТ
ПРО ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ №8
З ПРЕДМЕТУ: ЧИСЕЛЬНІ МЕТОДИ
НА ТЕМУ
«Розв’язування системи нелінійних алгебраїчних рівнянь методом простої ітерації (методом Ньютона)»
Мета роботи: вивчити і засвоїти метод простої ітерації.
Короткі теоретичні відомості
Метод простої ітерації для розв’язування системи двох нелінійних рівнянь.
Нехай потрібно з заданою точністю ε знайти дійсні корені системи двох нелінійних рівнянь.
F1(x,y)=0
(3)
F2(x,y)=0
Кількість і наближення коренів системи (3) знаходимо графічно. Нехай система має тільки ізольовані дійсні корені. При використанні методу ітерацій систему (3) зводимо до еквівалентної системи наступного вигляду:
(4)
де , – так звані ітеруючі функції. На основі системи (4) будуємо ітерації
(5)
Згідно з теоремою [3, с. 79] для збіжності процесу (5) до кореня системи (4) необхідно, щоб виконувалася умова на неперервно диференційовні функції ,
(6)
Оцінка похибки n-го наближення дається формулою
(7)
де M=max{q1,q2}
Збіжність методу ітерацій є доброю, якщо М<1/2, при цьому М/(1-М) < 1.
Побудуємо ітеруючі функції для системи (4)
(8)
Коефіцієнти α,β,γ,δ знаходимо з системи
(9)
Тоді, за такого підбору параметрів α,β,γ,δ, умова (6) виконується, якщо часткові похідні функцій , в околі точки змінюються мало.
Приклад.. Нехай маємо систему
Записуємо еквівалентну систему
В квадраті будуть виконуватися умови
0<φ1<1, 0<φ2<1
Тоді умови (6) матимуть вигляд
Завдання
Використовуючи метод простої ітерації, розв’язати з точністю ε = 10 такі нелінійні системи рівнянь. Початкове наближення знайти графічно.
Номер завдання для кожного студента відповідає його порядковому номеру в списку групи (підгрупи).
12.
Лістинг програми
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float x0, y0, xn0, ytn1, yn0, eps, h, xn1, yn1, k1, k2;
bool modif=true;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
double func(double xn0, double yn0)
{
return (sin(yn0*yn0+xn0)/(xn0*yn0));
}
//---------------------------------------------------------------------------
double func_toch(double xn0, double yn0)
{
return (xn0*xn0-yn0*yn0-0.75)));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
eps=StrToFloat(LabeledEdit1->Text);
xn0=x0;
yn0=y0;
while (xn0 < (x0+0.4267))
{
k1 = h*func(xn0,yn0);
k2 = h*func(xn0+h,yn0+k1);
yn1 = yn0 + (k1+k2)/2.0;
xn1 = xn0 + h;
xn0 = xn1;
yn0 = yn1;
ytn1=func_toch(xn1);
Edit1->Text=FloatToStrF(xn1,ffFixed,8,4);
Edit2->Text= FloatToStrF(yn1,ffFixed,8,4);
if(abs(yn1-ytn1)>eps){h/=2.0; modif=false;}
else if(!modif){h*=2; modif=true;}
}
}
Вигляд програми:
Висновок: на даній лабораторній роботі я навчився розв‘язувати системи нелінійних рівнянь методом простої ітерації.