Вызов Python из ошибки оператора MATLAB для x ** 2 - PullRequest
0 голосов
/ 18 июня 2019

Я вызываю функцию Python из 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})]);
Error: File: test_gekko3.m Line: 7 Column: 14
Invalid use of operator.

Когда я изменяю его на x^2 (версия питания MATLAB), ошибки не возникает. Если я вызываю функцию Python, зачем мне использовать в этой функции оператор MATLAB?

1 Ответ

1 голос
/ 19 июня 2019

Спасибо за предложение Криса Луенго передать аргумент в виде строки.Теперь это интерпретируется как выражение 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.

...