行列の掛け算についてなのですが、ある行列aを2乗した行列bを求める場合は以下のようなプログラムを書けば出来たのですが、これを3乗以上に拡張するためにはどうしたらよいのでしょうか?
______do i=1,3
________do j=1,3
__________b(i,j)=0.D0
____________do k=1,3
______________b(i,j)=b(i,j)+a(i,k)*a(k,j)
____________enddo
________enddo
______enddo
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
program hello
implicit none
real,allocatable,dimension(:,:):: d
real,allocatable,dimension(:,:):: x
integer::i
allocate(d(3,3))
allocate(x(3,3))
d(1,1) = 5
d(1,2) = 4
d(1,3) = 4
d(2,1) = 7
d(2,2) = 2
d(2,3) = 4
d(3,1) = 7
d(3,2) = 6
d(3,3) = 2
x = mpow(d,3);
do i = 1,ubound(x,2)
print *, x(i,:)
end do
contains
function mmulti(x,y)
real,intent(in),allocatable,dimension(:,:)::x
real,intent(in),allocatable,dimension(:,:)::y
real,allocatable,dimension(:,:)::mmulti
integer::i
integer::j
integer::k
allocate(mmulti(ubound(x,1),ubound(y,2)))
do i = 1,ubound(x,1)
do j = 1,ubound(y,2)
mmulti(i,j) = 0
do k = 1,ubound(x,2)
mmulti(i,j) = mmulti(i,j) + x(i,k) * y(k,j)
end do
end do
end do
end function mmulti
function mpow(x,n)
real,intent(in),allocatable,dimension(:,:)::x
integer,intent(in)::n
real,allocatable,dimension(:,:)::mpow
integer::i
allocate(mpow(ubound(x,1),ubound(x,1)))
mpow = x
do i = 1,n - 1
mpow = mmulti(mpow,x);
end do
end function mpow
end program hello
全部書いてみた。g95でコンパイルして
1077. 692. 620.
1085. 684. 620.
1211. 804. 684.
の結果を得て、Excelとの一致も確認しました。
表示用のサブルーチンに分けようとしてうまくいかなかったり、
n乗で与えられるnが負でないときや
与えられた二つの行列x,yについて,xの行数とyの列数が等しくないときや
xが正方行列でないときに
エラー出さないといけないんですが,
方法をすぐに調べられなかったので断念しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- 数学 この行列の掛け算の仕方を教えてください。 行と列の数がそれぞれ一致してないので出来なくないですか、、 3 2023/01/14 15:14
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA/GetTickCountの49.7日の境...
-
Rubyでクラスファイルをディレ...
-
pythonのerrorコード
-
パイソンのクラス
-
No route matches [GET] "/post...
-
Rubyについて質問です
-
ぱいソン
-
Ruby:シルバーについて
-
実行時エラー450:引数の数が一...
-
正規表現で両端に文字列を置換
-
get() と find() の違いについて
-
Csvファイルの最終行を取得する...
-
テンプレートの特殊化でコンパ...
-
エラー「メソッドまたはデータ...
-
10円未満を切り捨てる方法は?
-
VBAで型が一致しないエラー(バ...
-
Ruby 特異メソッドのnewが先に...
-
Ruby
-
ruby:モジュール関数について
-
クラス名やモジュール名の競合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「arg」は何の略?
-
Ruby Selenium 要素の待機
-
例外の再スロー時に、その原因...
-
Ruby Selenium リンクの取得方法
-
SMLのエラーについて
-
fortranを用いた行列の掛け算に...
-
rubyについて質問です
-
VBA/GetTickCountの49.7日の境...
-
pythonのerrorコード
-
get() と find() の違いについて
-
エラー「メソッドまたはデータ...
-
What class are you in? には何...
-
パイソンのクラス
-
教えてください。vb5.0
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
-
Rubyについて質問です
-
実行時エラー450:引数の数が一...
-
エクセルVBA オートフィルタで...
おすすめ情報