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

Метод Зейделя - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
Tura
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 10
29.04.2011, 21:10     Метод Зейделя #1
Я написал прогу по методу Зейделя, так вот при матрице 3х3 выдает после 7 итерации правильный ответ) а при матрице 4х4 уже на второй итерации пишет не правильно(

Может кто подскажет в чём может быть причина????


это 3х3!
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
#include <conio.h>
#include <iostream.h>
#include <math.h>
const int n=3;
double a[3][3] ={{4,-1, 1},
         {2, 6,-1},
         {1, 2,-3}};
 
double b[3]={4, 7,0};
 
void main()
{
clrscr ();
 
 int i,j,e;
 
 double x[3], c[3]={0,0,0};
 cout<<endl;
 
for(e=1;e<8;e++)
  {
   cout<<e<<" ITERAZI9:"<<endl;
 for(i=0;i<n;i++)
  {   x[i]=0;
      for(j=0;j<n;j++)
   {
    if(i!=j)
    x[i]+=a[i][j]*c[j];
   }
   c[i]=(b[i]-x[i])/a[i][i];
   cout<<c[i]<<" ";
  }
  cout<<endl;
 
  cout<<endl;
}
 
getch();
}
А это 4х4!
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
#include <conio.h>
#include <iostream.h>
#include <math.h>
const int n=4;
double a[n][n] ={{0.05, 0.04,   0.6,   0.45},
         {0,    0.267,  0.067, 0.25},
         {1.05, 0.333,  0.091, 0.23},
         {0.029,0.55,   0 ,    0.25}};
 
double b[n]={3.825, 2.181,    13.045, 3.661};
 
void main()
{
clrscr ();
 
 int i,j,e;
 
 double x[n], c[n]={0,0,0,0};
 cout<<endl;
 
for(e=1;e<8;e++)
  {
   cout<<e<<" ITERAZI9:"<<endl;
 for(i=0;i<n;i++)
  {   x[i]=0;
      for(j=0;j<n;j++)
   {
    if(i!=j)
    x[i]+=a[i][j]*c[j];
   }
   c[i]=(b[i]-x[i])/a[i][i];
   cout<<c[i]<<" ";
  }
  cout<<endl;
 
  cout<<endl;
}
 
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2011, 21:10     Метод Зейделя
Посмотрите здесь:

C++ метод Зейделя
Метод Зейделя C++
C++ Метод итераций и метод Зейделя
метод зейделя C++
C++ Метод Зейделя
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tura
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 10
01.05.2011, 12:50  [ТС]     Метод Зейделя #2
Что, никто не может подсказать???
хоть примерно(((
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.05.2011, 12:53     Метод Зейделя #3
Цитата Сообщение от Tura Посмотреть сообщение
for(e=1;e<8;e++)
это что вообще такое? вы пророк и заранее знаете сколько будет итераций?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.05.2011, 13:30     Метод Зейделя #4
1. Вместо void main() поставьте int main()
2. Если среда микрософтовскаяч версии больше 6.0, то в инклудах от .h надо избавиться
3. Метод итераций программируется циклом while()
Нужно задать некоторую точность епсилон (например, 0.0001) и в условии проверять модуль разности предыдущего решения и текущего. Если разность менее епсилон, то решение удовлетворяет заданной точности.
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
01.05.2011, 22:08     Метод Зейделя #5
Tura, в википедии же есть готовый. Бери не хочу.
И у вас тут нет функции нормы разности векторов. А через нее как раз цикл осуществляется.
Tura
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 10
02.05.2011, 22:12  [ТС]     Метод Зейделя #6
Цитата Сообщение от Maxwe11 Посмотреть сообщение
это что вообще такое? вы пророк и заранее знаете сколько будет итераций?
Ага))) я потом, через while переделаю... просто так быстрей!

Добавлено через 4 минуты
Цитата Сообщение от almazsr Посмотреть сообщение
Tura, в википедии же есть готовый. Бери не хочу.
И у вас тут нет функции нормы разности векторов. А через нее как раз цикл осуществляется.
сравни)

C++
1
2
3
4
5
6
7
8
9
10
 for(i=0;i<n;i++)
  {   x[i]=0;
      for(j=0;j<n;j++)
   {
    if(i!=j)
    x[i]+=a[i][j]*c[j];
   }
   c[i]=(b[i]-x[i])/a[i][i];
   cout<<c[i]<<" ";
  }
C++
1
2
3
4
5
6
7
8
9
    for(int i = 0; i < n; i++)
    {
        double var = 0;
        for(int j = 0; j < n; j++)
            if(j != i) 
           var += (a[i][j]*x[j]);
        p[i] = x[i];
        x[i]=(b[i] - var)/a[i][i];
    }
только в вики идёт var, а у меня x[i]!

Добавлено через 4 минуты
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
1. Вместо void main() поставьте int main()
2. Если среда микрософтовскаяч версии больше 6.0, то в инклудах от .h надо избавиться
3. Метод итераций программируется циклом while()
Нужно задать некоторую точность епсилон (например, 0.0001) и в условии проверять модуль разности предыдущего решения и текущего. Если разность менее епсилон, то решение удовлетворяет заданной точности.
не помогло... оно с каждой итерацией всё больше и больше((
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 02:05     Метод Зейделя #7
Дык может система не имеет решения?
Условия сходимости выполняются (см. в Вики)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 10:44     Метод Зейделя
Еще ссылки по теме:

C++ Метод Зейделя в С++
C++ метод Зейделя. c++
C++ Метод Зейделя

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

Или воспользуйтесь поиском по форуму:
Tura
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 10
04.05.2011, 10:44  [ТС]     Метод Зейделя #8
Система имеет решения)
вот: 10,004
4,994
3,336
2,495

Добавлено через 51 минуту
тут в коде наверное маленькая ошибка((( а завтра уже сдавать(

Добавлено через 11 часов 9 минут
Нууу...

Добавлено через 1 час 6 минут
всё уже)) сделал) спс)
Yandex
Объявления
04.05.2011, 10:44     Метод Зейделя
Ответ Создать тему
Опции темы

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