tft每日頭條

 > 生活

 > fortran中數組的最大值

fortran中數組的最大值

生活 更新时间:2025-01-26 17:59:23

Fortran在科學計算方面有強大運算能力,主要是體現在矩陣上,Fortran專門為矩陣的應用設計了很多專用函數。

對于一個矩陣的轉置矩陣,簡單來講,就是行變列。如果用标準程序來寫,就是兩個循環,然後行列交換。有矩陣A,它的轉置矩陣為矩陣B。

do i=1,im do j=1,jm b(j,i)=a(i,j) end do end do

Fortran專門有矩陣轉置的函數。b=transpose(a)。這和上面的代碼是等效的。

兩個矩陣相乘,要求隻有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義。

fortran中數組的最大值(Fortran矩陣轉置和乘法運算)1

矩陣A*矩陣B=矩陣C

矩陣相乘結果滿足如下公式:

  1. C11=A11B11 A12B21
  2. C12=A11B12 A12B22
  3. C21=A21B11 A22B21
  4. C22=A21B12 A22B22

用标準代碼就是:

do i=1,im do j=1,im c(i,j)=0 do k=1,jm c(i,j)=c(i,j) a(i,k)*b(k,j) end do end do end do

Fortran專門有矩陣相乘的函數。c=matmul(a,b)。這和上面代碼是等效的。

我們做一個練習,把一個3*3矩陣A,分别通過代碼和函數公式求出轉置矩陣B,然後再分别通過代碼和函數公式計算A,B相乘得到矩陣C。

program test70 implicit none integer,parameter::im=3,jm=3 integer::i,j,k integer::a(im,jm),b(jm,im),c(im,im)=0 data a & /1,2,3,& 5,9,4,& 7,2,6/ write(*,*)"矩陣A:" write(*,"(3i2)")a write(*,'(60("-"))') do i=1,im do j=1,jm b(j,i)=a(i,j) end do end do write(*,*)"循環求矩陣B:" write(*,"(3i2)")b write(*,'(60("-"))') b=transpose(a) write(*,*)"公式求矩陣B:" write(*,"(3i2)")b write(*,'(60("-"))') do i=1,im do j=1,im c(i,j)=0 do k=1,jm c(i,j)=c(i,j) a(i,k)*b(k,j) end do end do end do write(*,*)"循環求矩陣A*B:" write(*,"(3i4)")c write(*,'(60("-"))') c=matmul(a,b) write(*,*)"公式求矩陣A*B:" write(*,"(3i4)")c write(*,'(60("-"))') pause stop end program test70

運行程序,結果如下:(Fortran矩陣順序是先列後行)

fortran中數組的最大值(Fortran矩陣轉置和乘法運算)2

運行結果

Fortran中兩個矩陣可以直接相加,相減。大大提高了運行效率。

fortran中數組的最大值(Fortran矩陣轉置和乘法運算)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved