m3 bucles en maple - opencourseware de la...

Post on 09-Jul-2018

232 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

BUCLES EN MAPLEBUCLES EN MAPLE

Prof. Carlos Conde LProf. Carlos Conde LáázarozaroProf. Arturo Hidalgo LProf. Arturo Hidalgo Lóópezpez

Prof. Alfredo LProf. Alfredo Lóópezpez

Marzo, 2007

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

DefiniciónDefinición

Un cálculo que se repite varias veces, se programamediante una estructura denominada: BUCLE

Para vc desde vinic hasta vfin con incremento incr hacer

Fin del bucle Sentencias que se repiten

vc: variable de controlvinic: valor inicial de la variable vcvfin: valor final de la variable vcincr: incremento con el que se pasa desde vinic hasta vfin

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Proceso seguido en un bucleProceso seguido en un bucle

vc vinic

vc vinic + incr

vc vinic + 2.incr

...

hasta que vc salga del rango [vinic .. vfin]

sentencias

sentencias

sentencias

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Programación en MAPLEProgramación en MAPLE

> for vc from vinic to vfin by incr do

od;

NOTA: by incr es opcional cuando incr = 1

Sentencias de MAPLE que se repiten

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejemplo 1Ejemplo 1

Ejemplo: Calcular el producto escalar de los vectoresu=(u1, u2, u3) y v=(v1, v2, v3)

a) Sin utilizar bucles:[> u := vector(3): v=vector(3):[> pe := u[1]*v[1] + u[2]*v[2] + u[3]*v[3];

b) Utilizando bucles:[> u := vector(3): v=vector(3): pe:=0:> for i from 1 to 3 by 1 do

pe := pe + u[i]*v[i];od;

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejemplo 1 (cont.)Ejemplo 1 (cont.)

pe = u1v1 + u2v2 + u3v3

i=3 pe = pe + u3v3 ( = u1v1 + u2v2 + u3v3)

El proceso seguido es el siguiente:

pe = 0i=1 pe = pe + u1v1 ( = 0 + u1v1)

i=2 pe = pe + u2v2 ( = u1v1 + u2v2)

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Los BernoulliLos Bernoulli

Johan1667-1748

Jakob1654-1705

Daniel 1700-1782

…………

Ambos hermanos fueron pioneros en el desarrollo del cálculo diferencial, asícomo otras ramas de la Matemática.

Hijo de Johan. Fue,en opinión de muchos

Autores, el más brillantede la saga Bernoulli.

Además de sus numero-sas contribuciones ala Matemática, fue

pionero en hidrodinámicadescubriendo la

ecuación de Bernoulliestudiada en Mecánica

de Fluidos.

Entre otros temas, analizódiferentes curvas. Y, entre ellas,su preferida fue la llamada “Espiral Milagrosa (o de Bernoulli)”Dejó dispuesto que en la lápida de su

tumba se le grabase una espiral milagrosa.Pero el escultor se equivocó y le grabó

una espiral de Arquímedes. Te proponemosque repares ese error.

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 1 (La espiral milagrosa) *Ejercicio 1 (La espiral milagrosa) *

(*) o de Jakob Bernoulli

θ

V

ω

ρ

θ = (1/k)·ln(ρ/C)

k = 0.1; V = 50; C = 0.01 ; t = 0, 0.005, 0.01, 0.015, ....., 1

ρ = V.t

y(t) = ρ·sen(θ)x(t) = ρ·cos(θ)

Dibujar la curva para:

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 1 (cont.)Ejercicio 1 (cont.)

ti = ti-1 + Δt (i = 1, 2, …, n)t0 = 0 tn = 1… …

Δt = tn – t0

nn = 200

n ← 200 k ← 0.1 v ← 50 c ← 0.01x0 ← 0 y0 ← 0 t ← 0

Δt ← 1./n

Para i desde 1 hasta n con paso 1 HACER:

Fin del bucle

1) t ← t + Δt 2) ρ← v·t 3) θ← ln(ρ/c)/k

4) xi ← ρ ·cos(θ) 5) yi ← ρ ·sen(θ)

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 1 (cont.)Ejercicio 1 (cont.)

[> restart:[> with(plots):[> n:=200: k:=0.1: v:=50: c:=0.01:[> x:=array(0..n): y:=array(0..n):[> x[0]:=0.: y[0]:=0.: t:=0.:[> delta_t:=1/n:

> for i from 1 to n by 1 dot:=t+delta_t:rho:=v*t:theta:=ln(rho/c)/k:x[i]:=rho*cos(theta):y[i]:=rho*sin(theta):

od:

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Algo más sobre gráficos en MAPLE (1)Algo más sobre gráficos en MAPLE (1)

Hasta ahora hemos utilizado el comando plot de la siguiente manera:

Si queremos representar, por ejemplo, la funciónf(x)=x2 en el intervalo [0,2], hacemos:

[> f:=x->x^2;[> plot(f, 0..1, opciones);

o bien:[> f(x):=x^2;[> plot(f(x), x=0..1, opciones);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Algo más sobre gráficos en MAPLE (2)Algo más sobre gráficos en MAPLE (2)

que da como resultado:

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Algo más sobre gráficos en MAPLE (3)Algo más sobre gráficos en MAPLE (3)

Pero, ¿Cómo podemos representar un conjunto de puntos (x[i], y[i]), i=1,2,…,n?

Volvamos al ejemplo. Si ejecutamos:

[> f:=x->x^2;[> a:=plot(f, 0..1, opciones);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Algo más sobre gráficos en MAPLE (4)Algo más sobre gráficos en MAPLE (4)

a:=PLOT(CURVES([[0.,0.],[0.0217…,0.00047…],[0.0407…,0.00166…]…[1.,1.]],COLOUR(RGB,1.0,0.,0.)),AXESLABELS(“”,””),VIEW(0. ..1.,DEFAULT))

obtenemos:

Los números:

[[0.,0.],[0.0217…,0.00047…],[0.0407…,0.00166…]…[1.,1.]]

Forman una SECUENCIA generada automáticamente por el comando plot a partir de f.

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Algo más sobre gráficos en MAPLE (5)Algo más sobre gráficos en MAPLE (5)

Esta secuencia se puede generar manualmente, resultando la siguiente forma del comando plot:

[>plot(secuencia, opciones);

¡ Se escribe entre corchetes para que el resultado sea una LISTA !

Para crear la secuencia de puntos se utiliza la expresión:

donde f es una expresión y vc una variable que varíaentre vinic y vfin.

[> nombre:=[seq(f(vc), vc=vinic..vfin)]

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Algo más sobre gráficos en MAPLE (6)Algo más sobre gráficos en MAPLE (6)

El comando:

[> pointplot(secuencia, opciones);

permite dibujar una secuencia de puntos aislados

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 1 (cont.)Ejercicio 1 (cont.)

[> dibu:=[seq([x[i],y[i]],i=1..n)]:[> plot(dibu, scaling=CONSTRAINED);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 1 (cont.)Ejercicio 1 (cont.)[> puntos:=[seq([x[i],y[i]],i=0..n)];[> pointplot(puntos,color=blue,

scaling=CONSTRAINED);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 1 (cont.)Ejercicio 1 (cont.)

Volver a ejecutar el programa con los datos:n = 5000, v = 25 , k = -0.1 , c = 0.1

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 2Ejercicio 2

= ⋅ =∫1 n x-1

n 0A x e dx (n 0,1,...)

⎤= ⋅ − ⋅ = − ⋅⎦ ∫11n x-1 n-1 x-1

n n-10 0A x e n x e dx 1 n A

La integral:

puede calcularse integrando por partes:

= ⋅ = − = =∫ ∫1 1x-1 x-1

1 0 0

1A x e dx 1 e dx 0.367879441...e

NOTA: El planteamiento teórico de este ejemplo se ha tomado de la referencia: SHAMPINE, L.F., ALLEN Jr., R.C. and PRUESS, S. (1997) Fundamentals of numerical computing. Ed. John Wiley & Sons, Inc.

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 2 (cont.)Ejercicio 2 (cont.)

Determinar el efecto de los errores de redondeo sicalculamos con una precisión de 7 dígitos y suponemosque el cálculo realizado con una precisión de 20 dígitoses el valor exacto.

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 2 (cont.)Ejercicio 2 (cont.)

0AE 1=1) 1- e 0 = 0.63 A 22) 1206

3) eabs0 = |AE0 – A0| 4) errel0 = |eabs0 / AE0|

−− ii i 115) E AEiA = − ii i-116) A= iA

−i iieabs AE=7 A) ii

i

8 e) abse el =rAE

r

Para i desde 1 hasta n con paso 1 HACER:

Fin del bucle

Notas: Tomar n = 10. Calcular 6) con 7 dígitos y todo lo demás con 20.

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 2 (cont.)Ejercicio 2 (cont.)[> restart:[> with(plots):[> n:=10: ndigex:=20: ndigap:=7:[> AE:=array(0..n): A:=array(0..n):[> eabs:=array(0..n): errel:=array(0..n):[> AE[0]:=evalf(1-1/exp(1),ndigex):[> A[0]:=evalf(1-1/exp(1),ndigap):[> eabs[0]:=evalf(abs(AE[0]-A[0]),ndigex):[> erel[0]:=evalf(abs(eabs[0]/AE[0]),ndigex):[> for i from 1 to n by 1 do

AE[i]:= evalf(1-i*AE[i-1],ndigex):A[i] := evalf(1-i*A[i-1],ndigap):eabs[i]:=evalf(abs(AE[i]-A[i]),ndigex):erel[i]:=evalf(abs(eabs[i]/AE[i]),ndigex):

od:

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 2 (cont.)Ejercicio 2 (cont.)

[> d1:=[seq([i,AE[i]],i=1..n)]:[> d2:=[seq([i,A[i]],i=1..n)]:[> d3:=[seq([i,eabs[i]],i=1..n)]:[> d4:=[seq([i,erel[i]],i=1..n)]:[> dibu1:=plot(d1,color=red):[> dibu2:=plot(d2,color=blue):[> dibu3:=plot(d3,color=red):[> dibu4:=plot(d4,color=blue):[> display(dibu1,dibu2);[> display(dibu3,dibu4);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio 2 (cont.)Ejercicio 2 (cont.)

ExactaAproximada

Error absolutoError relativo

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio propuesto 1Ejercicio propuesto 1

Sea una función f(x) derivable en todos los puntos del intervalo real [a,b].Su derivada primera en x* є [a,b] se puede aproximar mediante:

( ) ( ) ( )1 0

1 0

' *f x f x

f xx x−

=−

Sean los puntos de [a,b] equidistantes: 0 1 2 Nx a x x x b= < < < < =…

( ) ( ) ( )1' , 0,1, , 1i ii

f x f xf x i N

h+ −

= = −… b ahN−

=con

Dada la función: ( ) ( )cos( ) sin 22xf x x= ⋅

a) Calcular f’(xi), i = 0, 1, 2, …, N-1, con N = 50 y [a,b] = [-π, π]

b) Representar conjuntamente f(x) y su primera derivada aproximada

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio propuesto 1Ejercicio propuesto 1

[> restart:[> with(plots):[> f:=x->cos(x/2)*sin(2*x);[> a:=evalf(-Pi); b:=evalf(Pi); N:=50; h:=(b-a)/N;[> x:=array(0..N,[]): df:=array(0..N,[]):x[0]:=a:[> for i from 0 to N-1 do

x[i+1]:=x[i]+h;df[i]:=evalf((f(x[i+1])-f(x[i]))/h):

od:[> ptos:=[seq([x[i],df[i]], i=0..N)]:[> dib1:=plot(ptos,color=blue,thickness=2,

legend="derivada"):[> dib2:=plot(f,-Pi..Pi, thickness=2,color=black,

legend="función"):[> display(dib1,dib2);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio propuesto 1Ejercicio propuesto 1

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio propuesto 2Ejercicio propuesto 2

( )iv 1 3 , i 0,1,2[i] ,...,n= − =La sucesión:

puede aproximarse mediante:

x[0] = 1; 3x[1] 1 ;= − x[i] = 2·(x[i-1] + x[i-2]), (i = 2, 3, ..., n)

Calcúlense los primeros 51 valores exactos y represén-tese en una misma gráfica de puntos los 20 primerosvalores exactos y aproximados utilizando:

a) 8 dígitos significativosb) 24 dígitos significativos

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio propuesto 2Ejercicio propuesto 2[> restart:[> with(plots):[> n:=50: ndig[1]:=8: ndig[2]:=24:[> v:=array(0..n): x:=array(0..n): [> v[0]:=1.: x[0]:=1.:[> for j from 1 to 2 by 1 do

v[1]:=evalf(1-sqrt(3),ndig[j]): x[1]:=evalf(1-sqrt(3),ndig[j]):for i from 2 to n by 1 do

v[i]:=evalf((1-sqrt(3))^i,ndig[j]):x[i]:=evalf(2*(x[i-1] + x[i-2]),ndig[j]):

od:ptos1:=[seq([i,v[i]], i=0..20)]:ptos2:=[seq([i,x[i]], i=0..20)]:dibu1[j]:=plot(ptos1,color=red):dibu2[j]:=plot(ptos2,color=blue):

od:[> display(dibu1[1],dibu2[1]);[> display(dibu1[2],dibu2[2]);

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

Ejercicio propuesto 2Ejercicio propuesto 2

ExactaAproximada

8 dígitos

ExactaAproximada

24 dígitos

Departamento de Matemática Aplicada y Métodos Informáticos

Universidad Politécnica de Madrid Ingeniería de Minas

top related