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

Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
09.04.2014, 20:12     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #1

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

СЛАУ выглядит так:

http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}{a}_{11}{x}_{1}+{a}_{12}{x}_{2}+...+{a}_{1n}{x}_{n}={b}_{1} \\ {a}_{21}{x}_{1}+{a}_{22}{x}_{2}+...+{a}_{2n}{x}_{n}={b}_{2}  \\ .........................................................\\ {a}_{n1}{x}_{1}+{a}_{n2}{x}_{2}+...+{a}_{nn}{x}_{n}={b}_{n} \end{cases}

или в векторной форме:
AX=B
с каждого уравнения вычисляем http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}(i=1...n) и получаем:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}=\frac{1}{{a}_{11}}({b}_{1}-{a}_{12}{x}_{2}-{a}_{13}{x}_{3}-...-{a}_{1n}{x}_{n})

или в векторной форме:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{X}=F(\bar{X})

для которого можно использовать метод простой итерации. Метод заключается в том, что в правую часть подставляем какие то значения http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}(i=1...n), получаем новые значения, какие опять подставляем в правую часть и т. д. То есть, на каждой итерации имеем предыдущие значения неизвестных http://www.cyberforum.ru/cgi-bin/latex.cgi?{xp}_{i}(i=1...n), какие подставляем в правую часть схемы и новые значения http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}(i=1...n), какие получаем в левой части.

Вычислительную схему можно записать:
http://www.cyberforum.ru/cgi-bin/latex.cgi?x[i]=(b[i]-\sum_{j=1,j\neq i}^{n}(a[i][j]*xp[j]))/a[i][i], i=1...n

Начальное значение неизвестных можно вычислить:
xp[i]=b[i]/a[i][i]

после каждой итерации значение некоторого неизвестного меняется на величину:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{delta}_{i}=\left| x[i]-xp[i]\right|
Вычисления можно остановить когда максимальная поправка
http://www.cyberforum.ru/cgi-bin/latex.cgi?prop={max}_{i}({delta}_{i})
будет меньше заданной точности http://www.cyberforum.ru/cgi-bin/latex.cgi?eps
По окончании итерации, вычисление всех новых значений http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}, вычисление максимальной поправки http://www.cyberforum.ru/cgi-bin/latex.cgi?prop нужно переписать массив http://www.cyberforum.ru/cgi-bin/latex.cgi?x к массиву http://www.cyberforum.ru/cgi-bin/latex.cgi?xp.

Необходимым (но не достаточным) условием сходимости метода есть выполнения условия:

http://www.cyberforum.ru/cgi-bin/latex.cgi?\left|{a}_{ii} \right|>\left|\sum_{j=1,j\neq i}^{n}   {a}_{ij} \right|

Матрицу коэффициентов уравнения A, векторы В, Х, ХР реализуются как динамичные массивы.

п.с. помогите с программой (желательно с комментариями), заранее спс=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 20:12     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов
Посмотрите здесь:

Решить нелинейное уравнение методом хорд и методом простой итерации C++
C++ Помогите написать программу для решения слау методом Гаусса
C++ Составить программу нахождения корней нелинейного уравнения методом простой итерации с точностью вычисления E
Вылет программы для вычисления СЛАУ методом Жордана-Гаусса при исполнении C++
C++ Решение нелинейных уравнений методом простой итерации
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
09.04.2014, 20:43     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #2
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
//////////////////////////////////////////////////////////////////////////////
//  Solving nonlinear equations (iterations method)
//  (c) Johna Smith, 1996
//
//  Method description:
//    This method is used for solving equations like x=f(x)
//    We should set first approximation of the root and then
//    make some iterations x=f(x). When the difference between
//    two consequental iterations will be less than epsilon we
//    can say that we found the root.
//    To apply this method to equations like F(x)=0 we should
//    transform it into iterational form x=f(x), where f(x):
//      1) defined on [a;b]
//      2) for every point on [a;b] exists f'(x)
//      3) for every x from [a;b] f(x) is in [a;b]
//      4) exists number q : |f'(x)|<=q<1 for all x from [a;b]
//
//////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <math.h>
// this function returns value of f(x)
double f(double x)
{
  // x = x + 0.37(sin 2x - ln x)
  return x+0.37*(sin(2*x)-log(x));
}
double Solve(double x, double epsilon)
{
  double x1;
  do
  {
    x1=x;
    x=f(x);
  } while (fabs(x1-x)>epsilon);
  return x;
}
void main(void)
{
  printf("sin 2x - ln x = 0");
  printf("\nx0=%f",Solve(1.4,1e-6));
}
IrineK
Заблокирован
09.04.2014, 20:51     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #3
Цитата Сообщение от andreyananas Посмотреть сообщение
для вычисления СЛАУ
СЛАУ - система линейных уравнений

Цитата Сообщение от aiwprton805 Посмотреть сообщение
nonlinear equation
одно нелинейное уравнение, к тому же - очень конкретное:
Цитата Сообщение от aiwprton805 Посмотреть сообщение
"sin 2x - ln x = 0"
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
10.04.2014, 01:43  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #4
Это вообще что такое???

Добавлено через 31 минуту
все еще актуально

Добавлено через 4 часа 17 минут
помогите плсссссссссссссс
IrineK
Заблокирован
10.04.2014, 01:57     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #5
Напишите что-нибудь сами. Глядишь, и помогут.
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
11.04.2014, 03:49  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #6
наоборот мне бы ваша помощь с началом помогла бы

Добавлено через 7 часов 10 минут
Ап помогите плс

Добавлено через 2 часа 6 минут
раньше всегда помогали)

Добавлено через 5 часов 10 минут
Никто не поможет???
IrineK
Заблокирован
11.04.2014, 05:04     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #7
Цитата Сообщение от andreyananas Посмотреть сообщение
раньше всегда помогали)
Это когда было нужно ввод/вывод чего-нибудь простенького организовать? Так это и бухгалтерам задают. А их жалко.

Задание этой темы показывает, что по специальности вы претендуете быть нашим коллегой.
А кому нужны коллеги-дармоеды?
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
11.04.2014, 12:16  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #8
Цитата Сообщение от IrineK Посмотреть сообщение
Задание этой темы показывает, что по специальности вы претендуете быть нашим коллегой.
А кому нужны коллеги-дармоеды?
Когда ты делаешь что то впервые, в просьбе о помощи ничего плохого не вижу.
п.с. в данном случае проблема в понимании математического смысла.
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
11.04.2014, 17:18     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #9
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
//////////////////////////////////////////////////////////////////////////////
//
//  Solving system of linear equations (iterations method)
//  (c) Johna Smith, 1996
//
//  Method description:
//  This program automatically transforms system of equations to
//  iterative form and solves it.
//  Iterative form:
//     x1=a11*x1+a12*x2+... + a1n*xn+b1
//     x2=a21*x1+a22*x2+... + a2n*xn+b2
//     ...
//     xn=an1*x1+an2*x2+... + ann*xn+bn
//  Setting first iteration of vector X we can get next iteration from
//  such form of system of equations. Iterations will be finished when
//  difference between two consequitive iterations will be less than epsilon
//
//////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <math.h>
#define N      3     // size of matrix
#define N1     N+1
float matrix[N][N1]=
    {{14.38,-2.41,1.39,5.86},
  {1.84,25.36,-3.31,-2.28},
  {2.46,-3.49,16.37,4.47}
    };
int maxiterations=10;  // maximum number of iterations
float epsilon=0.0001;  // required accuracy
void ShowMatrix(void)
{
  for (int i=0;i<N;i++)
  {
    for (int j=0;j<N;j++)
      printf("%+f*x%d",matrix[i][j],i+1);
    printf("=%f\n",matrix[i][N]);
  }
}
void main(void)
{
  // Variables declaration
  float x[N],y[N],t;
  register short int i,j,k;
  int iterations=0;
  // Printing given matrix
  ShowMatrix();
  // setting first iteration of vector X
  for (i=0;i<N;i++) x[i]=matrix[i][N];
  do
  {
    for (i=0;i<N;i++)
    {
      t=-matrix[i][N];
      for (j=0;j<N;j++)
        t+=matrix[i][j]*x[j];
        y[i]=(-t+matrix[i][i]*x[i])/matrix[i][i];
    }
    iterations++;
    k=0;
    // checking solution
    while (fabs(x[k]-y[k])<epsilon && k<N) k++;
    // new iteration becomes old
    for(i=0;i<N;i++) x[i]=y[i];
  } while (k!=N && iterations<maxiterations);
  if (iterations==maxiterations)
  {
    printf("Iterations are very slow...");
  } else
  {
    // Printing solution
    printf("\nSolution:\n");
    for (i=0;i<N;i++)
      printf("x%d=%f\n",i+1,x[i]);
    printf("%d iterations were made",iterations);
  }
}
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
13.04.2014, 02:47  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #10
заплачу за прогу
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
16.04.2014, 07:51  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #11
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
#include <iostream>
#include <windows.h>
#include <math.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251);
    char con;
    int n;
    double delta=0.0, eps=0.0;
    do
    {
        cout << " Введите количество неизвестных: " << endl;
        cin >> n;
        cout << " Введите точность: " << endl;
        cin >> eps;
 
        float **a = new float*[n];//выдиление динам. памяти для массива
        for(int i=0; i<n; i++)
        {
            a[i] = new float[n];
        }
        float *b = new float[n];// выдиление памяти для свободных членов
        float *x = new float[n];
        float *xp = new float[n];
 
        for(int i=0; i<n; i++)// ввод данных
        {
            for(int j=0; j<n; j++)
            {
                cout << " Введите " << (j+1) << "й коэффициент " << (i+1) << "го уравнения: ";
                cin >> a[i][j];
            }
            cout << " Введите " << (i+1) << "й свободный член " << (i+1) << "го уравнения: ";
            cin >> b[i];
        }
 
        for(int i=0; i<n; i++)// вывод СЛАУ
        {
            cout << " | ";
            for(int j=0; j<n; j++)
            {
                cout << a[i][j] << "*x(" << (i+1) << ") + " ;
            }
            cout << " = " << b[i];
            cout << endl;
        }
 
        do
        {
            for(int i=0; i<n; i++) // НЕ РАБОТАЕТ(((
            {
                for(int j=1; j<n; j++)
                {
                    if(j!=i)
                    {
                        xp[i]=b[i]/a[i][i]; // начальное значение Х
                        x[i]=(b[i]-(a[i][j]*xp[j]))/a[i][i];
                        if(fabs(x[i]-xp[i])>delta)
                            delta=fabs(x[i]-xp[i]);
                    }
                }
            }
        }
        while(delta>eps);
 
        for(int i=0; i<n; i++)// вывод результата
        {
            cout << "  x(" << i << ") = " << x[i] << endl;
        }
 
 
 
 
        for(int i=0; i<n; i++)// освобождение выдиленой памяти
        {
               delete [] a[i];
        }
        delete [] a;
        delete [] b;
        delete [] x;
        delete [] xp;
        cout << " Для продолжения программы, введите - 'y'" << endl;
        cout << " для завершения, введите любой символ..." << endl;
        cin >> con;
    }
    while(con=='y');
    return 0;
}
Вот мои наработки, выдает не правильный результат(((

Добавлено через 3 часа 24 минуты
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
#include <iostream>
#include <windows.h>
#include <math.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251);
    char con;
    int n;
    double delta=0.0, eps=0.0;
    do
    {
        cout << " Введите количество неизвестных: " << endl;
        cin >> n;
        cout << " Введите точность: " << endl;
        cin >> eps;
 
        double **a = new double*[n];//выдиление динам. памяти для массива
        for(int i=0; i<n; i++)
        {
            a[i] = new double[n];
        }
        double *b = new double[n];// выдиление памяти для свободных членов
        double *x = new double[n];
        double *xp = new double[n];
 
        for(int i=0; i<n; i++)// ввод данных
        {
            for(int j=0; j<n; j++)
            {
                cout << " Введите " << (j+1) << "й коэффициент " << (i+1) << "го уравнения: ";
                cin >> a[i][j];
            }
            cout << " Введите " << (i+1) << "й свободный член " << (i+1) << "го уравнения: ";
            cin >> b[i];
        }
 
        for(int i=0; i<n; i++)// вывод СЛАУ
        {
            cout << " | ";
            for(int j=0; j<n; j++)
            {
                cout << a[i][j] << "*x(" << (i+1) << ") + " ;
            }
            cout << " = " << b[i];
            cout << endl;
        }
 
        do
        {
            for(int i=0; i<n; i++) // НЕ РАБОТАЕТ(((
            {
                xp[i]=b[i]/a[i][i]; // начальное значение Х
                for(int j=0; j<n; j++)
                {
                    if(j!=i)
                    {
                        x[i]=(b[i]-(a[i][j]*xp[j]))/a[i][i];
                    }
                }
                delta=fabs(xp[0]-x[0]);
                if(fabs(xp[i]-x[i])>delta)
                    delta=fabs(xp[i]-x[i]);
                xp[i]=x[i];
            }
        }
        while(delta>eps);
 
        for(int i=0; i<n; i++)// вывод результата
        {
            cout << "  x(" << i << ") = " << x[i] << endl;
        }
 
 
 
 
        for(int i=0; i<n; i++)// освобождение выдиленой памяти
        {
               delete [] a[i];
        }
        delete [] a;
        delete [] b;
        delete [] x;
        delete [] xp;
        cout << " Для продолжения программы, введите - 'y'" << endl;
        cout << " для завершения, введите любой символ..." << endl;
        cin >> con;
    }
    while(con=='y');
    return 0;
}
Вот еще немного подправил.
Но теперь выбивает в ответе inf

Добавлено через 10 минут
что вообще значит inf и -inf??????
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
16.04.2014, 12:15     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #12
andreyananas, бесконечность. Смотрите, где-то может быть переполнение или деление на ноль.
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
18.04.2014, 03:33  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #13
Цитата Сообщение от iRomul Посмотреть сообщение
Смотрите, где-то может быть переполнение или деление на ноль.
блин не могу найти ошибку(
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
19.04.2014, 16:10     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #14
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
107
108
109
110
111
112
113
114
#include <iostream>
#include <conio.h>
#include <locale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    int n;
    double delta, eps;
 
    do
    {
        cout << " Введите количество неизвестных: " << endl;
        cin >> n;
        cout << " Введите точность: " << endl;
        cin >> eps;
 
        double **a = new double *[n];//выдeление динам. памяти для массива
        for(int i=0; i<n; i++)
        {
            a[i] = new double[n];
        }
        double *b = new double[n];// выдeление памяти для свободных членов
        double *x = new double[n];
        double *xp = new double[n];
 
        for(int i=0; i<n; i++)// ввод данных
        {
            for(int j=0; j<n; j++)
            {
                cout << " Введите " << (j+1) << "й коэффициент " << (i+1) << "го уравнения: ";
                cin >> a[i][j];
            }
            cout << " Введите свободный член " << (i+1) << "го уравнения: ";
            cin >> b[i];
        }
 
        for(int i=0; i<n; i++)// вывод СЛАУ
        {
            cout << " | ";
            for(int j=0; j<n; j++)
            {
                cout << a[i][j] << "*x(" << (i+1) << ") + " ;
            }
            cout << " = " << b[i];
            cout << endl;
        }
 
        for(int i=0; i<n; i++)
        {
            double temp = 0.0;
            for(int j=0; j<n; j++)
            {
                if(j != i) temp += a[i][j];
            }
            if(a[i][i] < temp)
            {
                cout << " Необходимое условие сходимости не выполняется" << endl;
                break;
            }
        }
 
        for(int i=0; i<n; i++)
        {
            xp[i] = b[i]/a[i][i]; // начальное значение Х
        }
 
        do
        {
            for(int i=0; i<n; i++)
            {
                double temp = 0.0;
                for(int j=0; j<n; j++)
                {
                    if(j != i) temp += a[i][j]*xp[j];
                }
                x[i] = (b[i] - temp)/a[i][i];
                delta = fabs(x[0] - xp[0]);
                for(int j=1; j<n; j++)
                {
                    if(fabs(x[j] - xp[j]) > delta)
                        delta = fabs(x[j] - xp[j]);
                }
                xp[i] = x[i];
            }
        }
        while(delta > eps);
 
        for(int i=0; i<n; i++)// вывод результата
        {
            cout << "  x(" << i << ") = " << x[i] << endl;
        }
 
        cout << " Для продолжения программы, введите 'y'" << endl;
        cout << " Для завершения введите любой другой символ..." << endl;
        int ch = getche();
        if((char)ch != 'y') break;
 
        for(int i=0; i<n; i++)// освобождение выдeленной памяти
        {
            delete [] a[i];
        }
        delete [] a;
        delete [] b;
        delete [] x;
        delete [] xp;
 
    } while(1);
 
 
    return 0;
}
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
19.04.2014, 19:38  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #15
Цитата Сообщение от aiwprton805 Посмотреть сообщение
Причина: библиотека math.h не нужна

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
  for(int i=0; i<n; i++)
        {
            double temp = 0.0;
            for(int j=0; j<n; j++)
            {
                if(j != i) temp += a[i][j];
            }
            if(a[i][i] < temp)
            {
                cout << " Необходимое условие сходимости не выполняется" << endl;
                break;
            }
        }
 
        for(int i=0; i<n; i++)
        {
            xp[i] = b[i]/a[i][i]; // начальное значение Х
        }
 
        do
        {
            for(int i=0; i<n; i++)
            {
                double temp = 0.0;
                for(int j=0; j<n; j++)
                {
                    if(j != i) temp += a[i][j]*xp[j];
                }
                x[i] = (b[i] - temp)/a[i][i];
                delta = fabs(x[0] - xp[0]);
                for(int j=1; j<n; j++)
                {
                    if(fabs(x[j] - xp[j]) > delta)
                        delta = fabs(x[j] - xp[j]);
                }
                xp[i] = x[i];
            }
        }
        while(delta > eps);
А можно коменты ? не совсем понимаю(
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
19.04.2014, 19:46  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #16
Объясни как работает проверка на условие сходимости???? Так то онлайн калькулятор решает такой ввод.
Миниатюры
Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов  
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
20.04.2014, 02:03     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #17
Цитата Сообщение от andreyananas Посмотреть сообщение
Объясни как работает проверка на условие сходимости????
ты же сам формулы писал
Цитата Сообщение от andreyananas Посмотреть сообщение
Необходимым (но не достаточным) условием сходимости метода есть выполнения условия:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\left|{a}_{ii} \right|>\left|\sum_{j=1,j\neq i}^{n} {a}_{ij} \right|
кстати забыл, что там надо по модулю брать. нужно так
C++
1
2
3
4
5
if(fabs(a[i][i]) < fabs(temp))
            {
                cout << " Необходимое условие сходимости не выполняется" << endl;
                break;
            }
проще говоря, условие заключается в том, чтобы матрица имела диагональное преобладание
Цитата Сообщение от andreyananas Посмотреть сообщение
онлайн калькулятор решает
онлайн калькулятор итерационным методом не решает
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
20.04.2014, 10:46  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #18
Цитата Сообщение от aiwprton805 Посмотреть сообщение
C++
1
if(j != i) temp += a[i][j]*xp[j];
Не понимаю, почему тут ПЛЮС????

Добавлено через 7 минут
А все понял почему плюс, чет туплю с утра)
newbie666
Заблокирован
20.04.2014, 10:53     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #19
ты в курсе что здесь ветка математики ? http://www.cyberforum.ru/mathematics/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 11:38     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов
Еще ссылки по теме:

C++ Решение нелинейных уравнений методом простой итерации
Уточнение корня методом простой итерации C++
C++ Решение уравнения методом простой итерации

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

Или воспользуйтесь поиском по форуму:
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
20.04.2014, 11:38  [ТС]     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов #20
Цитата Сообщение от aiwprton805 Посмотреть сообщение
кстати забыл, что там надо по модулю брать. нужно так
Все сделал как ты написал, как выбивало inf и -inf так и выбивает(((

Добавлено через 9 минут
Цитата Сообщение от aiwprton805 Посмотреть сообщение
C++
1
2
3
4
5
if(fabs(a[i][i]) < fabs(temp))
* * * * * * {
* * * * * * * * cout << " Необходимое условие сходимости не выполняется" << endl;
* * * * * * * * break;
* * * * * * }
Если это условие выполняется, то как пропустить все следующие вычисления и вернутся в начало программы?
(без GOTO)

Добавлено через 32 минуты
Цитата Сообщение от aiwprton805 Посмотреть сообщение
C++
1
2
3
4
5
if(fabs(a[i][i]) < fabs(temp))
* * * * * * {
* * * * * * * * cout << " Необходимое условие сходимости не выполняется" << endl;
* * * * * * * * break;
* * * * * * }
Приведите пример матрицы какую можно посчитать этим методом?
Yandex
Объявления
20.04.2014, 11:38     Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов
Ответ Создать тему
Опции темы

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