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

Метод Якоби. Выводит результат -1.INF и -1.IND - C++

Восстановить пароль Регистрация
 
Rambaga
 Аватар для Rambaga
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 3
19.11.2014, 23:24     Метод Якоби. Выводит результат -1.INF и -1.IND #1
Вот сделал прогу, но почему-то вместо нормального результата выводит это:
result|x:
-1.#INF
-1.#IND
-1.#INF
-1.#IND
-1.#IND
нигде на 0 не делится да и числа маленькие. Подскажите в чем проблема?


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
#include "stdafx.h"
#include "iostream"
#include "omp.h"
#include "cstdlib" 
#include "conio.h"
#include "stdio.h"
#include "math.h"
using namespace std;
const double eps=0.001;
 
/// N - размерность матрицы; A[N][N] - матрица коэффициентов, F[N] - столбец свободных членов,
/// X[N] - начальное приближение, ответ записывается также в X[N]
void Jacobi(int N, double **A, double *F, double *X)
{
    double *TempX = new double[N],start,end;
    double norm;
    int cnt=0;
    
    do {
        for (int i = 0; i < N; i++) {
            TempX[i]=F[i];
            for (int g=0; g<N; g++) 
                if (i!=g)
                    TempX[i]=TempX[i]-A[i][g] * X[g];
            TempX[i]=TempX[i]/A[i][i];
        }
        norm = fabs(X[0] - TempX[0]);
        for (int h = 0; h<N; h++){
            if (fabs(X[h]-TempX[h])>norm)
                norm = fabs(X[h]-TempX[h]);
            X[h] = TempX[h];
        }
        cnt++;  
    } 
    while (norm>eps);
    delete[] TempX;
}
int main(){
    int n=5;
    //create A
    double **A=new double* [n];
    for(int i=0; i<=n; i++){ 
        A[i]=new double[n]; 
    } 
    //add A
    for (int i=0; i<n; i++){
        for (int j=0; j<n; j++){
            A[i][j]=rand()%10 +(-3);
            if(i==j && A[i][j]==0){
                A[i][j]=rand()%3 +1;
            }
        }
    }
 
    //create F and add
    double *F=new double[n];
    for(int i=0; i<n; i++)
            F[i]=rand()%10;
    
   double *x=new double[n];
    for(int i=0;i<n;i++)
        x[i]=1000;
    Jacobi(n, A, F, x);
    cout << "result|x:\n";
    for (int i=0; i<n; i++)
    {
            cout<<x[i]<<" "<<endl;
    }
    cout<<endl;
    for (int i=0; i<n; i++)
        delete []A[i];
    delete F;
    delete x;
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 23:24     Метод Якоби. Выводит результат -1.INF и -1.IND
Посмотрите здесь:

C++ метод якоби
Результат -1.#IND C++
C++ Метод вращений Якоби с++
Метод ранга. Неверно выводит результат C++
Задачка с рядами Тейлора выводит -1.#IND C++
Почему при вводе чисел в ответе выводит #INF C++
Код выдает непонятный результат -1.#IND C++
C++ Выводит INF вместо значения

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nosey
 Аватар для Nosey
1185 / 352 / 102
Регистрация: 22.10.2014
Сообщений: 791
Завершенные тесты: 2
20.11.2014, 01:06     Метод Якоби. Выводит результат -1.INF и -1.IND #2
У вас алгоритм который описан в
C++
1
while (norm>eps);
не сходится. И выход из алгоритма происходит скорее всего из-за переполнения double и случайности.

А как считается считается якобиан, и для чего он, я уже не помню
Yandex
Объявления
20.11.2014, 01:06     Метод Якоби. Выводит результат -1.INF и -1.IND
Ответ Создать тему
Опции темы

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