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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124
#1

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

28.04.2011, 12:42. Просмотров 598. Ответов 6
Метки нет (Все метки)

Вообщем переделал программу, которая считает методом Гаусса-Зейделя
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
Хотя когда подставляю матрицу как в первой проге, работает нормально
В чем проблема помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2011, 12:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ошибка square root (C++):

Ошибка - square не найден - C++
// Perviy_cikl.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...

функция square() - C++
реализовать функцию square() методом повторного сложения (т.е. не используя оператор умножения) спасибо) Добавлено через 48...

Класс SQUARE (квадрат) - C++
Создайте класс SQUARE (квадрат). Класс имеет атрибут length. Он имеет функции, которые вычисляют площадь и периметр квадрата. Он также...

Пробема с функцией square - C++
не могу скомпилировать таблицу квадратов от 1 до 100 напишите что не так и как правильно.(учу c++ по книжке страуструпа) сначала...

Вопрос про функцию square в классе Rect - C++
Скажите пожалуйста, что данная функция делает? очень надо, подскажите кто знает

Floating Point:Square Root of Negative Number - C++
После запуска программы в Borland C++ вылезает следующая ошибка Floating Point:Square Root of Negative Number. В чем причина и как ее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2011, 13:09 #2
Цитата Сообщение от kjahert Посмотреть сообщение
В чем проблема
Сюда по сообщении в том что Вы пытаетесь вычислить квадратный корень отрицательного числа. Правда где Вы его вычисляете я не вижу .
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 15:47  [ТС] #3
Что-то можно сделать с ней, чтоб работала?
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 16:08 #4
Пройтись в отладчике по шагам. На каком-то шаге ошибка проявится - тогда смотреть, как исправлять.
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 16:18  [ТС] #5
А если отладчик не работает?
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 16:32 #6
В Борланде 3.1 при компиляции в отладочном режиме - работает
Но можно понаставить отладочной печати и assert - чтобы по сообщениям отследить, где ошибка.
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 16:39  [ТС] #7
Пошаговый debugger не работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2011, 16:39
Привет! Вот еще темы с ответами:

Square Head на прямоугольном поле - C++
Народ! Помогите пожалуйста. Есть 4 задачи на выбор, нужно решить любую! Не скрою, C++, знаю плоховато, а задачу надо сдать сегодня. Кому не...

Описать тип struct Square, задающий на плоскости замкнутый квадрат с центром в точке (x, y) - C++
Описать тип struct Square, задающий на плоскости замкнутый квадрат с центром в точке (x, y), длиной стороны a и сторонами,...

Описать рекурсивную функцию Root(X, K, N) - C++
Описать рекурсивную функцию Root(X, K, N) вещественного типа, находящую приближенное значение корня K-ой степени из числа X по формуле: ...

#define, чтобы поставлять info[s.id]->root - C++
Как определить &quot;info-&gt;root&quot;, где info - vector&lt;bt*&gt;, буквенным выражением, для последующей подстановки в аргумент...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.05.2011, 16:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru