Доброго времени суток!
СНАУ Методом Ньютона:
В выводе получается ерунда. Подбирал разные значения - не выходит..
В чем ошибка?
Сам код:
Код:
#include <iostream>
#include <math.h>
#include <stdlib.h>
//#include<windows.h>
using namespace std;
double function1(double x, double y)//функция 1
{
return 2*sin(x + y) - 1.2*x - 0.1 ; //первое уравнение системы
}
double function2(double x, double y) //функция 2
{
return x*x + y*y - 1;// второе уравнение системы
}
double func11(double x, double y) // первая призводная функции 1
{
return cos(x + y) - 1.2;
}
double func12(double x, double y) // вторая производная функции 1
{
return cos(x + y);
}
double func21(double x, double y) // первая призводная функции 2 по х
{
return 2*x;
}
double func22(double x, double y) // первая призводная функции 2 по у
{
return 2*y;
}
void ober_matr(double a[2][2]) // матрица 2 на 2 //вычисление якобиана
{
double det, aa;
det = a[1][1]*a[2][2] - a[1][2]*a[2][1]; // считаем опредлитель
a[1][1] = a[2][2]/det;
a[2][2] = a[1][1]/det;
a[1][2] = -a[1][2]/det;
a[2][1] = -a[2][1]/det;
}
void nuton(double x, double y, double eps) // метод Ньютона
{
int i = 1;
double a[2][2], dx, dy, b[2], n;
do
{
a[1][1] = func11(x, y);
a[1][2] = func12(x, y);
a[2][1] = func21(x, y);
a[2][2] = func22(x, y);
ober_matr(a);
dx = -a[1][1]*function1(x, y) + -a[1][2]*function2(x, y);
dy = -a[2][1]*function1(x, y) + -a[2][2]*function2(x, y);
x = x + dx;
y = y + dy;
b[1] = function1(x, y);
b[2] = function2(x, y);
n = sqrt(b[1]*b[1]+b[2]*b[2]);
i++;
}
while (n >= eps);
cout <<"Otvet "<< endl;
cout << x << endl << y << endl << endl;
cout <<"Proverka"<< endl;
cout <<abs(function1(x, y))<< endl;//вывод на экран абсолютного значения функции
cout <<abs(function1(x, y))<< endl;
}
int main()
{
double a, b, eps; // a b приближенные значения неизвестных х и у
cout << " a = ";
cin >> a ;
cout << " b = ";
cin >> b;
cout << " eps = "; // вводим точность
cin >> eps;
nuton(a, b, eps); // вызов метода ньютон
cout << endl;
system("PAUSE");
}