在PYTHON中运行MATLAB时出现的问题

lrpiutwd  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(388)

我正在尝试解决一个优化问题,其中要优化的函数的输入是12x1向量,输出是大小为6x3的矩阵。我尝试使用scipy.Optimize中的fsolve,根解算器来解决这个问题,但得到了以下错误:

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).

但在MatLab中使用Fsolve可以很容易地解决这个问题。因此,我创建了原始问题的一个非常简化的版本:

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
nkcskrwz

nkcskrwz1#

从matlab到python的数据类型Map可能非常麻烦,而且似乎lambda函数没有被matlab引擎正确识别为函数句柄。官方文档没有提供有关可调用转换的有用信息,因为只有these standard data types are natively supported for passing.
如果定义一个适当的函数(使用def)没有帮助,我建议使用您的matlab代码(可能使用标准数据类型参数)编写一个.m文件,并按照here的说明从python中运行它。

相关问题