Форум программистов, компьютерный форум, киберфорум
Численные методы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/56: Рейтинг темы: голосов - 56, средняя оценка - 4.96
3 / 3 / 4
Регистрация: 28.11.2011
Сообщений: 35
1

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

23.02.2013, 21:29. Показов 10320. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно решить такую систему :
sin(x + y) - 1.122*x = 0.498
x2 + y2 = 1
C методом я разобрался, алгоритм написал на С++, вот код, может кому захочется посмотреть :

Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
#define eps 0.00001
 
double function1(double x, double y)
{
    return sin(x + y) - 1.122*x - 0.498;
}
 
double function2(double x, double y)
{
    return x*x + y*y - 1;
}
 
double func11(double x, double y)
{
    return cos(x + y) - 1.122;
}
 
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 obr_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");
}

Код работает нормально, но проблема в том, что система имеет две пары решений, а прога всегда находит одно из них(то, что справа) хотя начальные X и Y я ввожу приблизительными ко второму корню(например -0,9 и 0,4 )
Это недостаток метода, что он всегда сходится к одному и тому же корню ? (и почему так ???)
Можно как-то это исправить? Помогите пожалуйста.

Вот еще график системы :
Миниатюры
Решение системы нелинейных уравнений методом ньютона  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2013, 21:29
Ответы с готовыми решениями:

Решение системы нелинейных уравнений методом Ньютона
sin(x+2)-y=1.5 x+cos(y-2)=0.5 решить методам Ньютона с погрешностью 0.0001. y=sin(x+2)-1.5...

Решение системы нелинейных уравнений методом Ньютона
Доброго всем времени суток. Необходимо решить систему нелинейных уравнений. Я выбрал метод Ньютона...

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

Решение системы нелинейных уравнений методом простой итерации
Подскажите пожалуйста как решать. Найти решение системы нелинейных уравнений методом простой...

5
Эксперт по математике/физике
4218 / 3413 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
23.02.2013, 22:11 2
Цитата Сообщение от nidaime Посмотреть сообщение
Это недостаток метода, что он всегда сходится к одному и тому же корню ?
Это недостаток конкретной реализации метода. Нужен не программный код (его здесь обсуждать не место), а исходные формулы, уравнения, которые в коде реализованы.

Не по теме:

Интересно, как это вообще могло работать? Строки 37, 59 в коде

1
3 / 3 / 4
Регистрация: 28.11.2011
Сообщений: 35
23.02.2013, 23:11  [ТС] 3
Ну словом есть у меня система, найдем матрицу Якоби, назовем ее А.
Дальше подставим в эту матрицу вместо x, y какое-то приблизительное их значение x0,y0
Вычислим следующие значения x, y по формуле:
(x, y) = (x0,y0) - A-1*F(x0,y0),
где F - вектор значений начальной системы, когда у нее подставить x0,y0.
Или
(xk+1, yk+1) = (xk,yk) - A-1(xk,yk)*F(xk,yk),
Ну и цикл продолжаем до тех пор, пока |xk+1-xk| > eps.
Вот отсюда читал про метод:
http://www.physchem.chimfak.rs... in_eq.html
Матрица Якоби:
Изображения
 
0
3 / 3 / 4
Регистрация: 28.11.2011
Сообщений: 35
23.02.2013, 23:33  [ТС] 4
Цитата Сообщение от Том Ардер Посмотреть сообщение
Интересно, как это вообще могло работать? Строки 37, 59 в коде
а почему оно не должно работать?
вроде все нормально.

Добавлено через 10 минут

Не по теме:

Цитата Сообщение от nidaime Посмотреть сообщение
а почему оно не должно работать?
вроде все нормально.
а, там конечно должно быть ober_matr(a)-строка 59
я наверняка стер букву нечаянно


ну так что по теме , есть идеи почему не находит второй корень ?
0
Эксперт по математике/физике
4218 / 3413 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
24.02.2013, 16:49 5
Цитата Сообщение от nidaime Посмотреть сообщение
почему не находит второй корень ?
Причина может быть в начальном приближении и условиях сходимости итераций (связаны со второй производной). При (x,y)=(1; 1) или даже (-1; -1) сходимость к первому корню (0.4; 0.9), а при начале с (-0.9; 0.4) или (-1; 0.4) быстро сходится ко второму корню (-0.936; 0.351). Проверить нужно правильность перевода формул в код, и сами формулы в первую очередь.

Хорошая книга: Л.Коллатц, Ю.Альбрехт "Задачи по прикладной математике", особенно гл.2 по теме.
1
FlyElf
13.07.2013, 17:19 6
Цитата Сообщение от nidaime Посмотреть сообщение
return cos(x + y);
'
Скорее всего, это должно быть так:
return -sin(x+y)
13.07.2013, 17:19
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2013, 17:19
Помогаю со студенческими работами здесь

Метод Ньютона для решения системы нелинейных уравнений
sin(x+2)-y=1.5 x+cos(y-2)=0.5 решить методам Ньютона с погрешностью 0.0001.За начальные...

Решение системы нелинейных уравнений
Здравствуйте, в книге &quot;Самоучитель - Алексеев Е., Чеснокова О. - Решение задач вычислительной...

Решение системы нелинейных уравнений с 5 неизвестными
Люди помогайте :) Кто как может естественно)) {{x}_{1}}^{2}+2{{x}_{2}}^{2}-19=0 \\...

Аналитическое решение системы нелинейных уравнений
Добрый день. Не могу решить аналитически систему нелинейных уравнений и построить рабочие формулы...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Почему при инициализации массива 3х3х3 будет создано 13 одномерных массивов?
Alexander-7 16.01.2025
При инициализации многомерного массива, в данном случае трехмерного массива размерностью 3x3x3, может возникнуть путаница относительно того, как структура данных организована в памяти. Общее число. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru