Você está na página 1de 32

Universidad Politcnica de Madrid

Ingeniera de Minas

BUCLES EN MAPLE BUCLES EN MAPLE


Prof. Carlos Conde Lzaro Prof. Arturo Hidalgo Lpez Prof. Alfredo Lpez
Marzo, 2007
Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Definicin Definicin
Un clculo 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Proceso seguido en un bucle Proceso seguido en un bucle


vc vc vc ... hasta que vc salga del rango [vinic .. vfin]
Departamento de Matemtica Aplicada y Mtodos Informticos

vinic sentencias vinic + incr sentencias vinic + 2.incr sentencias

Universidad Politcnica de Madrid

Ingeniera de Minas

Programacin en MAPLE Programacin en 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejemplo 1 Ejemplo 1
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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

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


El proceso seguido es el siguiente: pe = 0 i=1 i=2 i=3 pe = pe + u1v1 ( = 0 + u1v1) pe = pe + u2v2 ( = u1v1 + u2v2) pe = pe + u3v3 ( = u1v1 + u2v2 + u3v3) pe = u1v1 + u2v2 + u3v3

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Los Bernoulli Los Bernoulli


Ambos hermanos fueron pioneros en el desarrollo del clculo diferencial, as como otras ramas de la Matemtica. Hijo de Johan. Fue, en opinin de muchos Autores, el ms brillante de la saga Bernoulli. Adems de sus numerosas contribuciones a la Matemtica, fue pionero en hidrodinmica descubriendo la

Entre otros temas, analiz diferentes curvas. Y, entre ellas, su preferida fue la llamada Espiral Milagrosa (o de Bernoulli) Dej dispuesto que en la lpida de su tumba se le grabase una espiral milagrosa. Pero el escultor se equivoc y le grab una espiral de Arqumedes. Te proponemos que repares ese error.

Jakob 1654-1705

Johan 1667-1748 Daniel 1700-1782

ecuacin de Bernoulli
estudiada en Mecnica de Fluidos.

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio 1 (La espiral milagrosa) * Ejercicio 1 (La espiral 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


(*) o de Jakob Bernoulli
Departamento de Matemtica Aplicada y Mtodos Informticos

; t = 0, 0.005, 0.01, 0.015, ....., 1

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio 1 (cont.) Ejercicio 1 (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 2) vt c 0.01 t 1./n

Para i desde 1 hasta n con paso 1 HACER: 1) t t + t 4) xi cos() Fin del bucle
Departamento de Matemtica Aplicada y Mtodos Informticos

3) ln(/c)/k

5) yi sen()

Universidad Politcnica de Madrid

Ingeniera 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 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Algo ms sobre grficos en MAPLE (1) Algo ms sobre grficos en MAPLE (1)
Hasta ahora hemos utilizado el comando plot de la siguiente manera: Si queremos representar, por ejemplo, la funcin 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Algo ms sobre grficos en MAPLE (2) Algo ms sobre grficos en MAPLE (2)
que da como resultado:

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Algo ms sobre grficos en MAPLE (3) Algo ms sobre grficos en MAPLE (3)
Pero, Cmo 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Algo ms sobre grficos en MAPLE (4) Algo ms sobre grficos en MAPLE (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 nmeros: [[0.,0.],[0.0217,0.00047],[0.0407,0.00166][1.,1.]] Forman una SECUENCIA generada automticamente por el comando plot a partir de f.
Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Algo ms sobre grficos en MAPLE (5) Algo ms sobre grficos en MAPLE (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 expresin: [> nombre:=[seq(f(vc), vc=vinic..vfin)] donde f es una expresin y vc una variable que vara entre vinic y vfin. Se escribe entre corchetes para que el resultado sea una LISTA !
Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Algo ms sobre grficos en MAPLE (6) Algo ms sobre grficos en MAPLE (6)
El comando: [> pointplot(secuencia, opciones); permite dibujar una secuencia de puntos aislados

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

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


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

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio 2 Ejercicio 2
NOTA: El planteamiento terico 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.

La integral: A n = xn e x-1dx
0
x-1 1 1

(n = 0,1,...)

puede calcularse integrando por partes:


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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

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

Determinar el efecto de los errores de redondeo si calculamos con una precisin de 7 dgitos y suponemos que el clculo realizado con una precisin de 20 dgitos es el valor exacto.

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

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


1 1) AE0 = 1e
3) eabs0 = |AE0 A0|

2) A 0 = 0.6321206
4) errel0 = |eabs0 / AE0|

Para i desde 1 hasta n con paso 1 HACER:


5) AEi = 1 ii AEi1 6) Ai = 1 ii Ai-1 eabsi 8) erreli = AEi

7) eabsi = AEi Ai
Fin del bucle

Notas: Tomar n = 10. Calcular 6) con 7 dgitos y todo lo dems con 20.
Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

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

Exacta Aproximada

Error absoluto Error relativo

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio propuesto 1 Ejercicio propuesto 1


Sea una funcin 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 ) ba , i = 0,1,, N 1 con h = h N x Dada la funcin: 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio propuesto 1 Ejercicio 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="funcin"): display(dib1,dib2);

[> [> [> [>

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio propuesto 1 Ejercicio propuesto 1

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio propuesto 2 Ejercicio propuesto 2


La sucesin: 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) Calclense los primeros 51 valores exactos y represntese en una misma grfica de puntos los 20 primeros valores exactos y aproximados utilizando: a) 8 dgitos significativos b) 24 dgitos significativos

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio propuesto 2 Ejercicio 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 Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Ejercicio propuesto 2 Ejercicio propuesto 2

Exacta Aproximada

Exacta Aproximada

8 dgitos

24 dgitos

Departamento de Matemtica Aplicada y Mtodos Informticos

Universidad Politcnica de Madrid

Ingeniera de Minas

Departamento de Matemtica Aplicada y Mtodos Informticos

Você também pode gostar