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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124
#1

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

04.05.2011, 15:12. Просмотров 1302. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 15:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Гаусс-Зейдель (C++):

Гаусс - C++
Ребят, помогите с кусочком программы реализации метода Гаусса. мне нужно приведение матрицы к треугольному виду. Заранее спасибо

Гаусс( - C++
Всем привет! Ребята, пожалуйста помогите мне с решением системы линейных уравнений с помощью метода Гаусса. Хотяб квадратную матрицу, а то...

Гаусс - C++
Помогите написать программу в С++ код в паскале Текст программы &quot;Решение систем линейных уравнений методом Гаусса&quot; Program...

Гаусс для коллекции - C++
double abs(double x) { if (x&lt;0) { return -x; } return x; } void Gauss(double *a, double *b, double *&amp;x, unsigned...

Методы решения СЛАУ (Гаусс, Зейдель) - Scilab
Адаптирован для SciLab и немного упрощён программно известный итерационный метод решения СЛАУ - Гаусса-Зейделя. Для Matlab данный метод и...

СЛАУ Зейдель - MathCAD
В чем ошибка?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 15:12
Привет! Вот еще темы с ответами:

Гаусс Visual C++ - C++/CLI
Собственно это моя первая программа на с++ и на c++ в частности, но в ней обнаружилась серьезная ошибка о_О. Введя коэф все 1, а свободные...

Гаусс-4, откуда взялись коэффициенты? - Fortran
subroutine gauss4(a, b, n, rez) REAL*8 a, b, n, rez, h rez=0.0D00 h=(b-a)/n q1=0.652145154862546D00 ...

Надо провести через Гаусс n раз - MathCAD
По заданным условиям получается x1 и x2, которые надо занести в формулу матрицы известных значений и получить новые x1 и x2 и суммировать...

Линейная уравнения методом Гаусс, Крамер на Matlab - Matlab
Здравствуйте! Как решит система нелинейных уравнений методом Гаусс и Крамер на MatLab. Я решил по методу Гаусс, но что то тяжеловата. ...


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

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

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