Просто хотел проверить, безопасно ли делать следующее:
Допустим, у меня есть функция 'f (x)', которая также зависит от других параметров. Например, функция a*Exp[ (x-x0)^2/(2*std^2)]
Из пользовательского интерфейса я читаю введенные пользователем значения (через ползунки) для параметров a
и x0
и std
, затем я делаю чисто функциональную переменную
f=Function[{x,a,x0,std}, a*Exp[ (x-x0)^2/(2*std^2)]
Выше сделано в том же контексте (в области управления Манипулировать), когда я читаю пользовательский ввод, затем, когда пользователь нажимает кнопку для запуска программы, я вызываю другую функцию более низкого уровня для обработки этого ввода, как это
foo[f,a,x0,std]
затем внутри foo он оценивает f
по некоторым точкам сетки (x1, x2 и т. Д.), Делая такие вызовы
foo[f_,a_,x0,std_]:=Module[{x1,x2...},
.....
f[x1,a,x0,std];
f[x2,a,x0,std];
f[x3,a,x0,std]; etc...
....
]
Обратите внимание, что внутри foo используется только параметр x
для чистой функции, остальные просто отправляются в путь.
Но поскольку они не используются внутри foo, я думаю не передавать все остальные параметры a, x0, std.
Итак, я изменил чистую функцию, чтобы она стала
f=Function[{x}, a*Exp[ (x-x0)^2/(2*std^2)];
затем назвал foo вот так
foo[f]
тогда внутри foo, я делаю
foo[f_]:=Module[{},
.....
f[x1];
f[x2];
f[x3]; etc...
....
]
Я проверил это, и оно работает. (Сначала я подумал, что поскольку в модуле foo контекст отличается, мне пришлось передать a,x0,std
вместе с f. Но мне не нужно было. Кажется, значения a
, x0
и stdx
внутри чистого функция сохраняется как глобальные и передается в чистом теле функции.
Мой вопрос: вы видите какие-либо проблемы со вторым подходом выше? что-то я пропускаю? в тестах, которые я сделал, пока все отлично работает. И это сделало бы это намного проще, поскольку теперь мне нужно только передать саму чистую функцию, а не передавать все остальные параметры, используемые для построения, поскольку они не нужны внутри foo.
Другими словами, я пытаюсь выбрать между этими двумя настройками:

Просто подумал проверить.
спасибо