Вычисление пересечения функции с определенным интервалом с помощью scipy - PullRequest
0 голосов
/ 04 июля 2018

Я застрял, пытаясь получить функции, которые существуют в scipy (или sympy) для следующей задачи:

Предположим, нам дана следующая функция:

f(A,B,C) = k1-A*sin(B*k2-C)

для каждой из осей A, B, C пространства у нас есть определенный интервал, такой как [a_lb, a_ub], [b_lb, b_ub], [c_lb, c_ub], [d_lb, d_ub].

Какие функции scipy могут быть использованы для вычисления, если пространство, охватываемое границами, пересекается данной функцией? Я думал, например, как вычисление матрицы Гессена.

Спасибо за подсказки С наилучшими пожеланиями

1 Ответ

0 голосов
/ 05 июля 2018

Если я правильно понимаю, то, что вы ищете, - это ответ на вопрос, имеет ли значение f(A,B,C), ограниченное в домене [a_l,a_u]x[b_l,b_u]x[c_l,c_u], значением в пределах [d_l,d_u]. Вы можете попробовать использовать scipy.optimize.minimize для этого.

Если вы запускаете scipy.optimize.minimize на f с границами [a_l,a_u]x[b_l,b_u]x[c_l,c_u], вы должны получить минимальное значение f в домене. Аналогично, минимизация -f даст вам максимальное значение f в домене. f пересекает заданную границу тогда и только тогда, когда интервал [fmin, fmax] пересекает интервал [d_l,d_u].

Обратите внимание, что scipy.optimize.minimize является нелинейной оптимизацией и поэтому требует первоначального предположения. Средняя точка доменного блока является естественным выбором, но, поскольку нелинейная оптимизация может встретиться с локальным минимумом (или не сходиться), вы можете попробовать несколько других начальных предположений. У scipy.optimize.minimize есть много (необязательных) параметров, поэтому я рекомендую вам прочитать документацию и поиграть с ними, чтобы настроить использование в соответствии с вашими потребностями.

...