* Önsöz
* Fortran'a Giriş
* Fortran'nın Temelleri
* Basit ve Formatlı Okuma/Yazma
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Alt Programlar I
* Alt Programlar II
* Diziler
* Dinamik Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Yapısal Veri Tipleri
* Dosya Yönetimi
* Modül Kavramı
* Sayısal Tipler (KINDs)
* Bit Düzeyinde Çalışmak
* Kütüphane Fonksiyonları Listesi
* Yararlanılan Kaynaklar
* - - -
* Karmaşık Sayılar
* Tarih-Saat Fonksiyonları
* Rastgele Sayılar
* Katar - Sayı Dönüşümleri
* Komut Satırı İşlemleri
* Co-Array Fortran
* Derleme Seçenekleri
* Fortran ve C
* Sayılar Kuramı
* Analiz
* Lineer Cebir
Fortran 90/95 Derleyicileri
|
* Salford (silversoft FTN95)
* G95
* GFORTRAN
* programlama.com
* Fortran (wikipedia)
* fortran.gantep.edu.tr
* g95.org
* Hot scripts
* E-posta
|
|
Bölüm 20: Karmaşık Sayılar
##################-- (%90)
|
Giriş
Karmaşık sayıların kullanımı daha çok mühendislik uygulamalarında karşımıza çıkar. Fortran
Programlama dili kullanıcılarına Karmaşık sayılarla işlem yapmak için COMPLEX veri tipini
sunarak büyük kolaylık sağlamıştır. Bu özellik bir çok programlama dilinde yoktur.
Hatırlarsak Bölüm 2'de, i2 = -1 olmak üzere,
a + bi şeklindeki bir karmaşık sayı, Fortran'da
(a, b)
şeklinde ifade edildiği anlatılmıştı.
Örneğin:
(3.0, 4.0) ==> 3.0 + 4.0i
gibi.
20.1 Karmaşık (Complex) Sayı Fonksiyonları
Fortran 90+, karmaşık sayılar üzerinde işlem yapmak için aşağıdaki fonksiyonları
kullanıcılarına sunmuştur:
- AIMAG(Z)
Z = x + iy karmaşık sayısının sanal (imaginary) kısmını gönderir.
- REAL(Z)
Z = x + iy karmaşık sayısının gerçel (real) kısmını gönderir.
- CMPLX(X[,Y][,KIND])
X + iY karmaşık sayını oluşturur.
- CONJG(Z)
Z = x + iy karmaşık sayısının eşleniği (complex conjugate) olan x - iy değerini gönderir.
- ABS(Z)
Z = x + iy karmaşık sayısının modülünü, sqrt(x**2 + y**2), gönderir.
Program 20.1'de bu fonksiyonların kullanımı gösterilmiştir.
Program 20.1: Sık kullanılan karmaşık sayı fonksiyonları
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
PROGRAM Karmasik_Fonksiyonlar
!----------------------------------------------------
! 20prg01.f95
! Sık kullanılan karmaşık sayı fonksiyonları
!----------------------------------------------------
IMPLICIT NONE
COMPLEX :: Z
Z = (3.0, 4.0) ! 3 + 4i
PRINT *,"Z = ",Z
PRINT *
PRINT *,"AIMAG(z) = ",AIMAG(z)
PRINT *," REAL(z) = ",REAL(z)
PRINT *,"CONJG(z) = ",CONJG(z)
PRINT *," ABS(z) = ",ABS(z)
END PROGRAM Karmasik_Fonksiyonlar
|
ÇIKTI
Z = (3.,4.)
AIMAG(z) = 4.
REAL(z) = 3.
CONJG(z) = (3.,-4.)
ABS(z) = 5.
|
20.2 Örnek Uygulamalar
ÖRNEK 1: EULER FORMÜLÜ
Kompleks Analizden bildiğimiz meşhur Euler Formülü:
şeklindedir. Fortran'da tanımlı REAL veri tipindeki fonksiyonlar aynı zamanda
COMPLEX veri tipi için de çalışır. Buna dair bir örnek aşağıda verilmiştir.
Program 20.2: Euler Formülü
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
|
PROGRAM Euler_Acilimi
!----------------------------------------------------
! 20prg02.f95
! exp(ix) = cos(x) + i*sin(x) şeklide
! yazılabileceğinin gösterimi.
!----------------------------------------------------
IMPLICIT NONE
COMPLEX :: i = (0.0, 1.0) !
REAL :: x = 0.5 ! radyan
PRINT *,"exp(i*x) = ",EXP(i*x)
PRINT *,"cos(x) = ",COS(x)
PRINT *,"sin(x) = ",SIN(x)
END PROGRAM |
ÇIKTI
exp(i*x) = (0.87758255,0.47942555)
cos(x) = 0.87758255
sin(x) = 0.47942555
|
ÖRNEK 2: KARMAŞIK KÖKLER
Program 5.4'de, ax2 + bx + c = 0
formundaki ikinci dereceden bir polinomun gerçel (reel) köklerini hesaplanmıştı. Daha genel bir çözüm
karmaşık köklerin dahil edilmesidir. Program 20.3'de kuadratik denklemin gerçel köklerinin yanı sıra
karmaşık kökerinini de bulur. Karmaşık köklerin bulunmasında CMPLX() fonksiyonu kullanılmıştır.
Program 20.3: Karmaşık Kökler
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
|
PROGRAM Kuadratik
!-----------------------------------------------------------
! 20prg03.f95
! ax**2 + bx + c = 0 denkleminin gerçel ve karmaşık
! (complex) köklerinin bulunması. Karmaşık köklerin
! bulunmasında CMPLX() fonksiyonu kullanılmıştır.
!-----------------------------------------------------------
IMPLICIT NONE
REAL :: a, b, c
COMPLEX :: Kok_Delta, x1, x2
PRINT *, "a, b, c degerlerini girin:"
READ *, A,B,C
Kok_Delta = SQRT( CMPLX(B**2 - 4.0*A*C) )
x1 = ( -B + Kok_Delta )/( 2.0*A )
x2 = ( -B - Kok_Delta )/( 2.0*A )
WRITE (*,*) "Kökler: ", x1, x2
END PROGRAM |
ÇIKTI
a, b, c degerlerini girin:
1 1 1
Kökler: (-0.5,0.8660254) (-0.5,-0.8660254)
|
ÇIKTI
a, b, c degerlerini girin:
2 4 -8
Kökler: (1.236068,0.) (-3.236068,0.)
|
|