e^x hesaplama makrosu

Katılım
12 Ocak 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 İngilizce
Herkese merhabalar,

Forumu aramama rağmen bulamadığım bir durumda yardıma ihtiyacım var,

Makro ödevim olarak exponential fonksiyon ile girilen x değeri için e üzeri x hesaplaması yaptırmam gerekiyor ve bunun için ödevde geçtiği üzere özellikle "For .. Next" döngüsü kullanmam gerekiyor.

Formül:

e^x = 1 + x + x^2/2! + x^3/3! +.....+ x^n/n!

Makroyu aşağıdaki şekilde oluşturdum:

Kod:
Sub exponential()

Dim x, n As Double

MsgBox ("This program calculates the value of exponential of the given number")

x = InputBox("Please enter a number")

For n = 1 To 100

e = 1 + x + ((x ^ n) / f(n))

n = n + 1

Next n

Cells(1, 1) = "e^" & x & "="

Cells(1, 2) = e

End Sub

Public Function f(ByRef n As Double) As Double

If n = 1 Then

f = 1

Exit Function

Else

f = n * f(n - 1)

End If

End Function
Faktoriyel fonksiyonu için ayrı bir fonksiyon tanımladım. Ama sonucu bir türlü istediğim gibi alamıyorum:

e^1 = "2,718281828" çıkması gerekirken "2"
e^2 = "7,389056099" çıkması gerekirken "3"
e^3 = "20,085536923" çıkması gerekirken "4"
sonuçları geliyor. Faktoriyel fonksiyonunu ayrı olarak denedim onda problem yok ama asıl hesaplamayı bir türlü yaptıramadım.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.

En azından , denklemin ekran görüntüsünü, hatta örnek belge eklemeniz yerinde olabilir.
+, *, / , üs birarada olunca öncelik bakımından gerekli sanırım.
Ekran görüntüsü ve örnek dosya yüklemek için cevabımın altındaki İMZA bölümünde
gerekli açıklama var.
.
 

İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,104
Excel Vers. ve Dili
Excel, 365 - İngilizce
.

Bu işinize yarar mı?

Kod:
Sub esayisi()

   Dim n As Double
   Dim x As Double
   Dim e As Double
   Dim sone As Double
   
   x = CInt(InputBox("x için bir sayı giriniz."))
   
   e = 1
   n = 1
   Do
      sone = e
      e = e + x ^ n / fakt(n)
      n = n + 1
   Loop While Abs(e - sone) > 0.0000001
   
   MsgBox "e^" & x & "=" & e
   
   [A2] = "e^" & x & "=" & e
       
End Sub


Public Function fakt(ByRef Deg As Double) As Double

   If Deg = 1 Then
      fakt = 1
      Exit Function
   Else
      fakt = Deg * fakt(Deg - 1)
   End If

End Function

.
 
Katılım
12 Ocak 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 İngilizce
İdris Bey,

Bizzat yaradı teşekkür ederim, demek ki "For..Next" döngüsü kullanmadan da yapılabiliyormuş, ama tam olarak farkı anlamadım. Rica edersem açıklayabilir misiniz özellikle "sone" kısmını?
 

İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,104
Excel Vers. ve Dili
Excel, 365 - İngilizce
İdris Bey,

Bizzat yaradı teşekkür ederim, demek ki "For..Next" döngüsü kullanmadan da yapılabiliyormuş, ama tam olarak farkı anlamadım. Rica edersem açıklayabilir misiniz özellikle "sone" kısmını?
.

"For .. Next" döngüsününü burada kullanmak güçtür. Çünkü işin içine faktöryal girdiği için Excel'in sınırları (176!) aşıldığından sonuca ulaşmak mümkün değildir. e sayısına yaklaşmak için For n = 1 To 100 ya da For n = 1 To 1000 yeterli değil.

Bu nedenle,
Do
.....
Loop While Abs(e - sone) > 0.0000001 gibi oldukça küçük bir farka döngüyü oluşturmak gerekir.


.
 
Katılım
12 Ocak 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 İngilizce
Çok teşekkür ederim İdris Bey şimdi anladım. Çünkü kendi yazdığım makroda düzeltmeler yaptım ancak yine de x i 1 olarak girince 2.15 gibi bir sonuç çıkıyor, bunun sebebi de sizin yukarıda bahsettiğiniz mevzuymuş. Gerçi ödevde n=100 e kadar loop istenmişti demek ki 100! e kadar hesaplattığımızda e sayısına ancak 2.15 şeklinde yaklaşabiliyoruz.
Yardımınız için çok teşekkür ederim özellikle de son açıklamanız için. Cidden bütün taşları yerine oturttu.
 
Üst