• ベストアンサー

Javaを使った行列計算

Javaを使って行列の固有値などを求めるプログラムを 作りたいと考えています。そこで、自分で全て実装する前に Javaのライブラリの中に行列を扱うクラスなどがあるのならば それを利用したいと考えています。そこで、Javaのライブラリに 行列計算に適したクラスなどは用意されているでしょうか。 もしありましたら、教えて頂きたいと思います。お願いします。

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

失礼 Apache Commons Math を使ってみましたが、どうやら対称行列の固有値計算しかサポートしていないようです。 線形代数の計算なら、JAMA がよさそうですね。 http://math.nist.gov/javanumerics/jama/ 簡単な行列の固有値計算をしてみましたのでご参考までに。 [code] public static void main(String[] args){ double[][] matrixData = {{2,1},{4,2}}; Matrix m = new Matrix(matrixData); EigenvalueDecomposition dec = new EigenvalueDecomposition(m); System.out.println(Arrays.toString(dec.getRealEigenvalues())); } [/code]

pyon_kero
質問者

お礼

大変詳しく説明して頂き、有難うございます。 参考にさせていただきたいと思います。

その他の回答 (1)

回答No.1

Apache Commons Math ライブラリを見てみると良いのではないでしょうか。 線形代数の計算は一通り実装されていそうです。 http://commons.apache.org/math/ ”3.5 Eigenvalues/eigenvectors and singular values/singular vectors”という項目が固有値計算のようです。 http://commons.apache.org/math/userguide/linear.html

関連するQ&A

  • 行列の計算について。

    こんにちは。 JAVAで行列の計算をするプログラムを作っていますが、なかなかうまくいきません。 自分で考えたのはfor文を使った物です。行列数を入力するとその数だけの行列を作る、という物なのですが、どうもうまくいきません。 「2」を入力すると、 │1 2││5 6│ │   ││   │ │3 4││7 8│ こんな2行2列の行列の計算をする、というものです。 for (int i =0; i < 2; i++){ for (int j = 0; j<2; j++){ for (int k = 0; k<2; k++){ C[i][j]=C[i][j]+a[i][k]*b[k][j]; } } } 上のようなプログラムを考えました。 JAVAには行列の計算をする専用の関数(クラス?)などあるのでしょうか? また、ソースなど教えていただけると、とても助かります。 CからJAVAに急に移ったので、つまづくことが非常に多いです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaで

    フォルダに AA.java, BB.java, CC.java, ‥という不特定多数のクラスがあって メソッドString name()を3つとも実装しているとします。 そのメソッドを呼ぶと、クラスの名前AAやBBが返戻地として返されるとします。いまこのフォルダにあるすべてのクラスの、このメソッドを よぶとします。クラスの数はいくつあるのかはわかりません。このメソッドをよんですべてのクラスの名前を取得するようにしたいです。 このようなプログラムをつくるにはどうすればいいのでしょうか?

  • C++行列計算プログラム

    C++を利用して逆行列(10×10などの大きな行列)を求める計算のプログラムを作りたいのですが、うまくできません。 どのように作ればいいのでしょうか?

  • 行列の固有ベクトルの解法

    現在行列の固有値と固有ベクトルをもとめるプログラムを作成しています。 手順としては、入力行列をハウスホルダー法により三重対角行列に変換し、その後QR法で対角化を行い固有値を求めます。 固有ベクトルはLU分解を使用して固有値ごとに求めていこうと考えました。 現状固有値を求めるプログラムは作成できました(そして正しく求められていることも確認しました)。そして行列のLU分解を行うプログラムまで作成できたのですが、LU分解後の行列から固有ベクトルを求める方法がわかりません。 詳しく説明します Ax = λx を (A - Iλ)x = 0 として、この(A - Iλ)をLU分解しました。 すると式は LUx = 0 となり 最終的に Ux = 0 をとく問題になります。 ここで行列Uは上三角行列なので、1次の連立方程式を解くように、行列Uの右下の要素を使って計算を始めていくのですが、自分がなにか勘違いをしているのだと思うのですがこの方法で計算すると固有ベクトルが全て0になってしまいます。  行列U     x       0 | 2 3 4 5 | |x1|   =  |0| | 0 4 2 9 | |x2|   =  |0| | 0 0 7 5 | |x3|   =  |0| | 0 0 0 8 | |x4|   =  |0| このような図式になり、固有ベクトルであるxを求めていくのですが、x4から順にもとめても0にしかならないんです。 下記のサイトを参考に学んでいたんですが、この部分が分からずにいます。 http://hooktail.org/computer/index.php?KL%C5%B8%B3%AB2 どこを勘違いしているんでしょうか? アドバイスをお願いします。  

  • QR法を使った行列の固有値問題について

    行列の固有値と固有ベクトルを求めるプログラムをJavaで 作っています。そこで、アルゴリズムとしてQR法を用いて いるのですが、この方法では固有値のみを求めており、 固有ベクトルは求めていないことがわかりました。そこで、 QR法を用いつつ、固有ベクトルも同時に求める方法がありましたら、 教えて頂きたいと思います。宜しくお願いします。

  • 対称行列を直行行列で対角化

    次の対称行列を直行行列で対角化せよ、という問題で、解き方が分からないので一つずつ順を追って教えていただきたいです。 3 0 0 0 1 2 0 2 1 自分で計算してみて、固有値は-1と3と出たのですが、この値で合っているのか、合っていたとしてこの次に固有ベクトルをどうすれば求めるられるのかが分からないです… よろしくお願いします。

  • mathematicaでの行列の計算

    Aを5×5の行列として(成分は与えられている) Pを5×5行列で各列、各行に1が一つ(残りは0)の行列(置換行列) とします。このときに全てのPに対して P×A×(Pの逆行列) を計算するプログラムってmathematicaで出来るのでしょうか? 分かりにくい説明で申し訳ありません! いずれはn×nでやりたいと思っているのですが、とりあえず5×5くらいで考えています。 あまりmathematicaはやったことがないので、変な質問でしたらすみませんっ。。。

  • やさしいJavaを読み終えて

    Java初心者です、 やっと"やさしいJava"を読み終えたのですが 次に読む本として何が相応しいのか分かりません。 自分としてはSwingなどでアプリや簡易ゲームなど作成したいです、 ですが未だクラスライブラリの使い方が良く分からないです。 継承やスレッドなど基礎中の基礎は覚えたのですが、 クラスライブラリの扱い方がちゃんと理解出来てないので ウィンドウ等を使ったGUIプログラムが作成出来ません。 何方かクラスライブラリの扱い方などが書いて有る書籍、 やさしいJavaの次に読む書籍など有りましたら教えて頂けませんか? もちろん書籍に限らずWebサイトでもOkです、 ご回答お待ちしております。

    • ベストアンサー
    • Java
  • javaの覚え方

    私はjavaの勉強をしている初心者ですが、困っていることがあります。 数冊のjavaの本を読んで、オブジェクト指向のことや、基本的な事 は理解したつもりですが、自分でプログラムを作成する際、 用意されているクラスだけを使い終わってしまうのです。 これは、本のサンプルをうちこんでいるだけなのです。 一からつくろうとしても、実際サンプルプログラムの ようになるのだからと思ってしまうのですが、どうすれば 自分で作ったと実感できるのでしょうか?

  • 行列が0(ゼロ)に収束することを求めるにはどうすれば?

    (確率を扱った問題のある期待値を求める問題の過程なのですが) すべての固有値が1より小さいn×n行列Pがあります。この行列Pのk乗(P^k)のkを無限大にすると、行列Pは0(ゼロ)に収束するのです。これを求めるにはジョルダンの標準形を使用して求めるらしいのですが、その具体的な計算方法がわからなくて困っております。本など調べてみたのですが力不足で申し訳ありません。もしよければその計算方法や流れなど教えていただければ幸いです。よろしくお願いいたします。 行列について: 確率を扱った行列ですので、固有値(成分)は全て1より小さい分数で、対角成分の上(対角成分を除いた右上の三角形部分)は全て0です。左下の三角形部分には1より小さい分数が入っています。

専門家に質問してみよう