Bucles en Maple - OCW UPM - Universidad Politécnica de Madrid

Anuncio
Universidad Politécnica de Madrid
Ingeniería de Minas
BUCLES
BUCLES EN
EN MAPLE
MAPLE
Prof. Carlos Conde Lázaro
Prof. Arturo Hidalgo López
Prof. Alfredo López
Marzo, 2007
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Definición
Definición
Un cálculo que se repite varias veces, se programa
mediante una estructura denominada: BUCLE
Para vc desde vinic hasta vfin con incremento incr hacer
Sentencias que se repiten
Fin del bucle
vc:
vinic:
vfin:
incr:
variable de control
valor inicial de la variable vc
valor final de la variable vc
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
Proceso seguido
seguido en
en un
un bucle
bucle
vc
vinic
sentencias
vc
vinic + incr
sentencias
vc
vinic + 2.incr
sentencias
...
hasta que vc salga del rango [vinic .. vfin]
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Programación
Programación en
en MAPLE
MAPLE
> for vc from vinic to vfin by incr do
Sentencias de MAPLE que se repiten
od;
NOTA: by incr es opcional cuando incr = 1
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejemplo
Ejemplo 11
Ejemplo: Calcular el producto escalar de los vectores
u=(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
Ejemplo 11 (cont.)
(cont.)
El proceso seguido es el siguiente:
pe = 0
i=1
pe = pe + u1v1 ( = 0 + u1v1)
i=2
pe = pe + u2v2 ( = u1v1 + u2v2)
i=3
pe = pe + u3v3 ( = u1v1 + u2v2 + u3v3)
pe = u1v1 + u2v2 + u3v3
Departamento de Matemática Aplicada y Métodos Informáticos
Ingeniería de Minas
Universidad Politécnica de Madrid
Los
Los Bernoulli
Bernoulli
Ambos hermanos fueron pioneros en el
desarrollo del cálculo diferencial, así
como otras ramas de la Matemática.
Jakob
1654-1705
Daniel
1700-1782
Hijo de Johan. Fue,
en opinión de muchos
Autores, el más brillante
de la saga Bernoulli.
Además de sus numerosas contribuciones a
la Matemática, fue
pionero en hidrodinámica
descubriendo la
…………
estudiada en Mecánica
de Fluidos.
Johan
1667-1748
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 proponemos
que repares ese error.
Departamento de Matemática Aplicada y Métodos Informáticos
ecuación de Bernoulli
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio 11 (La
(La espiral
espiral milagrosa)
milagrosa) **
ω
ρ = V.t
V
ρ
θ = (1/k)·ln(ρ/C)
θ
x(t) = ρ·cos(θ)
y(t) = ρ·sen(θ)
Dibujar la curva para:
k = 0.1; V = 50; C = 0.01
; t = 0, 0.005, 0.01, 0.015, ....., 1
(*) o de Jakob Bernoulli
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio 11 (cont.)
(cont.)
t0 = 0 … ti = ti-1 + Δt (i = 1, 2, …, n) … tn = 1
tn – t0
n = 200
Δt =
n
n ← 200
x0 ← 0
k ← 0.1
y0 ← 0
v ← 50
t ←0
c ← 0.01
Δt ← 1./n
Para i desde 1 hasta n con paso 1 HACER:
1) t ← t + Δt
2) ρ ← v·t
3) θ ← ln(ρ/c)/k
4) xi ← ρ ·cos(θ)
5) yi ← ρ ·sen(θ)
Fin del bucle
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio 11 (cont.)
(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 do
t:=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
Algo más
más sobre
sobre gráficos
gráficos en
en MAPLE
MAPLE (1)
(1)
Hasta ahora hemos utilizado el comando plot de la
siguiente manera:
Si queremos representar, por ejemplo, la función
f(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
Algo más
más sobre
sobre gráficos
gráficos en
en MAPLE
MAPLE (2)
(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
Algo más
más sobre
sobre gráficos
gráficos en
en MAPLE
MAPLE (3)
(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
Algo más
más sobre
sobre gráficos
gráficos en
en MAPLE
MAPLE (4)
(4)
obtenemos:
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))
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
Algo más
más sobre
sobre gráficos
gráficos en
en MAPLE
MAPLE (5)
(5)
Esta secuencia se puede generar manualmente,
resultando la siguiente forma del comando plot:
[>plot(secuencia, opciones);
Para crear la secuencia de puntos se utiliza la expresión:
[> nombre:=[seq(f(vc), vc=vinic..vfin)]
donde f es una expresión y vc una variable que varía
entre vinic y vfin.
¡ Se escribe entre corchetes para que el resultado sea
una LISTA !
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Algo
Algo más
más sobre
sobre gráficos
gráficos en
en MAPLE
MAPLE (6)
(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
Ejercicio 11 (cont.)
(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
Ejercicio 11 (cont.)
(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
Ejercicio 11 (cont.)
(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
Ingeniería de Minas
Universidad Politécnica de Madrid
Ejercicio
Ejercicio 22
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.
1
La integral: A n = ∫ xn ⋅ e x-1dx
0
(n = 0,1,...)
puede calcularse integrando por partes:
1
x-1 1
A n = x ⋅ e ⎦⎤ − n∫ xn-1 ⋅ e x-1dx = 1 − n ⋅ A n-1
0
0
n
1
A1 = ∫ x ⋅ e dx = 1 − ∫ e dx = = 0.367879441...
0
0
e
1
x-1
1
x-1
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio 22 (cont.)
(cont.)
Determinar el efecto de los errores de redondeo si
calculamos con una precisión de 7 dígitos y suponemos
que el cálculo realizado con una precisión de 20 dígitos
es el valor exacto.
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio 22 (cont.)
(cont.)
1
1) AE0 = 1e
2) A 0 = 0.6321206
3) eabs0 = |AE0 – A0|
4) errel0 = |eabs0 / AE0|
Para i desde 1 hasta n con paso 1 HACER:
5) AEi = 1 − ii AEi−1
7) eabsi = AEi − Ai
6) Ai = 1 − ii Ai-1
eabsi
8) erreli =
AEi
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
Ejercicio 22 (cont.)
(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
Ejercicio 22 (cont.)
(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
Ejercicio 22 (cont.)
(cont.)
Exacta
Error absoluto
Aproximada
Error relativo
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio propuesto
propuesto 11
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:
f ( x1 ) − f ( x0 )
f ' ( x *) =
x1 − x0
Sean los puntos de [a,b] equidistantes: x0 = a < x1 < x2 < … < xN = b
f ( xi +1 ) − f ( xi )
b−a
, i = 0,1,…, N − 1
con h =
h
N
x
Dada la función: f ( x ) = cos( ) ⋅ sin ( 2 x )
2
a) Calcular f’(xi), i = 0, 1, 2, …, N-1, con N = 50 y [a,b] = [-π, π]
f ' ( xi ) =
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
Ejercicio propuesto
propuesto 11
[>
[>
[>
[>
[>
[>
[>
[>
[>
[>
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
Ejercicio propuesto
propuesto 11
Departamento de Matemática Aplicada y Métodos Informáticos
Ingeniería de Minas
Universidad Politécnica de Madrid
Ejercicio
Ejercicio propuesto
propuesto 22
(
)
i
La sucesión: v[i] = 1 − 3 , i = 0,1,2,...,n
puede aproximarse mediante:
x[0] = 1; x[1] = 1 − 3 ; x[i] = 2·(x[i-1] + x[i-2]), (i = 2, 3, ..., n)
Calcúlense los primeros 51 valores exactos y represéntese en una misma gráfica de puntos los 20 primeros
valores exactos y aproximados utilizando:
a) 8 dígitos significativos
b) 24 dígitos significativos
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Ejercicio
Ejercicio propuesto
propuesto 22
[>
[>
[>
[>
[>
[>
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
Ejercicio propuesto
propuesto 22
Exacta
Exacta
Aproximada
Aproximada
8 dígitos
24 dígitos
Departamento de Matemática Aplicada y Métodos Informáticos
Universidad Politécnica de Madrid
Ingeniería de Minas
Departamento de Matemática Aplicada y Métodos Informáticos
Descargar