A Fortran egy programozási nyelv, melyet elsősorban matematikai számítások megkönnyítésére fejlesztettek ki.
Mind a mai napig a Fortran a legelterjedtebb programozási nyelv a mérnöki (és egyéb magas szintű matematikai) számítások elvégzéséhez.
Ezért célszerű megismerkedni a Fortran által felkínált függvényekkel.
Numerikus konverziók
A következő függvények skalár és tömb paraméterekkel is hívhatók.
Valós számok konverziója:
real, dimension(3) :: rv (/-2.6,3.5,1.0/)
floor(rv) ! /3, 3, 1/
lekerekített egész rész
ceiling(rv) ! /-2, 4, 1/
felkerekített egész rész
int(rv) ! /-2, 3, 1/
egész rész
nint(rv) ! /-3, 4, 1/
legközelebbi egész
aint(rv) ! /-2.0, 3.0, 1.0/
valós értékű egész rész
int(rv) ! /-3.0, 4.0, 1.0/
valós értékű legközelebbi egész
Egész számok konverziója:
integer, dimension(3) :: iv (/-2,1,4/)
real(iv) ! /-2.0, 1.0, 4.0/
egészet valósra konvertál
cmplx(iv) ! /(-2.0,0.0), (1.0,0.0), (4.0,0.0)/
egészet komplexre konverál
Komplex számok konverziója:
cv (/(-2,1), (1.1,0), (0,-3)/)
real(cv) ! /-2.0, 1.1, 0.0/
valós rész
aimag(cv) ! /1.0, 0.0, -3.0/
képzetes rész
conjg(cv) ! /(-2.0,-1.0), (1.1,-0.0), (0.0,3.0)/
komplex konjugáltja
Matematikai függvények
Abszolult érték:
abs(iv) ! /2, 1, 4/
egész argumentumokkal
abs(rv) ! /2.6, 3.5, 1.0/
valós argumentumokkal
abs(cv) ! /2.2360680, 1.1000000, 3.0000000/
komplex argumentumokkal
Minimum, maximum érték tetszőleges számú skalár, vagy tömb paraméterrel. (Típusuknak, alakjuknak egyeznie kell.)
max(-1, 2, 0) ! 2
maximum érték
min(-1, 2, 0) ! -1
minimum érték
max((/1,3/), (/-1,4/)) ! /1, 4/
maximum tömbök esetén
Maradék rész függvény egész, valós és tömb paraméterrel.
mod(-23, 10) ! -3
mod(-23.0, 10.5) ! -2.0
Trigonometrikus függvények. (Skalár és tömb paraméterekkel is használhatók.)
cos(5.0) ! = 0.2836622
sin(5.0) ! = -0.9589243
cos((5.0, 1.0)) ! = (0.4377136, 1.1269289)
sin((5.0, 1.0)) ! = (-1.4796976, 0.3333602)
tan(5.0) ! = -3.3805151
acos(-1.0) ! = 3.1415927
asin(-1.0) ! = -1.5707964
atan(-1.0) ! = -1.1071488
Karakter függvények
A következő függvények az egész típusú kódok és a karakter értékek közötti konverziót valósítják meg.
char(88) ! X - 88 kódú karakter
achar(88) ! X - 88 ASCII kódú karakter
ichar('X') ! 88 - az X karakter kódja
iachar('X') ! 88 - az X karakter ASCII kódja
String függvények
Karakterlánc manipulációs függvények:
adjustl(" abcd ") ! "abcd "
szóközökkel való balra eltolás
adjustr(" abcd ") ! " abcd"
szóközökkel való jobbra eltolás
trim(" abcd ") ! " abcd"
szóköz eltávolítása a karakterlánc végéről
len(" abcd ") ! 8
a karakterlánc hossza
Keresés karakterláncokban:
index(" abab ","ab") ! 3
- a második karakterlánc első előfordulásának pozíciója
index(" abcd ","ab",BACK=.true.) ! 5
- a második karakterlánc utolsó előfordulásának pozíciója
index(" abcd ","cc") ! 0
- a második karakterlánc első előfordulásának pozíciója
scan("abcd","bxzy") ! 2
- a második paraméterben megadott karakter halmazból
az első előfordulás
verify("abYab","abcdef") ! 3
- az első olyan karakter pozíciója, amely nem szerepel
a második paraméterben felsorolt karakterláncban
Tömb műveletek
Tömbök mérete és alakja:
real :: x(-2:2,4)
shape(x) ! /5, 4/
a tömb dimenziói
lbound(x) ! /-2, 1/
a tömb alsó határ indexei
ubound(x) ! /2, 4/
a tömb felső határ indexei
size(x) ! 20
a tömb eleminek a száma
lbound(x, dim=1) ! -2
a tömb alsó határ indexe a dim
paraméterben megadott dimenziójában
size(x, dim=1) ! 5
a tömb elemeinek a száma a dim
paraméterben megadott dimenziójában
Tömb redukciós függvények:
all((/.true.,.false./)) ! false
akkor igaz, ha minden eleme igaz
any((/.true.,.false./)) ! true
akkor igaz, ha egy eleme már igaz
count((/.true.,.false./)) ! 1
megszámolja az igaz elemeket
maxval((/2,3,1,3,1/)) ! 3
a tömb maximum értéke
minval((/2,3,1,3,1/)) ! 1
a tömb minimum értéke
maxloc((/2,3,1,3,1/)) ! 2
a tömb maximum értékének poziciója
minloc((/2,3,1,3,1/)) ! 3
a tömb minimum értékének poziciója
sum((/2,3,1,3,1/)) ! 10
a tömb eleminek összértéke
product((/2,3,1,3,1/)) ! 18
a tömb eleminek a szorzata
product((/2,3,3/), MASK=(/.true.,.true.,.false./))
! 6 - a tömb eleminek a szorzata,
amelyet a maszk paraméter kijelöl
T = reshape((/11,21,31,12,22,32/), (/3,2/))
! - a megadott vektor újradimenzionálása
a második paraméter alapján
maxval(T, dim=1) ! /31, 32/ - a tömb maximális értékei
az első dimenzióban
minval(T, dim=2) ! /12, 22, 32/ - a tömb minimális értékei
a második dimenzióban
Mátrix műveletek:
dot_product((/1.0,2.0/), (/-1.0,-0.5/)) ! -2.0
skaláris szorzás
A = reshape((/1,0,1,0/), (/2,2/))
B = (/3, -1/)
matmul(A, B) ! /2, 0/
mátrix szorzás
transpose(A) ! /1,1,0,0/
mátrix transzponáltja