метод Ньютона для решения системы нелинейных уравнений

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Manyak666
Сообщения: 18
Зарегистрирован: 27 мар 2013, 16:23

Здравствуйте! Нужно решить методом Ньютона систему уравнений с точностью 0.0001:
sin(x+y) - 1.2x = 0
x*x + y*y =1
Вот моя программа, она не запускается, помогите пожалуйста найти ошибку:

Код: Выделить всё

#include <iostream>
#include <math>
using namespace std;
 
#define eps 0.0001
 
double function1(double x, double y)
{
    return sin(x + y) - 1.2*x;
}
 
double function2(double x, double y)
{
    return x*x + y*y - 1;
}
 
double func11(double x, double y)
{
    return cos(x + y) - 1.2;
}
 
double func12(double x, double y)
{
    return cos(x + y);
}
 
double func21(double x, double y)
{
    return 2*x;
}
 
double func22(double x, double y)
{
    return 2*y;
}
 
void ober_matr(double a[2][2])
{
    double det, aa;
    det = a[0][0]*a[1][1] - a[0][1]*a[1][0];
    aa = a[0][0];
    a[0][0] = a[1][1]/det;
    a[1][1] = aa/det;
    aa = a[0][1];
    a[0][1] = -a[1][0]/det;
    a[1][0] = -aa/det;
}
 
void nuton(double x, double y)
{
    int i = 1;
    double a[2][2], dx, dy, b[2], norm;
    do
    {
        a[0][0] = func11(x, y);
        a[0][1] = func12(x, y);
        a[1][0] = func21(x, y);
        a[1][1] = func22(x, y);
        ober_matr(a);
        dx = -a[0][0]*function1(x, y) + -a[0][1]*function2(x, y);
        dy = -a[1][0]*function1(x, y) + -a[1][1]*function2(x, y);
        x = x + dx;
        y = y + dy;
        b[0] = function1(x, y);
        b[1] = function2(x, y);
        norm = sqrt(b[0]*b[0]+b[1]*b[1]);
        i++;
    }
    while (norm >= eps);
cout << x << endl << y << endl;
}
void main()
{
    double x, y;
    cout << "x = ";
    cin >> x ;
    cout << "y = ";
    cin >> y;
    nuton(x, y);
    cout << endl;
    system("PAUSE");
}
Заранее благодарю за помощь!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Не запускается или не компилируется? У меня даже не компилируется, так как инклюд файла math не существует, существует math.h.

После исправления ошибки, компилируется, запускается и даже что-то выдаёт.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Manyak666
Сообщения: 18
Зарегистрирован: 27 мар 2013, 16:23

Спасибо! Заработало. А вы не могли бы сказать, правильно она работает или нет? А то в прошлый раз другую программу пришлось заново переписывать..
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Нет, не могу. Я 10 лет, как окончил университет и метод Ньютона уже не помню :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Manyak666
Сообщения: 18
Зарегистрирован: 27 мар 2013, 16:23

Кто-нибудь, проверьте, пожалуйста, правильно ли работает программа? Завтра сдавать надо, хотелось бы, чтоб успешно сдалось))
Manyak666
Сообщения: 18
Зарегистрирован: 27 мар 2013, 16:23

прошу проверить правильность программы
Ответить