Текущий архив: 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