matlab.eng​ineでmatlab​関数を使おうとすると​、関数''(タイプ ​の入力変数)が未定義​です。とエラーが出ま​す。

python3.7上で、matlab.engineを使用して、ユーザー定義関数のスクリプトを実行しようとすると、関数''(タイプ の入力変数)が未定義です。とエラーが出ます。
python上で起動させた関数と、そのスクリプト内に存在する別のユーザー定義関数では、このエラーが出ないのですが、さらにこの別のユーザー定義関数のスクリプト内での更に別のユーザー定義関数でこのエラーが発生します。(以下にそれぞれのスクリプトでの該当箇所を示します。)
最初、imversion.m 内で関数 getpartialsを呼び出した際も、「関数 'getpartials' (タイプ'double' の入力引数) が未定義です。」というエラーを出していましたが、一度eng.workspaceをpython上で用いて関数getpartialsの引数に用いる変数全てワークスペースに保存して以来、getpartialsではエラーを出さなくなりました。
imversion.m には関数locxyのような入れ子のようになっている関数を含めて、多くのユーザー定義関数を呼び出すので、困っております。
Pythonプログラム
eng = matlab.engine.start_matlab()
L_c,W_c,v0,tauc,ratio,ssqr3 = eng.inversion(Vp,Vs,topl,late,lone,depe,strike,dip,mlats,mlons,melevs,phas,d,nargout=6)
inversion.m
function [L_c,W_c,v0,tauc,ratio,ssqr3]=inversion(Vp,Vs,topl,late,lone,depe,strike,dip,mlats,mlons,melevs,phase,d)
[G]=getpartials(mlats,mlons,melevs,late,lone,depe,Vp,Vs,topl,phas,strike,dip);
getpartials.m
[dum]=locxy([late,lone,0]',origin); <==この関数の呼び出し時にエラー。 関数 'locxy' (タイプ'double' の入力引数) が未定義です。

답변 (1개)

Etsuo Maeda
Etsuo Maeda 2020년 4월 13일

0 개 추천

回答がついていないようなので
ユーザ定義関数単体で各個には動作可能ということでですので、数値型をよく確認してみましょう
このあたりのトラブルシューティングを読んでみてください
以上、ご参考まで

댓글 수: 1

Naoto Yokotani
Naoto Yokotani 2020년 4월 14일
ご回答ありがとうございます。
数値型等確認の上、MATLAB関数のスクリプトへ、pythonの実行ディレクトリより、メインのMTALABスクリプト上からPATHを通すことで解決しました。

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Python からの MATLAB の呼び出し에 대해 자세히 알아보기

제품

릴리스

R2019b

질문:

2020년 4월 9일

댓글:

2020년 4월 14일

Community Treasure Hunt

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

Start Hunting!