2

我正在从 MATLAB 调用 Python 函数,但遇到了错误:

clear all
% Initialize model
m = py.gekko.GEKKO();
% Initialize Variable
x = m.Var();
% Define Equation
m.Equation(x**2+2*x+1==0);
% Solve
m.solve();
% Extract values from Python lists using curly brackets
disp(['x: ' num2str(x.VALUE{1})]);
Error: File: test_gekko3.m Line: 7 Column: 14
Invalid use of operator.

当我将其更改为x^2(MATLAB版本的power)时,没有错误。如果我正在调用 Python 函数,为什么它要求我在该函数中使用 MATLAB 运算符?

4

1 回答 1

3

感谢 Cris Luengo 建议将参数作为字符串传递。这现在被解释为 Python 表达式,而不是 MATLAB 表达式。以下两种方法现在可以在 MATLAB 中使用。

方法一:Python表达式

clear all
% Initialize model
m = py.gekko.GEKKO();
% Initialize Variable
x = m.Var(pyargs('name','x'));
% Define Equation
m.Equation(pyargs('equation','x**2+2*x+1=0'));
% Solve
m.solve();
% Extract values from Python lists using curly brackets
disp(['x: ' num2str(x.VALUE{1})]);

在这种情况下,x需要为变量命名,因为否则变量的内部名称为v1并且x不允许在表达式中使用。第二种方法更简单。

方法二:MATLAB 表达式

clear all
% Initialize model
m = py.gekko.GEKKO();
% Initialize Variable
x = m.Var();
% Define Equation
m.Equation(x^2+2*x+1==0);
% Solve
m.solve();
% Extract values from Python lists using curly brackets
disp(['x: ' num2str(x.VALUE{1})]);

使用 MATLAB 表达式更紧凑,并且与其他 MATLAB 代码更一致。

于 2019-06-19T05:16:13.193 回答