matlab导入python函数_python - 从Matlab调用Python函数,该函数使用先前在Python环境中定义的全局变量 - 堆栈内存溢出...

我试图从Matlab调用一个自定义函数,该函数引用以前在Python中定义的变量。

事件的顺序如下:

在Python中定义变量,包括一个函数(fminconMaster_py),该函数使用2个以'x'作为参数的匿名函数(fun_py,obj_py)

调用将fmincon算法用于优化问题的Matlab函数(optim_mat)-该优化问题具有在Matlab中定义的2个匿名函数(fun_mat,obj_mat)(目标和约束)

每当fmincon例程调用Matlab目标和约束匿名函数(fun_mat,obj_mat)时,它们都指向调用fminconMaster_py的matlab函数(fupdate),后者依次引用python匿名函数fun_py和obj_py

问题是,当发生3时,在Python中定义的fminconMaster_py无法识别fun_py和obj_py(“ Python错误:NameError:未定义名称xxx”)

见下面的代码

fminconMaster_py的Python代码(调用fun_py和obj_py)

def fminconMaster_py(x):

validNonLinearUpperConstraint = Cu != np.Inf

validNonLinearLowerConstraint = Cl != -np.Inf

nonLinearUpperConstraint = Cu[validNonLinearUpperConstraint]

nonLinearLowerConstraint = Cl[validNonLinearLowerConstraint]

cUpper = fun_py (x)[validNonLinearUpperConstraint] - nonLinearUpperConstraint

cLower = nonLinearLowerConstraint - fun_py (x)[validNonLinearLowerConstraint]

c= np.vstack(cUpper, cLower)

obj = obj_py(x)

return obj, c

用于fupdate的Matlab代码

pyfunction='pythonModule.fminconMaster_py'

function [J, cin, gJ, gcin] = fupdate(x)

eval(['output = py.', pyfunction, '(x);'])

...

end

当fupdate评估表达式时发生错误,因为某些变量未在fminconMaster_py(Cu,Cl,fun_py,obj_py)中定义。 看到下面粘贴的错误

Python Error: NameError: name 'Cu' is not defined

Error in optimize/obj (line 69)

[J, cin, gJ, gcin] = fupdate(x);

Error in fmincon (line 546)

initVals.f = feval(funfcn{3},X,varargin{:});

Error in optimize (line 34)

[xopt, fopt, exitflag, optoutput] = fmincon(@obj, x0, A, b, Aeq, beq, lb, ub, @con, opt);

Caused by:

Failure in initial objective function evaluation. FMINCON cannot continue.

我可以将Cu和Cl作为参数传递,因为它们是数组,但是fun_py和obj_py是我在Python中构建的复杂函数

关于如何解决此问题的任何想法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值