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