Post Reply 
Numerical Integration using chained Gauss-Legendre
03-21-2016, 05:51 PM (This post was last modified: 01-16-2020 08:35 AM by Namir.)
Post: #1
Numerical Integration using chained Gauss-Legendre
Back last year, a member of this website pointed to the simplicity of using the Gauss-Legendre quadrature (with a 3rd order Legendre polynomial) with vintage and new HP calculators. This prospect made me think of using a "chained" version of that type of quadrature to yield relatively good results. Here are my preliminary results usin Excel VBA.

The following Excel VB Code compares the chained Simpson's rule with a "chained" Gauss-Legendre quadrature using a 3rd order Legendre polynomial. The following is the configuration contents of the Excel sheet:

Code:
Cell        Contents
----------------------------------
A1        "A"
A2        "B"
A3        "N"
A4        "FX"
A5        "Simpson"
A6        ""
A7        Exact

B1        value for A, e.g. 1
B2        value for B, e.g. 2
B3        value for N, e.g. 19
B4        string for FX, e.g. "1/X"

C5        Formula for % error for Simpson's rule
C6        Formula for % error for Gauss-Legendre quadrature

Here is the VBA code:

Code:
Function Fx(ByVal sFx As String, ByVal X As Double) As Double
  sFx = Replace(sFx, "EXP(", "!")
  sFx = Replace(sFx, "X", "(" & X & ")")
  sFx = Replace(sFx, "!", "EXP(")
  Fx = Evaluate(sFx)
End Function

Sub go3()
  Const MAX = 3
  Dim A As Double, B As Double, Xa As Double, Xb As Double
  Dim N As Integer, I As Integer, J As Integer, C As Integer, h As Double
  Dim Sum As Double, Sum2 As Double, X As Double
  Dim Xar(MAX) As Double, Wt(MAX) As Double, T1 As Double, T2 As Double
  Dim sFx As String
  
  A = [B1].Value
  B = [B2].Value
  N = [B3].Value
  sFx = [B4].Value
  sFx = UCase(Replace(sFx, " ", ""))
  
  ' Simpson's rule
  If N Mod 2 = 0 Then N = N + 1
  h = (B - A) / (N + 1)
  X = A + h
  Sum = Fx(sFx, A) + Fx(sFx, B) + 4 * Fx(sFx, X)
  C = 2
  For I = 2 To N
    X = X + h
    Sum = Sum + C * Fx(sFx, X)
    C = 6 - C
  Next I
  [B5].Value = h / 3 * Sum
  
  ' Gauss Quadrature
   N = [B8].Value * [B3].Value
   Xar(1) = 0
   Wt(1) = 8 / 9
   Xar(2) = Sqr(3 / 5)
   Wt(2) = 5 / 9
   Xar(3) = -Xar(2)
   Wt(3) = Wt(2)
   
    If N Mod 2 = 0 Then N = N + 1
    h = (B - A) / (N + 1)
    Xa = A
    Xb = Xa + h
    Sum = 0
    Do
      T1 = (Xb - Xa) / 2
      T2 = (Xb + Xa) / 2
      Sum2 = 0
      For J = 1 To MAX
        Sum2 = Sum2 + Wt(J) * Fx(sFx, T1 * Xar(J) + T2)
      Next J
      Sum = Sum + T1 * Sum2
      Xa = Xb
      Xb = Xb + h
    Loop Until Xa >= B
    [A6].Value = "GS" & MAX
    [B6].Value = Sum
End Sub

As you experiment with different functions and integration ranges, you should see that the chained Gauss-Legendre quadrature is significantly more accurate than Simpson's rule. Both methods use three points per divided interval.

Enjoy!

Namir
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
Numerical Integration using chained Gauss-Legendre - Namir - 03-21-2016 05:51 PM



User(s) browsing this thread: 1 Guest(s)