ベクトルの内積計算 Program ab real(8), allocatable :: a(:),b(:) Real(8) :: abinner, anorm, bnorm integer :: ni, i ベクトルの配列を確保 a, b に値を代入 内積,ノルムの計算 ni=5 allocate( a(ni), b(ni) ) a(1:5) = 1.d0; b(1:5) = 2.d0 abinner=0.d0; anorm=0.d0; bnorm=0.d0 do i=1,ni abinner = abinner + a(i)*b(i) anorm = anorm + a(i)*a(i) bnorm = bnorm + b(i)* b(i) enddo anorm = dsqrt(anorm); bnorm=dsqrt(bnorm) write(*,’(3(1PE9.2))’) abinner,anorm,bnorm stop end program ab ベクトルの内積計算(サブルーチン①) Program ab real(8), allocatable :: a(:),b(:) Real(8) :: abinner, anorm, bnorm integer :: ni, i ベクトルの配列を確保 a, b に値を代入 計算自身を 副プログラムに任せる. ni=5 allocate( a(ni), b(ni) ) a(1:5) = 1.d0; b(1:5) = 2.d0 call inner(a,b,ni,abinner) call vnorm(a,ni,anorm) call vnorm(b,ni,bnorm) write(*,’(3(1PE9.2))’) abinner,anorm,bnorm stop end program ab 内積のサブルーチン Program ab real(8), allocatable :: a(:),b(:) Real(8) :: abinner, anorm, bnorm integer :: ni, i ni=5 allocate( a(ni), b(ni) ) a(1:5) = 1.d0; b(1:5) = 2.d0 call inner(a,b,ni,abinner) call vnorm(a,ni,anorm) call vnorm(b,ni,bnorm) subroutine inner(avec,bvec,ndim,res) implicit none real(8), dimension(ndim) :: avec,bvec Integer :: i,ndim real(8) :: res res=0.d0 do i=1,ndim write(*,’(3(1PE9.2))’) abinner,anorm,bnorm res=res + avec(i) * bvec(i) enddo stop end program ab return end subroutine 内積をユーザ定義関数でも書ける Program ab real(8), allocatable :: a(:),b(:) real(8) :: abinner, anorm, bnorm integer :: ni, i real(8),external :: finner, fvnorm ni=5 allocate( a(ni), b(ni) ) a(1:5) = 1.d0; b(1:5) = 2.d0 abinner=finner(a,b,ni) anorm = fvnorm(a,ni) bnorm = fvnorm(b,ni) real(8) function finner(avec,bvec,ndim) implicit none real(8), dimension(ndim) :: avec,bvec Integer :: i,ndim finner=0.d0 do i=1,ndim write(*,’(3(1PE9.2))’) abinner,anorm,bnorm finner=finner + avec(i) * bvec(i) enddo stop end program ab end function 内積・ノルムを同時に計算 Program ab real(8), allocatable :: a(:),b(:) Real(8) :: abinner, anorm, bnorm integer :: ni, i ni=5 allocate( a(ni), b(ni) ) a(1:5) = 1.d0; b(1:5) = 2.d0 call inner_vnorm(a,b,ni,abinner,anorm,bnorm) write(*,’(3(1PE9.2))’) abinner,anorm,bnorm stop end program ab サブルーチンのメリット • 複雑な計算をパッケージ化してブラックボック ス化できる.(必要ない人は見なくてもよい) • 変数名を変えれば,何回も使いまわせる. • 賢い人が書いたサブルーチンを利用できる. (ルールさえ間違えなければ)
© Copyright 2024 ExpyDoc