Date Редакция Категория sci Теги Cpp

Для этого нужны библиотеки "решателей" ОДУ и векторно-матричных операций. При этом мне хотелось разработать 1) максимально независимую от сторонних библиотек и 2) компактную программу. Быстродействие также весьма существенно, но здесь "будем посмотреть". Не хотелось бы из-за одной операции обращения матрицы пристёгивать целый BLAS или нечто подобное. Предпочтение отдавалось С++-библиотекам или библиотекам, имеющим С++-обёртки.

Из решателей нужны один-два хороших метода численного решения ДУ и необходимые для них сервисные классы. Поэтому возможностей любой, даже самой скромной библиотеки решателей хватает более чем с избытком. Каждая из подобных библиотек поддерживает свой набор векторно-матричных контейнеров.

Контейнеры:

  • GNU Scientific Library: gsl_vector, gsl_matrix
  • Numerical Recipes: NRvector, NRmatrix
  • Blitz++ arrays
  • MTL4 matrix types
  • Armadillo C++ Library
  • IT++: vec, mat
  • Seldon
  • boost::Ublas
  • QT:QVector, wxWidgets:wxArray, MFC:CArray
  • Thrust: device_vector, host_vector

дополнения к этому списку ­– см. %newwin%здесь.

Векторы и матрицы предполагаются фиксированных размеров, поэтому необходимости в функционале std::vector<> нет. В этом смысле мне вполне подходят классы из Numerical Recipes, которые надо дополнить недостающими операциями, в частности:

  • linspace()
  • срез массива
  • заполнение вектора/матрицы константой
  • конкатенация
  • векторное и скалярное произведения
  • транспонирование

а также классами проверки диапазонов и allocator'ом.

Интеграторы:

  • GNU Scientific Library
  • Numerical Recipes
  • Boost.Numeric.odeint

Разработчики последней утверждает, что он быстрее GSL и "понимает":

  • контейнеры STL (vector, list, map, tr1::array)
  • MTL4 matrix types, blitz++ arrays, Boost.Ublas matrix types
  • thrust::device_vector
  • ANY type you like

Попробовав её, убедился ­– для моих целей это избыточно. Достаточно взять необходимые степперы и сервисные классы из NR и переделать под свои нужды.



Комментарии

comments powered by Disqus