Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2019, 19:41   #1
Dr Blue
 
Регистрация: 03.11.2019
Сообщений: 4
По умолчанию СНАУ методом Ньютона

Доброго времени суток!
СНАУ Методом Ньютона:
AMsU4msLE_8.jpg

В выводе получается ерунда. Подбирал разные значения - не выходит..
HwXcRI8KvKQ.jpg

В чем ошибка?

Код:
#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");
}
Dr Blue вне форума Ответить с цитированием
Старый 03.12.2019, 19:43   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Результат х=0,393840026, y=-0,919179. В чем ошибка - не могу сказать, бо метод Невтона с детства ненавидел, там надо первую производную аналитически выводить, задолбаешься.
А решал я ее по 6-класницки: из 2-го уравнения выразил y через x, подставил в первое - и половинным делением. Я понимаю - преподам такой вариант не прокатит, им надо как можно более простые задачи решать как можно более сложным способом.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СНАУ методом секущих Бройдена Утюжок Помощь студентам 0 07.12.2014 17:36
Найти корень уравнения x^3-e^x-5.5=0 на интервале [2.6;3] с точностью e = 10^4 , пользуясь методом итераций и методом Ньютона. SWATT Помощь студентам 1 27.11.2014 21:49
Решение СНАУ методом Ньютона Tina Помощь студентам 7 09.04.2012 08:52
решение уравнения методом хорд и методом Ньютона Маргоша)) Общие вопросы Delphi 1 21.04.2010 20:40
Решение СНАУ методом Ньютона [Delphi] StudeHt Помощь студентам 2 02.11.2009 02:42