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

ошибка square root - C++

Восстановить пароль Регистрация
 
kjahert
48 / 48 / 5
Регистрация: 08.04.2011
Сообщений: 124
28.04.2011, 12:42     ошибка square root #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
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 "stdafx.h"
#include <math.h>
 
// Матрица порядка 3x3
const int n=3;
 
int Zeidel (float a[n][n], float b[n], float x[n], float e)
{
    int i,j;
    float s1, s2, s, v, m;
    int iCount=0;
    do
    {
        
        m = 0;
        for (i=0;i<n;i++)
        {
            // Вычисляем суммы
                 s1 = 0;
                 s2 = 0;
 
        for (j=0;j<i;j++)  s1+=  a[i][j] * x[j];
        for( j = i; j<n;j++)  s2 += a[i][j] * x[j];
 
                 // Вычисляем новое приближение и погрешность
                 v = x[i];
                 x[i] -= (1 / a[i][i]) * (s1 + s2 - b[i]);
 
        if (fabs (v-x[i]) >m ) m = fabs(v - x[i]);
        }
        iCount++;
    }
    while (m >= e);
    printf("Number of Iterations: %i\n",iCount);
    return 1;
 
}
 
 
 
 
    /*
    A     1     2     3     4     b
 
    1     4.1   0.1   0.2   0.2   21.14
    2     0.3   5.3   0.9   -0.1  -17.82
    3     0.2   0.3   3.2   0.2   9.02
    4     0.1   0.1   0.2   -9.1  17.08
 
    Верный результат:
    x1 =  5.2000000008E+00
    x2 = -4.2000000028E+00
    x3 =  3.0000000003E+00
    x4 = -1.8000000000E+00
 
    */
 
 
int main(int argc, char* argv[])
{
    
    // Точность вычислений
    float eps = 0.0001;
    
    int i;
 
    // Матрица коэффициентов
    float a[n][n];
 
    // Столбец правых частей
    float b[n];
 
    // Вектор решения
    float x[n];
 
 
    a[0][0]=2.f;    a[0][1]=1.f;    a[0][2]=1.f; 
    a[1][0]=1.f;    a[1][1]=3.f;    a[1][2]=1.f; 
    a[2][0]=1.f;    a[2][1]=1.f;    a[2][2]=4.f; 
 
    
    b[0]=4.f;   b[1]=5.f;   b[2]=6.f; 
 
 
    // Начальное приближение - нулевой вектор
    for (i=0;i<n;i++)
    {
        x[i]=0;
    }
 
    
    if (Zeidel (a,b,x,eps))
    {
       printf ("Solution found.\n");
        for (i=0;i<n;i++)
        {
            printf ("%f\n",x[i]);
        }
    }
    else
    {
        printf ("Solution not found\n");
    }
    return 0;
 
}
на эту, которая работает под borland c 3.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
#include <iostream.h>
#include <conio.h>
#include <math.h>
const int n=4;
double eps = 0.0001;
double i;
double x[n];
 
double b[n]={5.458, 3.460, 18.515, 5.478};
 
double a[n][n]={{0.060, 0.048, 0.700, 0.550},
           {0.020, 0.333, 0.080, 0.300},
           {1.250, 0.400, 0.092, 0.248},
           {0.034, 0.650, 0.067, 0.300}};
 
double Zeydel (double a[n][n], double b[n], double x[n], double e)
{
 double i,j;
 double s1, s2, s, v, m;
 double ii=0;
 do
 {
  m = 0;
  for (i=0;i<n;i++)
  {
   s1=0;
   s2=0;
 
   for (j=0;j<i;j++)  s1+= a[i][j]*x[j];
   for (j=i;j<n;j++)  s2+= a[i][j]*x[j];
    v=x[i];
    x[i]-=(s1+s2-b[i])/a[i][i];
 
    if (fabs(v-x[i])>m)
     m=fabs(v-x[i]);
   }
    ii++;
   }
  while (m>=e);
 
    cout<<"Chislo iteraciy: "<<ii<<endl;
   return 1;
 }
 
void main()
{
 clrscr();
 
 for (i=0;i<n;i++)
 {
  x[i]=0;
 }
 
 if (Zeydel (a,b,x,eps))
 {
  for (i=0;i<n;i++)
  {
   cout<<"\n"<<"x"<<i+1<<" = "<<x[i];
  }}  
 getch();
}
Выдает ошибку floating point square root of negative number
Хотя когда подставляю матрицу как в первой проге, работает нормально
В чем проблема помогите пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2011, 13:09     ошибка square root #2
Цитата Сообщение от kjahert Посмотреть сообщение
В чем проблема
Сюда по сообщении в том что Вы пытаетесь вычислить квадратный корень отрицательного числа. Правда где Вы его вычисляете я не вижу .
kjahert
48 / 48 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 15:47  [ТС]     ошибка square root #3
Что-то можно сделать с ней, чтоб работала?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.05.2011, 16:08     ошибка square root #4
Пройтись в отладчике по шагам. На каком-то шаге ошибка проявится - тогда смотреть, как исправлять.
kjahert
48 / 48 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 16:18  [ТС]     ошибка square root #5
А если отладчик не работает?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.05.2011, 16:32     ошибка square root #6
В Борланде 3.1 при компиляции в отладочном режиме - работает
Но можно понаставить отладочной печати и assert - чтобы по сообщениям отследить, где ошибка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2011, 16:39     ошибка square root
Еще ссылки по теме:

C++ Пробема с функцией square
C++ Ошибка - square не найден
C++ Класс SQUARE (квадрат)

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

Или воспользуйтесь поиском по форуму:
kjahert
48 / 48 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 16:39  [ТС]     ошибка square root #7
Пошаговый debugger не работает
Yandex
Объявления
01.05.2011, 16:39     ошибка square root
Ответ Создать тему
Опции темы

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