正しくない Java データ型
Java 文字列から MATLAB 文字ベクトルへ
文字ベクトルの構造体
一部の MATLAB® 構造体は、名前と値のペアの struct
を入力引数として受け入れます。Java® 用の MATLAB エンジン API は com.mathworks.matlab.engine.Struct
クラスを提供してこのデータ構造体を Java で作成し、MATLAB に渡します。構造体はそこで MATLAB の struct
に変換されます。
struct
入力を受け入れる一部の MATLAB 関数では、フィールドの値が MATLAB string (string
) ではなく MATLAB 文字ベクトル (char
) であることが要求されます。値の型が正しい Java Struct
を作成するには、変数を MATLAB に渡す前に String
を char
配列に変換します。
変換には toCharArray
メソッドを使用できます。
char[] on = "on".toCharArray(); char[] yOut = "yOut".toCharArray(); char[] tOut = "tOut".toCharArray(); Struct simParam = new Struct("SaveOutput", on, "OutputSaveName", yOut,"SaveTime", on, "TimeSaveName", tOut);
String 引数から文字ベクトルへ
MATLAB 関数で char
入力が必要な場合は、MATLAB に渡される関数呼び出しで Java String
を変換できます。たとえば、MATLAB 関数 eval
では char
入力が要求されます。
double result = engine.feval("eval", "3+5");
Undefined function 'eval' for input arguments of type 'string'..
char
配列を渡すと正常に機能します。
double result = engine.feval("eval", "3+5".toCharArray());
Java からのグラフィックス オブジェクトのプロパティの設定
オブジェクトのハンドルを使用して、MATLAB グラフィックス オブジェクトのプロパティの値を設定することができます。プロパティの名前とプロパティの値を MATLAB に渡す際に、Java char
配列として渡します。
double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}}; HandleObject[] h = eng.feval("plot", (Object)data); String property = ("HitTest"); String value = ("off"); eng.feval(0,"set", h, property.toCharArray(), value.toCharArray());
Java 整数から MATLAB double へ
sqrt
など一部の MATLAB 関数では、入力が double
(倍精度) または single
(単精度) の値に限定されています。MATLAB エンジンは Java 整数を MATLAB int32
値に変換します。整数値を受け入れない MATLAB 関数については、適切な数値を必ず渡すようにしてください。
double result = engine.feval("sqrt", 4);
Undefined function 'sqrt' for input arguments of type 'int32'.
double を渡すと正常に機能します。
double result = engine.feval("sqrt", 4.0);