Integral exponensial dalam Visual Basic : Deret Ramanujan

Integral eksponensial sering muncul dalam fisika dan matematika. Integral tersebut memiliki bentuk

\( Ei(x)=\int_{-\infty}^x {e^t \over t} dt \)

Integral ini tidak dapat dihitung secara analitik. Integral tersebut harus dinitung secara numerik.

Beberapa aplikasi sudah dilengkapi dengan instruksi utuk menghitung integral eksponensial. Seperti Mathematica menggunakan instruksi \( Ei(x) \) dan Matlab menggunakan instruksi \( expint(x) \).

Bagaimana jika perlukan fungsi itu untuk digunakan dalam program viasual basic, padahal fungsi tersebut  tidak tersedia dalam visual basic. Saya buat fungsi tersebut dengan berbasis deret Ramanujan. Exspresi deret Ramanujan untuk integral eksponensial adalah

Berikut adalah fungsi yang saya buat beserta subroutin untuk menjalankannya. Silakan bagi yang ingin menggunakan. Tinggal copy paste ke dalam modul visual basic.

Berikut adalah contoh hasil perhitungan dibandingkan dengan Wolframalpha. Hasilnya sangat mendekati.

Berikut adalah fungsi integral eksponensial

Function EiR(x As Double) As Double

   Dim fak(100), suk(100) As Double

   n = 40

   fak(1) = 1

   i = 1

   Do

      i = i + 1

      fak(i) = fak(i – 1) * i

   Loop Until i = n

   suk(1) = 1

   suk(2) = 1

   i = 1

   Do

      i = i + 1

      If (i Mod 2) = 1 Then

         m = i \ 2

         suk(i) = suk(i – 2) + 1 / (2 * m + 1)

         suk(i + 1) = suk(i)

      End If

   Loop Until i = n

   If x > 0 Then

      jum = 0

      i = 0

      Do

         i = i + 1

         satu = Exp(i * Log(x))

         dua = Exp((i – 1) * Log(2))

         If (i Mod 2) = 1 Then

            jum = jum + satu * suk(i) / (fak(i) * dua)

         Else

            jum = jum – satu * suk(i) / (fak(i) * dua)

         End If

      Loop Until i = n

      jum = 0.57721 + Log(x) + Exp(x / 2) * jum

   Else

     jum = 0

     i = 0

     Do

        i = i + 1

        satu = Exp(i * Log(Abs(x)))

        dua = Exp((i – 1) * Log(2))

        jum = jum – satu * suk(i) / (fak(i) * dua)

     Loop Until i = n

     jum = 0.57721 + Log(Abs(x)) + Exp(x / 2) * jum

  End If

    EiR = jum

End Function

Sub hitungEiR()

   Dim x As Double

      i = 0

   Do

      i = i + 1

      x = 1# * i

      Cells(i + 1, 1) = x

      Cells(i + 1, 2) = EiR(x)

   Loop Until i = 10

End Sub

Jika merasa bermanfaat, silakan share dan like: