|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Решение системы линейных уравнений с трехмерным массивом
Наверняка такая задача кем-то решалась. Задача из допотопного учебника. Но в поиске: "система линейных уравнений" ничего нет. На поиск: "линейные уравнения" нашлась только программа "Калькулятор 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
|
|||
|
|||
Читпй для начала здесь:
https://yukhym.com/ru/sistemy-linejn...uravnenij.html вообще, там для "плоской" системы. Что делать с "кубической" не совсем понимаю. Решать "по слойно" может быть? |
#3
|
|||
|
|||
Уточнение: не просто решение СЛАУ, а эффективной для данной конкретной СЛАУ
Спасибо за ссылку, действительно, решений систем линейных алгебраических уравнений много и алгоритмов много, но в задании указано дать программу с наиболее эффективным (скорость вычислений и память) алгоритмом. Наиболее эффективным является гауссовский метод прогонки.
Но даются примеры для двумерных массивов. Как сделать с трехмерным. В каждой строке системы уравнений всего от 3 до 7 слагаемых. В основном коэффициенты равны единице, кроме одного слагаемого. То есть матрица коэффициентов в основном содержит нули. Видимо ленточную матрицу нужно развернуть в прямоугольную - это экономия памяти. В общем здесь свои специфики, поэтом и обратился к форумчанам, может быть кому-то встречалось что-то подобное. В прошлом столетии такая задача наверняка решалась в Turbo Pscal. Но не могу найти нужную книжку или методичку. |