Міністерство освіти і науки України
Національного університету «Львівська Політехніка»
ІКТА
Кафедра ЗІ
Звіт до лабораторної роботи №5
з дисципліни: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «Модифікований Метод Ньютона для розв’язування систем нелінійних рівнянь»
Варіант №1
1. Мета роботи: ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – Модифікований методом Ньютона.
2. Завдання
Розв’язати систему нелінійних рівнянь Модифікований методом Ньютона з якобіаном із кінцевих різниць, вибираючи за початкові наближення . Ітерації проводити до збігу двох послідовних наближень з похибкою .
1)
3. Блок-схема алгоритму
3.1 Блок-схема алгоритму метода f()
початок
1
i==0 || i==1
2
так
f(x)
3
f(x)
кінець
f(x) = x1 - Math.Pow(x1, 2) - Math.Pow(x2, 2) -0,1
f(x) = x2 - 2 * x1 * x2 - 0.1
3.2 Блок-схема алгоритму метода Poxidna()
початок
1
i:=0 i<n i:=i+1
2 так
ні
i%2=0
3
df[i]:=f(x)
df[i]:=f(x)
кінець
f(x) = (f(x1 + h, x2,i) - f(x1, x2,i)) / h
f(x) = (f(x1, x2 + h,i) - f(x1, x2,i)) / h
3.3 Блок-схема алгоритму метода solve()
початок
1
a := Poxidna()
2
d:= f(x)
3
dx1:=f(x)
dx2:=f(x)
4
x:=x1 y:=x2
x1=x1+dx
x2=x2+dx2
5
del:=(x1-x)/x
6
|del|>h
ні
x1,x2,f1,f2
кінець
f(x) = a[0] * a[3] - a[1] * a[2]
f(x) = (-f(x1, x2, 1) * a[3] - (-f(x1, x2, 2) * a[1])) / d;
f(x) = (-f(x1, x2, 2) * a[0] - (-f(x1, x2, 1) * a[2])) / d;
3.4 Блок-схема методу Main( ).
початок
nt.solve()
кінець
4. Текст програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Nuton
{
public double x1, x2;
public double dx1, dx2, d, x, y, del;
double h = 0.000000001;
int n = 4;
public Nuton(double x, double y)
{
x1 = x;
x2 = y;
}
double f(double x1, double x2, int i)
{
if (i==0 || i==1)
return x1 - Math.Pow(x1, 2) - Math.Pow(x2, 2) -0.1;
return x2 - 2 * x1 * x2 - 0.1;
}
double[] Poxidna()
{
double[] df = new double[n];
for (int i = 0; i < n; i++)
{
if (i % 2 == 0)
df[i] = (f(x1 + h, x2, i) - f(x1, x2, i)) / h;
else
df[i] = (f(x1, x2 + h, i) - f(x1, x2, i)) / h;
}
return df;
}
public void solve()
{
do
{
double[] a;
a = Poxidna();
d = a[0] * a[3] - a[1] * a[2];
dx1 = (-f(x1, x2, 1) * a[3] - (-f(x1, x2, 2) * a[1])) / d;
dx2 = (-f(x1, x2, 2) * a[0] - (-f(x1, x2, 1) * a[2])) / d;
x = x1; y = x2;
x1 += dx1;
x2 += dx2;
del = (x1 - x) / x;
} while (Math.Abs(del) > h);
Console.WriteLine("Корені системи:\nx1=" + x + "\nx2=" + y);
Console.WriteLine("\nf1=" + (x - Math.Pow(x, 2) - Math.Pow(y, 2) - 0.1) + "\nf2=" + (y - 2 * x * y - 0.1));
}
}
class Program
{
public static void Main()
{
Nuton nt = new Nuton(0, 0);
nt.solve();
Console.ReadLine();
}
}
}
5. Результат виконання програми
6. Висновок
На даній лабораторній роботі я ознайомився з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – Модифікованим методом Ньютона.