Форум по 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

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

Код:
t[  1,  1,  1]=333
 t[  3,  3,  3]=777

! слой по Z=1

a[  1,  1,  1]= 1/4*(                  a[  2,  1,  1]                  + a[  1,  2,  1]                  + a[  1,  1,  2]  + t[  1,  1,  1])  

a[  1,  2,  1]= 1/4*(                  a[  2,  2,  1] + a[  1,  1,  1] + a[  1,  3,  1]                  + a[  1,  2,  2] )   

a[  1,  3,  1]= 1/3*(                + a[  2,  3,  1] + a[  1,  2,  1] +                                 + a[  1,  3,  2] )   


a[  2,  1,  1]= 1/4*( a[  1,  1,  1] + a[  3,  1,  1]                  + a[  2,  2,  1]                  + a[  2,  1,  2] )   

a[  2,  2,  1]= 1/5*( a[  1,  2,  1] + a[  3,  2,  1] + a[  2,  1,  1] + a[  2,  3,  1]                  + a[  2,  2,  2] )   

a[  2,  3,  1]= 1/4*( a[  1,  3,  1] + a[  3,  3,  1] + a[  2,  2,  1]                                   + a[  2,  3,  2] )   


a[  3,  1,  1]= 1/3*( a[  2,  1,  1]                                   + a[  3,  2,  1]                  + a[  3,  1,  2] )   

a[  3,  2,  1]= 1/4*( a[  2,  2,  1]                  + a[  3,  1,  1] + a[  3,  3,  1]                  + a[  3,  2,  2] )   

a[  3,  3,  1]= 1/2*( a[  2,  3,  1]                ] + a[  3,  2,  1]                                   + a[  3,  3,  2] )   

! слой по Z=2

a[  1,  1,  2]= 1/4*(                  a[  2,  1,  2]                  + a[  1,  2,  2] + a[  1,  1,  1] + a[  1,  1,  3] )   

a[  1,  2,  2]= 1/5*(                  a[  2,  2,  2] + a[  1,  1,  2] + a[  1,  3,  2] + a[  1,  2,  1] + a[  1,  2,  3] )   

a[  1,  3,  2]= 1/4*(                + a[  2,  3,  2] + a[  1,  2,  2]                  + a[  1,  3,  1] + a[  1,  3,  3] )   

                                                                                                        
a[  2,  1,  2]= 1/5*( a[  1,  1,  2] + a[  3,  1,  2]                  + a[  2,  2,  2] + a[  2,  1,  1] + a[  2,  1,  3] )   

a[  2,  2,  2]= 1/6*( a[  1,  2,  2] + a[  3,  2,  2] + a[  2,  1,  2] + a[  2,  3,  2] + a[  2,  2,  1] + a[  2,  2,  3] )   

a[  2,  3,  2]= 1/5*( a[  1,  3,  2] + a[  3,  3,  2] + a[  2,  2,  2]                  + a[  2,  3,  1] + a[  2,  3,  3] )   

                                                                                                        
a[  3,  1,  2]= 1/4*( a[  2,  1,  2]                                   + a[  3,  2,  2] + a[  3,  1,  1] + a[  3,  1,  3] )   

a[  3,  2,  2]= 1/5*( a[  2,  2,  2]                  + a[  3,  1,  2] + a[  3,  3,  2] + a[  3,  2,  1] + a[  3,  2,  3] )   

a[  3,  3,  2]= 1/4*( a[  2,  3,  2]                  + a[  3,  2,  2]                  + a[  3,  3,  1] + a[  3,  3,  3] )   

! слой по Z=3

a[  1,  1,  3]= 1/3*(                  a[  2,  1,  3]                  + a[  1,  2,  3] + a[  1,  1,  2])                      

a[  1,  2,  3]= 1/4*(                  a[  2,  2,  3] + a[  1,  1,  3] + a[  1,  3,  3] + a[  1,  2,  2])                      

a[  1,  3,  3]= 1/3*(                + a[  2,  3,  3] + a[  1,  2,  3]                  + a[  1,  3,  2])                      

                                                                                                        
a[  2,  1,  3]= 1/4*( a[  1,  1,  3] + a[  3,  1,  3]                  + a[  2,  2,  3] + a[  2,  1,  2])                      

a[  2,  2,  3]= 1/5*( a[  1,  2,  3] + a[  3,  2,  3] + a[  2,  1,  3] + a[  2,  3,  3] + a[  2,  2,  2])                      

a[  2,  3,  3]= 1/5*( a[  1,  3,  3] + a[  3,  3,  3] + a[  2,  2,  3] + a[  2,  4,  3] + a[  2,  3,  2])                      

                                                                                                        
a[  3,  1,  3]= 1/3*( a[  2,  1,  3]                                   + a[  3,  2,  3] + a[  3,  1,  2])                      

a[  3,  2,  3]= 1/4*( a[  2,  2,  3]                  + a[  3,  1,  3] + a[  3,  3,  3] + a[  3,  2,  2])                      

 a[  3,  3,  3]= 1/4*( a[  2,  3,  3]                  + a[  3,  2,  3]                  + a[  3,  3,  2] + t[  3,  3,  3])


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

Последний раз редактировалось Admin, 03.09.2022 в 00:23.
Ответить с цитированием
  #2  
Старый 02.09.2022, 22:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,052
Версия 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, время: 09:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter