Issues in using matlab in python

3 Ansichten (letzte 30 Tage)
Ajai Singh
Ajai Singh am 17 Aug. 2022
Beantwortet: Abhijeet am 1 Sep. 2023
Hello everyone ,
I am trying to solve an optimization problem where the input to the function to be optimized is a 12x1 vector and the output is a matrix of size 6x3.
I tried solving this using fsolve, root solvers from scipy.optimize
but got the following error:
fsolve: there is a mismatch between the input and output shape of the 'func' argument 'f'.Shape should be (12,) but it is (6,3).
but this problem can be easily solved in matlab using fsolve.
So i created a very simplified version of the original problem :
import matlab.engine
eng = matlab.engine.start_matlab()
import numpy as np
func = lambda x: x[0]**2 + x[1]**2 -25
eng.fsolve(func,eng.rand(2,1))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\reach\anaconda3\envs\MyEnv\lib\site-packages\matlab\engine\matlabengine.py", line 66, in __call__
out=_stdout, err=_stderr)
TypeError: unsupported Python data type: function
Any suggestion would be of great help.
Thank you.

Antworten (1)

Abhijeet
Abhijeet am 1 Sep. 2023
Hi Ajai,
I can understand that you are facing issue while using ‘MATLAB Engine API for Python’. The error you're encountering is due to the fact that you're passing a Python lambda function (func) to the eng.fsolve function, which expects a MATLAB function handle.
I would suggest to code ‘func’ function in MATLAB script and then use that script in python script.
For more information on using MATLAB script in python, refer to the following documentation: -https://www.mathworks.com/help/matlab/matlab_external/call-user-script-and-function-from-python.html

Kategorien

Mehr zu Call MATLAB from Python finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by