Скорость вычислений pdetool в matlab
Feb. 2nd, 2010 01:18 amИнтересна зависимость скорости решения уравнений в частных производных от подробности сетки в matlab (пакет pdetool). Уравнения решаются численном методом конечных элементов, сетка треугольная.
Несмотря на то, что сетка генерируется средствами матлаба автоматически, есть метод заставить ее добавить в сетку узлы с нужными координатами – для этого нужно просто добавить еще одну область, граница которой будет проходить по нужным точкам, и это позволяет делать сетку неравномерной, повышая точность вычислений в той области, где это необходимо.
Также следует отметить, что уравнения решаются эффективно по скорости, и время вычислений может сильно упереться в объем доступной оперативной памяти, время вычислений примерно пропорционально росту количества треугольников. Стоит сказать, что время выполнения пересчета треугольной сетки в прямоугольную меняется отнюдь не линейно, и если оно все же необходимо, то это может сильно повлиять на выбор разбиения области.
Функция refinemesh переразбивает текущую сетку, деля каждый выбранный треугольник на четыре. Провел тестовые вычисления с разным объемом оперативной памяти на машине. Получились следующие результаты:
Количество вызовов refinemesh | Количество треугольников | Среднее время вычислений при 1gb RAM, c | Среднее время вычислений при 4gb RAM, c |
0 | 1274 | 0.35 | 0.36 |
1 | 5096 | 0.75 | 0.83 |
2 | 20384 | 3 | 3.5 |
3 | 81536 | 17 | 17.3 |
4 | 326144 | 800 | 100 |
Как и ожидалось, с изменением объема оперативной памяти скорость вычислений на грубых сильно не меняется, но дело принимает совсем другой оборот, когда система упирается в ограничения по оперативной памяти и с головой уходит в swap. Перед вычислениями стоит провести эксперимент, и выбрать максимально подробную сетку, при которой машина так делать еще не будет.
Оригинал: http://blog.dpetroff.ru/tech/pdetool_speed_matlab