|
| 1 | +# İkiye Bölme Yöntemi (Bisection Method) |
| 2 | + |
| 3 | +## Teori |
| 4 | + |
| 5 | +İkiye Bölme Yöntemi, sürekli bir fonksiyonun köklerini bulmak için kullanılan sayısal bir yöntemdir. Özellikle analitik olarak çözülmesi zor olan fonksiyonlar için yararlıdır. Yöntem, kökün bulunduğu aralığı yeterince küçük olana kadar daraltarak çalışır. |
| 6 | + |
| 7 | +<img src="./image.png" width="200px"/> |
| 8 | + |
| 9 | +### Süreç |
| 10 | + |
| 11 | +1. **Başlangıç Aralığı Seçimi**: Fonksiyonun işaret değiştirdiği bir `[a, b]` aralığı ile başlayın (yani, `f(a) * f(b) < 0`). Bu, aralıkta en az bir kök olduğunu gösterir. |
| 12 | +2. **Orta Nokta Hesaplama**: Aralığın orta noktasını hesaplayın, `m = (a + b) / 2`. |
| 13 | +3. **Kök Kontrolü**: Eğer `f(m) == 0` ise, `m` fonksiyonun bir köküdür. |
| 14 | +4. **Aralığı İkiye Bölme**: Eğer `f(m)` sıfır değilse, işaret değişiminin gerçekleştiği alt aralığı belirleyin. Bu, `[a, m]` veya `[m, b]` olacaktır, `f(a) * f(m)` ve `f(b) * f(m)`'in işaretlerine bağlı olarak. |
| 15 | +5. **Tekrar Et**: Aralık boyutu önceden belirlenmiş bir tolerans seviyesi, `tol`'dan küçük olana kadar adım 2-4'ü yeni alt aralıkla tekrarlayın. |
| 16 | + |
| 17 | +### Formüller |
| 18 | + |
| 19 | +- **Orta Nokta**: \( m = \frac{a + b}{2} \) |
| 20 | +- **Fonksiyon Değerlendirmesi**: \( f(m) \) |
| 21 | +- **Aralık Güncellemesi**: |
| 22 | + - Eğer f(a) . f(m) < 0 ise, yeni aralık `[a, m]` olur. |
| 23 | + - Eğer f(b) . f(m) < 0 ise, yeni aralık `[m, b]` olur. |
| 24 | + |
| 25 | +## Python Kodu Açıklaması |
| 26 | + |
| 27 | +```python |
| 28 | +def bisection_method(f, a, b, tol): |
| 29 | + # Yöntemin uygulanabilir olup olmadığını kontrol eder |
| 30 | + if f(a) * f(b) >= 0: |
| 31 | + print("İkiye bölme yöntemi başarısız oldu.") |
| 32 | + return None |
| 33 | + |
| 34 | + # Ana döngü: Aralık, toleranstan küçük olana kadar tekrar eder |
| 35 | + while (b - a) / 2.0 > tol: |
| 36 | + orta_nokta = (a + b) / 2.0 # Orta noktayı hesaplar |
| 37 | + if f(orta_nokta) == 0: |
| 38 | + return orta_nokta # Eğer orta nokta kök ise |
| 39 | + elif f(a) * f(orta_nokta) < 0: # Yeni aralığı belirler |
| 40 | + b = orta_nokta |
| 41 | + else: |
| 42 | + a = orta_nokta |
| 43 | + |
| 44 | + return (a + b) / 2.0 # Kökün yaklaşık değerini döndürür |
| 45 | + |
| 46 | +``` |
| 47 | + |
| 48 | +#### bisection_method Fonksiyonu |
| 49 | + |
| 50 | +Bu, yarıya bölme yöntemini uygulayan ana fonksiyondur. |
| 51 | + |
| 52 | +#### Parametreler: |
| 53 | + |
| 54 | +- `f`: Kökü bulunacak fonksiyon. |
| 55 | +- `a`, `b`: Başlangıç aralığı uç noktaları. |
| 56 | +- `tol`: Kök yaklaşımı için tolerans. |
| 57 | + |
| 58 | +#### Aralık Kontrolü |
| 59 | + |
| 60 | +İlk olarak, fonksiyon `f(a)` ve `f(b)`'nin zıt işaretlere sahip olup olmadığını kontrol eder, bu yöntemin çalışması için gereklidir. |
| 61 | + |
| 62 | +#### Döngü |
| 63 | + |
| 64 | +Fonksiyon, aralık boyutu `tol`dan küçük olana kadar bir döngüye girer. |
| 65 | + |
| 66 | +#### Orta Nokta ve Değerlendirme |
| 67 | + |
| 68 | +Her yinelemede, orta nokta hesaplanır ve değerlendirilir. Eğer orta nokta kök ise, döndürülür. |
| 69 | + |
| 70 | +#### Aralık Güncelleme |
| 71 | + |
| 72 | +`f`'nin orta noktadaki işaretine bağlı olarak, aralık ya `[a, midpoint]` ya da `[midpoint, b]` olarak güncellenir. |
| 73 | + |
| 74 | +#### Dönüş |
| 75 | + |
| 76 | +Aralık yeterince küçük olduğunda, fonksiyon orta noktayı yaklaşık kök olarak döndürür. |
0 commit comments