2010-05-25 2 views
9

Какой язык вы хотели бы предложить для решения системы с:Lisp, OCaml или что для Runge Kutta?

  • дифференциальных уравнений первого порядка
  • комплексные переменные
  • N-размеры

с использованием 4-го порядка Рунге Кутта или тому подобное.

Скорость имеет значение много но будет жертвовать:

  • Элегантный (чистый и короткий) Код
  • Гибкость + масштабируемость

Я в основном между Лисп и OCaml, но любое другое предложение приветствуется.

Спасибо!

ответ

0

Fortran или C, возможно, захотите изучить NAG routines. C было бы более гибким и понятным, но Fortran обычно считается лучшим для числителей.

+0

Модель численного моделирования C, особенно с C99, на самом деле лучше, чем у Fortran. Fortran используется для такого рода вещей, потому что его легко написать, и люди знакомы с ним, а не потому, что он обеспечивает лучшую численную среду. –

+3

@ Stephen - пожалуйста, не давайте таких «пламенных войн», не создавая убедительных доказательств для его поддержки. – Rook

+3

@Idigas: Хорошо, я поддержу его. Один простой пример: Фортран выбирает «неправильный» знак нуля для результатов, когда вход лежит на разрезе ветвей нескольких сложных функций (особенно квадратного корня и журнала). См. Замечательную статью Кахана «Отрезок ветвей для сложных элементарных функций, или« Много шума из ничего знакового бита »на примерах того, где выбор Фортрана уступает стандарту C (который следует рекомендации Кахана). В более общем плане, Fortran позволяет много оптимизировать производительность, которые могут иметь отрицательные последствия для численной стабильности, которые по умолчанию запрещены. C. –

1

Сложно сказать, какой язык будет проще всего, есть , C++, C# и т. Д. Библиотеки для этого, так что, если это связано с личными предпочтениями. Я бы предположил, что Matlab - это наиболее индивидуальное и элегантное решение специально для этих задач, и у него много built in support for ODEs ... Lisp может быть на медленной стороне ... и я не могу говорить для OCaml.

+0

* Спасибо за предложение GSLL! * К сожалению, Matlab будет слишком медленным для моих целей. – Eelvex

2

RK4 - очень простой метод, и там много отличных реализаций, которые уже написаны. Используйте один из них и тратите свои усилия на другие аспекты проекта.

+0

На самом деле, я уже реализовал все в C, но теперь я хочу расширить проект, чтобы я взвешивал свои параметры ... – Eelvex

5

Вот реализация РК в Common Lisp:

http://github.com/bld/bld-ode/blob/master/rk.lisp

Хорошая вещь о Common Lisp является то, что вы можете начать с простым и элегантным кодом, а затем сделать критические биты работать быстро (например, путем включения от общего функционального до вычисления состояния, или путем объявления типов).

SBCL имеет превосходный компилятор с собственным кодом.

+0

Мне также нравятся функции родного bignum CL , –

+0

Не совместим ли CL не-IEEE 754? –

2

Я не знаком с Runge Kutta, но OCaml может обеспечить хорошую скорость и читаемость в целом, по крайней мере, если вы немного осторожны. Тогда у вас есть преимущество надежной системы статического типа для остальной части вашего приложения.

+1

Я не знаком с OCaml;), но Runge-Kutta (http://en.wikipedia.org/wiki/Runge_kutta) относится к классу алгоритмов для численных решений систем дифференциальных уравнений. Алгоритм Runge_Kutta 1-го порядка (RK1) также известен как метод Эйлера (http://en.wikipedia.org/wiki/Euler_method), но он стремится быстро потерять точность. Для многих применений алгоритм Рунге-Кутты 4-го порядка (RK4) обеспечивает хорошую точность и время. – andand

2

Помимо всего прочего, вы можете написать привязки ocaml к существующему решателю C runge-kutta.

1

Я бы предложил использовать python + numpy + scipy, общая математическая и числовая поддержка (супербери многомерные массивы) отлично. В любом случае это зависит от конкретных потребностей.

+0

Вы правы, питон тоже очень хорош для этого, но, к сожалению, он слишком медленный. – Eelvex

+0

Взгляд в PyDSTool может оказаться полезным. Несмотря на то, что это более общий инструмент, он генерирует решатели C из более ориентированной на математику спецификации ODE на лету. Добавлен бонус: разделы Пуанкаре (События;)). – mbudisic

Смежные вопросы