МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
ЗВІТ
До лабораторної роботи №5
з курсу: «Комп’ютерні методи дослідження інформаційних процесів і систем»
на тему: «Метод Ньютона для розв’язування систем нелінійних рівнянь»
Варіант №2
Львів 2012
Мета роботи - ознайомлення з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона.
Завдання – розв’язати систему нелінійних рівнянь стандартним методом Ньютона / при /
Текст програми
using System;
using System.Collections.Generic;
using System.Text;
namespace Njuton
{
class Program
{
static void Main(string[] args)
{
NjutonStandart NS = new NjutonStandart();
NS.Calculations();
Console.ReadKey();
}
}
class NjutonStandart
{
double x1, x2, E, delta_x1, delta_x2, xx1, xx2;
double[,] J = new double[2, 2];
double[,] RJ = new double[2, 2];
double[] f = new double[2];
double[] x = new double[2];
public void Calculations()
{
Console.WriteLine("Введiть значення x1:");
x1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введiть значення x2:");
x2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введiть похибку E(0.00001 i бiльше):");
E = Convert.ToDouble(Console.ReadLine());
// delta_x1 = 1000; delta_x2 = 9999999;
Function(-0.096,0.08);
// Console.WriteLine("{0} {1}", f[0], f[1]);
// ReciprocalJakobian(x1, x2);
do
{
ReciprocalJakobian(x1, x2);
Function(x1, x2);
x[0] = RJ[0, 0] * f[0] + RJ[0, 1] * f[1];
x[1] = RJ[1, 0] * f[0] + RJ[1, 1] * f[1];
// Console.WriteLine("{0} {1} ", x[0], x[1]);
xx1 = x1 - x[0];
xx2 = x2 - x[1];
// Console.WriteLine("{0} {1} ", xx1, xx2);
delta_x1 = Math.Abs(xx1 - x1);
delta_x2 = Math.Abs(xx2 - x2);
x1 = xx1; x2 = xx2;
// Console.WriteLine("{0} {1} ", x1, x2);
} while ((delta_x1 > E) && (delta_x2 > E));
Console.WriteLine("\n Уточненi коренi рiвнянь: \n x1= {0}\t x2 = {1}\n", x1, x2);
}
public void Jakobian(double x1, double x2)
{
J[0, 0] = 1 - 2 * x1; J[0, 1] = 1.6 * x2;
J[1, 0] = -2 * x2; J[1, 1] = 1 - 2 * x1;
}
public void ReciprocalJakobian(double x1, double x2)
{
Jakobian(x1, x2);
double detJ = J[0, 0] * J[1, 1] - J[0, 1] * J[1, 0];
RJ[0, 0] = (1 / detJ) * J[1, 1];
RJ[0, 1] = (1 / detJ) * -J[1, 0];
RJ[1, 0] = (1 / detJ) * -J[0, 1];
RJ[1, 1] = (1 / detJ) * J[0, 0];
// Console.WriteLine("{0} {1} {2} {3}", RJ[0,0], RJ[0,1], RJ[1,0], RJ[1,1]);
}
public void Function(double x1, double x2)
{
f[0] = x1 - Math.Pow(x1, 2) + 0.8 * Math.Pow(x2, 2) + 0.1;
f[1] = x2 - 2 * x1 * x2 - 0.1;
}
}
}