現在、C言語でプログラムを組んでいるのですが、複素数からなる行列の固有値を求めるプログラムがどうしてもつくることができません。
インターネットやプログラムのパッケージなどを調べてみたのですが、実数からなる行列の固有値を求めるプログラムしか載っておらず、勉強不足によりそれを複素数の場合に拡張することもできませんでした。
もしよければ、プログラムの組み方や実数のプログラムから複素数のプログラムへの替え方のこつ、もしくは「この本に載っていたよ」など、どんな情報でもかまいませんので教えて頂けないでしょうか?
すいませんがよろしくお願いします。
No.1ベストアンサー
- 回答日時:
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
参考URL:http://bookweb.kinokuniya.co.jp/guest/cgi-bin/ws …
No.3
- 回答日時:
一部訂正。
typedef double[2] complex;
↓
typedef double complex[2];
ですね。(最近Javaばかりやってたもんでつい...。)
コンパイラによっては、
typedef double *complex;
でないと、関数定義が通らないかもしれません。
No.2
- 回答日時:
実数行列に関するアルゴリズムは分かっているわけですから、あとはそれを複素数に
拡張すればよいだけの話ですよね。(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];
}
のように加算・減算・乗算を定義して(今回は除算はとりあえず不要でしょうから)
実数向けのアルゴリズムを置き換えればよいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Webプログラムってネイティブア...
-
指定したフォルダーを最前面表...
-
vba listviewにおけるtextのAli...
-
COBOLのS9タイプからXタイプへ...
-
2値化した画像の黒い部分のピク...
-
Arduino nano(アルドゥイーノ ...
-
初級者の質問――time_tについて
-
バックグラウンドで動作させる。
-
C++ Builder6 をふたたび動か...
-
VBAプログラミング
-
VBAプログラミング
-
Visual Studio .NET C# でDLLを...
-
VBA
-
壁紙の変更
-
マイコンからプログラムを読み...
-
このプロトタイプ宣言のプログ...
-
mallocについて書かれてあるC言...
-
Excel VBA じゃんけん
-
VC++6.0からVC++2008exへの移行...
-
FFTプログラムで問題が生じまし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLの最初の「h」を略す
-
指定したフォルダーを最前面表...
-
vba listviewにおけるtextのAli...
-
プロダクションコードとは?
-
Excel VBA じゃんけん
-
初級者の質問――time_tについて
-
VBA
-
COBOLのS9タイプからXタイプへ...
-
無限ループ中にある任意のキー...
-
XPathの関数「text()="value"」...
-
マイコンからプログラムを読み...
-
VBAにてTIFFから画像を取込みた...
-
Arduino nano(アルドゥイーノ ...
-
2値化した画像の黒い部分のピク...
-
VBコンソールアプリ(.NET Frame...
-
プログラミングの問題と解答例...
-
signalハンドラに引数を渡したい
-
三次元のグラフを書きたいので...
-
gccでスタックオーバーフローの...
-
Visual Studio .NET C# でDLLを...
おすすめ情報