Форум программистов, компьютерный форум, киберфорум
Наши страницы

Гаусс-Зейдель - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двумерный массив. Подсчет внутренних значений этого массива http://www.cyberforum.ru/cpp-beginners/thread287912.html
У меня что-то все перепуталось, помогите с проблемой во-первых рассчитывается количество строк и столбцов массива. Это сделано во-вторых значения массива вычисляются по 2 формулам, зависящем от...
C++ Среда разработки Подскажите нормальную IDE (C++),а то Dev-CPP как-то мистическим образом работает, и не такую громоздкую как VisualStudio http://www.cyberforum.ru/cpp-beginners/thread287906.html
C++ В чем может быть ошибка, и как её вылечить?
Проблема такая. Покуда я студент, то пичкают нас всяческой дрянью, и вот настал язык Си. С С++ я знаком, и ноутбук с никсами прекрасно кушает все коды, а вот университетский комп ругается на...
Вычислить расстояние между двумя точками с координатами х1, у1 и х2, у2. C++
Напишите программу пожалуйста)) Спасибо заранее
C++ Дано натуральное число n (n<=100). http://www.cyberforum.ru/cpp-beginners/thread287883.html
Дано натуральное число n (n<=100). Hайти первую цифру числа n. Помогите пожалуйста Желательно на Си но можно и на Си++
C++ Как сделать, чтобы программа быстрее работала? Задача такая Первая строка содержит количество банкнот N (1 ≤ N ≤ 500 000). В следующих N строках даны достоинства K этих банкнот (0 ≤ K ≤ 10^9). Более половины из этих значений одинаковы.... подробнее

Показать сообщение отдельно
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124

Гаусс-Зейдель - C++

04.05.2011, 15:12. Просмотров 1307. Ответов 0
Метки (Все метки)

Нет возможности использовать debug для пошаговой проверки
Может кто-нибудь сказать почему в прорграмме:
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]={21.14, -17.82, 9.02, 17.08};
 
double a[n][n]={{4.1, 0.1, 0.2, 0.2},
           {0.3, 5.3, 0.9, -0.1},
           {0.2, 0.3, 3.2, 0.2},
           {0.1, 0.1, 0.2, -9.1}};
 
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();
}
Всё правильно считает
а в:
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();
}
С другими значениями выдает ошибку?

Добавлено через 55 секунд
b[n] и a[n][n] только разные

Добавлено через 4 часа 44 минуты
Остальные варианты программы выдают ту же ошибку
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
const int N=4;
float eps = 0.0001;
int i;
float x[N];
 
float b[N]={5.458, 3.460, 18.515, 5.478};
 
float 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}};
float check(float in_x_next[N], float in_x_prev[N], float eps)
{
   float max=0;
   max=fabs(in_x_next[0]-in_x_prev[0]);
   for(i=0;i<N;i++)
     if(max>fabs(in_x_next[i]-in_x_prev[i]))
        max=fabs(in_x_next[i]-in_x_prev[i]);
   if(max>eps)
     return 1;
   else
     return 0;
}
 
void Zeydel(float in_x[N], float in_b[N][N],float in_c[N])
{
  float Summ1;
  float Summ2;
  float x_next[N];
  float x_prev[N];
  int i,j;
  for(i=0;i<j;i++)
    x_next[i]=in_x[i];
  do{
      for(i=0;i<N;i++)
         x_prev[i]=x_next[i];
      for(i=0;i<N;i++)
         {
             Summ1=0;
             Summ2=0;
             for(j=0;j<i;j++)
                 Summ1+=in_b[i][j]*x_next[j];
             for(j=i+1;j<N;j++)
                 Summ2+=in_b[i][j]*x_prev[j];
         x_next[i]=(in_c[i]-Summ1-Summ2)/in_b[i][i];
             x[i]=x_next[i];
         };
   }while(check(x_next,x_prev,eps)!=0);
}
 
void main()
{
 clrscr();
 
 //for (i=0;i<N;i++)
 //{
  //x[i]=0;
 //}
 
 Zeydel(x,a,b);
 
  for (i=0;i<N;i++)
  {
   cout<<"\n"<<"x"<<i+1<<" = "<<x[i];
  }  
 getch();
}
А другие больше одной итерации не хотят делать
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
#include <iostream.h>
#include <conio.h>
#include <math.h>
const int n=4;
const float eps=0.0001;
double b[n]={21.14,-17.82,9.02,17.08};
 
double a[n][n]={{4.1,0.1,0.2,0.2},
        {0.3,5.3,0.9,-0.1},
        {0.2,0.3,3.2,0.2},
        {0.1,0.1,0.2,-9.1}};
double x[n],p[n];
double conv(double *xkp, double *xk)
{
  for (int i=0;i<n;i++)
  {
   if (fabs(xkp[i]-xk[i])>=eps)
   return 0;
  }
  return 1;
}
 
void main()
{
 clrscr();
 double ii=0;
 do
 {
   for(int i=0;i<n;i++)
   {
    
    x[i]=0;
    double var=0;
    for(int j=0;j<n;j++)
    if(i!=j) var+=(a[i][j]*x[j]);
     p[i]=x[i];
     x[i]-=(var-b[i])/a[i][i];
    }
    ii++;
  }
  while (conv(p,x));
  cout<<"chislo: "<<ii<<endl;
 for (int i=0;i<n;i++)
 {
  cout<<x[i]<<" ";
 
  cout<<endl;
  }
  getch();
}
Неужели никто не может проверить на debug те проги которые выдают ошибку square root...

Добавлено через 5 минут
Все так боятся слова ZEYDEL что даже не смотрят тему)

Добавлено через 38 минут
------------------------ZEYDEL----------------------

Добавлено через 16 часов 22 минуты
Уже не ненадо, всем спс))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru