C, Octave, Basic dillerinde LambertW fonksiyonu

Lambert W fonksiyonu (aynı zamanda omega fonksiyonu olarak da bilinir), matematikte özellikle karmaşık analiz ve ilgili alanlarda kullanılan özel bir fonksiyondur. Fonksiyon, f(z) = z * e^z fonksiyonunun tersidir, yani w(z) fonksiyonu, w(z) * e^w(z) = z denklemini sağlayan fonksiyondur. W(z) olarak gösterilir.

Lambert W fonksiyonu, matematik, bilim ve mühendislik gibi çeşitli alanlarda kullanılır. Örneğin, x^a = b veya a^x = b gibi üstel denklemlerin çözümünde kullanılabilir. Ayrıca, istatistik mekaniği, termodinamik ve finansta da kullanılır.

Lambert W fonksiyonu, karmaşık değerli bir fonksiyondur ve sonsuz sayıda dalga sahiptir. Lambert W fonksiyonunun ana dalı, -1/e’den büyük veya eşit olan gerçek argümanlar için gerçek değerleri alır ve z > -1/e için tek bir değerli ters fonksiyona sahiptir. Diğer dallar karmaşık değerlidir ve ana dalın 2πi katları eklenerek elde edilir.

Lambert W fonksiyonu, MATLAB, Mathematica, Python ve R gibi birçok matematiksel yazılım paketinde ve programlama dilinde uygulanmıştır.

LambertW fonsiyonunun Amstrad CPC makinelerde de çalışabilecek BASiC dilinde yazılmış bir versiyonunu alta ki programda görebilirsiniz

10 INPUT X
20 W = X
30 WHILE ABS(W*EXP(W)-X)/X > 1E-8
40     W = W - (W*EXP(W)-X)/(EXP(W)*(W+1)-((W+2)*(W*EXP(W)-X))/((2*W+2)+W*EXP(W)))
50 WEND
60 PRINT W

Programı kendinizde şu linkte test edebilrisiniz https://benchmarko.github.io/CPCBasic/index.html

WolframAlpha da elde edilen sonuç ise

LambertW fonsiyonu aynı zamanda product log olarkata bilinir ve wolframalpha buadlandırmayı kullanıyor.

Sonuçları karşılaştıracak olursak BASİC ile yazılan program gayet iyi yakınsadıpını söyleyebiliriz

Programda şu değişiklikleri lgili satırda yaparsak

30 WHILE ABS(W*EXP(W)-X)/X > 1E-15

W(x)=1.04990889496404 noktadan sonra 14 basamak doğruğunda sonuç elde ederiz.

Dikkat edilmesi gereken husun x ler daima x>0 büyük olmalıdır. LambertW complex sayılar içinde tanımlı olsa da yazmış olduğumuz program sadece pozitif reel sayıların LambertW sunu hesaplayabilmektedir.

Örnek Porblem:

Şimdi W(ln(3)) programımıza hesaplatalım

Amstrad’da

ifadesini hesaplatalım

Görüldüğü üzere

W(log(3))=0.6018292835875305

x=1.82545502292483

Sonuçtan da anlaşılacağı gibi AMSTRAD CPC464 için yazılan LambertW Basic porgramı sıfırdan büyük pozitif reel sayılar gayet düzgün çalışıyor ve doğru sonuç veriyor.

Örnekteki problemi çözen tam programın listesini aşağıda veriyorum

10 'INPUT X
20 x=LOG(3)
30 W=0
40 WHILE ABS(W*EXP(W)-X)/X>1E-15
50 W=W-(W*EXP(W)-X)/(EXP(W)*(W+1)-(W+2)*(W*EXP(W)-X)/(2*W+2+W*EXP(W)))
60 WEND
70 PRINT "W(x)="W
80 x=LOG(3)/W
90 PRINT
100 PRINT "x=log(3)/W(log(3))=";x
110 PRINT
120 PRINT "x^x=";x^x

Programı linkini https://benchmarko.github.io/CPCBasic/index.html online olan Amstrad simülatöründe deneyebilirsiniz

Bir sonraki macerada görüşmek üzere: C, Octave, Basic dillerinde LambertW fonksiyonu
Advertisement

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.