Simdi oncelikle Ediz beyi bir tebrik, bir de itiraz bekliyor. Kupkok
icin verdigi cevap gayet dogru, tabii bir de gerekcesini verelim.
Burada Newton-Raphson metodu denilen bir metodu izlemis Ediz bey, ki
tercih edilebilecek en iyi kok bulma yontemlerinden birisidir Newton-
Raphson metodu. Cok da hizli yakinsar. Asagidaki link guzelce de
aciklamis, sekilli mekilli :
http://www.ibrahimay.com/bilim/matematik/69-newton-raphson-yontemi.html
en basit hali ile sonrakideger = ilkdeger - ( f(ilkdeger)/
f'(ilkdeger)) diye ozetlenebilecek bir iterasyon dizisi ile koke
yaklasilir. Yakinsamadigi, hususiyetle turevin sifira gittigi
durumlarda iraksadigi da olur, ilkdegeri dikkatli secmek gerekir.
Bizim kupkok problemine uygulanirsa,
Kupkok(x) = A olsun, biz burada A'yi ariyoruz aslinda. O halde
x = A^3 olur. Ve f (A) = A^3 - x = 0 denklemini A'ya gore cozmemiz
gerekir.
sonrakideger = ilkdeger - (ilkdeger^3 - x) / (3 * ilkdeger^2) ve
buradan da
sonrakideger = 2/3 * ilkdeger - x / (3 * ilkdeger^2) olarak dizi
belirlenmis olur.
Gelelim logaritmaya.. Ediz bey'in logaritma icin onerdigi acilim, bir
Taylor acilimi. Gelin gorun ki sozkonusu acilim -1<x<=1 icin ln(1+x)'e
yakinsamaktadir. Biz ise daha genis bir logaritma yaklasimi ariyoruz.
Yine Newton-Raphson yonteminden yararlanacagiz. Dikkat edilirse kup
kok hesabi icin, 3. kuvvetle ugrasmis idik. Benzer sekilde logaritma
icin de onun ters fonksiyonu olan exponansiyel fonksiyonla ugrasiriz.
Yukaridaki islemleri logaritma icin gerceklestirirseniz,
sonrakideger = ilkdeger + x / exp (ilkdeger) - 1
iterasyonuna denkligine ulasacaksiniz. Burada exponansiyel fonksiyonu
ise yine sadece dort islem kullanarak,
exp (x) = 1 + x + x^2/2! + x^3/3! + x^4/4! + ...
seklinde ifade edersek, sadece dort islem ile oldukca iyi yakinsayan
bir logaritma hesaplama yontemi elde etmis oluruz.
bunlarin her ikisini de kullanarak hesap yapan nacizane bir programcik
yazdim, derledim, calistirdim. kendisi ve ciktisi asagidaki gibi :
======================================================================================
/*
Programi derleme komutu:
gcc numerik.c -Wall -o numerik
*/
#include <stdio.h>
#define MAXIMUM_TERIM 50
#define EPSULON 1E-9
/* < TURKCELESTIRME> */
#define uzun long double
#define tamsayi int
#define baslangic main
#define eger if
#define yoksa else
#define icinDongusu for
#define olduguMuddetce while
#define ekranaYaz printf
#define dondur return
/* </TURKCELESTIRME> */
uzun mutlakDeger (uzun x) {
eger (x >= 0)
dondur x;
yoksa
dondur -x;
}
uzun tamKuvvet (uzun x, tamsayi d) {
tamsayi i;
uzun sonuc = 1;
icinDongusu (i = 0 ; i < d ; ++i) {
sonuc *= x;
}
dondur sonuc;
}
uzun faktoriyel (tamsayi d) {
tamsayi i;
uzun sonuc = 1;
eger (d == 0 || d == 1)
dondur 1;
icinDongusu (i = 2 ; i <= d ; ++i)
sonuc *= i;
dondur sonuc;
}
uzun eUzeri (uzun x) {
tamsayi i;
uzun sonuc = 1;
icinDongusu (i = 1 ; i <= MAXIMUM_TERIM ; ++i) {
sonuc += tamKuvvet (x, i) / faktoriyel (i);
}
dondur sonuc;
}
uzun logaritma (uzun x) {
uzun sonuc = x, araDegisken = 0;
olduguMuddetce (mutlakDeger (sonuc - araDegisken) >= EPSULON) {
araDegisken = sonuc;
sonuc = araDegisken + (x / eUzeri(araDegisken)) - 1;
}
dondur sonuc;
}
uzun kupkok (uzun x) {
uzun sonuc = x/2, araDegisken = 0;
olduguMuddetce (mutlakDeger (sonuc - araDegisken) >= EPSULON) {
araDegisken = sonuc;
sonuc = 2.0 / 3.0 * araDegisken + x / (3 * tamKuvvet (araDegisken,
2));
}
dondur sonuc;
}
tamsayi baslangic (){
ekranaYaz ("ln (%0.12Lf) : %0.12Lf\n", (uzun) 2.718281828459,
logaritma(2.718281828459));
ekranaYaz ("kupkok (%0.12Lf) : %0.12Lf\n", (uzun) 8.0, kupkok (8));
dondur 0;
}
==========================================================================
Calistirilinca ciktisi da asagidaki gibi olmaktadir :
Administrator@DANIS_LAPTOP ~/CALISMA $ ./numerik
ln (2.718281828459) : 1.000000000000
kupkok (8.000000000000) : 2.000000000000
==========================================================================
diger kelamlara gelince, hesap makinesi boyle hesaplar sayesinde icat
oldu efendiler, biz cok gec kalmis vaziyetteyiz bazi seyler icin, bari
gelecek nesillerimize bunlari aktaralim ;)
hepinize selamlar, surc-u lisan var ise affola..