从 x**2 的 MATLAB 运算符错误中调用 Python

Call Python from MATLAB Operator Error for x**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 运算符?

感谢 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 代码更一致。