49 / 49 / 14
Регистрация: 08.04.2011
Сообщений: 124
1

ошибка square root

28.04.2011, 12:42. Показов 1067. Ответов 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
Хотя когда подставляю матрицу как в первой проге, работает нормально
В чем проблема помогите пожалуйста
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2011, 12:42
Ответы с готовыми решениями:

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

Ошибка: идентификатор "square" не определен
Вот код: #include &quot;../../../std_lib_facilities.h&quot; int main() { for (int i = 0; i&lt;100; i++)...

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

Fast Inverse Square Root: перевод с C++ на Matlab
float InvSqrt(float x) { float xhalf = 0.5f*x; int i = *(int*)&amp;x; i = 0x5f3759df - (i&gt;&gt;1); x...

6
Эксперт С++
2343 / 1716 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
28.04.2011, 13:09 2
Цитата Сообщение от kjahert Посмотреть сообщение
В чем проблема
Сюда по сообщении в том что Вы пытаетесь вычислить квадратный корень отрицательного числа. Правда где Вы его вычисляете я не вижу .
0
49 / 49 / 14
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 15:47  [ТС] 3
Что-то можно сделать с ней, чтоб работала?
0
Эксперт С++
1067 / 846 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 16:08 4
Пройтись в отладчике по шагам. На каком-то шаге ошибка проявится - тогда смотреть, как исправлять.
0
49 / 49 / 14
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 16:18  [ТС] 5
А если отладчик не работает?
0
Эксперт С++
1067 / 846 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 16:32 6
В Борланде 3.1 при компиляции в отладочном режиме - работает
Но можно понаставить отладочной печати и assert - чтобы по сообщениям отследить, где ошибка.
0
49 / 49 / 14
Регистрация: 08.04.2011
Сообщений: 124
01.05.2011, 16:39  [ТС] 7
Пошаговый debugger не работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2011, 16:39
Помогаю со студенческими работами здесь

Ошибка: Inputs must be a scalar and a square matrix.
Всем доброй ночи! Помогите пожалуйста решить проблему с ошибкой: Inputs must be a scalar and a...

Ошибка: Matrix must be square. при построении АЧХ RC-фильтра
R=1; C=2; fc=(2*3,14*R*C)^-1; Ku=1/(1+(2*pi*f*R*C)^2)^0.5;plot(Ku,f);grid; ??? Error using ==&gt;...

Разложение с кратными корнями и ошибка "not a square matrix"
Здравствуйте, собственно, разложение выполнялись хорошо, пока не встретились кратные корни,...

[Tkinter] Как работает root.rowconfigure / root.columnconfigure?
Немного не понял для чего они и как вообще используются


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru