Mathematica называет NMinimize символами, а не числами? - PullRequest
7 голосов
/ 28 апреля 2011

Я заметил следующее поведение при использовании NMinimize в Mathematica. Первый вызов целевой функции - с именами переменных, а не с точками из пространства, как можно было бы ожидать.

Так, например, если моя целевая функция является модулем, этот модуль вызывается только один раз, вычисляется символически, а затем в последующих итерациях это символическое выражение оценивается с помощью точек из пространства переменных.

Такое поведение может значительно замедлить вычисления для большого выражения. Есть ли способ обойти это? Кто-нибудь еще испытывал это? Есть ли способ ускорить NMinimize тогда?

Пример:

dummy[x_] := Module[
  {},
  Print["x=", x ];
  4 x^4 - 4 x^2 + 1
  ]

In: NMinimize[dummy[x], x]
Out:x=x
{0., {x -> 0.707107}}

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

Вы пытались определить свою функцию для оценки только для числового ввода?

dummy[x_?NumericQ] := ...
2 голосов
/ 28 апреля 2011

Для некоторых фиктивных функций «точный числовой» вызов также может быть очень медленным.Пример нахождения FixedPoint[Sqrt,2.] быстрый, но FixedPoint[Sqrt,2] будет работать до тех пор, пока что-то не сломается!

Под "точным числом" я подразумеваю такие вещи, как Integers, Rationals и цифровую символику, например Sqrt[2]Cos[5], Pi, EulerGamma и т. Д.
, то есть вещи, которые будут возвращать числовое значение при воздействии N[].

В этом случае, вероятно, лучшеиспользовать

dummy[_?InexactNumberQ] := ....

или даже

dummy[_?MachineNumberQ] := ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...