15.12.2012 Views

scipy tutorial - Baustatik-Info-Server

scipy tutorial - Baustatik-Info-Server

scipy tutorial - Baustatik-Info-Server

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1.4.2 Gaussian quadrature (integrate.gauss_quadtol)<br />

SciPy Reference Guide, Release 0.8.dev<br />

A few functions are also provided in order to perform simple Gaussian quadrature over a fixed interval. The first<br />

is fixed_quad which performs fixed-order Gaussian quadrature. The second function is quadrature which<br />

performs Gaussian quadrature of multiple orders until the difference in the integral estimate is beneath some tolerance<br />

supplied by the user. These functions both use the module special.orthogonal which can calculate the roots<br />

and quadrature weights of a large variety of orthogonal polynomials (the polynomials themselves are available as<br />

special functions returning instances of the polynomial class — e.g. special.legendre).<br />

1.4.3 Integrating using samples<br />

There are three functions for computing integrals given only samples: trapz , simps, and romb . The first two<br />

functions use Newton-Coates formulas of order 1 and 2 respectively to perform integration. These two functions<br />

can handle, non-equally-spaced samples. The trapezoidal rule approximates the function as a straight line between<br />

adjacent points, while Simpson’s rule approximates the function between three adjacent points as a parabola.<br />

If the samples are equally-spaced and the number of samples available is 2 k + 1 for some integer k, then Romberg<br />

integration can be used to obtain high-precision estimates of the integral using the available samples. Romberg integration<br />

uses the trapezoid rule at step-sizes related by a power of two and then performs Richardson extrapolation<br />

on these estimates to approximate the integral with a higher-degree of accuracy. (A different interface to Romberg<br />

integration useful when the function can be provided is also available as romberg).<br />

1.4.4 Ordinary differential equations (odeint)<br />

Integrating a set of ordinary differential equations (ODEs) given initial conditions is another useful example. The<br />

function odeint is available in SciPy for integrating a first-order vector differential equation:<br />

dy<br />

dt<br />

= f (y, t) ,<br />

given initial conditions y (0) = y0, where y is a length N vector and f is a mapping from R N to R N . A higher-order<br />

ordinary differential equation can always be reduced to a differential equation of this type by introducing intermediate<br />

derivatives into the y vector.<br />

For example suppose it is desired to find the solution to the following second-order differential equation:<br />

d2w − zw(z) = 0<br />

dz2 �<br />

1<br />

dw<br />

with initial conditions w (0) = 3√<br />

32 2 and �<br />

Γ( dz = −<br />

z=0 3) 1<br />

3√<br />

1 3Γ(<br />

. It is known that the solution to this differential<br />

3)<br />

equation with these boundary conditions is the Airy function<br />

w = Ai (z) ,<br />

which gives a means to check the integrator using special.airy.<br />

First, convert this ODE into standard form by setting y = � dw<br />

dz , w� and t = z. Thus, the differential equation becomes<br />

In other words,<br />

dy<br />

dt =<br />

�<br />

ty1<br />

y0<br />

�<br />

=<br />

� 0 t<br />

1 0<br />

� � y0<br />

y1<br />

f (y, t) = A (t) y.<br />

�<br />

=<br />

� 0 t<br />

1 0<br />

1.4. Integration (<strong>scipy</strong>.integrate) 13<br />

�<br />

y.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!