09-03-2020, Saat: 21:18
Logaritma özellikle algoritmaların hesaplanmasında oldukça fazla kullanılmaktadır.Örneğin ikili aramada (binary search) en kotu ihtimal log2(n)'dir.Peki biz kendi logaritma fonksiyonumuzu nasıl yazarız? Bunun için genellikle Taylor serisi kullanılıyor diye tahmin ediyorum.Fakat Taylor serisini kullanmadan da kendi fonksiyonumuzu basit bir şekilde yazabiliriz.Bunun için türevin formülünden yararlanacağız.
a^x(a üzeri x) 'in türevi ln(a).a^x'dir;peki türevin formülü açısından incelersek,
f(x)=a^x;
dy/dx= lim h->0 (a^(x+h)-a^x)/h (limit h sıfıra giderken)
a^x parantezine alırsak lim h->0 a^x((a^h)-1)/h olur.a^x 'in limitteki değişkenle bir ilgisi olmadığı için limitin dışına alabiliriz, a^x. lim h->0 ((a^h)-1)/h olur.
Biz bu ifadenin neye eşit olduğunu biliyoruz:
a^x . lim h->0 ((a^h)-1)/h=a^x . ln(a);
a^x'e bölersek her iki tarafı eşitlik şu şekilde olur: lim h->0 ((a^h)-1)/h=ln(a) Artık ln(a) fonksiyonunu h değerine 0' yakın bir değer vererek kolayca yazabiliriz.Peki logb(a) fonksiyonu nasıl yazarız? Biliyoruz ki herhangi bir logaritma ifadesini diğer tabanlara şu şekilde çevirebiliyoruz.Örneğin logb(a)=ln(a)/ln(b).O halde artık bütün logaritmik değerleri ifade edebiliriz.Aşağıda delphi için kodlar mevcut oldukça kolay olduğunu, ve hesaplama yaptığınızda hesap makinesiyle aynı (yada oldukça yakın) değeri verdiğini göreceksiniz.Eğer benim gibi boş işler peşinde koşmayı seviyorsanız deneyip görebilirsiniz.
a^x(a üzeri x) 'in türevi ln(a).a^x'dir;peki türevin formülü açısından incelersek,
f(x)=a^x;
dy/dx= lim h->0 (a^(x+h)-a^x)/h (limit h sıfıra giderken)
a^x parantezine alırsak lim h->0 a^x((a^h)-1)/h olur.a^x 'in limitteki değişkenle bir ilgisi olmadığı için limitin dışına alabiliriz, a^x. lim h->0 ((a^h)-1)/h olur.
Biz bu ifadenin neye eşit olduğunu biliyoruz:
a^x . lim h->0 ((a^h)-1)/h=a^x . ln(a);
a^x'e bölersek her iki tarafı eşitlik şu şekilde olur: lim h->0 ((a^h)-1)/h=ln(a) Artık ln(a) fonksiyonunu h değerine 0' yakın bir değer vererek kolayca yazabiliriz.Peki logb(a) fonksiyonu nasıl yazarız? Biliyoruz ki herhangi bir logaritma ifadesini diğer tabanlara şu şekilde çevirebiliyoruz.Örneğin logb(a)=ln(a)/ln(b).O halde artık bütün logaritmik değerleri ifade edebiliriz.Aşağıda delphi için kodlar mevcut oldukça kolay olduğunu, ve hesaplama yaptığınızda hesap makinesiyle aynı (yada oldukça yakın) değeri verdiğini göreceksiniz.Eğer benim gibi boş işler peşinde koşmayı seviyorsanız deneyip görebilirsiniz.
unit Unit9; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,Math; type TForm9 = class(TForm) Button1: TButton; function fln(n:extended):extended; function flog(taban:extended;sayi:extended):extended; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form9: TForm9; implementation {$R *.dfm} function TForm9.flog(taban:extended;sayi:extended):extended; begin result:= RoundTo(fln(sayi)/fln(taban),-6);// virgülden sonra altı sayıyı aldım, siz istediğniz gibi alabilirsiniz. end; function TForm9.fln(n:extended):extended; var h:extended; begin h:=0.000000001;// (lim h-> 0 ) sıfıra yaklaşan bir değer veriyoruz result:=(power(n,h)-1)/h; // ln(n) değerimiz end; procedure TForm9.Button1Click(Sender: TObject); begin Showmessage(flog(8,4096).ToString); end; end.
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.
https://play.google.com/store/apps/developer?id=ONGUN
https://play.google.com/store/apps/developer?id=ONGUN