integración numérica.docx

10
Fórmulas de Integración Numérica La regla trapezoidal La función de los valores de f (0) = 0.2 y f (0.8) = 0.232 se puede sustituir en la Ec. (19.11) para obteneFIG. 19. 8 Representación gráfica del uso de una sola aplicación de la regla trapezoidal para aproximar la integral de f (x) = 0.2 + 25 – 200x2 + 675x3 - 900x4 + 400x5 desde x = 0 a 0,8.r Solución: function I = trap(func,a,b,n,varargin) % trap: composite trapezoidal rule quadrature % I = trap(func,a,b,n,pl,p2,...): % composite trapezoidal rule % input: % func = name of function to be integrated % a, b = integration limits % n = number of segments (default = 100) % pl,p2,... = additional parameters used by func % output: % I = integral estimate if nargin<3,error('at least 3 input arguments required'),end if ~(b>a),error('upper bound must be greater than lower'),end if nargin<4|isempty(n),n=100;end x = a; h = (b - a)/n; s=func(a,varargin{:}); for i = 1 : n-1 x = x + h;

Upload: luis-enrique-quispe-hancco

Post on 19-Jul-2016

13 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Integración Numérica.docx

Fórmulas de Integración NuméricaLa regla trapezoidal

La función de los valores de f (0) = 0.2 y f (0.8) = 0.232 se puede sustituir en la Ec. (19.11) para obteneFIG. 19.

8 Representación gráfica del uso de una sola aplicación de la regla trapezoidal para aproximar la integral de f (x) = 0.2 + 25 – 200x2 + 675x3 - 900x4 + 400x5 desde x = 0 a 0,8.r

Solución:

function I = trap(func,a,b,n,varargin)

% trap: composite trapezoidal rule quadrature

% I = trap(func,a,b,n,pl,p2,...):

% composite trapezoidal rule

% input:

% func = name of function to be integrated

% a, b = integration limits

% n = number of segments (default = 100)

% pl,p2,... = additional parameters used by func

% output:

% I = integral estimate

if nargin<3,error('at least 3 input arguments required'),end

if ~(b>a),error('upper bound must be greater than lower'),end

if nargin<4|isempty(n),n=100;end

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

s=func(a,varargin{:});

for i = 1 : n-1

x = x + h;

s = s + 2*func(x,varargin{:});

end

s = s + func(b,varargin{:});

I = (b - a) * s/(2*n);

Page 2: Integración Numérica.docx

41.94805.

>> v=@(t) sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t)

v =

@(t) sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t)

format long

>> trap(v,0,3,5)

ans =

41.86992959072735

>> trap(v,0,3,10000)

x =

41.94804999917528

Integración con Segmentos DesigualesFIG. 19.14 Archivo M para aplicar la regla trapezoidal para datos desigualmente espaciados

function I = trapuneq(x,y)

% trapuneq: unequal spaced trapezoidal rule quadrature

% I = trapuneq(x,y):

% Applies the trapezoidal rule to determine the integral

% for n data points (x, y) where x and y must be of the

% same length and x must be monotonically ascending

% input:

% x = vector of independent variables

% y = vector of dependent variables

% output:

% I = integral estimate

if nargin<2,error('at least 2 input arguments required'),end

Page 3: Integración Numérica.docx

if any(diff(x)<0),error('x not monotonically ascending'),end

n = length(x);

if length(y)~=n,error('x and y must be same length'); end

s = 0;

for k = 1:n-1

s = s + (x(k+l)-x(k))*(y(k)+y(k+l))/2;

end

I = s;

Rpta:

>> x = [0 .12 .22 .32 .36 .4 .44 .54 .64 .7 .8];

>> y = 0.2+25*x-200*x.^2+675*x.^3-900*x.^4+400*x.^5;

>> trapuneq(x,y)

ans =

1.5948

>> format short g

>> t=[0 1 1.4 2 3 4.3 6 6.7 8];

>> g=9.81;m=70;cd=0.275;

>> v=round(sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t));

>> z=cumtrapz(t,v)

z=

0 5 9.6 19.2 41.7 80.7 144.45 173.85 231.7

>> ta=linspace(t(1),t(length(t)));

>> za=m/cd*log(cosh(sqrt(g*cd/m)*ta));

>> plot(ta,za,t,z,'o')

(1

Page 4: Integración Numérica.docx

>> title('Distance versus time')

>> xlabel('t (s)'),ylabel('x (m)')

>> legend('analytical','numerical')

If the plate is 8 m long (x dimension) and 6 m wide (y dimension), compute the average

temperature.

q = dblquad(fun, xmin, xmax, ymin, ymax, tol)

>> q = dblquad(@(x,y) 2*x*y+2*x-x.^2-2*y.^2+72,0,8,0,6)

q =

2816

>> x=[0 2.5 5 10 12.5 15 20 25 30];

>> y=[0 3.9007 1.5297 9.5120 11.3940 8.7025 2.8087 ...

1.0881 0.3537];

>> trapz(x,y)

ans =

132.6458

Integración de RombergEl Algoritmo de Integración de RombergFig. 20.2 Archivo M para Aplicar la Integración de Romberg

RPMBERG

function [q,ea,iter]=romberg(func,a,b,es,maxit,varargin)

Page 5: Integración Numérica.docx

% romberg: Romberg integration quadrature

% q = romberg(func,a,b,es,maxit,p1,p2,...):

% Romberg integration.

% input:

% func = name of function to be integrated

% a, b = integration limits

% es = desired relative error (default = 0.000001%)

% maxit = maximum allowable iterations (default = 30)

% pl,p2,... = additional parameters used by func

% output:

% q = integral estimate

% ea = approximate relative error (%)

% iter = number of iterations

if nargin<3,error('at least 3 input arguments required'),end

if nargin<4|isempty(es), es=0.000001;end

if nargin<5|isempty(maxit), maxit=50;end

n = 1;

I(1,1) = trap(func,a,b,n,varargin{:});

iter = 0;

while iter<maxit

iter = iter+1;

n = 2^iter;

I(iter+1,1) = trap(func,a,b,n,varargin{:});

for k = 2:iter+1

j = 2+iter-k;

I(j,k) = (4^(k-1)*I(j+1,k-1)-I(j,k-1))/(4^(k-1)-1);

end

ea = abs((I(1,iter+1)-I(2,iter))/I(1,iter+1))*100;

if ea<=es, break; end

end

q = I(1,iter+1);

Page 6: Integración Numérica.docx

Solución:

>> f=@(x) 0.2+25*x-200*x^2+675*x^3-900*x^4+400*x^5;

>> romberg(f,0,0.8)

ans =

1.6405

function [q,ea,iter]=romberg(func,a,b,es,maxit,varargin)

% romberg: Romberg integration quadrature

% q = romberg(func,a,b,es,maxit,p1,p2,...):

% Romberg integration.

% input:

% func = name of function to be integrated

% a, b = integration limits

% es = desired relative error (default = 0.000001%)

% maxit = maximum allowable iterations (default = 30)

% pl,p2,... = additional parameters used by func

% output:

% q = integral estimate

% ea = approximate relative error (%)

% iter = number of iterations

if nargin<3,error('at least 3 input arguments required'),end

if nargin<4|isempty(es), es=0.00000l;end

if nargin<5|isempty(maxit), maxit=50;end

n = 1;

I(1,1) = trap(func,a,b,n,varargin{:});

iter = 0;

while iter<maxit

iter = iter+l;

n = 2^iter;

I(iter+l,l) = trap(func,a,b,n,varargin{:});

for k = 2:iter+l

j = 2+iter-k;

Page 7: Integración Numérica.docx

I(j,k) = (4^(k-1)*I(j+1,k-1)-I(j,k-1))/(4^(k-1)-1);

end

ea = abs((I(1,iter+l)-I(2,iter))/I(1,iter+l))*100;

if ea<=es, break; end

end

q = I(1,iter+l);

QUADADA´T

function q = quadadapt(f,a,b,tol,varargin)

% Evaluates definite integral of f(x) from a to b

if nargin < 4 | isempty(tol),tol = 1.e-6;end

c = (a + b)/2;

fa = feval(f,a,varargin{:});

fc = feval(f,c,varargin{:});

fb = feval(f,b,varargin{:});

q = quadstep(f, a, b, tol, fa, fc, fb, varargin{:});

end

function q = quadstep(f,a,b,tol,fa,fc,fb,varargin)

% Recursive subfunction used by quadadapt.

h = b - a; c = (a + b)/2;

fd = feval(f,(a+c)/2,varargin{:});

fe = feval(f,(c+b)/2,varargin{:});

q1 = h/6 * (fa + 4*fc + fb);

q2 = h/12 * (fa + 4*fd + 2*fc + 4*fe + fb);

if abs(q2 - q1) <= tol

q = q2 + (q2 - q1)/15;

else

qa = quadstep(f, a, c, tol, fa, fd, fc, varargin{:});

qb = quadstep(f, c, b, tol, fc, fe, fb, varargin{:});

q = qa + qb;

end

Page 8: Integración Numérica.docx

end

SOLUCION DE:

>> format long

>> quad(@humps,0,1)

ans =

29.85832612842764

OOTRO

function y = myhumps(x,q,r,s)

y = 1./((x-q).^2 + 0.01) + 1./((x-r).^2+0.04) - s;

SOLUCION:

Then, we can integrate it with an error tolerance of 10−4 as in

>> quad(@myhumps,0,1,le-4,[],0.3,0.9,6)

ans =

29.85812133214492

Romberg integration:

>> format long

>> i2=@(t) (10*exp(-t).*sin(2*pi*t)).^2;

>> [q,ea,iter]=romberg(i2,0,.5)

q =

15.41260804288977

ea =

1.480058787326946e-008

iter =

Page 9: Integración Numérica.docx

5

Thus, with the default stopping criterion of es = 1 × 10−6, we obtain a result that is correct

to over nine significant figures in five iterations. We can obtain an even better result if we

impose a more stringent stopping criterion:

>> [q,ea,iter]=romberg(i2,0,.5,1e-15)

q =

15.41260804810169

ea =

0

iter =

7

>> irms2=quad(i2,0,.5)

irms2 =

15.41260804934509

>> irms2=quadl(i2,0,.5)

irms2 =

15.41260804809967

>> irms=sqrt(irms2)

irms =

3.92588945948554

>> [tmax,imax]=fminbnd(@(t) -10*exp(-t).*sin(2*pi*t),0,.5)

tmax =

0.22487940319321

imax =

-7.88685387393258