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

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

12.11.2012, 17:00. Просмотров 391. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

Метод простых итераций
Дана функция 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 ур-е X=BX+C, в которое...


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

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

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