Как решить, является ли анонимный оператор пользователя линейным - PullRequest
0 голосов
/ 02 ноября 2010

Если я получаю анонимный оператор от пользователя, я бы хотел (очень быстро) проверить, является ли оператор линейным.Есть ли стандартный способ сделать это?У меня нет возможности делать символические операторы или анализировать функцию.Является ли единственный способ попробовать некоторые случайные функции (какие случайные функции я выбираю) и посмотреть, удовлетворяют ли они линейности ??

Заранее спасибо.

Контекст:

Пользователь предоставляет оператор черного ящика, который является функцией, которая передает функции в функции.

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

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Нет, не без очистки всего пространства параметров.Представьте себе следующее:

@(f) @(x) f(x) + (x == 1e6)

Этот оператор нелинейный, но нет никакого способа узнать, что, если вам не доведется проверить на x == 1e6.

ОБНОВЛЕНИЕ

Как и другие предположили, может быть «достаточно хорошо» определить интересующую область и проверять линейность с периодическими интервалами по всей области.Это может дать вам ложные срабатывания (т. Е. Предположить, что оператор является линейным, хотя на самом деле он нелинейный), но никогда не дает ложных отрицаний.

0 голосов
/ 28 ноября 2010

Это информация, которую должен предоставить пользователь.Добавьте параметр linear true / false, по умолчанию false (я предполагаю, что код для нелинейного будет работать и для линейного, просто занимает больше времени).

Проблема со случайным тестированием заключается в том, чтоВы классифицируете нелинейную функцию как линейную рано или поздно, и тогда у пользователя возникнет проблема, потому что ваша функция непредсказуемо дает неверные результаты (в зависимости от того, какие точки вы выбираете случайно), это может быть достаточно близко к правильным результатам, то есть люди могут не заметить в течение loooong time -> это рецепт для катастрофы.

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

...