Difference between revisions of "Numerical differentiation and integration"

From Process Model Formulation and Solution: 3E4
Jump to navigation Jump to search
Line 22: Line 22:


=== Source code used in slides ===
=== Source code used in slides ===
'''Composite trapezoidal integration'''


{| class="wikitable"
{| class="wikitable"
Line 81: Line 83:
     # Composite rule
     # Composite rule
     In = f(a)
     In = f(a)
     for k in range(2, n+1):
     for k in range(1, n):
         x  = x + h
         x  = x + h
         In += 2*f(x)
         In += 2*f(x)
Line 93: Line 95:
     print(trapezcomp(func, 0, np.pi/2, 1))  # 0.785398163397
     print(trapezcomp(func, 0, np.pi/2, 1))  # 0.785398163397
     print(trapezcomp(func, 0, np.pi/2, 2))  # 0.948059448969
     print(trapezcomp(func, 0, np.pi/2, 2))  # 0.948059448969
</syntaxhighlight>
|}
'''Romberg integration'''
{| class="wikitable"
|-
! MATLAB
! Python
|-
| width="50%" valign="top" |
<syntaxhighlight lang="matlab">
</syntaxhighlight>
Then use this function as follows:
<syntaxhighlight lang="matlab">
>> f = @(x)sin(x);
>> format long
>>
</syntaxhighlight>
| width="50%" valign="top" |
<syntaxhighlight lang="python">
</syntaxhighlight>
</syntaxhighlight>
|}
|}

Revision as of 13:29, 10 November 2010

Part A: Numerical differentiation

<pdfreflow> class_date = 01 to 04 November button_label = Create my course notes! show_page_layout = 1 show_frame_option = 1 pdf_file = E-Numerical-differentiation-01-Nov-2010.pdf </pdfreflow>


Part B: Numerical integration

<pdfreflow> class_date = 08 to 15 November button_label = Create my course notes! show_page_layout = 1 show_frame_option = 1 pdf_file = E-Numerical-integration-08-Nov-2010.pdf </pdfreflow>

Source code used in slides

Composite trapezoidal integration

MATLAB Python
function In = trapezcomp(f, a, b, n)
%    Composite trapezoidal function integration
%    
%    INPUTS:
%    f:  the function to integrate
%    a:  lower bound of integration
%    b:  upper bound
%    n:  number of panels to create between ``a`` and ``b``

% Initialization
h = (b-a)/n;
x = a;

% Composite rule
In =f(a);
for k=2:n
    x  = x + h;
    In = In + 2. * f(x);
end
In = (In + f(b)) * h * 0.5;
% end of function

Then use this function as follows:

>> f = @(x)sin(x);
>> I1 = trapezcomp( f, 0, pi/2, 1 )    % 0.7854  
>> I2 = trapezcomp( f, 0, pi/2, 2 )    % 0.9481
import numpy as np

def trapezcomp(f, a, b, n):
    """
    Composite trapezoidal function integration
    
    INPUTS:
    f:  the function to integrate
    a:  lower bound of integration
    b:  upper bound
    n:  number of panels to create between ``a`` and ``b``
    """
 
    # Initialization
    h = (b - a) / n
    x = a
 
    # Composite rule
    In = f(a)
    for k in range(1, n):
        x  = x + h
        In += 2*f(x)

    return (In + f(b))*h*0.5

if __name__ == '__main__':
    def func(x):
        return np.sin(x)
        
    print(trapezcomp(func, 0, np.pi/2, 1))  # 0.785398163397
    print(trapezcomp(func, 0, np.pi/2, 2))  # 0.948059448969

Romberg integration

MATLAB Python

Then use this function as follows:

>> f = @(x)sin(x);
>> format long
>>