Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 88, средняя оценка - 4.61
manyak666
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 7
26.03.2013, 18:46     метод Ньютона для решения системы нелинейных уравнений #1
Здравствуйте! Нужно решить методом Ньютона систему уравнений с точностью 0.0001:
sin(x+y) - 1.2x = 0
x*x + y*y =1
Вот моя программа, она не запускается, помогите пожалуйста найти ошибку:
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>
#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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2013, 18:46     метод Ньютона для решения системы нелинейных уравнений
Посмотрите здесь:

C++ метод Ньютона для системы двух уравнений
C++ Пример кода для решения системы уравнений
Метод деления отрезка пополам для решения нелинейных уравнений (метод дихотомии) C++
C++ метод Ньютона для решения нелинейных уравнений: узнать количество итераций
C++ Метод простых итераций для решения системы линейных уравнений
Написать программу для решения системы двух уравнений C++
C++ Решение системы из двух нелинейных уравнений методом Ньютона
C++ Решение системы нелинейных уравнений методом Ньютона (С/С++)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
safervas
Сообщений: n/a
30.08.2013, 11:13     метод Ньютона для решения системы нелинейных уравнений #2
Добрый день ! Для вас ответ будет скорее всего запоздалым.
Вы использовали ошибку уже несколько лет гуляющую по сети. При построении обратной матрицы элементы B и C не нужно менять местами, местами меняются только A и D. В вашем коде это должно значить: a[0][1] = -a[0][1]/det;
a[1][0] = -a[1][0]/det;
И не забудьте, перед обращением матрицы проверить det != 0.0 и первый элемент a[0][0] != 0.0
Yandex
Объявления
30.08.2013, 11:13     метод Ньютона для решения системы нелинейных уравнений
Ответ Создать тему
Опции темы

Текущее время: 01:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru