Bu blogda İkiye Bölme Yöntemi (Bisection Method) kullanılarak C üzerinde örnek çözümü yapılmıştır. Kod içerisinde her satıra ilişkin açıklama yorum kısmında belirtilmiştir. Çözümlenen örneğin bulunduğu kaynak blogun sonunda belirtilmiştir. (Sayfa 52 – Example 2)
Örnek:
, başlangıç değerlerini kullanarak hata payı ile fonksiyonu üzerinde iterasyon yapınız.
Çözüm C Kod:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include "stdio.h" #include "stdlib.h" #include "math.h" float function(float x) // İşlem uygulanacak fonksiyonu temsil etmektedir. { return x*x*x+4*x*x-10; // Fonksiyon sonucunu döndürür. } float bisection(float A, float B, float error) { printf("\t\t Range [%f,%f] | Error %f\n\n",A,B,error); int MAX=log2((B-A)/error); // MAX değişkeni hata sınırına ulaşmak için kaç adım uygulanacağını taşımaktadır. float values[MAX][5]; // values değişkeni fonksiyon çözümlenirken hesaplanan tüm değerleri taşımaktadır. float _A,P,_P,_B; // _A,_B,_P fonksiyona girilen değerlerin sonuçlarını, P ortanca değeri temsil etmektedir. int i,k; // Döngüler için işlem idlerini temsil etmektedir. for(i=1; i<=MAX; i++) // Değerler kümesine değişken atanırken sınırı hesaplar. { P=(A+B)/2; // Aralığın ortancası P değişkenine atanır. _A=function(A); // Fonksiyona gönderilen A değerinin sonucu _A değişkenine atanır. _P=function(P); // Fonksiyona gönderilen P değerinin sonucu _P değişkenine atanır. values[i-1][0] = A; // Matrisin satırlarının ilk elemanı daraltılmış aralığın küçük değeri ile doldurulur. values[i-1][1] = B; // Matrisin satırlarının ikinci elemanı daraltılmış aralığın büyük değeri ile doldurulur. values[i-1][2] = P; // Matrisin satırlarının üçüncü elemanı daraltılmış aralığın ortanca değeri ile doldurulur. values[i-1][3] = _P; // Matrisin satırlarının dördüncü elemanı, ortanca değerin fonksiyon sonucu ile doldurulur. if(_A*_P<0) // Kökün hangi aralıkta olduğu belirlenir. B=P; // Kökün P ile A aralığında olduğu tespit edildiğinde B değişkenine P atanır. else A=P; // Kökün P ile B aralığında olduğu tespit edildiğinde A değişkenine P atanır. values[i-1][4] = B-A; // Matrisin satırlarının beşinci elemanı hata payı ile doldurulur. } printf("ID\t An\t\t Bn\t\t Pn\t\t F(Pn)\t\t ERROR\n"); printf("__\t________\t________\t________\t________\t________\n"); for(k=0; k<i-1; k++) // Matrisin satırları döndürülür. { printf("%d\t%f\t%f\t%f\t%f\t%f\n",k+1,values[k][0],values[k][1],values[k][2],values[k][3],values[k][4]); } printf("\n\t\t\tRoot of function is %f \n",values[i-2][2]); printf("\t\t\t____________________________\n"); printf("______________________________________________________________________________\n\n"); } int main() { printf("\a\n\t\t\t\tBisection Method\n"); printf("\t\t\t Function: x^3 + 4*x^2 - 10\n\n"); bisection(1,2,0.005); bisection(1.25,1.5,0.02); printf("\t\t\t\t\t\t\t\t\t <by HK>"); return 0; } |
Konsol Çıktısı :
Yararlanılan Kaynak:
Numerical Analysis
NINTH EDITION
Richard L. Burden (Youngstown State University)
J. Douglas Faires (Youngstown State University)
2 comments: On C Kod ile İkiye Bölme Yöntemi (Bisection Method)
emeğiniz için teşekkürler Halis bey yaptığım ödevde çok yardımcı oldu
Rica ederim.