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

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

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

Author24 — интернет-сервис помощи студентам
Привет всем. Вобщем возникла такая проблема. Написал программу (задание дальше) по матрице Якоби. Но вот незадача, что то оно не продвигается дальше второй итерации. Уже второй день сижу ищу ошибку и не могу увидеть, может найдутся добрые люди и помогут. Суть задания: написать программу матрица Якоби, воздействие прикладывается по периметру, воздействие постоянное (т.е. по периметру расставлены значения которые не меняются по всему ходу решения). Матрица прекращает свое "существование" по завершении кол-ва итераций или по достижению стационарного режима (изменения любого элемента меньше заранее заданного Е = 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2015, 17:22
Ответы с готовыми решениями:

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

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

Метод Якоби для простой итерации
Ребят, помогите пожалуйста написать код для того чтобы число итераций было такое количество пока---&gt; \left | x - x^{k} \right |\leq...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.11.2015, 17:22
Помогаю со студенческими работами здесь

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

Метод Якоби и метод простой итерации
Всем привет, изучаю методы итерации, но не могу понять в чем разница между методом простой итерации и методом Якоби?

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

Решение СЛАУ методом Якоби
Пытаюсь реализовать метод решения системы линейных уравнений методом Якоби. #include &quot;stdafx.h&quot; #include &quot;conio.h&quot;...

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru