12-267/Numerical Methods

From Drorbn
Revision as of 19:59, 25 October 2012 by Twine (talk | contribs) (Added python example of Euler's method, headings)
Jump to navigationJump to search

Summary of Numerical Methods

Based largely off of a note available here Simon1 --Twine 20:55, 25 October 2012 (EDT)

Numerical methods: and , is a solution.

1. Using the proof of Picard's Theorem:


2. The Euler Method:

if h is constant

Backward Euler formula:

Local truncation error: where

Local error is proportional to .

Global error is proportional to h.


3. Improved Euler Formula (or Heun Formula):

Local truncation error is proportional to

Global truncation error is proportional to


4. The Runge-Kutta Method:

where

Local truncation error is proportional to .

Global truncation error is proportional to .

Python Example of Euler's Method

In class on October 15th we discussed Euler's Method to numerically compute a solution to a differential equation. and are given as well as an increment amount , , and we use the guess where f computes the derivative as a function of x and y.

Here is an example of code (written in Python) which carries out Euler's Method for the example we discussed in class, :

   def f(x, y):
       return -y
   
   def euler(x, y, f, h, x_max):
       """Take in coordinates x and y, a function f(x, y) which calculates
          dy/dx at (x, y), an increment h, and a maximum value of x.
          
          Return a list containing coordinates in the Euler's Method computation
          of the solution to Phi' = f(x, Phi(x)), Phi(x) = y, with the x
          values of those coordinates separated by h, and not exceeding x_max.
       """
       if x > x_max: # we have already calculated all our values
           return []
       x_next, y_next = (x + h, y + f(x, y)*h) # calculate the next x, y values
       # return the current coordinates, and every coordinates following it, in a list
       return [(x_next, y_next)] + euler(x_next, y_next, f, h, x_max) 
   
   if __name__ == '__main__':
       print euler(0, 1, f, 0.01, 1)[-1]