2017-05-30 3 views
0
import matlabcontrol.*; 

public class HelloWorld { 

    public static void main(String[] args) 
      throws MatlabConnectionException, MatlabInvocationException { 
     // create proxy 
     MatlabProxyFactoryOptions options = 
       new MatlabProxyFactoryOptions.Builder() 
         .setUsePreviouslyControlledSession(true) 
         .build(); 
     MatlabProxyFactory factory = new MatlabProxyFactory(options); 
     MatlabProxy proxy = factory.getProxy(); 


     // call builtin function 
     proxy.eval("disp('hello world1')"); 
     proxy.eval("addpath('E:\\Karshenasi Arsha\\term 4 (payan name)\\payan name\\Matlab')"); 

     //my problem is here 
     proxy.feval("CalculatinScore", 0.4, 0.1, 0.8, 0.5); 
     proxy.eval("rmpath('E:\\Karshenasi Arsha\\term 4 (payan name)\\payan name\\Matlab')"); 


     // close connection 
     proxy.disconnect(); 
    } 
} 

このコードでは、私はmatlab(CalculatinScore)からメソッドを呼び出して、結果を使用しようとしています。 しかし、feval()は無効であり、値を返しません。 どうすれば結果を使用できますか?たとえば、C#では を使用できます。Javaのvoid関数の値を使用して

matlab.Feval( "GetParameters"、1、出力結果、個体[0]/60、個体[2]、個体[1]); オブジェクト[] res =オブジェクトとしての結果[];

voidメソッドの結果を使用してください 私はjavaで何ができますか?

答えて

1

MatlabProxyjavadocsによれば、returningFevalというメソッドがあり、matlabの関数呼び出し結果をObject[]に返します。このような何か:レコードの

Object[] res = proxy.returningFeval("CalculatinScore", 1, /* one result */ 
            0.4,0.1,0.8,0.5);  

void方法は、任意の結果を返さないので、あなたはvoidメソッドの結果を使用することはできません。

+0

あなたの答えに感謝します。答えを印刷できますか?例えばここでの答えは0.5です。私はToString()メソッドでそれを印刷しようとしましたが、私は[D @ 4fca772d – user3118071

+0

を得ました。実際に得られた結果は 'double'の配列です。キャストして、最初の要素を取った。 –

関連する問題