Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Integration with different methods

How can i define my variable method in my function so that my integrate function can calculate the same integral via a chosen method ? Maybe i have to define an alias for the different functions?

import argparse 

def dummy_function(x_value): 
    return 4/(1+x_value**2)

def integrate(method,function,integration_range,n_slices): 
    method = ? 
    return integral_area

def riemann(function, integration_range, n_slices):
    x_start = integration_range[0]
    x_stop = integration_range[1]
    delta = (x_stop-x_start) / n_slices
    divisions = [x_start + j*delta for j in range(n_slices)]
    integral_area=0
    for x_value in divisions:
        integral_area += function(x_value)*delta
    return integral_area

def trapezoid(function, integration_range, n_slices):
    x_start = integration_range[0]
    x_stop = integration_range[1]
    delta = (x_stop-x_start) / n_slices
    divisions = [x_start + j*delta for j in range(n_slices)]
    integral_area=0
    for x_value in divisions:
        integral_area += (function(x_value)+function(x_value + 
        delta))*delta/2
    return integral_area

def simpson(function, integration_range, n_slices):
    x_start = integration_range[0]
    x_stop = integration_range[1]
    delta = (x_stop-x_start) / n_slices
    divisions = [x_start + j*delta for j in range(n_slices)]
    integral_area=0
    for x_value in divisions:
        integral_area += (function(x_value)+ 4*function(x_value + delta/2)
        + function(x_value + delta))*delta/6
    return integral_area

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Calculate Integral') 
    parser.add_argument('-s','--slices', type=int, default=1000000, help='Enter number of slices') 
    parser.add_argument('-m','--method', choices=['riemann','trapezoid','simpson'], default='riemann' ,help='Enter integration method') 
    args = parser.parse_args() 
    N_SLICES = args.slices 
    method = args.method 
    INTEGRAL_RANGE = [0, 1] 
    INTEGRAL_RESULT = integrate(method, dummy_function, INTEGRAL_RANGE, N_SLICES)
    print("Result:", INTEGRAL_RESULT)

i tried some ways but i get errors like ‘str’ object not callable etc.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Something like this should work:

def integrate(method,function,integration_range,n_slices): 
    methods = {
        'riemann': riemann,
        'trapezoid': trapezoid,
        'simpson': simpson
        } 
    return methods[method](function, integration_range, n_slices)

You could simplify this quite a bit though, no need to repeat code:

def integrate(method,function,integration_range,n_slices): 
    methods = {
        'riemann': riemann,
        'trapezoid': trapezoid,
        'simpson': simpson
        } 
    x_start, x_stop = integration_range
    delta = (x_stop-x_start) / n_slices
    divisions = [x_start + j*delta for j in range(n_slices)]
    return methods[method](function, divisions, delta)

def riemann(function, divisions, delta):
    return sum(function(x_value)*delta for x_value in divisions)

def trapezoid(function, divisions, delta):
    return sum((function(x_value)+function(x_value + 
        delta))*delta/2 for x_value in divisions)

def simpson(function, divisions, delta):
    return sum((function(x_value)+ 4*function(x_value + delta/2)
        + function(x_value + delta))*delta/6 for x_value in divisions)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading