2016-10-07 1 views
-1

Мне нужно решить некоторые жесткие обыкновенные дифференциальные уравнения, поэтому я сообщил себе о неявных методах, которые предлагает Odeint. Однако, когда я копирую и комментирую в Xcode пример в документации Odeint, http://headmyshoulder.github.io/odeint-v2/doc/boost_numeric_odeint/tutorial/stiff_systems.html (для полного примера см. Ссылку «stiff_system.cpp» в нижней части страницы), для неявного метода rosenbrock4 требуется около 40030 шагов для интеграции вместо 71, как утверждается в документации. Напротив, для метода runge_kutta_dopri5, который также применяется в примере для сравнения, я получаю ровно 1531 шагов, как в документации. Соответственно, неявный метод, конечно, для вычисления намного длиннее, чем метод runga_kutta, хотя в этом примере должно быть рассмотрено преимущество неявных методов по явным для этого особого случая жесткой проблемы. Теперь, если я скомпилирую код на другом компьютере с помощью компилятора g ++, я получаю почти точно результат, а именно 74 шага для неявного метода, который очень близок к 71, предложенному документацией, но все еще не точным.Невозможно использовать неявный решатель от OdeInt правильно в Xcode 7.3.1

Может ли кто-нибудь объяснить, почему неявный метод не работает должным образом с Xcode 7.3.1 и что можно сделать, чтобы использовать его на Xcode назначенным образом?

ответ

0

Итак, после некоторого разочаровывающего поиска, чтобы заставить odeint делать то, что он должен был делать, я узнал, что все работает отлично, когда вы используете версию ускорительной библиотеки версии 1.59 (содержащую odeint). Описанная проблема с методом rosenbrock4, по-видимому, существует только для более поздних версий 1.60 - 1.62. Таким образом, это определенно кажется проблемой с библиотекой, а не с xcode. Я сообщу эту проблему odeint. Тем временем, если вы столкнулись с одной и той же проблемой, вы можете просто загрузить boost 1.59, с которым все работает нормально.