从MATLAB Operator Error x ** 2调用Python

时间:2019-06-17 23:12:57

标签: python matlab gekko

我正在从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版本的电源)时,没有错误。如果要调用Python函数,为什么要求在该函数中使用MATLAB运算符?

1 个答案:

答案 0 :(得分:1)

感谢克里斯·伦戈(Cris Luengo)的建议,将参数作为字符串传递。现在将其解释为Python表达式,而不是MATLAB表达式。现在,以下两种方法可以在MATLAB中使用。

方法1: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。第二种方法更简单。

方法2: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代码更加一致。