МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
„ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
Кафедра захисту інформації
З В І Т
До лабораторної роботи №5
з курсу:
„ Комп’ютерні методи дослідження
інформаційних процесів та систем ”
на тему:
«Метод Ньютона для розв’язування систем
нелінійних рівнянь»
Варіант 7
Мета роботи: Ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона.
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’язати систему нелінійних рівнянь модифікованим методом Ньютона, вибираючи за початкові наближення . Ітерації проводити до збігу двох послідовних наближень з похибкою .
7)
Блок схема програми
Список індентифікаторів, змінних, функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення
class Program – клас, в якому оголошений метод Main;
class Metods –клас, в якому оголошені методи J, A, F, Obchusl;
public void J – метод обчислення Якоб’яна;
public void A – метод обчислення обертання Якоб’яна;
public void F – метод обчислення функції в при х[1], x[2];
public void Obchusl – метод обчислення значення х[1], x[2];
static void Main(string[] args) – головна функція;
I – клас типу Methods;
j, a масиви 2х2 типу Double;
x1, x2, E, delta_xk1, delta_xk2, xk1, xk2 змінні типу double;
p – змінна типу int;
f,r – лінійні масиви типу Double.
Текст програми:
using System;
using System.Collections.Generic;
using System.Text;
namespace Njuton
{
class Program
{
static void Main(string[] args)
{
Metods I = new Metods();
I.Obchusl();
Console.ReadKey();
}
}
class Metods
{
Double[,] j = new Double[2, 2];
Double[,] a = new Double[2, 2];
double x1, x2, E = 0.00001, delta_xk1, delta_xk2, xk1, xk2;
int p;
Double[] f = new Double[2];
Double[] r = new Double[2];
public void J(double x1, double x2)
{
j[0, 0] = 1 - 2 * x1;
j[0, 1] = -2 * x2;
j[1, 0] = -2 * x2;
j[1, 1] = 1 - 2 * x1;
}
public void A(double x1, double x2)
{
J(x1, x2);
double det = Math.Pow(1 - 2 * x1, 2) - Math.Pow(2 * x2, 2);
a[0, 0] = (1 / det) * j[1, 1];
a[0, 1] = (1 / det) * j[1, 0];
a[1, 0] = (1 / det) * j[0, 1];
a[1, 1] = (1 / det) * j[0, 0];
}
public void F(double x1, double x2)
{
f[0] = x1 - Math.Pow(x1, 2) - Math.Pow(x2, 2) + 0.1;
f[1] = x2 - 2 * x1 * x2 - 0.1;
}
public void Obchusl()
{
x1 = Convert.ToDouble(Console.ReadLine());
x2 = Convert.ToDouble(Console.ReadLine());
int k = 0;
A(x1, x2);
do
{
p = 0;
k++;
if (k % 5 == 0) A(x1, x2);
F(x1, x2);
r[0] = a[0, 0] * f[0] + a[0, 1] * f[1];
r[1] = a[1, 0] * f[0] + a[1, 1] * f[1];
xk1 = x1 - r[0];
xk2 = x2 - r[1];
delta_xk1 = Math.Abs(xk1 - x1);
delta_xk2 = Math.Abs(xk2 - x2);
if (delta_xk1 < E) p = 1;
if (delta_xk2 < E) p = 1;
x1 = xk1; x2 = xk2;
}
while (p != 1);
Console.WriteLine("\n\n{0}\t{1}\n", x1, x2);
}
}
}
Результат виконання програми:
Висновок: На лабораторній роботі я склав програму мовою С# і ознайомився з методами Ньютона для розв’язування систем нелінійних рівнянь