• No se han encontrado resultados

Práctica Tema 6: Integración numérica

N/A
N/A
Protected

Academic year: 2021

Share "Práctica Tema 6: Integración numérica"

Copied!
12
0
0

Texto completo

(1)

EPSEM-UPC

Dep. Matemática Aplicada III E.T.S Minas: Métodos matemáticos Octubre, 2008 Versión 1.3

Profesor: Francisco Palacios

Práctica Tema 6: Integración numérica

Contenido

• Cálculo de primitivas • Integrales definidas

• Aproximación de integrales usando polinomios interpoladores • Fórmulas simples

• Librería student: sumas de Riemman • Cálculo de trapecio compuesto con trapezoid • Cálculo de Simpson compuesto con simpson

Cálculo de primitivas, comando int

Integral de una expresión.

> f:=x*exp(x); F:=int(f,x); := f x ex := F x exex Integral de una función: es preciso incluir la variable.

> g:=x->x^2*ln(x);

:=

g xx2ln x( )

> G:=int(g,x);#no funciona, g es función, debemos escribir g(x)

:= G g x > G:=int(g(x),x); := G 1 − 3x 3 ( ) ln x 1 9x 3

Si Maple no puede calcular una primitiva, la devuelve indicada. > int(sin(x^3)*cos(x^2),x); d ⌠ ⌡ ⎮ ⎮ ( )sin x3 cos x( 2) x > int(x^3*cos(x^3),x); d ⌠ ⌡ ⎮ ⎮x3 ( ) cos x3 x

Maple incorpora algunas funciones especiales que son primitivas de funciones. > int(sin(x)/x,x); ( ) Si x > int(exp(x^2),x); −1 2I πerf I x( ) > int(x^4*sin(x^2),x); −1 + − 2x 3 ( ) cos x2 3 4xsin x( ) 2 3 8 2 π ⎛ ⎝ ⎜ ⎜⎜ ⎞⎟⎟⎟ FresnelS 2 x π >

Cálculo de integrales definidas

Cálculo exacto. Integral de una expresión. > f:=x^2;

v:=int(f,x=a..b);

(2)

:= f x2 := v 1 − 3b 3 1 3a 3

Cálculo exacto. Integral de una función. > g:=x->x^3*cos(x^3); v:=int(g(x),x=1..4); := g xx3cos x( 3) := vd ⌡ ⎮ ⎮ 1 4 x3cos x( 3) x

Cálculo numérico. Usar límites decimales, o usar evalf > g:=x->x^3*cos(x^3); v:=int(g(x),x=1..4); vf:=evalf(v); := g xx3cos x( 3) := vd ⌡ ⎮ ⎮ 1 4 x3cos x( 3) x := vf .8781165278 > f:=x^4*sin(x^3); v:=int(f,x=2..4); vf:=evalf(v); := f x4sin x( 3) := vd ⌡ ⎮ ⎮ 2 4 x4sin x( 3) x := vf -2.342794504 >

Aproximación usando polinomios interpoladores

Podemos aproximar una integral definida integrando un polinomio interpolador del integrando. > f:=x->x^4*sin(x^3); := f xx4sin x( 3) > plot(f(x),x=0..1); x 0.6 0.8 1 0.4 0.2 0.8 0.6 0.4 0.2 0

Interpolador de f con 6 nodos, paso h=(b-a)/5=0.2 > xx:=[0,0.2,0.4,0.6,0.8,1.0]; yy:=map(f,xx); p:=interp(xx,yy,x); := xx [0 .2 .4 .6 .8 1.0, , , , , ] := yy [0 .00001279986347 .001637281748 .02777642901 .2006719522 .8414709848, , , , , ] := p 2.592882701 x5 − 2.598819381 x4 + 1.002846043 x3 − .1650380980 x2 + .009599719913 x

Valor aproximado de la integral. > vp:=int(p,x=0..1);

:=

vp .1128819120

(3)

Valor exacto. > v:=int(f(x),x=0..1); := vd ⌡ ⎮ ⎮ 0 1 x4sin x( 3) x > vf:=evalf(v); := vf .1135043590 Error. > er:=vf-vp; := er .0006224470 >

Fórmulas simples

Fórmula del trapecio

> f:=x->x^2*sin(x^2); a:=0; b:=1.0; plot(f(x),x=a..b); := f xx2sin x( 2) := a 0 := b 1.0 x 0.6 0.8 1 0.4 0.2 0.8 0.6 0.4 0.2 0

A la vista del gráfico, podemos predecir que la aproximación usando el trapecio simple será poco precisa. > h:=b-a; vt:=h/2*(f(a)+f(b)); vtf:=evalf(vt); := h 1.0 := vt .4207354924 := vtf .4207354924

Calculamos el valor exacto y el error. > v:=int(f(x),x=a..b); vf:=evalf(v); er:=vf-vtf; := v .1821109658 := vf .1821109658 := er -.2386245266 Fórmula de Simpson

Para la misma integral, la fórmula de Simpson ha de tener un comportamiento notablemente mejor. > f:=x->x^2*sin(x^2); a:=0; b:=1.0; h:=(b-a)/2; vs:=h/3*(f(a)+4*f(a+h)+f(b)); := f xx2sin x( 2) := a 0

Page 3

(4)

:= b 1.0 := h .5000000000 := vs .1814791573 Calculamos el error > v:=int(f(x),x=a..b); vf:=evalf(v); er:=vf-vs; := v .1821109658 := vf .1821109658 := er .0006318085 >

Librería student; sumas de Riemman

La librería student contiene comandos útiles para la aprendizaje de algunos conceptos. > with(student);

D Diff Doubleint Int Limit Lineint Product Sum Tripleint changevar combine completesquare distance equate, , , , , , , , , , , , , , [

extrema integrand intercept intparts isolate leftbox leftsum makeproc maximize middlebox middlesum midpoint, , , , , , , , , , , ,

minimize powsubs rightbox rightsum showtangent simpson slope trapezoid value, , , , , , , , ]

El comando middlebox dibuja una suma de Riemman de n tramos evaluando la función en el punto central de cada tramo. El comando middlesum calcula el valor de la suma de Riemman representada por middlebox.

> f:=x->x^2*sin(x^2); a:=0;

b:=1;

n:=10;#número de intervalos

middlebox(f(x),x=a..b,n,title=`Aproximación con punto central`); `******** cálculo de la suma con punto central *******`;

ms:=middlesum(f(x),x=a..b,n); msf:=evalf(ms);

`********* valor exacto y error *****`; v:=int(f(x),x=a..b); vf:=evalf(v); er:=vf-msf; := f xx2sin x( 2) := a 0 := b 1 := n 10 x 1 0.8 0.6 0.4 0.2 0.8 0.6 0.4 0.2 0

Aproximación con punto central

******** cálculo de la suma con punto central *******

Page 4

(5)

:= ms 1 10 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 0 9 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ + 1 10i 1 20 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ + 1 10i 1 20 2 := msf .1809568712

********* valor exacto y error *****

:= v −1 + 2cos 1( ) 1 4 2 π ⎛ ⎝ ⎜ ⎜⎜ ⎞⎟⎟⎟ FresnelC 2 π := vf .1821109658 := er .0011540946

Acotación de error para funciones crecientes

Si la función a integrar es creciente en el intervalo de integración, el comando leftsum proporciona una aproximación por defecto y el comando rightsum proporciona una aproximación por exceso, por lo tanto, la diferencia nos proporciona una estimación del error.

> f:=x->x^2*sin(x^2); a:=0;

b:=1;

n:=30;#número de intervalos

leftbox(f(x),x=a..b,n,title=`Aproximación con punto izquierdo`); rightbox(f(x),x=a..b,n,title=`Aproximación con punto derecho`); `******** cálculo de la suma con punto central *******`;

ms:=middlesum(f(x),x=a..b,n); msf:=evalf(ms); `********* cota de error *****`; ls:=leftsum(f(x),x=a..b,n); rs:=rightsum(f(x),x=a..b,n); cota_err:=evalf(rs-ls);

`********* valor exacto y error *****`; v:=int(f(x),x=a..b); vf:=evalf(v); er:=vf-msf; := f xx2sin x( 2) := a 0 := b 1 := n 30 x 0.6 0.8 1 0.4 0.2 0.8 0.6 0.4 0.2 0

Aproximación con punto izquierdo

(6)

x 0.6 0.8 1 0.4 0.2 0.8 0.6 0.4 0.2 0

Aproximación con punto derecho

******** cálculo de la suma con punto central *******

:= ms 1 30 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 0 29 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ + 1 30i 1 60 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ + 1 30i 1 60 2 := msf .1819829916 ********* cota de error ***** := ls 1 30 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 0 29 ⎛ ⎝ ⎜⎜ 1 ⎞⎟⎟ 900i 2 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 900i 2 := rs 1 30 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 30 ⎛ ⎝ ⎜⎜ 1 ⎞⎟⎟ 900i 2 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 900i 2 := cota_err .0280490328

********* valor exacto y error *****

:= v −1 + 2cos 1( ) 1 4 2 π ⎛ ⎝ ⎜ ⎜⎜ ⎞⎟⎟⎟ FresnelC 2 π := vf .1821109658 := er .0001279742

Repetimos los cálculos con 60 tramos. > f:=x->x^2*sin(x^2);

a:=0; b:=1;

n:=60;#número de intervalos

leftbox(f(x),x=a..b,n,title=`Aproximación con punto izquierdo`); rightbox(f(x),x=a..b,n,title=`Aproximación con punto derecho`); `******** cálculo de la suma con punto central *******`;

ms:=middlesum(f(x),x=a..b,n); msf:=evalf(ms); `********* cota de error *****`; ls:=leftsum(f(x),x=a..b,n); rs:=rightsum(f(x),x=a..b,n); cota_err:=evalf(rs-ls);

`********* valor exacto y error *****`; v:=int(f(x),x=a..b); vf:=evalf(v); er:=vf-msf; := f xx2sin x( 2) := a 0 := b 1 := n 60

Page 6

(7)

x 1 0.8 0.6 0.4 0.2 0.8 0.6 0.4 0.2 0

Aproximación con punto izquierdo

(8)

x 1 0.8 0.6 0.4 0.2 0.8 0.6 0.4 0.2 0

Aproximación con punto derecho

******** cálculo de la suma con punto central *******

:= ms 1 60 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 0 59 ⎛ ⎝ ⎜⎜ 1 + ⎞⎟⎟ 60i 1 120 2 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin ⎛ ⎝ ⎜⎜ 1 + ⎞⎟⎟ 60i 1 120 2 := msf .1820789785 ********* cota de error ***** := ls 1 60 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 0 59 ⎛ ⎝ ⎜⎜ 1 ⎞⎟⎟ 3600i 2 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 3600i 2 := rs 1 60 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 60 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ 1 3600i 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin 1 3600i 2 := cota_err .0140245163

********* valor exacto y error *****

:= v −1 + 2cos 1( ) 1 4 2 π ⎛ ⎝ ⎜ ⎜⎜ ⎞⎟⎟⎟ FresnelC 2 π := vf .1821109658 := er .0000319873

Vemos que la cota de error calculada es muy conservadora. >

(9)

El comando trapezoid nos permite calcular el valor de la regla del trapecio compuesto. Trapecio compuesto con 3 tramos. Cálculo directo usando la fórmula.

> f:=x->x^2*sin(x^2); a:=0; b:=1; n:=3; h:=(b-a)/n; vtc:=h/2*(f(a)+2*f(a+h)+2*f(a+2*h)+f(b)); vtcf:=evalf(vtc); := f xx2sin x( 2) := a 0 := b 1 := n 3 := h 1 3 := vtc 1 + + 27 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 9 4 27 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 4 9 1 6sin 1( ) := vtcf .2080491672

Cálculo usando el comando trapezoid de la librería student. > vt3:=trapezoid(f(x),x=a..b,3); vt3f:=evalf(vt3); := vt3 1 + 3 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ 1 9i 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin 1 9i 2 1 6sin 1( ) := vt3f .2080491673

Determinanción del número de tramos para asegurar 5 decimales exactos usando trapecio compuesto. La cota de error es Etc<=M2/12*(b-a)*h^2, con h=(b-a)/n, n=número de tramos.

Empezamos determinando M2 gráficamente. > restart; with(student): > f:=x->x^2*sin(x^2); a:=0; b:=1; f2:=diff(f(x),x$2); plot(abs(f2),x=a..b); := f xx2sin x( 2) := a 0 := b 1 :=

f2 2sin x( 2) + 10 x2cos x( 2) − 4 x4sin x( 2)

x 0.6 0.8 1 0.4 0.2 5 4 3 2 1 0

Observando el gráfico, podemos tomar m2=5.4. > m2:=5.4;

(10)

h:=(b-a)/n; ineq:=m2/12*(b-a)*h^2<0.5*10^(-5); solve(ineq,n); := m2 5.4 := h 1 n := ineq .4500000000 < n2 .5000000000 10 -5 , ( )

RealRange −∞,Open -300.( ) RealRange(Open 300.( ),∞)

Necesitamos calcular trapecio compuesto con 300 tramos. > n:=300; vt.n:=trapezoid(f(x),x=a..b,n); vtf.n:=evalf(vt.n); := n 300 := vt300 1 + 300 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 299 ⎛ ⎝ ⎜⎜ 1 ⎞⎟⎟ 90000i 2 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 90000i 2 1 600sin 1( ) := vtf300 .1821135248

Calculamos el valor exacto y el error. > v:=int(f(x),x=a..b); vf:=evalf(v); er.n:=abs(vf-vtf.n); := v −1 + 2cos 1( ) 1 4 2 π ⎛ ⎝ ⎜ ⎜⎜ ⎞⎟⎟⎟ FresnelC 2 π := vf .1821109658 := er300 .25590 10-5

Vemos que, efectivamente, nuestra aproximación tiene 5 decimales exactos.

Librería student, comando simpson

El comando simpson nos permite calcular el valor de la regla compuesta de Simpson. Se indica el número de subintervalos que es el doble del número de tramos. El número de subintervalos debe de ser par.

Empezamos calculando el valor de Simpson doble usando la fórmula. > f:=x->x^2*sin(x^2); a:=0; b:=1; m:=2;# número de tramos h:=(b-a)/(2*m); vsc:=h/3*(f(a)+4*f(a+h)+2*f(a+2*h)+4*f(a+3*h)+f(b)); vscf:=evalf(vsc); := f xx2sin x( 2) := a 0 := b 1 := m 2 := h 1 4 := vsc 1 + + + 48 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 16 1 24 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 1 4 3 16 ⎛ ⎝ ⎜⎜ ⎞⎟⎟ sin 9 16 1 12sin 1( ) := vscf .1817265675

Ahora calculamos el mismo valor usando la librería student. > with(student);

Warning, new definition for D

D Diff Doubleint Int Limit Lineint Product Sum Tripleint changevar combine completesquare distance equate, , , , , , , , , , , , , , [

extrema integrand intercept intparts isolate leftbox leftsum makeproc maximize middlebox middlesum midpoint, , , , , , , , , , , ,

minimize powsubs rightbox rightsum showtangent simpson slope trapezoid value, , , , , , , , ]

Para m=2 tramos, el número de subintervalos es n=2*m=4. > vs2:=simpson(f(x),x=a..b,4);

Page 10

(11)

vtf2:=evalf(vs2); := vs2 1 + + 12sin 1( ) 1 3 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ − 1 2i 1 4 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ − 1 2i 1 4 2 1 6 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 1 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ 1 4i 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin 1 4i 2 := vtf2 .1817265675

A continuación, vamoa a determinar el número de tramos necesario para aproximar la integral con 5 decimales exactos mediante Simpson compuesto.

La cota de error es Etc<=M4/180*(b-a)*h^4 h=(b-a)/(2*m) Determinamos gráficamente M4. > restart; with(student): f:=x->x^2*sin(x^2); a:=0; b:=1; f4:=diff(f(x),x$4); plot(abs(f4),x=a..b); := f xx2sin x( 2) := a 0 := b 1 :=

f4156 x2sin x( 2) + 24cos x( 2) − 112 x4cos x( 2) + 16 x6sin x( 2)

x 1 0.8 0.6 0.4 0.2 160 140 120 100 80 60 40 20 0

podemos tomar m4=166. Calculamos el número de tramos m. > m4:=166; h:=(b-a)/(2*m); ineq:=m4/180*(b-a)*h^4<0.5*10^(-5); solve(ineq,m); := m4 166 := h 1 2 1 m := ineq 83 < 1440 1 m4 .5000000000 10 -5 , ( )

RealRange −∞,Open -10.36182848( ) RealRange(Open 10.36182848( ),∞)

Vemos que necesitamos m=11 tramos. Calculamos el valor de Simpson compuesto de 11 tramos. > m:=11; vs.m:=simpson(f(x),x=a..b,2*m); vsf.m:=evalf(vs.m); := m 11

Page 11

(12)

:= vs11 1 + + 66sin 1( ) 2 33 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 11 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ − 1 11i 1 22 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ − 1 11i 1 22 2 1 33 ⎛ ⎝ ⎜ ⎜⎜

⎟⎟⎟ = i 1 10 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ 1 121i 2 ⎛ ⎝ ⎜⎜ ⎞ ⎠ ⎟⎟ sin 1 121i 2 := vsf11 .1821104551

Para acabar, comparamos nuestro valor con el valor de la integral calculado con . > v:=int(f(x),x=a..b); vf:=evalf(v); er:=vf-vsf.m; := v −1 + 2cos 1( ) 1 4 2 π ⎛ ⎝ ⎜ ⎜⎜ ⎞⎟⎟⎟ FresnelC 2 π := vf .1821109658 := er .5107 10-6 >

Page 12

Referencias

Documento similar

“Un artista del hambre”, “Primer sufrimiento” (también conocido en español como “Un artista del trapecio”) y “Josefina la cantante o el pueblo de los ratones” (Kafka,

• Bloque profesional: compuesto por 5 materias sobre el desarrollo de la práctica profesional de la Ingeniería Industrial, a propuesta del Colegio Oficial de

En su natal Caracas, donde se formó Bello como latinista, no pudo tener la oportunidad de aprender griego. Cuando nació, ya hacía 14 años que los jesuitas habían sido

Primeros ecos de la Revolución griega en España: Alberto Lista y el filohelenismo liberal conservador español 369 Dimitris Miguel Morfakidis Motos.. Palabras de clausura

La dimensión constitucional del Estatuto resulta, finalmente, del hecho de que los mismos son normas disponibles para el constituyente, en la medida, primero, que la

A diferencia del comando cadena.inicia_con, este comando nos permite buscar en una cadena de texto si esta termina con un carácter especificado y devuelve un valor buelano. Este

El valor es maximo cuando p = 2/9 (es 38.8), que es el caso en que estaba indiferente entre cosechar en uno o dos d as y es cuando mas util le resultar a la informacion para