Filter löschen
Filter löschen

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

40 Ansichten (letzte 30 Tage)
Naoto Yokotani
Naoto Yokotani am 9 Apr. 2020
Kommentiert: Naoto Yokotani am 14 Apr. 2020
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' の入力引数) が未定義です。

Antworten (1)

Etsuo Maeda
Etsuo Maeda am 13 Apr. 2020
回答がついていないようなので
ユーザ定義関数単体で各個には動作可能ということでですので、数値型をよく確認してみましょう
このあたりのトラブルシューティングを読んでみてください
以上、ご参考まで
  1 Kommentar
Naoto Yokotani
Naoto Yokotani am 14 Apr. 2020
ご回答ありがとうございます。
数値型等確認の上、MATLAB関数のスクリプトへ、pythonの実行ディレクトリより、メインのMTALABスクリプト上からPATHを通すことで解決しました。

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Python からの MATLAB の呼び出し finden Sie in Help Center und File Exchange

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!