#c #xcode #odeint
#c #xcode #odeint
Вопрос:
Мне нужно решить некоторые жесткие обыкновенные дифференциальные уравнения, поэтому я узнал о неявных методах, которые предоставляет 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, предложенному документацией, но все же не точно.
Кто-нибудь может объяснить, почему неявный метод не работает должным образом с Xcode 7.3.1 и что можно сделать, чтобы использовать его в Xcode указанным способом?
Ответ №1:
Итак, после некоторого разочаровывающего поиска, чтобы заставить odeint делать то, что он должен делать, я обнаружил, что все работает нормально, когда вы используете версию 1.59 библиотеки boost (содержащую odeint). Описанная проблема с методом rosenbrock4, похоже, существует только для более поздних версий 1.60 — 1.62. Так что, похоже, это определенно проблема с библиотекой, а не с xcode. Я сообщу об этой проблеме odeint. В то же время, если вы столкнетесь с той же проблемой, вы можете просто загрузить boost 1.59, с которым все работает нормально.