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

Метод Зейделя, работает неправильно - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.90
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2010, 00:32     Метод Зейделя, работает неправильно #1
сообственно проблема в том что считает немного неточно.
и какую функцию можно использовать для закрытия программы?(exit не работает)
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
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
 
int main()
{
    int n;
    cout<<"Number of equatations?"<<endl;
    cin>>n;
    double v[n];//вектор свободных членов
    double a[10][10];//матрица коэффициентов
    double p[n];//массив приближений p[i]-для i-того корня
    double x[n];//ответы
    cout<<"Write kof"<<endl;//коэф.
    for(int i=0;i<n;i++)
    {
     for(int j=0;j<n;j++)
      cin>>a[i][j];
    }
     cout<<"Write free memebers"<<endl;//свободные члены
     for(int i=0;i<n;i++)
      cin>>v[i];
     cout<<"Array of ~"<<endl;
     for(int i=0;i<n;i++)
     {p[i]=v[i]/a[i][i];
     cout<<p[i]<<" ";}
     cout<<endl;
     int e; //точность
     cout<<"Write e"<<endl;
     cin>>e;
     double k;
     double s;
     int i=0,j=0;
     /*for(i=0;i<n;i++)
     {
        s=0;
        for(j=0;j<n;j++)
         if (j!=i) s+=fabs(a[i][j]);
         if (s>=(fabs(a[i][j])))
         {
            cout<<"Ne shoditsia"<<endl;
            goto label1;
         }
     }*/
     do //высчитываем комбинации приближений
     {  
         k=0;
         for(i=0;i<n;i++) //для каждой переменной
        {
          s=0;//основа основ метода итераций
           for(j=0;j<n;j++)
            if (i!=j)
            //умножается коэффициент при элементе и его приближение
            s+=a[i][j]*p[j];//каждый элемент получается сложением
            int pr=x[i]; //создаем новую переменную в которую записываем значение приближенного до этого x[i]
            //сумму переносим в праву часть=>вычитаем из свободного члена и делим на коэф.при x приближения
            x[i]=(v[i]-s)/a[i][i]; //новое значение приближения
            if (k<fabs(pr-x[i])) k=fabs(pr-x[i]);   
        }
     }
     while(k<e); //условие окончания итерационного цикла метода зейделя
     for (i=0;i<n;i++)
     cout<<x[i]<<" ";
     label1:cout<<"END"<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2010, 00:32     Метод Зейделя, работает неправильно
Посмотрите здесь:

C++ метод Зейделя
Метод Зейделя C++
C++ Метод Зейделя
C++ Метод Зейделя в С++
Метод Зейделя C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
31.10.2010, 00:34     Метод Зейделя, работает неправильно #2
Цитата Сообщение от Artishok Посмотреть сообщение
и какую функцию можно использовать для закрытия программы?
C++
1
return
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2010, 01:00  [ТС]     Метод Зейделя, работает неправильно #3
нет идей почему считает криво?
siger
13 / 13 / 1
Регистрация: 27.02.2010
Сообщений: 46
31.10.2010, 02:03     Метод Зейделя, работает неправильно #4
Ограничения типа double?
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
31.10.2010, 13:06  [ТС]     Метод Зейделя, работает неправильно #5
Цитата Сообщение от siger Посмотреть сообщение
Ограничения типа double?
я взял вещественный тип т.к. приближения дробные могут быть
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,945
31.10.2010, 13:39     Метод Зейделя, работает неправильно #6
C++
1
int e; //точность
- это нормально, что точность целое число ?
Yandex
Объявления
31.10.2010, 13:39     Метод Зейделя, работает неправильно
Ответ Создать тему
Опции темы

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