
No.3ベストアンサー
- 回答日時:
>対角行列以外の行列でも当てはめることはできないでしょうか?
No2の補足
違います。ガウス・ジョルダンを使用して対角行列に変換しているのです。
参考として理論にテイラーの定理(固有値)を使用しておりますが、
単純にガウス・ジョルダンを使用すれば変換前と変換後の
固有値の値は変わらないと思えばいいです。
対角行列の行列式の求め方って何?、固有値って何?
固有値と行列式の関係って?ガウスジョルダンって?
という場合は勉強してください。というより過去ログにあると思います。
あと単純に一部を抜粋しただけなので抜けがあったり、いらないところがあったりしてますので補足。
1000 INPUT "N=";N → 1000 N=3
5030 DATA 6,15,24 → (なし)
サンプルの行列は下の行列(1070-1120行,5000-5020行)
2 4 6
3 8 7
5 7 21
ガウスジョルダンはSTEP1(4320-4450行)
行列R:ガウスジョルダンで変換後の行列(対角行列)
逆行列はSTEP2(4460-4500行)
cf.単位行列(4280-4310行)
行列式がSTEP3
行列式GSIKI(4530-4540行)
No.4
- 回答日時:
Fortranということなのでこんなホームページはいかがでしょうか?
http://phase.etl.go.jp/mirrors/netlib/
英語なのでわかり辛いかも知れませんが、ありとあらゆる数値計算のルーチンがあります。
あと、このような本もあります。日本語版があるかどうかわからないのですが。
『NUMERICAL RECIPES in FORTRAN』
では。
No.2
- 回答日時:
はじめまして
自分FORTRANは使ったことは無いのですが
Basic(VBより前)で同じ物を作った覚えがあるので一部抜粋します。
基本的に
1.対角行列のみを対象
2.そのためガウス・ジョルダンを使用
を念頭において作っております。サンプルは3次ですがn次で使用できますので
1000 INPUT "N=";N
1010 DIM A#(N,N),L#(N,N),D#(N,N),U#(N,N),R#(N,N),Q#(N,N),S#(N,N),B#(N),Y#(N),X#(N),AA#(N,N)
1020 A=0:L=0:D=0:U=0:R=0:Q=0:S=0:B=0:Y=0:X=0:STE=N:TEISI=5:JIKAN=10
1030 PRINT "0: Read"
1070 FOR I=1 TO N:FOR J=1 TO N
1080 READ A#(I,J):PRINT A#(I,J);" ";
1090 NEXT J:PRINT:NEXT I
1100 FOR I=1 TO N
1110 READ B#(I):PRINT B#(I)
1120 NEXT I
1280 PRINT "9: 逆行列,固有値,行列式"
1290 INPUT Z
1300 ON Z GOSUB *GYAKU
1310 GOTO 1200
4270 *GYAKU
4280 FOR H=1 TO N
4290 FOR G=1 TO N
4300 IF G=H THEN B#(G)=1 ELSE B#(G)=0
4310 NEXT G
4320 'STEP1 行列Rを作る
4330 FOR I=1 TO N:FOR J=1 TO N
4340 R#(I,J)=A#(I,J):BB#(I)=B#(I)
4350 NEXT J:NEXT I
4360 FOR K=1 TO N:FOR I=1 TO N
4370 IF I=K THEN GOTO 4430
4380 L#(I,K)=R#(I,K)/R#(K,K)
4390 FOR J=K TO N
4400 R#(I,J)=R#(I,J)-L#(I,K)*R#(K,J)
4410 NEXT J
4420 BB#(I)=BB#(I)-L#(I,K)*BB#(K)
4430 NEXT I
4440 L#(K,K)=1
4450 NEXT K
4460 'STEP2 逆行列AAを求める
4470 FOR I=1 TO N
4480 AA#(I,H)=BB#(I)/R#(I,I)
4490 NEXT I
4500 NEXT H
4510 'STEP3 行列式
4530 GSIKI#=1
4540 FOR I=1 TO N:GSIKI#=GSIKI#*R#(I,I):NEXT I
4550 PRINT "逆行列":FOR I=1 TO N:FOR J=1 TO N:PRINT AA#(I,J);:NEXT J:PRINT:NEXT I:PRINT:INPUT "次の表示に移ります";Z
4560 PRINT "固有値":FOR J=1 TO N:PRINT R#(J,J);:NEXT J:PRINT:PRINT:INPUT "次の表示に移ります";Z
4570 PRINT "行列式=";GSIKI#
5000 DATA 2,4,6
5010 DATA 3,8,7
5020 DATA 5,7,21
5030 DATA 6,15,24
詳しいご回答ありがとうございます。
ただ、Basicのため正確には把握していないのですが、
対角行列以外の行列でも当てはめることはできないでしょうか?
No.1
- 回答日時:
|a b c d|
|e f g h|
|i j k l |
|m n o p|=afkp+agln+ahjo+bgio+bgip+bhkm+cflm+chin+degn+dfio+・・・
であるから
SUBROUTINE DET4(A,DET)
REAL A(4,4),DET
DET=A(1,1)*A(2,2)*A(3,3)*A(4,4)+A(1,1)*A(2,3)*A(3,4)*A(4,2)+・・・
RETURN
END
でOKのはず。わざとサブルーチンにしてあります。何がしたいのか知らないから。
・・・は中略な、めんどいから。
たぶんなんかのレポートなんでしょうけど・・・
行列の成分を聞いてくるプログラムにしたかったらREAD文と
結果出力したかったらWRITE文をつかってくれ。
多分これより効率のいい回答が後の人に続くんでしょうから、とりあえずトップはこれでいいでしょ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# キャスト演算について。 1 2023/07/15 15:28
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# プログラミング初心者です。 演算子を習い、自力で計算機を作ろうと思い、写真のようなプログラムを書きま 2 2022/08/14 21:27
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- システム CPUの問題について 2 2022/07/09 12:04
- その他(プログラミング・Web制作) プログラムが書けません。 6 2023/01/22 22:58
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報