C / C ++ реализация функции Matlab fzero - PullRequest
0 голосов
/ 08 марта 2012

Я работаю над преобразованием функции matlab gamfit в код target-c.В конце gamfit он вызывает другую функцию, называемую fzero: http://www.mathworks.com/help/techdoc/ref/fzero.html

Даже после прочтения документации по matlab у меня возникают проблемы с пониманием того, как эта функция работает, когда x0 является вектором, как это происходит в моем случае.

Вот что говорит Matlab документация на эту тему: «Если x0 - вектор длины два, fzero предполагает, что x0 - это интервал, в котором знак веселья (x0 (1)) отличается от знака веселья(x0 (2)). Если это не так, возникает ошибка. Вызов fzero с таким интервалом гарантирует, что fzero вернет значение около точки, где fun меняет знак. "

Я надеялся, что, возможно, кто-тоуже реализовал эту функцию в C / C ++ / target-c, чтобы упростить процесс.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

В научной библиотеке GNU реализован ряд методов поиска корней многочленов и других функций.Возможно, вы могли бы адаптировать часть их кода или сэкономить время, просто вызвав необходимые функции.

Попутно: вместо того, чтобы спрашивать: «Как реализовать функцию Matlab X в Objective-C?»как вы уже делали это пару раз, вы могли бы добиться большего прогресса и получить лучшие ответы, если бы спросили «как реализовать метод Y в Objective-C?».Я подозреваю, что в некоторых случаях вам не потребуется полная универсальность функций Matlab для получения необходимой вам функциональности, поэтому Y может быть не всем X.

Рабский построчный перевод из кода Matlab(даже если у вас есть доступ к нему) вряд ли приведет вас к хорошему коду Objective-C;например, большая часть кода Matlab, который доступен, показывает небольшие признаки объектно-ориентированной.Лучший подход - понять, что делает код Matlab, и реализовать это в Objective-C.

0 голосов
/ 08 марта 2012

GNU Octave - это программное обеспечение с открытым исходным кодом, похожее на MATLAB. Он имеет реализацию многих функций MATLAB. Вы можете найти fzero внутри - ищите scripts/optimization/fzero.m в исходном дистрибутиве. Обратите внимание, что Octave лицензируется по лицензии GPL, поэтому это может повлиять на ваше решение.

Согласно комментариям fzero считается комбинацией Метода деления пополам с Секундным методом .

Еще одним хорошим началом будет серия книг Numercial Recipes (выберите самую последнюю версию C ++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...