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

Матрица Якоби, решение не продвигается дальше второй итерации

30.11.2015, 17:22. Просмотров 492. Ответов 0
Метки нет (Все метки)

Привет всем. Вобщем возникла такая проблема. Написал программу (задание дальше) по матрице Якоби. Но вот незадача, что то оно не продвигается дальше второй итерации. Уже второй день сижу ищу ошибку и не могу увидеть, может найдутся добрые люди и помогут. Суть задания: написать программу матрица Якоби, воздействие прикладывается по периметру, воздействие постоянное (т.е. по периметру расставлены значения которые не меняются по всему ходу решения). Матрица прекращает свое "существование" по завершении кол-ва итераций или по достижению стационарного режима (изменения любого элемента меньше заранее заданного Е = 0,01).
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
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include <stdlib.h>
#include <fstream>
#include <iomanip>
#include <ctime>
#include <omp.h>
 
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Russian");
    omp_set_num_threads(100);
    int n, iteration, m = 0;
    fstream f1;
    double e = 0;
    bool p = 0;
    cout << "Размер пространства ";
    cin >> n;
    cout << "\nКол-во итераций ";
    cin >> iteration;
    f1.open("C:\\123\\matrix.txt", ios::in);
    /*f1.open("C:\\123\\matrix.txt", ios::out);
    for (int i = 0; i < 40000; i++)
    {
    m = rand() % 1000 + 1;
    f1 << m << " ";
    }*/
    double **array, **array2;
    array = new double *[n];
    array2 = new double *[n];
    for (int i = 0; i < n; i++)
    {
        array[i] = new double[n];
        array2[i] = new double[n];
    }
    for (int i = 0; i < n; i++) //Заполнение массива элементами по периметру
    {
        for (int j = 0; j < n; j++)
        {
            if ((i == 0) || (i == (n - 1)) || (j == 0) || (j == (n - 1)))
            {
                f1 >> m;
                array[i][j] = m;
            }
            else
                array[i][j] = 0;
            cout << array[i][j] << "\t";
        }
        cout << "\n";
    }
    cout << "\n";
 
    for (int k = 0; k < iteration; k++) // Основной цикл, все что происходит - происходит в нем
    {
        //#pragma omp parallel for 
        for (int i = 0; i < n; i++) //Циклы всех расчетов
        {
            for (int j = 0; j < n; j++)
            {
                if ((i == 0) || (i == (n - 1)) || (j == 0) || (j == (n - 1)))
                    array2[i][j] = array[i][j];
                else
                    array2[i][j] = (array[i - 1][j] + array[i + 1][j] + array[i][j - 1] + array[i][j + 1]) / 4;
                e = array2 - array;
                if ((e < 0.01) && (k != 0))
                    p = 1;
            }
        }
 
        for (int i = 0; i < n; i++) //Вывод в консоль
        {
            for (int j = 0; j < n; j++)
                cout << array2[i][j] << "\t";
            cout << "\n";
        }
        memcpy(array, array2, n*n);
        cout << "\n";
        if ((k != 0) && (p = 1))
            break;
    }
    system("pause");
}
P.s. Посчитал, что для размерности 5 программа должна завершиться на 25-ой итерации. Подобной матрицой
10,0000 95,0000 62,0000 33,0000 52,0000
48,0000 65,9148 57,5238 53,3970 86,0000
93,0000 63,1488 48,7939 37,0774 4,0000
15,0000 44,8970 37,4524 42,1291 38,0000
83,0000 64,0000 14,0000 56,0000 53,0000
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2015, 17:22
Ответы с готовыми решениями:

Метод итерации( Якоби)
Доброго времени суток!) может у кого есть исходник или поможет решит поставленную задачу. Нужно...

Решение СЛАУ методом простой итерации(Метод Якоби)
Собрал я вот такую программку из нескольких подобных исходников на эту тему.Хм...получилось,как ни...

Метод Якоби для простой итерации
Ребят, помогите пожалуйста написать код для того чтобы число итераций было такое количество...

Расчёт токов разветвленной цепи при помощи законов Кирхгофа и метода Якоби (простой итерации)
Нужно составить при использовании метода итерации программу, первый скрин - задание, второй скрин -...

Решение СЛАУ методом Якоби
На x:=Yacoby(A, b, eps) выдает такой текст: &quot;Недопустимый индекс массива. Индекс должен быть целым...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 17:22

Решение СЛАУ методом Якоби
Решить СЛАУ методом Якоби. Вывести значения решения, график зависимости нормы невязки от номера...

Решение СЛАУ методом Якоби
Нужно реализовать метод Якоби. Помогите найти ошибку в цикле (while), проблема с переходом на...

Решение системы методом Якоби
Почему обнуляются результаты?


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

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

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