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

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

Войти
Регистрация
Восстановить пароль
 
Pain'ka
1 / 1 / 0
Регистрация: 23.11.2011
Сообщений: 54
#1

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

12.11.2012, 17:00. Просмотров 378. Ответов 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++) - C++
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real; b,c:array of real; ...

Метод простых итераций - C++
Необходимо реализовать программно метод простых итерация для решения НУ. к примеру возьмём x^6-3x^2+x-1, интервал изоляции корня . ...

Метод простых итераций - C++
Здраствуйте! Нужно методом простой итерации решать такую систему нелинейных уравнений с точностью e=10-4 и найти погрешность. Нашел на...

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

Метод простых итераций - C++
Помогите с написанием программы на С++, нужно решить СЛАУ методом простых итераций. с точностью 0,0001. Мой код #include &lt;conio.h&gt; ...

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

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

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

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

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

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


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

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

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