Delphi Can

Orjinalini görmek için tıklayınız: Kendi Logaritma Fonksiyonumuzu Nasıl Yazarız?
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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.Smile 
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.
ne boş işi hocam. Salt matematikdir bu en sevdiğim konulardan. çok vakit bulamazsam da bana 95lerdeki dersane dönemimi hatırlatır Smile elinize sağlık.
Elinize sağlık @savasabd  bey, ara sıra beyin jimnastiği (umarım doğru yazmışımdır) yapmak iyi gelir  Smile

Siz "Form9" a kadar geldiğinize göre logaritma haricinde de başka çalışmalar yapmışsınız Big Grin
Elinize sağlık güzel bir anlatım olmuş.
Teşekkür ederim, sağolsun arkadaşlar.

(10-03-2020, Saat: 16:59)frmman Adlı Kullanıcıdan Alıntı: [ -> ]Elinize sağlık @savasabd  bey, ara sıra beyin jimnastiği (umarım doğru yazmışımdır) yapmak iyi gelir  Smile

Siz "Form9" a kadar geldiğinize göre logaritma haricinde de başka çalışmalar yapmışsınız Big Grin

Evet var.Smile TForm8  karakök fonksiyonu mesela.Smile