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

22 views (last 30 days)
Naoto Yokotani
Naoto Yokotani on 9 Apr 2020
Commented: Naoto Yokotani on 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' の入力引数) が未定義です。

Answers (1)

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

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!