2011-01-06 2 views
0

Я пытаюсь написать функцию, что обнаружить это соотношение между переменным я попавшим в рабочем пространстве:Автоматического определения отношений между рабочей областью переменная через функцию

v1 - fft(v2) = 0 

Где v1, v2 являются переменными моим рабочим пространство ,

Иногда мне нужно знать, какие переменные имеют определенное числовое соотношение. Если мне тридцать, я не хочу искать это отношение «вручную», просто вводя предложение для каждой пары разных переменных.

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

ответ

5

Вы можете использовать who() для программного получения списка существующих в настоящее время переменных. Затем вы можете использовать eval(), чтобы получить их значения. В этот момент вы можете использовать довольно тривиальный вложенный цикл для итерации по всем возможным парам, ища эти отношения.

Примечание 1: Использование eval() для «нормального» программирования считается плохим стилем; он должен использоваться только для задач метапрограммирования, подобных этому.

Примечание 2: Если у вас есть N переменные в рабочем пространстве, есть N^2 упорядоченных пар. Это может занять некоторое время, чтобы перебрать, если N большой.

Примечание 3: Вы, по сути, ищете равенство между переменными, которые не могут быть особенно надежными в плавающей точке.

+0

О заметке 3, я это знаю, но я мог бы поместить что-то вроде: average (v1-fft (v2)) <= 10^(- 3). Конечно, выражение, о котором я упоминал, касается конкретной вещи, которую я сейчас делаю, но выражение может быть любым. Благодарю за ваш ответ. – Peterstone

Смежные вопросы