С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 1
1

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

21.05.2018, 20:23. Показов 3289. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.В общем, нужно решить систему нелинейных уравнений методом ньютона:
sin(x - 1) - 1.3 + y
x - sin(y + 1) - 0.8
Мною на просторах интернета была найдена вот такая програмка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
void __fastcall TForm1::Button2Click(TObject* Sender)
{
    x = StrToFloat(Edit1->Text);
    y = StrToFloat(Edit2->Text);
    z = StrToFloat(Edit3->Text);
    esp = StrToFloat(Edit4->Text);
    double a[n][n], a1[n][n], b[n], det, invdet, f[n],
           K[n]; //a[3][3]-матрица Якоби;
    //a1[3][3]-обратная матрица; b[3]-произведение а1[3] на f[3]; f[3]-массив функций; K[3]-массив переменных
    double xk, yk, zk, xn, yn, zn,
           max; //изменение значения переменных при k=0,1,2..
    int k = 0; //кол-во итераций
    //Матрица Якоби
    {
        a[0][0] = (-2 * x - 1);
        a[0][1] = (2 * z);
        a[0][2] = (2 * y);
        a[1][0] = (-3 * z);
        a[1][1] = (2 * y - 1);
        a[1][2] = (-3 * x);
        a[2][0] = (-2 * y);
        a[2][1] = (-2 * x);
        a[2][2] = (-2 * z - 1);
        //Определитель
        det = a[0][0] * a[1][1] * a[2][2] + a[0][1] * a[1][2] * a[2][0] +
              a[0][2] * a[1][0] * a[2][1] -
              a[0][2] * a[1][1] * a[2][0] - a[0][0] * a[1][2] * a[2][1] - a[0][1] *
              a[1][0] * a[2][2];
        invdet = 1 / det;
 
        //Обратная матрица
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                a1[0][0] =  a[1][1] * a[2][2] - a[1][2] * a[2][1] * invdet;
                a1[0][1] = -a[1][0] * a[2][2] + a[2][0] * a[1][2] * invdet;
                a1[0][2] =  a[1][0] * a[2][1] - a[1][1] * a[2][0] * invdet;
                a1[1][0] = -a[0][1] * a[2][2] + a[0][2] * a[2][1] * invdet;
                a1[1][1] =  a[0][0] * a[2][2] - a[0][2] * a[2][0] * invdet;
                a1[1][2] = -a[0][0] * a[2][1] + a[0][1] * a[2][0] * invdet;
                a1[2][0] =  a[0][1] * a[1][2] - a[0][1] * a[1][1] * invdet;
                a1[2][1] = -a[0][0] * a[1][2] + a[0][2] * a[2][0] * invdet;
                a1[2][2] =  a[0][0] * a[1][1] - a[0][1] * a[1][0] * invdet;
            }
        }
 
        //Массив функций
        for (j = 0; j < n; j++)
        {
            f[0] = f1(x, y, z);
            f[1] = f2(x, y, z);
            f[2] = f3(x, y, z);
        }
 
        //Массив переменных
        for (j = 0; j < n; j++)
        {
            K[0] = x;
            K[1] = y;
            K[2] = z;
        }
 
        do {
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    b[0] = a[0][0] * f[0] + a[0][1] * f[1] + a[0][2] * f[2];
                    b[1] = a[1][0] * f[0] + a[1][1] * f[1] + a[1][2] * f[2];
                    b[2] = a[2][0] * f[0] + a[2][1] * f[1] + a[2][2] * f[2];
                }
            }
 
            xk = K[0] - b[0];
            yk = K[1] - b[1];
            zk = K[2] - b[2];
            xn = xk - x;
            yn = yk - y;
            zn = zk - z;
            {
                if (abs(xn) > abs(yn))
                {
                    if (abs(xn) > abs(zn))
                    {
                        max = xn;
                    }
                    else
                    {
                        max = zn;
                    }
                }
                else
                {
                    if (abs(yn) > abs(zn))
                    {
                        max = yn;
                    }
                    else
                    {
                        max = zn;
                    }
                }
            }
            x = xk;
            y = yk;
            z = zk;
        } while (abs(max) >= esp);
 
        k++;
        Edit5->Text = FloatToStr(xk);
        Edit6->Text = FloatToStr(yk);
        Edit7->Text = FloatToStr(zk);
        Edit8->Text = FloatToStr(k);
    }
}
И я попытался её переделать под себя и вот какой у меня вышел "неработающий мутант"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <cmath>
using namespace std;
double f1(double x, double y)
{
    return sin(x - 1) - 1.3 + y;
}
 
double f2(double x, double y)
{
    return x - sin(y + 1) - 0.8;
}
 
int n;
    double eps=0,001 a[2][2], a1[2][2], b[n], det, invdet, f[n],
           K[n]; //a[2][2]-матрица Якоби;
    //a1[2][2]-обратная матрица; b[2]-произведение а1[2] на f[2]; f[2]-массив функций; K[2]-массив переменных
    double xk, yk,xn, yn
           max; //изменение значения переменных при k=0,1,2..
    int k = 0; //кол-во итераций
    //Матрица Якоби
    {
        a[0][0] = cos(x-1);
        a[0][1] = 1;
        a[1][0] = 1;
        a[1][1] = -cos(y+1);
        //Определитель
        det = a[0][0] * a[1][1] - a[0][1] * a[1][1];
 
        invdet = 1 / det;
 
        //Обратная матрица
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                a1[0][0] =  a[1][1] * invdet;
                a1[0][1] = -a[1][0] * invdet;
                a1[1][0] = -a[0][1] * invdet;
                a1[1][1] =  a[0][0] * invdet;
            }
        }
 
        //Массив функций
        for (j = 0; j < n; j++)
        {
            f[0] = f1(x, y);
            f[1] = f2(x, y);
        }
 
        //Массив переменных
        for (j = 0; j < n; j++)
        {
            K[0] = x;
            K[1] = y;
        }
 
        do {
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    b[0] = a[0][0] * f[0] + a[0][1] * f[1] + a[0][2] * f[2];
                    b[1] = a[1][0] * f[0] + a[1][1] * f[1] + a[1][2] * f[2];
                }
            }
 
            xk = K[0] - b[0];
            yk = K[1] - b[1];
            xn = xk - x;
            yn = yk - y;
            {
                if (abs(xn) > abs(yn))
                {
                    if (abs(xn) > abs(zn))
                    {
                        max = xn;
                    }
                    else
                    {
                        max = zn;
                    }
                }
                else
                {
                    if (abs(yn) > abs(zn))
                    {
                        max = yn;
                    }
                    else
                    {
                        max = zn;
                    }
                }
            }
            x = xk;
            y = yk;
        } while (abs(max) >= esp);
 
        k++;
        Edit5->Text = FloatToStr(xk);
        Edit6->Text = FloatToStr(yk);
        Edit7->Text = FloatToStr(zk);
        Edit8->Text = FloatToStr(k);
    }
}
В общем,что делать мне с ней?Заранее благодарю за помощь.

Добавлено через 11 минут
Забыл пояснить,что программа должна быть на C++
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2018, 20:23
Ответы с готовыми решениями:

Решение системы нелинейных уравнений методом Ньютона (С/С++)
Здравствуйте! Помогите пожалуйста написать программу :cry: У меня есть система из 2х уравнений...

Решение системы из двух нелинейных уравнений методом Ньютона
Помогите,мне надо создать программу для решения системы из двух нелинейных уравнений методом...

Решение системы нелинейных уравнений методом Ньютона и итераций
Привет. Нужно решить снар на вчера. Гуглить пытался, но чёт не хватает навыков для использование...

Решение системы нелинейных уравнений методами Ньютона и простых итераций
Написать программу решения системы нелинейных уравнений {y^3-x^2=1; ...

1
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
21.05.2018, 20:36 2
Цитата Сообщение от TrunTrun Посмотреть сообщение
на просторах интернета
А я это нашел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Метод_Ньютона.cpp: определяет точку входа для консольного приложения
 
#include "stdafx.h"
 
#include <iostream>
 
using namespace std;
 
float f(double x) //возвращает значение функции f(x) = x^2-2
 
{
 
       return x*x-2;
 
}
 
float df(float x) //возвращает значение производной
 
{
 
       return 2*x;
 
}
 
float d2f(float x) // значение второй производной
 
{
 
       return 2;
 
}
 
int _tmain(int argc, _TCHAR* argv[])
 
{
 
       int exit = 0, i=0;//переменные для выхода и цикла
 
       double x0,xn;// вычисляемые приближения для корня
 
       double a, b, eps;// границы отрезка и необходимая точность
 
             do {
 
                    i=0;
 
                    cout<<"Please input [a;b]\n=>";
 
                    cin>>a>>b; // вводим границы отрезка, на котором будем искать корень
 
                    cout<<"\nPlease input epsilon\n=>";
 
                    cin>>eps; // вводим нужную точность вычислений
 
                    if (a > b) // если пользователь перепутал границы отрезка, меняем их местами
 
                           {
 
                                  x0 = a;
 
                                  a = b;
 
                                  b = x0;
 
                           }
 
                    if (f(a)*f(b)>0) // если знаки функции на краях отрезка одинаковые, то здесь нет корня
 
                                  cout<<"\nError! No roots in this interval\n";
 
                           else
 
                           {
 
                           if (f(a)*d2f(a)>0) x0  = a; // для выбора начальной точки проверяем f(x0)*d2f(x0)>0 ?
 
                                  else x0 = b;
 
                           xn = x0-f(x0)/df(x0); // считаем первое приближение
 
                           cout<<++i<<"-th iteration = "<<xn<<"\n";
 
                           while(fabs(x0-xn) > eps) // пока не достигнем необходимой точности, будет продолжать вычислять
 
                           {
 
                                  x0 = xn;
 
                                  xn = x0-f(x0)/df(x0); // непосредственно формула Ньютона
 
                                  cout<<++i<<"-th iteration = "<<xn<<"\n";
 
                           }
 
                    cout<<"\nRoot = "<<xn; // вывод вычисленного корня
 
                    }
 
                    cout<<"\nExit?=>";
 
                    cin>>exit;
 
             } while (exit!=1); // пока пользователь не ввел exit = 1
 
       return 0;
 
}
ссылка, если можно её добавить будет: http://statistica.ru/branches-... neniy/#s3b
0
21.05.2018, 20:36
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2018, 20:36
Помогаю со студенческими работами здесь

Нахождение корней системы нелинейных уравнений методом Ньютона (касательных)
Добрый вечер, помогите с работой. Написать программу нахождения корней системы нелинейных...

Решение системы нелинейныз алгебраических уравнений методом Ньютона (2 уравнения)
Всем привет, ребята, кто может подсказать, как решается математически по методу Ньютону, разбирался...

Курсовая работа "Решение систем нелинейных уравнений Методом Ньютона"
РЕбят помогите, горю, курсач через 3 дня сдавать, а я все время работал и теперь просто без вашей...

Метод Ньютона для решения системы нелинейных уравнений
Программа работает неверно. Пожалуйста, помогите найти ошибки. Спасибо. #include &lt;iostream&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru