10 Karmaşık Sayılar Matematik derslerinden bilindiği gibi a ile b iki gerçel (real) sayı ve i = 1 olmak üzere z= a +bi sayısı karmaşık (complex) bir sayıdır. (Bazı yerde i yerine j yazılır.) i sayısı sanal sayı birimidir. bi sayısı sanal birimin b katı olan sanal bir sayıdır. Karmaşık sayılar bilimsel hesaplamalarda çok kullanılır. O nedenle, Ruby, onları ayrı bir veri tipi olarak ele alır. Gerçel (real) bir b sayısının sonuna i konulursa, Ruby onu, matematikte olsuğu gibi sanal bir sayı olarak algılar. a + bi sayısını ise bir complex sayı nesnesi olarak algılar. Ruby de complex sayılarla, matematikte yapılabilen bütün işlemler yapılabilir. 10.1 Karmaşık Sayı Yaratma Ruby de Complex nesnesi yaratmak için Complex, ::rect ya da to_c metodu kullanılabilir. Liste 10.1. Complex (7) # => (7+0 i ) Complex (5, 3) # => (5+3 i ) Complex. polar (5, 3) # => ( 4.949962483002227+0.7056000402993361 i ) 7. to_c # => (7+0 i ) Liste 10.2. Kesirli sayılardan da complex nesnesi yaratılabilir:
112 BÖLÜM 10. KARMAŞIK SAYILAR 1 Complex ( 0. 8 ) # => (0.8+0 i ) Complex ( 0.5 0.4 i ) # => (0.5 0.34(3/4) i ) Complex ( 3@4 ) # => ( 1.960930862590836 2.2704074859237844 i ) 0. 3. to_c # => (0.3+0 i ) 6 0.3 0.8 i. to_c # => (0.3 0.8 i ) 2/3+3/4 i. to_c # => ( ( 2 / 3 ) +(3/4) i ) 3@4. to_c # => ( 1.960930862590836 2.2704074859237844 i ) Liste 10.3. Liste 10.3, karmaşık 5 + 3i sayısını yaratır. a=complex ( 4, 6 ) # => 4 + 6 i 2 puts ( a ) # => 4 + 6 i => n i l Gerçel ve Sanal Kısımlar Liste 10.1, karmaşık sayıların gerçel, sanal kısımlarını ve eşleniklerini buluyor. Liste 10.4. a=complex ( 2, 9 ) # => 2 + 9 i => n i l puts ( a. r e a l ) # => 2 => n i l 3 puts ( a. imag ) # => 9 => n i l puts ( a. conj ) # => 2 9 i => n i l Dört İşlem Liste 10.5, karmaşık sayılarda toplama, çıkarma, çarpma ve bölme işlemlerini yapıyor. Liste 10.5. 1 a=complex ( 5, 3 ) # => 5 + 3 i b=complex( 4,7) # => 4 + 7 i puts ( a+b) # => 1 +10 i puts ( a b) # => 9 4 i puts ( a b) # => 41 + 23 i 6 puts ( a/b) # => 1/65 47/65 i Liste 10.6.
10.1. KARMAŞIK SAYI YARATMA 113 # ruby 4 # Karmaşık s a y ı n ı n büyüklüğü : Sqrt [ i ^2 + j ^2] p Complex (3, 4). abs #? 5.0 9 # Karmaşık saylarda toplama i ş l e m i vektör toplama i ş l e m i g i b i d i r : p Complex (2, 3) + Complex (4, 5) #? (6+8 i ) # Karmaşık s a y ı l a r d a çarpma p Complex (1, 0) Complex (0, 1) #? (0+1 i ) # S a y ı l ( s k a l a r ) çarpım 14 p Complex (3, 4) 2 #? (6+8 j ) 3 8 # Karmaşık sayıya eklenen g e r ç e l say onu g e r ç e l kısmına e k l e n i r : p Complex (3, 4) + 1 #? (4+4 i ) Liste 10.7. # ruby z1 = Complex (0, 1) #Uzunluk ( büyüklük ) : p z1. abs #? 1.0 # Açı ( radyan ) : p z1. angle #? 1. 5707963267948966 # Kutupsal Koordinatlar ( uzunluk ve a ç ı ) : 13 p z1. polar #? [ 1, 1.5707963267948966] # Kutupsal dan dikey k o o r d i n a t l a r a. Girdi ( uzunluk, a ç ı ( radyan ) ) Ç ı k t ı : karmaşık s a y ı p Complex. polar (1, Math : : PI ) #? ( 1.0+1.2246467991473532 e 16 i ) r e a l l y i s j u s t ( 1+0 i ) 18 # Sabit PI : p Math : : PI #? 3. 141592653589793 # Sabit e : p Math : : E #? 2. 718281828459045 Üstel Liste 10.8, karmaşık sayılarda üs alma (exponentiation) işlemlerini yapıyor. Liste 10.8. i=complex ( 0, 1 ) # => 0 + 1 i puts ( i 2) # => 1 + 0 i 3 puts ( i i ) # => 0.20787957635076193 + 0.0 i
114 BÖLÜM 10. KARMAŞIK SAYILAR Karmaşık Üs Ruby de i 2 = i 2 = 1 + 0i olur. Oysa, matematikte yalın biçimde 1 yazarız. i i gerçel sayıdır. Kuvvet alırken üst sanal sayı olabilir. Eşlenik Kökler Matematikte, üst olarak 0.5 alındığında; yani bir karmaşık sayısının karekökü istendiğinde, birbirlerine eşlenik olan iki kök olduğunu biliyoruz.örneğin, 7 + 24i nin kare kökleri 4 + 3i ile 4 3i dir. Ruby bu köklerden ilkini seçer. Liste 10.9. Liste 10.9, karmaşık sayıların kare köklerinin bulunuşunu gösteriyor. puts (( 1) 0. 5 ) # => 6.123233995736766 e 17+1.0 i 2 puts ( Complex( 1,0) 0. 5 ) # => 6.123233995736766 e 17+1.0 i puts ( 1) ( 1 / 2. 0 ) # => 6.123233995736766 e 17+1.0 i Matris işlemleri Ruby matris işlemlerini yapabilir. Onun için matrix module nü çağırmak gerekir. Bir modül çağırmak için require anahtar sözcüğü kullnılır (bkz. 17). Liste 10.10. r e q u i r e matrix. rb # => true 2 a = Matrix [ [ 3, 2, 3 ], [ 5, 9, 8 ] ] # => Matrix [ [ 3, 2, 3 ], [ 5, 9, 8 ] ] b = Matrix [ [ 4, 7 ], [ 9, 3 ], [ 8, 1 ] ] # => Matrix [ [ 4, 7 ], [ 9, 3 ], [ 8, 1 ] ] c = a b # => Matrix [ [ 5 4, 3 0 ], [ 1 6 5, 7 0 ] ] a. row_size # => 2 a. column_size # => 3 7 c. det # => 1170 a. transpose # => Matrix [ [ 3, 5 ], [ 2, 9 ], [ 3, 8 ] ] Geometriye Uygulama Geometri bilimsel uygulamalarda karmaşık sayıların kutupsal (polar) biçimleri çok kullanılır. Bu tür uygulamalarda argument ve modulus terimleri önem taşır. Liste 10.11, karmaşık sayılarda salt değer, argument ve modulus değerlerinin bulunuşunu gösteriyor.
10.2. ALIŞTIRMALAR 115 Liste 10.11. 1 a=complex ( 1, 3 ) # => (1+3 i ) puts ( a. abs ) # => 3.1622776601683795 => n i l puts ( a. arg ) # => 1.2490457723982544 => n i l puts ( a. polar ) # => 3.1622776601683795 1.2490457723982544 => n i l Burada polar ifadesinin abs ile argumet ten oluştuğuna dikkat ediniz. Bu ikisi karmaşık sayının kutupsal koordinattaki konumunu belirliyor. abs sayının kutup noktasından (başlangıç) uzaklığı, argumet ise sayıyı kutba birleştiren vektörün yatay eksenle pozitif yönde yaptığı açının radyan cinsinden değeridir. 10.2 Alıştırmalar Liste 10.12. 1 # ruby 6 # z complex s a y ı : z = Complex (2, 3) # z yi yaz p z # => (2+3 i ) # z yi kutupsal biçime dönüştür : 11 z. polar => [3.605551275463989, 0.982793723247329] 16 # Kutupsal biçimde b i r karmaşık s a y ı yarat ( uzunluk, radyan c i n s i n d e n a ç ı ) : z = Complex. polar (1, Math : : PI ) # => ( 1.0+1.2246063538223773 e 16 i ) p z # => ( 1.0+1.2246063538223773 e 16 i ) p z. r e a l # => 1.0 p z. imag # => => 1. 2246063538223773 e 16 Liste 10.13. 2 # ruby # uzunluk : p Complex (3, 4). abs # =>5.0 7 # Toplama : p Complex (2, 3) + Complex (4, 5) # =>(6+8 i ) # Çarpma : p Complex (1, 0) Complex (0, 1) # =>(0+1 i )
116 BÖLÜM 10. KARMAŞIK SAYILAR 12 # S a y ı l ( s k a l e r ) çarpım p Complex (3, 4) 2 # =>(6+8j ) # S a y ı l ekleme : 17 p Complex ( 3, 4) + 1 # =>(4+4 i ) Liste 10.14. 2 # ruby z1 = Complex (0, 1) # uzunluk : 7 p z1. abs # =>1.0 # Radyan c i n s i n d e n a ç ı : p z1. angle # => 1. 5707963267948966 12 # Kutupsal k o o r d i n a t l a r ( uzunluk ve a ç ı dan oluşan array : [ length, angle ] ) : p z1. polar # => [ 1, 1.5707963267948966] 17 # Kutupsal biçimde karmaşık s a y ı yarat ( g i r d i : ( uzunluk, radyan cinsindn a ç ı ), Ç ı k t ı : p Complex. polar (1, Math : : PI ) # => ( 1.0+1.2246467991473532 e 16 i ) $\ equiv ( 1+0 i ) $ # sabt? p Math : : PI # => 3. 141592653589793 # s a b i t e 22 p Math : : E #? 2. 718281828459045 Liste 10.15. r e q u i r e complex. rb # => true r e q u i r e r a t i o n a l. rb # => true 3 a = Complex (3, 5) # => (3+5 i ) b = Complex (2, 2) # => (2 2 i ) puts " c = #{a b} " # => c = 16+4 i => n i l c = a b # => (16+4 i ) d = 3 + 4 Complex : : I # => (3+4 i ) Kaynak: http://www.ruby-doc.org/core-2.1.2/numeric.html