Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Pain'ka
1 / 1 / 1
Регистрация: 23.11.2011
Сообщений: 54
#1

Метод простых итераций - C++

12.11.2012, 17:00. Просмотров 388. Ответов 0
Метки нет (Все метки)

Привет всем!!!
Необходимо решить методом простых итераций СЛАУ. Программу вроде написала, но не считает, как исправить ошибку не пойму.
Кажется, не правильно считаю условие выхода из цикла.
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
//сама матрица
double Am[4][4]={21,4,2,2,4, 8, 0, 2, 2, 0, 9, -4, 2, 2, -4, 12};
    double bb[4];
//столбец свободных членов
    double Bm[4]={2*s*(ss), 5*((ss)-cs), 7*(cs+ss), 3*(ss)}, eee = 0.09, xpred[4], xx[4], err, max = 10.0, matr_norm, temp, xxx[4], t, km = 20.0;
    r = 0;
 
    for( i = 0; i <n ; i++){
        bb[i] = Bm[i]/Am[i][i];
        for(j = 0; j < n; j++){
            Am[i][j] = -Am[i][j]/ Am[i][i];
        }
        xpred[i] = bb[i];
 
    }
    cout<<"\na[i][j]\n";
    for(i=0; i<n; i++)
    {
        for(j=0; j<n;j++){
            if(i == j)Am[i][j] = 0;
            cout<<Am[i][j]<<"  ";}
        cout<<"\n";
    }
 
    
    do{
        max = 0.0;
        err = 0.0;
        for(i = 0; i < n; i++){
        temp = 0.0;  t = 0.0;
            for(j = 0; j < i-1; j++)
            temp +=  Am[i][j]*xpred[j]  ;
            for(j = i+1; j < n; j++)
            t +=  Am[i][j]*xpred[j]  ;
            
            xx[i] =  bb[i] + temp + t;
        }
 
//как правильно написать этот кусочек - не пойму
        for(k = 0; k < n; k++){
            err =  fabs(xx[k] - xpred[k]);
            if((err > max)/*||(err < 0.000001)*/)max = err;
            xpred[k] = xx[k];
            }   
    }
    while (max > 0.01);
Добавлено через 18 часов 19 минут
Ошибку нашла, все верно, только чуток косяк с матрицей
исправленный код, если кому - то понадобится:
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
double Am[4][4]={21,4,2,2,4, 8, 0, 2, 2, 0, 9, -4, 2, 2, -4, 12}, Amm[4][4];
    double bb[4];
    double Bm[4]={2*s*(ss), 5*((ss)-cs), 7*(cs+ss), 3*(ss)}, xpred[4], xx[4], err, max, temp, t;
    r = 0;
 
    for( i = 0; i <n ; i++){
        bb[i] = Bm[i]/Am[i][i];
        for(j = 0; j < n; j++){
            Amm[i][j] = -Am[i][j]/ Am[i][i];
        }
        xpred[i] = bb[i];
 
    }
    cout<<"\na[i][j]\n";
    for(i=0; i<n; i++)
    {
        for(j=0; j<n;j++){
            if(i == j)Amm[i][j] = 0;
            cout<<Amm[i][j]<<"  ";}
        cout<<"\n";
    }
 
    do
    {
        max = 0.0;
        err = 0.0;
        for(i = 0; i < n; i++){
        temp = 0.0;  t = 0.0;
            for(j = 0; j < n; j++)
            temp =temp + Amm[i][j]*xpred[j]  ;
            xx[i] =  bb[i] + (temp + t);
        }
 
 
        for(k = 0; k < n; k++){
            err = fabs(xx[k] - xpred[k]);
            if((err > max))max = err;
            xpred[k] = xx[k];
            }   
    }
    while (max >0.00001);
cout<<"err  "<< max<<"\n";
    for(k = 0; k < n; k++)
        cout<<"\nx[ "<<k<<"] ="<<xx[k]<<"\n";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 17:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Метод простых итераций (C++):

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
перевести из паскаля в С++ program method_of_simple_iteration; uses crt;...

Метод простых итераций. С/С++
Такое задание: написать алгоритм численного решения нелинейных уравнений...

Метод простых итераций
Необходимо реализовать программно метод простых итерация для решения НУ. к...

Метод простых итераций
Помогите с написанием программы на С++, нужно решить СЛАУ методом простых...

Метод простых итераций
Дана функция 1.4 Cos - Log=0 Ее надо преобразовать к виду ф(x)=x, я не совсем...

Метод простых итераций
Здраствуйте! Нужно методом простой итерации решать такую систему нелинейных...

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

Метод простых итераций для СЛАУ
Здравствуйте! Пытаюсь реализовать метод простых итераций. Все функции, которые...

Метод простых итераций для СЛАУ
Прошу помочь с написанием МПИ для СЛАУ на C. Каким образом выразить из AX=b...

Метод простых итераций для СЛАУ
Помогите пожалуйста! Нужно реализовать метод простых итераций для решения СЛАУ...

Метод простых итераций для СЛАУ
Доброго времени суток всем!!! решаю СЛАУ методом простых итераций, проблема...


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

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

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