OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

複素数の固有値の求めるプログラムについて

  • 困ってます
  • 質問No.162150
  • 閲覧数713
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 66% (2/3)

現在、C言語でプログラムを組んでいるのですが、複素数からなる行列の固有値を求めるプログラムがどうしてもつくることができません。
インターネットやプログラムのパッケージなどを調べてみたのですが、実数からなる行列の固有値を求めるプログラムしか載っておらず、勉強不足によりそれを複素数の場合に拡張することもできませんでした。
もしよければ、プログラムの組み方や実数のプログラムから複素数のプログラムへの替え方のこつ、もしくは「この本に載っていたよ」など、どんな情報でもかまいませんので教えて頂けないでしょうか?
すいませんがよろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 36% (37/102)

takashi5050 さんのお望みのアルゴリズムが載っているかどうか知りませんが、
技術評論社から出版されている Numerical Recipes in C に、
数値計算のプログラムが大量に載っています。
11章が固有値問題の数値計算法というタイトルなので、載ってるんじゃないかと思います

ちょっと高いですけど、それだけの価値はあると思います。
大き目の本屋さんなら置いていると思うので、覗いてみてください。

Numerical Recipes in C 日本語版
William H. Press・Saul A. Teukolsky・William T. Vetterling・Brian P. Flannery 共著
丹慶勝市・奥村晴彦・佐藤俊郎・小林誠 訳
B5変形 判 / 680 ページ / 本体価格 4757 円+税
ISBN4-87408-560-1
お礼コメント
takashi5050

お礼率 66% (2/3)

早速の情報をありがとうございます。
今週末にでも大きい本屋さんに行って来ます。
投稿日時 - 2001-11-07 00:39:46
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル13

ベストアンサー率 24% (357/1463)

実数行列に関するアルゴリズムは分かっているわけですから、あとはそれを複素数に 拡張すればよいだけの話ですよね。(C++等の方がやりやすそうですが) 複素数をどのような形式で表現するかにもよりますが、例えば typedef double[2] complex; のようにしていたら、 void plus(complex c1, complex c2, complex result) {  re ...続きを読む
実数行列に関するアルゴリズムは分かっているわけですから、あとはそれを複素数に
拡張すればよいだけの話ですよね。(C++等の方がやりやすそうですが)

複素数をどのような形式で表現するかにもよりますが、例えば
typedef double[2] complex;
のようにしていたら、
void plus(complex c1, complex c2, complex result) {
 result[0] = c1[0] + c2[0];
 result[1] = c1[1] + c2[1];
}

void minus(complex c1, complex c2, complex result) {
 result[0] = c1[0] - c2[0];
 result[1] = c1[1] - c2[1];
}

void multiple(complex c1, complex c2, complex result) {
 result[0] = c1[0] * c2[0] - c1[1] * c2[1];
 result[1] = c1[0] * c2[1] + c1[1] * c2[0];
}

のように加算・減算・乗算を定義して(今回は除算はとりあえず不要でしょうから)
実数向けのアルゴリズムを置き換えればよいと思います。
お礼コメント
takashi5050

お礼率 66% (2/3)

お返事、ありがとうございます。
一度、書き換えてプログラムを作ってみようと思います。
ありがとうございました。
投稿日時 - 2001-11-07 00:44:10


  • 回答No.3
レベル13

ベストアンサー率 24% (357/1463)

一部訂正。 typedef double[2] complex;     ↓ typedef double complex[2]; ですね。(最近Javaばかりやってたもんでつい...。) コンパイラによっては、 typedef double *complex; でないと、関数定義が通らないかもしれません。
一部訂正。
typedef double[2] complex;
    ↓
typedef double complex[2];
ですね。(最近Javaばかりやってたもんでつい...。)
コンパイラによっては、
typedef double *complex;
でないと、関数定義が通らないかもしれません。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ