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

Последний метод итераций - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.95
prikolist
2 / 2 / 0
Регистрация: 19.07.2008
Сообщений: 142
19.06.2009, 12:54     Последний метод итераций #1
Здравсвуйте программисты! Спасибо за ответы на предыдущие посты. Осталось решить методом итераций систему уравнений. Вчера Сазари мне подсказал как делать методом Зейделя, осталось методом итераций. Вот попробывал собрать код методом итераций, но дело в том,что результат системы уравнений равен по -1, все 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
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#include <cmath>
#define eps 0.0001 //требуемая точность вычислений
#define N 4
using namespace std;
 
void iteration(double a[N][N],double b[N],double x[N])
{
 int i,j;
 double norma; //чебышевская норма вектора
 double xn[N]={0};//вектор для текущей итерации, начальное значение
       //должно быть равно начальному приближению
 do{
norma=0.0;  
 for(i=0;i < N;i++)  
 {
 xn[i]=-b[i];   
 for(j=0;j < N;j++)   
 {   
 if(i!=j)   
 xn[i]+=a[i][j]*x[j];  
 }  
 xn[i]/=-a[i][i];  
 }  
 for(i=0;i < N;i++) 
 {   
if(fabs(x[i]-xn[i]) > norma)   
 norma=fabs(x[i]-xn[i]); //Вычисление нормы вектора  
 x[i]=xn[i];  
   }  
 } 
 while(norma > eps); //проверка на необходимую точность вычислений 
 return;
 }
//------------------------------------------
int main()
{
cout<<"Metod Iterasii"<<endl<<endl;
double a[N][N],b[N],x[N];
int i;
a[0][0] = -1.01; a[0][1] = 0.02; a[0][2] = -0.62; a[0][3] = 0.08; b[0] = 1.3;
a[1][0] = -1.03; a[1][1] = 0.28; a[1][2] = 0.33; a[1][3] = -0.07; b[1] = -1.1;
a[2][0] = -1.09; a[2][1] = 0.13; a[2][2] = 0.42; a[2][3] = 0.28; b[2] = 1.7;
a[3][0] = -1.19; a[3][1] = -0.23; a[3][2] = 0.08; a[3][3] = 0.37; b[3] = 1.5;
for(i=0; i<N; i++)
 x[i] = 0;
iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<x[i]<<endl;
 
cin.get(); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2009, 12:54     Последний метод итераций
Посмотрите здесь:

C++ Метод итераций и метод Зейделя
метод итераций C++
метод итераций с++ C++
метод итераций C++
C++ Метод итераций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 13:05     Последний метод итераций #2
А ты можешь вкратце объяснить как ты приводишь матрицу к диагонально-преобладающему виду?
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 14:19     Последний метод итераций #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
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <cmath>
 
const int n = 4;
 
// функция оценки погрешности
double Delta(double *X, double *x, double a);
void PrintVector(double *X);
 
// ---------------------------------------------------------------------------------------
 
int main()
{
  // ИСХОДНЫЕ ДАННЫЕ ===================================================
  
    // АЛЬФА матрица
    double A[n][n] = {  
                        { 0,       -0.014,  -0.072,  -0.163 },
                        { -0.092,       0,  -0.045,  -0.098 },
                        { -0.062,  -0.018,       0,  -0.038 },
                        { -0.106,  -0.111,  -0.051,       0 },
                     };
                     
    // вектор БЕТА
    double b[n] = { -3.10,  1.16,  1.82,  1.0 };  
 
    // норма
    double a =0.299;
    
    // точность вычеслений (эпсилон)
    double eps = 0.001;
 
  // ВЫЧИСЛЕНИЯ ========================================================
    
    // счетчик итераций
    int k = 0;
    
    // вектор приблежения
    double x[n];
        
    // вектор с решением системы
    double X[n];
    
    // итерации
    while (true)
    {     
        // если первая итерация - в качестве приблежения берем вектор БЕТА
        if (!k) 
            memcpy(x, b, n*sizeof(double));
        else
            memcpy(x, X, n*sizeof(double));
 
        // обнуляем вектор с решением системы
        memset(X, 0, n*sizeof(double));
            
        // подсчитываем значения
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<n; j++)
            {
                if (i==j) continue;
                X[i] += A[i][j]*x[j];
            }
            X[i] += b[i];
        }
        
        // выводим решение системы
        PrintVector(X);
        
        k++;
        
        // оцениваем погрешность
        // если удовлетворяет заданной - прекращаем вычисления
        if (Delta(X, x, a) <= eps) break;
    }
 
    // выводим кол-во итераций
    std::cout << "\n Count of iteration is " << k << std::endl;
    
    system("pause");
    return 0;
}
 
// ---------------------------------------------------------------------------------------
 
double Delta(double *X, double *x, double a)
{
    double max = 0;
    
    for (int i=0; i<n; i++)
    {
       double f = fabs(X[i]-x[i]);
       if (f > max) max = f;
    }
    
    return (a/(1-a))*max;
}
 
// ---------------------------------------------------------------------------------------
 
void PrintVector(double *X)
{
    for (int i=0; i<n; i++)
        std::cout << " X["<< i+1 << "] = "  << X[i] << std::endl;
    std::cout << "------" << std::endl;        
}
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 16:24     Последний метод итераций #4
А как Вы приводите матрицу к диагонально-преобладающему виду?

Добавлено через 2 минуты
Вот например тут в коде матрица приводится к диагонально-преобладающему виду. Поэтому код работает для любой хорошо обусловленной матрицы, записанной произвольно. Но я его никак с фортрана на С++ не преведу(
http://rulekcia.ru/kurs/45/2353
Fortran
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
       PROGRAM ITERAC
       IMPLICIT NONE
       INCLUDE 'mpif.h'
       INTEGER
      $ NPROCS, IAM, IERR, I, J,
      $ M_SIZE, BEGC, ENDC, COMM, COUNT1,
      $ XCOUNT, XNUMER, XCOUNT2, XNUMER2
       DOUBLE PRECISION
      $ SUMM, A, X, X_LAST, EPS, MAX_ERR,
      $ TIME1, TIME2, DR, DRMAX
       PARAMETER
      $ (M_SIZE = 10000, EPS=0.00000005)
       DIMENSION
      $ A(M_SIZE, M_SIZE+1),
      $ X(M_SIZE), X_LAST(M_SIZE),
      $ XCOUNT(0:M_SIZE), XNUMER(0:M_SIZE),
      $ XCOUNT2(0:M_SIZE), XNUMER2(0:M_SIZE)
      CALL MPI_INIT(IERR)
      CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NPROCS,IERR)
      CALL MPI_COMM_RANK(MPI_COMM_WORLD,IAM,IERR)
      COMM = MPI_COMM_WORLD
C       «0»-процесс засекает время
      IF (IAM.EQ.0) TIME1 = MPI_WTIME()
       IF (IAM.EQ.0) THEN
C       «0»-процесс формирует матрицу А, имеющую диагональное преобладание
       DO I=1, M_SIZE
        SUMM=0
        DO J=1, M_SIZE
         A(I,J) = I+J
         SUMM=SUMM+A(I,J)
        END DO
        A(I,I) = A(I,I)+SUMM*2
       END DO
C       «0»-процесс формирует столбец свободных членов матрицы А
       DO I=1, M_SIZE
        A(I,M_SIZE+1) = M_SIZE+I**2
       END DO
C       «0»-процесс формирует начальное приближение вектора X и начальное
C       приближение максимальной ошибки MAX_ERR
       DO I=1, M_SIZE
        X(I)=A(I,M_SIZE+1)/A(I,I)
        IF (X(I).GT.MAX_ERR) MAX_ERR=DABS(X(I))
       END DO
       OPEN(12, FILE='RES.DAT')
       COUNT1 = 0
       END IF
C       каждый процесс определяет первую и последнею строки свой полосы для расчета
C       и соответственно первую и последнюю координаты вектора X
       BEGC = IAM*M_SIZE/NPROCS+1
       ENDC = (IAM+1)*M_SIZE/NPROCS
C        каждый процесc определяет свои массивы размера полоc и их положение
       DO I = 0,NPROCS-1
        XCOUNT (I) = ((I+1)*M_SIZE/NPROCS - I*M_SIZE/NPROCS)
        XNUMER (I) = I*M_SIZE/NPROCS
       END DO
       DO I = 0,NPROCS-1
        XCOUNT2 (I) = XCOUNT (IAM)
        XNUMER2 (I) = XNUMER (IAM)
       END DO
C       «0»-процесс рассылает всем процессам матрицу А и начальное приближение
C       максимальной ошибки MAX_ERR
       CALL MPI_BCAST (A(1,1), M_SIZE*(M_SIZE+1),
       $ MPI_DOUBLE_PRECISION, 0, COMM, IERR)
       CALL MPI_BCAST (MAX_ERR, 1,
       $ MPI_DOUBLE_PRECISION,0,COMM,IERR)
C        основной цикл программы;
C        вычисления идут, пока MAX_ERR не станет меньше точности EPS
       DO WHILE (MAX_ERR.GT.EPS)
        IF(IAM.EQ.0) THEN
         DO I=1, M_SIZE
          X_LAST(I)=X(I)
         END DO
        END IF
C        «0»-процесс рассылает всем процессам вектор X
        CALL MPI_BCAST (X(1), M_SIZE,
       $ MPI_DOUBLE_PRECISION, 0, COMM, IERR)
C        обращение к процедуре вычисления новых значений вектора X
        CALL ITER_JA (X, A, M_SIZE, BEGC, ENDC)
C        процессы отсылают друг другу свои рассчитанные блоки нового вектор X
        CALL MPI_ALLTOALLV(X(1), XCOUNT2, XNUMER2,
       $ MPI_DOUBLE_PRECISION, X(1), XCOUNT,
       $ XNUMER, MPI_DOUBLE_PRECISION,
       $ MPI_COMM_WORLD, IERR)
C        «0»-процесс вычисляет ошибку MAX_ERR
        IF(IAM.EQ.0) THEN
         MAX_ERR=DABS((X(1)-X_LAST(1)))
         DO I=2, M_SIZE
          IF (DABS((X(I)-X_LAST(I))).GT.MAX_ERR)
       $ MAX_ERR=DABS((X(I)-X_LAST(I)))
         END DO
C        счетчик COUNT1 считает колличество итераций
         COUNT1=COUNT1+1
        END IF
C        «0»-процесс рассылает новое значение ошибки вычисления MAX_ERR
        CALL MPI_BCAST(MAX_ERR,1,MPI_DOUBLE_PRECISION,0,COMM,IERR)
        END DO
        IF (IAM.EQ.0) THEN
C        «0»-процесс выполняет проверку и производит выдачу результатов
C        в файл RES.DAT
         WRITE(12,*) 'Vector X ', 'ERROR '
         DRMAX=0.0
         DO I=1,M_SIZE
          SUMM=0.0
          DO J=1,M_SIZE
           SUMM=SUMM+X(J)*A(I,J)
          END DO
          DR = (SUMM - A(I,M_SIZE+1))/A(I,M_SIZE+1)
          WRITE(12,'(3f18.7)') X(I), SUMM - A(I,M_SIZE+1)
          IF (DR.GT.DRMAX) DRMAX = DR
         END DO
         WRITE(12,'(a, i4)') 'Count of iteration', COUNT1
         WRITE(12,'(a, f14.6)') 'Maximum of absolute error', DRMAX
C        «0»-процесс засекает время и определяет длительность работы программы
         TIME2 = MPI_WTIME()
         WRITE(12, *) 'Time of calculation', TIME2-TIME1
         WRITE(12,*) 'GOOD FINISH'
         CLOSE(12)
         END IF
        CALL MPI_FINALIZE(IERR)
      END
C        подпрограмма, выполняющая вычисления новых значений вектора X
C        в полосе матрицы А, определенной для каждого процесса
      SUBROUTINE ITER_JA (X_OLD, AM, M_S, FIRST, LAST)
      IMPLICIT NONE
      INTEGER I, J, WIDTH, M_S, M_SIZE, FIRST, LAST
      DOUBLE PRECISION SUMM, AM, XX, X_OLD
      PARAMETER (M_SIZE = 10000)
      DIMENSION AM(M_SIZE, M_SIZE+1), XX(M_SIZE), X_OLD(M_SIZE)
      DO I=FIRST, LAST
        SUMM=0
        DO J=1, I-1
         SUMM=SUMM+AM(I,J)*X_OLD(J)
        END DO
        DO J=I+1, M_S
         SUMM=SUMM+AM(I,J)*X_OLD(J)
        END DO
        XX(I) = (AM(I,M_S+1)-SUMM)/AM(I,I)
       END DO
       DO I=FIRST, LAST
         X_OLD(I) = XX(I)
       END DO
      RETURN
      END
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 16:32     Последний метод итераций #5
А у Вас решается просто итеративный процесс. Если матрица не диагонально-преобладающая, то он расходится. Я в Вашем коде не вижу такого. Ради примера вот есть текстовик, там объясняется о чем я и приводится один из алгоритмов, но я тоже не в силах пока его норм реализовать. Уже несколько дней не спал, очень плохо соображаю.Метод Якоби(итеративный).rar
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 17:50     Последний метод итераций #6
Тут основная проблема в том, что выбор коэффициентов - задача NP-полная. Что тут применить пока не доходит
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 22:22     Последний метод итераций #7
Дело в том, что в Методе простых итераций используется преобразованная система уравнений.

Если, в общем виде записывается система вот так:

A*X = B;

но преобразованная система выглядет так:

X = альфа*x + бета;


Переход к преобразованной системе уравнений происходит следующим образом:

бета i = Bi / Aii;
альфа i j = - Aij / Aii;
при i,j = 1,2...n; и i не равно j;

при i = j альфа i j = 0;
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 22:27     Последний метод итераций #8
Дело вот в чем. Я это знаю, но если Матрица А не диагонально преобладающая, то после таких преобразований Вы получите расходящийся процесс. Так как норма матрицы альфа будет больше еденицы. Иногда он сходится, если матрица хорошо обусловлена, но в большинстве случаев, если норма больше еденицы - то все плохо Нужно диагональное преобладани. В том текстовике они приводят её к такому виду. И даже есть блок-схемы, но я не могу их разобрать. Все запутано. По крайней мере, для меня.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 22:34     Последний метод итераций #9
ну так матрицу не всегда можно привести к диагонально преобладающей. в этом вся и загвоздка - это называется проверка на сходимость или как-то так. методом простых итераций можно решить не любую систему уравнений.

Fortran
1
2
3
4
5
6
7
8
9
C       «0»-процесс формирует матрицу А, имеющую диагональное преобладание
       DO I=1, M_SIZE
        SUMM=0
        DO J=1, M_SIZE
         A(I,J) = I+J
         SUMM=SUMM+A(I,J)
        END DO
        A(I,I) = A(I,I)+SUMM*2
       END DO
на C++ это должно выглять как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
// процесс формирует матрицу А, имеющую диагональное преобладание
// M_SIZE - порядок матрицы
for (int i=0; i<M_SIZE; i++)
{
   double SUMM=0;
   for (int j=0; j<M_SIZE; j++)
   {
      A[i][j] = i+j;
      SUMM += A[i][j];
   }
   A[i][i] = A[i][i] + SUMM*2;
}
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 22:51     Последний метод итераций #10
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
ну так матрицу не всегда можно привести к диагонально преобладающей. в этом вся и загвоздка - это называется проверка на сходимость или как-то так.
Хорошо. Щас я выложу систему, которая не решается "в лоб" но к диагонально-преобладающему виду приводится.
5.96 1.40 5.03 -7.41
2.99 1.25 -0.38 4.48
1.05 -3.57 1.92 -15.14
Это расширенная матрица системы. В лоб, она не решается, там норма матрицы алфа много больше еденицы.
Однако переставляя строки местами и скаладывая их и вычитая, домножив на произвольные коэффициенты её можно свети к такой (кстати очень даже быстро):
2.99 1.25 -0.38 4.48
1.05 -3.57 1.92 -15.14
1.03 -4.67 7.71 -31.51
Тут уже явно видно преобладание диагональных элементов. И тогда она прекрасно решается, и ответ таков
-0.048278
3.014007
-2.254846
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
на C++ это должно выглять как-то так:
Этот код не помогает. Лучше всего написано по этому поводу в том документе в архиве. Но я пока не могу разобрать.
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
бета i = Bi / Aii;
альфа i j = - Aij / Aii;
Вот тут, когда Вы делите на Aii, то это Aii должно по модулю превышать сумму элементов соответствующей строки. А если это не выполняется, то полученная матрица альфа будет с нормой намного большей еденицы.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2009, 23:06     Последний метод итераций #11
Цитата Сообщение от galileopro Посмотреть сообщение
Вот тут, когда Вы делите на Aii, то это Aii должно по модулю превышать сумму элементов соответствующей строки. А если это не выполняется, то полученная матрица альфа будет с нормой намного большей еденицы.
Да

Цитата Сообщение от galileopro Посмотреть сообщение
Этот код не помогает.
я лишь перевел с фортрана

насчет сложений/вычитаний/домножений - не знаю.. Но это, по идеи, и не важно. А перемещение строк - это просто.
Достаточно искать максимальный элемент по модулю (предположительно диагональный), смотреть его индекс и перемещать строку в ту позицию, в которой этот максимальный элемент будет диагональным.

И все таки, как вы получили из строки:
5.96 1.40 5.03 -7.41
строку
1.03 -4.67 7.71 -31.51
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
29.11.2009, 23:49     Последний метод итераций #12
Я делал так:
1) Сложил первую строку с третьей, и записал р-тат в первую.
2) Вычел из первой 2*на вторую и записал в первую.
3) Записал то, что во второй в первую.
4) записал то, что в третьей во вторую.
5) Записал то, что в первой в третью.

Цитата Сообщение от Monte-Cristo Посмотреть сообщение
насчет сложений/вычитаний/домножений - не знаю.. Но это, по идеи, и не важно.
Как это не важно, только переставляя строки ничего не добъешься.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.11.2009, 00:49     Последний метод итераций #13
Цитата Сообщение от galileopro Посмотреть сообщение
1.03
по идеи 0.278 должно быть

Дело в том, что написать программу которая анализировала и думала бы как человек - тяжело.
Именно поэтому, этот способ и редко применяется. Обычно используется метод приведения матрицы к треуголному виду.
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
30.11.2009, 12:14     Последний метод итераций #14
А я напиасал. Потом выложу. Я щас на пары ухожу.
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
01.12.2009, 21:01     Последний метод итераций #15
Delphi
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
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
Label m,h;
type MyType=array[1..3,1..3] of real;
var mf:MyType=((2.87, -2.67, -2.85),(3.55,0.71,-1.25),(1.13,-4.81,2.14));
    vs,mf1:MyType;
    i,j,kol,v1,v2,k:integer;
    max:real;
begin
kol:=0;
mf1:=mf;
m:
  max:=0;
  for i:=1 to 3 do
    for j:=1 to 3 do if abs(mf[i,j])>max then begin max:=abs(mf[i,j]); v1:=i; v2:=j;end;
  if vs[v2,1]=0 then begin for i:=1 to 3 do vs[v2,i]:=mf1[v1,i]; inc(kol); end;
  mf[v1,v2]:=0;
  if kol<3 then goto m;
 
  for i:=1 to 3 do
   if vs[i,i]<0 then for j:=1 to 3 do vs[i,j]:=-vs[i,j];
kol:=1;
h: max:=0;
  for j:=1 to 3 do max:=max+abs(vs[kol,j]);
  if abs(vs[kol,kol])>max-abs(vs[kol,kol])then inc(kol)
                                          else begin
                                          max:=0;
  for j:=1 to 3 do if (abs(vs[kol,j])>max)and(j<>kol) then begin v1:=j; max:=abs(vs[kol,j]); end;
  if vs[kol,v1]>0 then for k:=1 to 3 do vs[kol,k]:=vs[kol,k]-vs[v1,k]
                  else for k:=1 to 3 do vs[kol,k]:=vs[kol,k]+vs[v1,k]
                                          end;
  if kol<4 then goto h;
 
  for i:=1 to 3 do
   if vs[i,i]<0 then for j:=1 to 3 do vs[i,j]:=-vs[i,j];
   
  for i:=1 to 3 do begin
   for j:=1 to 3 do write(vs[i,j]:0:3,' ');
   writeln;
   end;
   readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Вот. Пока черновой вариант

Добавлено через 23 минуты
Monte-Cristo, что скажете?
blackwizard
Сообщений: n/a
18.05.2010, 19:14     Последний метод итераций #16
спасибо, полезная тема.
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 816
18.10.2010, 11:49     Последний метод итераций #17
Найти корень алгебраического уравнения на заданном интервале [a,b],с точностью эпсилон 0,00001
(x-1)^2-0,5e^x=0
интервал [-0,2;0,3]
Помогите пожалуйста
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2011, 01:39     Последний метод итераций
Еще ссылки по теме:

C++ Метод итераций
C++ Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
Метод итераций C++

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

Или воспользуйтесь поиском по форуму:
dino-4udo
-41 / 5 / 1
Регистрация: 16.12.2010
Сообщений: 68
02.12.2011, 01:39     Последний метод итераций #18
prikolist, а можещь поделится методом зейделя???
Yandex
Объявления
02.12.2011, 01:39     Последний метод итераций
Ответ Создать тему
Опции темы

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