Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.09.2022, 22:40
oblez-pascal oblez-pascal вне форума
Прохожий
 
Регистрация: 02.09.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Решение системы линейных уравнений с трехмерным массивом

Наверняка такая задача кем-то решалась. Задача из допотопного учебника. Но в поиске: "система линейных уравнений" ничего нет. На поиск: "линейные уравнения" нашлась только программа "Калькулятор OSA". Может что-то не так ищу? Если кто-то видел такой код или метод решения, подскажите, пожалуйста. Или как это запрограммировать в Паскале.

Итак. Требуется решить систему уравнений с трехмерным массивом:

Постановка задачи.
Дано: КУБ из 27 чисел 3 х 3 х 3
в общем виде каждое уравнение это: a[ i, j, k]= 1/7*( a[i-1, j, k] + a[i+1, j, k] + a[ i,j-1, k] + a[ i,j+1, k] + a[ i, j,k-1] + a[ i, j,k+1]+ t[ i , j , k] )
t[ i,j,k]= 333777 или любое другое постоянное число
i, j, k = 1,2,3

Конкретный пример приведен ниже:

Код:
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
t[  111]=333
 t[  333]=777
 
! слой по Z=1
 
a[  111]= 1/4*(                  a[  211]                  + a[  121]                  + a[  112]  + t[  111]) 
 
a[  121]= 1/4*(                  a[  221] + a[  111] + a[  131]                  + a[  122] )  
 
a[  131]= 1/3*(                + a[  231] + a[  121] +                                 + a[  132] )  
 
 
a[  211]= 1/4*( a[  111] + a[  311]                  + a[  221]                  + a[  212] )  
 
a[  221]= 1/5*( a[  121] + a[  321] + a[  211] + a[  231]                  + a[  222] )  
 
a[  231]= 1/4*( a[  131] + a[  331] + a[  221]                                   + a[  232] )  
 
 
a[  311]= 1/3*( a[  211]                                   + a[  321]                  + a[  312] )  
 
a[  321]= 1/4*( a[  221]                  + a[  311] + a[  331]                  + a[  322] )  
 
a[  331]= 1/2*( a[  231]                ] + a[  321]                                   + a[  332] )  
 
! слой по Z=2
 
a[  112]= 1/4*(                  a[  212]                  + a[  122] + a[  111] + a[  113] )  
 
a[  122]= 1/5*(                  a[  222] + a[  112] + a[  132] + a[  121] + a[  123] )  
 
a[  132]= 1/4*(                + a[  232] + a[  122]                  + a[  131] + a[  133] )  
 
                                                                                                         
a[  212]= 1/5*( a[  112] + a[  312]                  + a[  222] + a[  211] + a[  213] )  
 
a[  222]= 1/6*( a[  122] + a[  322] + a[  212] + a[  232] + a[  221] + a[  223] )  
 
a[  232]= 1/5*( a[  132] + a[  332] + a[  222]                  + a[  231] + a[  233] )  
 
                                                                                                         
a[  312]= 1/4*( a[  212]                                   + a[  322] + a[  311] + a[  313] )  
 
a[  322]= 1/5*( a[  222]                  + a[  312] + a[  332] + a[  321] + a[  323] )  
 
a[  332]= 1/4*( a[  232]                  + a[  322]                  + a[  331] + a[  333] )  
 
! слой по Z=3
 
a[  113]= 1/3*(                  a[  213]                  + a[  123] + a[  112])                     
 
a[  123]= 1/4*(                  a[  223] + a[  113] + a[  133] + a[  122])                     
 
a[  133]= 1/3*(                + a[  233] + a[  123]                  + a[  132])                     
 
                                                                                                         
a[  213]= 1/4*( a[  113] + a[  313]                  + a[  223] + a[  212])                     
 
a[  223]= 1/5*( a[  123] + a[  323] + a[  213] + a[  233] + a[  222])                     
 
a[  233]= 1/5*( a[  133] + a[  333] + a[  223] + a[  243] + a[  232])                     
 
                                                                                                         
a[  313]= 1/3*( a[  213]                                   + a[  323] + a[  312])                     
 
a[  323]= 1/4*( a[  223]                  + a[  313] + a[  333] + a[  322])                     
 
 a[  333]= 1/4*( a[  233]                  + a[  323]                  + a[  332] + t[  333])


Админ: Пользуемся тегами при оформлении!

Последний раз редактировалось Admin, 03.09.2022 в 00:23.
Ответить с цитированием
  #2  
Старый 02.09.2022, 22:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Читпй для начала здесь:
https://yukhym.com/ru/sistemy-linejn...uravnenij.html

вообще, там для "плоской" системы. Что делать с "кубической" не совсем понимаю. Решать "по слойно" может быть?
Ответить с цитированием
  #3  
Старый 03.09.2022, 20:42
oblez-pascal oblez-pascal вне форума
Прохожий
 
Регистрация: 02.09.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Уточнение: не просто решение СЛАУ, а эффективной для данной конкретной СЛАУ

Спасибо за ссылку, действительно, решений систем линейных алгебраических уравнений много и алгоритмов много, но в задании указано дать программу с наиболее эффективным (скорость вычислений и память) алгоритмом. Наиболее эффективным является гауссовский метод прогонки.
Но даются примеры для двумерных массивов. Как сделать с трехмерным. В каждой строке системы уравнений всего от 3 до 7 слагаемых. В основном коэффициенты равны единице, кроме одного слагаемого. То есть матрица коэффициентов в основном содержит нули. Видимо ленточную матрицу нужно развернуть в прямоугольную - это экономия памяти.
В общем здесь свои специфики, поэтом и обратился к форумчанам, может быть кому-то встречалось что-то подобное. В прошлом столетии такая задача наверняка решалась в Turbo Pscal. Но не могу найти нужную книжку или методичку.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025