К основному контенту

Решение трёхдиагональной системы с помощью Octave и LAPACK

Матпакеты облегчают вычисления в силу своей простоты: они содержат множество полезных математических функций, которые могут заменить сразу несколько библиотек языков программирования.
Однако не всегда матпакет достаточно производителен. Здесь рассмотрен пример решения трёхдиагональной системы в пакете Octave и с использованием библиотеки LAPACK (язык C++). Отметим, что пакет Octave для решения трёхдиагональных систем использует ту же библиотеку LAPACK, но построение матрицы работает слишком долго.

Использовались пакет Octave и среда CodeBlocks в ОС Windows.
Исходный код программ можно посмотреть здесь.
В качестве примера взят фрагмент программы для решения краевой задачи для модели распространения плоского адиабатического пламени.
При помощи функции clock() в Octave и C++ измерялись время построения матрицы и время решения системы.
При однократном построении и решении системы посчитанное время программы на С++ оказалось равным 0. Что касается Octave, то время решения системы также равно 0, а время построения матрицы равно порядка 0.24 секунды.
При 20-кратном решении системы общее время вычислений в пакете Octave равно порядка 4.5 секунд, а на C++ время равно 0.  При 100-кратном решении системы в C++ время составляет 0.031 секунд.
Таким образом, непосредственное использование библиотеки LAPACK в C++ даёт намного лучшую производительность за счёт более быстрого построения матрицы (быстрее идёт работа с памятью).

Комментарии