2017-01-18 15 views
0

У меня есть словарь параметров с неизвестным количеством этих параметров (поступает из другой функции), я зацикливал словарь, чтобы добавить его компоненты в модели lmfit следующим образом:Установить выражение параметра, содержащее независимую переменную в python lmfit

from lmfit import Parameters 
fit_params = Parameters() 
for params_name in dict.keys(): 
    current_param = dict[param_name] 
    fit_params.add(param_name) 

Я хотел бы добавить выражение каждому параметру с

fit_params[param_name].set(expr = 'some_expression_in_function_of_x') 

где х моя независимая переменная, при запуске программы у меня есть эта ошибка:

NameError 
Traceback (most recent call last): 
File "D:\Python\ThinPhy_File_By_File\test_code.py", line 52, in <module> 
<_ast.Module object at 0x00000145F661C4E0> 
       ^^^ 
name 'x' is not defined 
File "C:\Python36\lib\site-packages\lmfit\parameter.py", line 548, in __repr__ 
sval = repr(self._getval()) 
File "C:\Python36\lib\site-packages\lmfit\parameter.py", line 639, in _getval 
check_ast_errors(self._expr_eval) 
File "C:\Python36\lib\site-packages\lmfit\parameter.py", line 21, in check_ast_errors 
expr_eval.raise_exception(None) 
File "C:\Python36\lib\site-packages\lmfit\asteval.py", line 167, in raise_exception 
raise exc(self.error_msg) 
NameError: name 'x' is not defined in expr='<_ast.Module object at 0x00000145F661C4E0>' 

Есть ли способ определить выражение, содержащее независимую от модели переменную? или как его определить.

ответ

0

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

использовать ваш x в выражении, вы должны добавить свой x в таблицу символов, используемых для вычисления выражения, как и с

fit_params = Parameters() 
fit_params._asteval.symtable['x'] = x 

Но: Вы должны быть осторожны, делая это с ndarrays , Он может работать, но параметры в lmfit обычно предназначены для поплавков.