Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.16;
Скачать: CL | DM;

Вниз

Delphi & FEM. Ктоньть пытался воплотить МКЭ?   Найти похожие ветки 

 
RealRascal ©   (2003-11-15 18:09) [0]

Кто-нибудь пытался воплотить Finito Elemento ака метод конечных элементов в Delphi? Что получилось? Какие полезные ресурсы могете подсказать? Поделитесь опытом...


 
RealRascal ©   (2003-11-15 18:17) [1]

Вот где, например, взять процедурку для перемножения матриц размером 100 000 х 100 000 и более? А? Ну вот где?


 
cyborg ©   (2003-11-15 18:18) [2]

Может попробовать написать?


 
MBo ©   (2003-11-15 18:19) [3]

:)
~10^13 арифм. операций


 
RealRascal ©   (2003-11-15 18:26) [4]

О да! Самое простое решение - написать самому 8-)
Я так полагаю, эти задачи решались не один десяток раз, и где то наверно лежат готовые сырцы... О местонахождении, собственно говоря, последних и идет речь. Может линки знаете? Хоть чтонибудь по этой теме...


 
MBo ©   (2003-11-15 18:28) [5]

перемножение матриц за O(N^3) пишется за 1 минуту.
За O(N^2.7) - есть в Numerical Recipes


 
cyborg ©   (2003-11-15 18:28) [6]

Ты бы ещё готовые процедуры по сложению 2+2 поискал бы, может кто даст, вдруг кто нибудь уже написал? ;)


 
RealRascal ©   (2003-11-15 18:32) [7]


> O(N^3)

Немного не понял обозы


 
MBo ©   (2003-11-15 18:37) [8]

>обозы
?????

O(N^3) - сложность алгоритма (количество элементарных операций) пропорциональна кубу размерности входных данных.


 
Думкин ©   (2003-11-15 18:58) [9]

В подобной матрице 10 000 000 000 элементов. Это ж как с ней работать, на тех системах под которыми работаем. А с тремя?


 
RealRascal ©   (2003-11-15 19:12) [10]

У этих матриц, как правило, есть особенность - нулей дофига(чаще более 80%). В расчетных пакетах типа Ansys они навярняка целиком не хранятся. Даже если целиком хранить, есть алгоритмы блочного перемножения. В этом то и сабж, где их взять...


 
Думкин ©   (2003-11-15 19:16) [11]

Не передергивай, вторым вопросом ты спросил про матрицы, а не про те что содержат 80% нулей.

> [1] RealRascal © (15.11.03 18:17)
> Вот где, например, взять процедурку для перемножения матриц
> размером 100 000 х 100 000 и более? А? Ну вот где?


 
RealRascal ©   (2003-11-15 19:22) [12]

> Не передергивай, вторым вопросом ты спросил про матрицы


Ок, согласен. Ну а вообще зачем нужны такие огромные матрицы, кроме как в FEM? ИМХО, только в FEM и нужны...


 
cyborg ©   (2003-11-15 19:24) [13]

Такая матрица на винте даже не поместится, а ты процедуру хочешь готовую найти ;).


 
cyborg ©   (2003-11-15 19:25) [14]

Пардон, ошибся, поместится, но всё равно большая ;)


 
RealRascal ©   (2003-11-15 19:32) [15]

В современных расчетах (автомобилей, самолетов,шатлов там всяких) разрешающая система уравнений может достигать несколько терабайт. В ansyse, например, ограничение - 16тб(при условии, что стоит в унихе)


 
Думкин ©   (2003-11-15 19:45) [16]


> [15] RealRascal © (15.11.03 19:32)

Ты пользуешься суперкомпьютерами?


 
RealRascal ©   (2003-11-15 19:53) [17]

Да нет, приходилось как то курсовую в ансисе просчитывать. Хелпов начитался...


 
Nikolay M. ©   (2003-11-15 20:21) [18]

Ну, если много нулей, самое первое, что приходит в голову - хранить только ненулевые элементы (хотя понятие ненулевого элемента тоже будет зависеть от ряда причин - каким образом получена эта матрица, какая нужна точность и тд). В итоге получаем, первую строку первой матрицы и первый столбец второй матрицы в примерно след. виде:

1 4 9 100 115 200 .... - номер элемента строки
3 6 7 -19 -98 374 .... - значение элемента первой строки

1 100 307 790 1946 ... - номер элемента столбца
9 -77 948 618 -555 ... - номер элемента первого столбца

создаем два бегунка по номерам строки и столбца: i и j
на первом этапе i = j = 1 - значит все ок, перемножаем элементы 3 и 9,
переходим к след. элементам: i = 4, j = 293 - i меньше j, значит перемножать нечего, увеличиваем меньший индекс, т.е. i: i = 9,
опять i<j, продолжаем увеличивать i: i = j = 100, найдены ненулевые элементы, прибавляем имеющемуся результату (3*9=27) произведение (-19)*(-77) и т.д. - смысл, думаю, понятен.
Тоже самое повторяем над остальными строками и столбцами.


 
Nikolay M. ©   (2003-11-15 20:22) [19]


> 9 -77 948 618 -555 ... - номер элемента первого столбца

Пардон, конечно, не номер, а значение.


 
Nikolay M. ©   (2003-11-15 20:24) [20]


> j = 293

еще поправка: не j = 293, а j = 100

:)


 
RealRascal ©   (2003-11-15 20:27) [21]

На данный момент существет много способов хранить распредененные матрицы. Один из них - с помощию графов(это такие связные структуры, с первого взгляда напоминают сетку). А вот я тоже подумал, почему бы не хранить только ненулевые элементы? И нигде я этого не встречал...


 
Nikolay M. ©   (2003-11-15 20:38) [22]

> [21]
Спасибо, я знаю, что такое граф.


> я тоже подумал, почему бы не хранить только ненулевые элементы

Действительно, per que бы собссно и nes pa?
"Если нет другой рыбки, почему бы не взять другую воду?" (с)

Я тебе привел самый простой способ, чтобы было меньше возни с программной реализацией.


 
RealRascal ©   (2003-11-15 20:46) [23]

Один коллега как раз в данный момент этим и занимается. Именно так и делает - хранит ненулевые элементы. И, кажется уже их как-то перемножает, я на 99% уверен, что так как ты сейчас описал. Он собсно, и попросил эту ветку создать, может, говорит, народ чего полезного подкинет...Есть какая-нибудь еще инфа на этот сабжект?


 
wicked ©   (2003-11-15 20:50) [24]

в базе данных например... и множить с помощью ХП... ;)


 
RealRascal ©   (2003-11-15 20:53) [25]


> и множить с помощью ХП... ;)

Not understand. Please rephrase your idea different. Halt(0);


 
wicked ©   (2003-11-15 20:58) [26]


> ХП

хранимых процедур... шоб всё на сервере крутилось...


 
RealRascal ©   (2003-11-15 21:05) [27]

Да, действительно, был такой вариант, но обычный
MatrixA:file of Elem;
где
elem=type
i,j:integer;
Value:extended;
end;
оказался намного проворнее.


 
Nikolay M. ©   (2003-11-15 21:07) [28]


> wicked ©

Был у меня знакомый, который на все вопросы о том, как сделать ту или иную вещь под Windows (особенно если это касалось АПИ), отвечал, что "это делается на сях на объектах".
В вопросе пока нигде не возникли БД, а также нет никакой гарантии, что 10 юзеров, выполняющих перемножение на сервере сделают это быстрее, чем если бы каждый производил вычисления на клиенте - все зависит от решаемой задачи. Поэтому "делай на ХП" напоминает "слышал звон, ...".


> Один коллега как раз в данный момент этим и занимается

А спросить коллегу стесняемся? Будем каждый в своей песочнице играть?


 
RealRascal ©   (2003-11-15 21:11) [29]


> А спросить коллегу стесняемся? Будем каждый в своей песочнице
> играть?

см [23], предложение №4.


 
Nikolay M. ©   (2003-11-15 21:26) [30]


> [29]

Сори, убедил :)

Скажи хоть в двух словах, что за задача, может какие мысли возникнут?


 
RealRascal ©   (2003-11-15 21:40) [31]

Задача - решить задачу о прочности(и вязкоупругости, но это потом) самым популярным в мире методом - МЕТОДОМ КОНЕЧНЫХ ЭЛЕМЕНТОВ. Вся фишка этого метода в решении КОНСКОГО числа линейных уравнений, которые решаются чаще всего матричнымы методами. При таком решении задача сводится к выполнению операций над матрицами. Если элементов много, то и матрицы получаются просто громадные.
Свою прогу пишем. Создали ветку, чтобы узнать, как это делали другие. Вот и все. Все просто и банально до безумия...


 
Nikolay M. ©   (2003-11-15 21:47) [32]


> фишка этого метода в решении КОНСКОГО числа линейных уравнений, которые решаются чаще всего матричнымы методами. При таком решении задача сводится к выполнению операций над матрицами.

А к чему тогда тут перемножение, а не простое приведение матрицы к верхнему треугольному виду? Кол-во ур-ний = кол-ву неизвестных? Если да, то приводим матрицу элементарными операциями к верхнему треугольному виду и получаем почти готовое решение.
?


 
RealRascal ©   (2003-11-15 22:00) [33]

>А к чему тогда тут перемножение, а не простое приведение >матрицы к верхнему треугольному виду?

Попал в точку. Только для того, чтобы получить эти матрицы, которые приводятся к треугольному виду, нужно провести несколько преобразований... которые и будут заключатся... Да! В уножении одних матриц на другие!...


 
Nikolay M. ©   (2003-11-15 22:16) [34]

Понятно.
Если задача разовая и для себя, можно оставить компьютер на денек - пусть считает.
Можно все-таки попробовать прикрутить какой-нибудь сервер БД, но не факт, что будет быстрее. + для скорости всегда можно разделять вычисления на потоки - операции-то однотипные: сам Билл Гейтс велел десяток потоков ввести.
А вообще, см. [18]-[20], сделай как проще и не мучайся. За оптимизацию потом еще денег потребуете :)


 
RealRascal ©   (2003-11-15 22:24) [35]

Уже почти сделали, просто хотелось узнать мнение других. Насчет потоков подумаем, попробуем. Спасибо.


 
RealRascal ©   (2003-11-23 11:34) [36]

Сам нашел...
http://www.delphikingdom.ru/treasury/hmatrix.htm
Вот что мне от Вас надо было...


 
Nikolay M. ©   (2003-11-23 13:03) [37]

А ты комментарий к этой статье видел? :)



Страницы: 1 вся ветка

Текущий архив: 2003.12.16;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.018 c
14-52377
Думкин
2003-11-24 05:41
2003.12.16
С днем рождения! 24 ноября.


1-52244
Не знающий
2003-12-04 14:19
2003.12.16
Как скопировать файл?


1-52162
Коля
2003-12-03 16:04
2003.12.16
TImageList -> TSpeedButton


1-52163
delphiman
2003-12-03 17:19
2003.12.16
ADO


1-52251
Maxximusss
2003-12-04 14:42
2003.12.16
Преобразование из string в Currency(Real) с сохранением знаков