2016-10-11 4 views
1

私はScalaに問題があり、MATLABからのスカラーの2つのベクトルをScalaクラスに渡しています。MatlabからScalaクラスへのベクトルを渡します。

は、私たちがこのフォームのScalaのクラスがあるとします。私は以前、これをコンパイルした

class MyClass { 

def myMethod(x: Seq[Double]): Double = { 
    val methodValue = for(i <- x.indices) yield { math.pow(x(i),2.0) } 
    methodValue.sum 
    } 

} 

、私のMATLABとJREのマッチしたJavaのバージョン、およびどのような今までに必要なの

私は、配列[ダブル]、配列[ダブル]とベクトル[ダブル]をテストしましたが、何の進展は

を達成しませんでした。

今、私はこのクラスをMATLAB内で呼び出して、それに目的の行ベクトルを与えて、それが二乗和の値になるようにします。このため

私は、MATLABでこのMFILEを書いた:

clc, clear, close all 

javaaddpath(pwd) 
javaaddpath('C:\Program Files\scala\lib\scala-library.jar') 
javaclasspath('-dynamic') 

newInstanceOfClass = MyClass 
newInstanceOfClass.myMethod([1 2 3 4]) 

しかし、私は言ってエラーを取得:

ない方法 'をMyMethodは' クラスが見つかり署名を照合して 'MyClassの'。

このScalaクラスに単純なベクターを渡す方法はわかりません。誰も私にこれを助けることができますか?

私も、まあ、私はこの問題を解決すると思う問題を解決するためのMatlabののjavaArrayを使用しようとしたが、でも

+0

ただ不思議:あなたは、MATLABが呼び出すサポートしていることを確信しています** Scala **メソッド/クラス? – GhostCat

+0

MyClassをオブジェクトに変更してみてください。 myMethodがインスタンスメソッドであることがわかる理由はありません(これは本質的に2つのパラメータをとります:thisとSeq [Double])。 – Phasmid

+0

はい、私はかなりMATLABがScalaクラスを実行すると確信しています。そして、私は正常に入力引数なしで簡単な "Hello World"クラスを実行しました。私の問題は、クラスの入力ベクトルを渡して、シグネチャのミスマッチエラーが発生することです。 – Yarpiz

答えて

0

を働かなかったこと:

まず、私は私のスカラ座を変更クラスは次のように:

class MyClass { 

def myMethod(x: Array[java.lang.Double]): Double = { 
    val methodValue = for(i <- x.indices) yield { math.pow(x(i),2.0) } 
    methodValue.sum 
    } 

} 

私はArray[Double]の代わりにArray[java.lang.Double]を実際にはArray[scala.Double]にするためにjava.lang.Doubleフォーマットを使用しました。

最後に私のMatlabのスクリプトで、私はjavaArrayに所望のベクターを変換し、[このためのMatlabのドキュメントを見て]、その後、通常のMatlab MFILEからScalaのクラスを実行することができます:)

関連する問題