我正在从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运算符?
答案 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代码更加一致。