520 likes | 809 Views
VARIABLES LÓGICAS ESTRUCTURAS DE BIFURCACIÓN BUCLES CONDICIONALES. Prof. Carlos Conde Lázaro Prof. Arturo Hidalgo López Prof. Alfredo López. Marzo, 2007. Operadores de relación. Los operadores de relación permiten comparar cons- tantes y/o variables. Mayor que: >
E N D
VARIABLES LÓGICAS ESTRUCTURAS DE BIFURCACIÓN BUCLES CONDICIONALES Prof. Carlos Conde Lázaro Prof. Arturo Hidalgo López Prof. Alfredo López Marzo, 2007
Operadores de relación Los operadores de relación permiten comparar cons- tantes y/o variables. Mayor que: > Menor que: < Mayor o igual que: >= Menor o igual que: <= Igual que: = Distinto a: <>
[> a:=sqrt(17.35*12): b:=11: [>is(5>7); [> is(a>=b); Variables lógicas El resultado de comparar dos variables o constantes mediante un operador de relación es una variable lógica, que sólo puede tomar uno de los valores siguientes: true (Verdadero) false (Falso) El comando is de MAPLE permite conocer el resultado de una comparación:
A B AandB El resultado de su aplicación es true si ambos operandos son true y es false si alguno de ellos es false. T and T T F T F F F T F F F A B AorB or El resultado de su aplicación es false si ambos operandos son false y es true si alguno de ellos es true. T T T T T F T F T F F F Operaciones de relación Son operaciones realizadas entre variables lógicas. Las más usuales son and y or.
true true true false false false false true true Ejemplos [> a:=5:b:=-2:c:=4:d:=-2: [> is((a>b) and (d<=c)); [> is ((a*b > c*d) or (a<=d)); [> is ((a*b > c*d) or (a>=d));
Tipos de estructuras condicionales A) ESTRUCTURAS DE BIFURCACIÓN Permiten realizar o no un conjunto de operaciones según cual sea el resultado de una expresión de relación o de una expresión lógica. B) ESTRUCTURAS REPETITIVAS CONDICIONALES Permiten repetir un conjunto de operaciones mientras el resultado de una expresión de relación o de una expresión lógica sea TRUE
Si (condición = true) entoncesFin condición Estructuras de bifurcación Forma básica: Proceso Esta estructura se programa en Maple como: [> if (condición) then Sentencias de MAPLE fi;
[> a:=7: b:=10: c:='a_es_mayor_que_b': [> if (a<=b) then c:='a_es_menor_o_igual_que_b': fi: [> print(c); Ejemplo Comparar dos números a y b, analizando cuál es mayor. El resultado se almacenará en una variable c
Estructuras de bifurcación Una estructura de bifurcación más completa es: Si (condición = true) entoncessi no Fin condición Proceso 1 Proceso 2 Esta estructura se programa en Maple como: [> if (condición) then Sentencias de MAPLE (Proceso 1) else Sentencias de MAPLE (Proceso 2) fi;
Ejemplo Programar el ejemplo anterior con la secuencia if – else - fi [> a:=9: b:=3: [> if (a<=b) then mensaje:='a_es_menor_o_igual_que_b': else mensaje:='a_es_mayor_que_b': fi: [> print(mensaje);
Estructuras de bifurcación (caso general) Una estructura de bifurcación completa es: Si (condición 1 = true) entonces Proceso 1 Si no, si (condición 2 = true) entonces Proceso 2 … Si no, si (condición n = true) entonces Proceso n Si no Proceso n+1 Fin condición
Estructuras de bifurcación (caso general) Notas: • El proceso i-ésimo se realiza si las primeras • i-1 condiciones son false y la i-ésima es true, • independientemente de si las n-i restantes • condiciones son true o false. 2) El proceso n+1 sólo se realiza si son false las n condiciones.
Estructuras de bifurcación (caso general) Esta estructura se programa en Maple como: [> if (condición 1) then Sentencias de MAPLE (Proceso 1) elif (condición 2) then Sentencias de MAPLE (Proceso 2) elif (condición 3) then Sentencias de MAPLE (Proceso 3) else Sentencias de MAPLE (Proceso 4) fi;
Ejemplo Cálculo de TODAS LAS RAÍCES de una ecuación desegundo grado: a·x2 + b·x + c = 0 (DATOS) La ecuación anterior se define por los valores de a, b y c. Las soluciones de la ecuación están dadas por la fórmula: -b + b2 – 4·a·c 2·a por lo que pueden darse 3 situaciones distintas:
-b + b2 – 4·a·c -b + b2 – 4·a·c -b - b2 – 4·a·c 2·a 2·a 2·a Ejemplo (cont.) Si (b2 – 4·a·c) > 0 entonces hay 2 raíces reales distintas x1 = x2 = si no, si (b2 – 4·a·c) = 0 entonces hay 1 raíz real doble x = -b / (2·a) si no ………
4·a·c -b2 2·a -b + b2 – 4·a·c 2·a Ejemplo (cont.) si no hay dos raíces complejas conjugadas Preal = -b/(2·a) Pimag = x2 = Preal - Pimag*I x1 = Preal + Pimag*I Fin de las condiciones.
Ejemplo (cont.) [> restart; with(linalg): with(plots): [> a:=3.: b:=-1.: c:=2.3: [> discr:=b*b-4*a*c:
> if (discr > 0) then print("Soluciones reales distintas"); x1:=(-b+sqrt(discr))/(2*a); x2:=(-b-sqrt(discr))/(2*a); elif (discr = 0.) then print("Solución real doble"); x:= -b/(2*a); else print("Soluciones complejas conjugadas"); Preal:=-b/(2*a); Pimag:=sqrt(-discr)/(2*a); x1:= Preal + Pimag*I; x2:= Preal - Pimag*I; fi; Ejemplo (cont.)
Ejemplo (cont.) “Soluciones complejas conjugadas” Preal:= 0.1666666666 Pimag:= 0.8595864640 x1:= 0.1666666666 + 0.8595864640 I x2:= 0.1666666666 - 0.8595864640 I
Ejercicio 1 Acumular las sumas de los 50 primeros números naturales Mientras la suma sea inferior a 25 escribiremos el valor del último número sumado,el valor de la suma y el mensaje "Inferior a 25“ Mientras la suma esté entre 25 y 150 escribiremos el valor del último número sumado,el valor de la suma y el mensaje “Entre 25 y 150“ Mientras la suma esté entre 150 y 175 escribiremos el valor del último número sumado,el valor de la suma y el mensaje “Entre 150 y 175“ En otro caso escribiremos el valor del último número sumado, el valor de la suma y el mensaje: “Esto se dispara“
Ejercicio 1 [> suma:=0: [> for i from 1 to 50 by 1 do suma:= suma+i: if (suma < 25) then print(i, suma, "Inferior a 25"); elif (suma < 150) then print(i, suma, "Entre 25 y 150"); elif (suma < 175) then print(i, suma, "Entre 150 y 175"); else print(i, suma, "Esto se dispara"); fi: od:
Niccolo Fontana (Tartaglia) (Brescia, 1500 – Venecia, 1557) redescubre la forma de reolver ecuaciones cúbicas reducidas Ejercicio: Ecuación cúbica y3 + p·y = q Scipione del Ferro (Bolonia, 1455 – Bolonia 1526) descubre cómo resolver las ecuaciones cúbicas reducidas. Pero muere sin publicarlo En su lecho de muerte, revela el secreto a un estudiante suyo, Antionio M. del Fiore que reta a Tartaglia a un “cartelli” Tartaglia, ocupado en traducciones del sánscrito no publica su método …. pero se lo cuenta a Cardano (por cierto, se lo cuenta en tercetos)
b2 c·b 2·b3 ( ( ) ) 1 1 p = c - q = d - + a a 3·a 3·a 27·a2 Ejercicio 2: Ecuación cúbica a.x3 + b·x2 + c·x = d Girolamo Cardano (Pavia, 1501 – Roma, 1576) Descubre que ambas ecuaciones tienen soluciones relacionadas si (Ecuación Cúbica General) y3 + p·y = q (Ecuación Cúbica Reducida) x = y – (b/(3·a))
Ejercicio 2: Ecuación cúbica y3 + p·y = q Cardano publica la fórmula que le reveló Tartaglia (y que, probablemente, leyó en manuscritos de del Ferro) Fórmula que hoy se conoce con el nombre de FORMULA DE CARDANO
Ejercicio 2: Ecuación cúbica Conocida una solución de la ecuación cúbica mediante la fórmula de Cardano: x1 = y – (b/(3·a)) las otras dos soluciones son las soluciones de la ecuación de segundo grado: a· x2 + b·x + g = 0 donde a = a g = c + b·x1 b = b + a·x1 ¡ PERO EL PROBLEMA AÚN NO ESTABA RESUELTO !
Ejercicio 2: Ecuación cúbica En ocasiones, las raíces cuadradas que aparecían en la fórmula de Cardano: afectaban a valores negativos … y no se conocían los números complejos. Rafael Bombelli (Bolonia, 1526 -¿Roma?, 1572) usa los llamados números imaginarios (pero sólo para poder operar con la fórmula de Cardano en algún caso).
q p ( ) 2 ( ) 3 b2 c·b 2·b3 ( ( r = + ) ) 1 1 2 3 p = c - q = d - + a a 3·a 3·a 27·a2 Ejercicio 2: Ecuación cúbica Procedimiento de Ferro – Tartaglia – Cardano - Bombelli Dada la ecuación cúbica: (Datos: a, b, c y d) a.x3 + b·x2 + c·x = d Calcular: Con ellos calcular:
Ejercicio 2: Ecuación cúbica Si (r > 0) entonces: si no, si (r < 0) entonces: ……………………………………
Ejercicio 2: Ecuación cúbica si no, si (r < 0) entonces: Si (s > 0) entonces: si no, si (s < 0) entonces: si no: Si (t > 0) entonces: si no: si no: ………………….
Ejercicio 2: Ecuación cúbica si no: Conocido “y” por el procedimiento anterior x1 = y – (b/(3·a)) y se resuelve la ecuación de segundo grado: a· x2 + b·x + g = 0 donde a = a g = c + b·x1 b = b + a·x1
Ejercicio 2: Ecuación cúbica PROGRAMAR EN MAPLE EL PROCEDIMIENTO ANTERIOR
Ejercicio 3: el círculo de Monge El vértice del ángulo recto de una escuadra que se desliza apoyando sus dos lados sobre una circunferencia, describe otra circunferencia.
Ejercicio 3: el círculo de Monge Pero ... si cambiamos por una elipse la circunferencia sobre la que se desliza la escuadra? El vértice del ángulo recto de una escuadra que se desliza apoyando sus dos lados sobre una elipse, ..... ¿qué tipo de curva describe?
Ejercicio 3: el círculo de Monge Creador de la Geometría Descriptiva y pionero de la Geometría Diferencial. Fundador de l’Ecole Polytechnique de Paris. Comprometido con la Revolución Francesa llegando a ocupar el cargo de ministro en los gobiernos republicanos (fue él quien firmó la orden de decapitación de Luis XVI, al ocupar en esos días el cargo de Primer Ministro en funciones) Expedicionario a Egipto con Napoleón Gaspard MONGE (Beaune 1746 – París 1818) Tuvo una vida intensa. Pero, sobre todo,... Gaspard Monge fue un magnífico profesor
Ejercicio 3: el círculo de Monge Gaspard MONGE demostró matemáticamente que la curva que describía el vértice del ángulo recto de una escuadra que se desliza sobre una elipse encerraba ..... UN CÍRCULO (llamado desde entonces EL CÍRCULO DE MONGE)
Ejercicio 3: el círculo de Monge vi ui si qi < p -b·xi / (a2·(1 – (xi / a)2 )1/2 ) pi = si qi>p b·xi / (a2·(1 – (xi / a)2 )1/2 ) b yi qi = 2·p·i/ N (i = 0, 1, ..., N) qi a xi xi = a·cos(qi) yi = b·sin(qi) si = a2 / (a2 + pi2·b2)1/2 ti = -b·( 1 – (si /a)2 )1/2
Si 0 < qi < p/2: xi = si , yi = ti pi2·xi + pi·(yi – yi)+xi ui = Si p/2 < qi < p: xi = si , yi = -ti 1+pi2 Si 0 = qi o si i = 2·: ui=a, vi=-b Si p< qi < 3·p/2: xi = -si , yi = -ti vi = yi – pi·(ui – xi) Si 3·p/2< qi < 2·p: xi = -si , yi = ti Ejercicio 3: el círculo de Monge Casos especiales: Si p/2= qi: ui = a, vi = b Si 3·p /2= qi: Si p = qi: ui = -a, vi = -b ui = -a, vi = b
Ejercicio 3 Desde i=0 hasta N con paso 1 hacer θ[i]← 2 πi / N x[i] ← a·cos(θ[i]) y[i] ← b·sin(θ[i]) A) Calcular p[i] s[i] = a2 / (a2 + p[i]2·b2)1/2 t[i] = -b·( 1 – (s[i] /a)2 )1/2 B) Calcular ξ[i] y ψ[i] C) Calcular u[i] y v[i] Fin del bucle en i
Ejercicio 3 A) Cálculo de p[i] Si θ[i] < π hacer p[i] ← -b·x[i] / (a2·(1 – (x[i] / a)2 )1/2) Si no, hacer p[i] ← b·x[i] / (a2·(1 – (x[i] / a)2 )1/2) Fin condición
Ejercicio 3 B) Cálculo de ξ[i] y ψ[i] Si (θ[i] > 0 and θ[i] <π/2) hacer ξ[i] = s[i] , ψ[i] = t[i] Si no, si (θ[i] > π/2 and θ[i] <π)hacer ξ[i] = s[i] , ψ[i] = -t[i] Si no, si (θ[i] > π and θ[i] <3π/2)hacer ξ[i] = -s[i] , ψ[i] = -t[i] Si no, hacer ξ[i] = -s[i] , ψ[i] = t[i] Fin condición
u[i]= -a , u[i]= a , u[i]= a , u[i]= -a , v[i] = -b v[i] = b v[i] = b v[i] = -b p[i]2·x[i] + p[i]·(y[i] – y[i])+x[i] v[i] = y[i] + p[i]·(u[i] – x[i]) u[i]= 1+p[i]2 Ejercicio 3 C) Cálculo de u[i] y v[i] Si (θ[i] = 0 or θ[i] =2.π) hacer Si no, si θ[i] =π/2hacer Si no, si θ[i] =πhacer Si no, si θ[i] = 3·π/2hacer Si no, hacer Fin condición
Mientras (condición = true) hacerFin condición Bucles condicionales Sentencias que se repiten Nota: entre las sentencias que se repiten debe haber al menos una que haga que modifique el valor de condición para evitar que el bucle se repita eternamente
while (condición) do Sentencias de MAPLE que se repiten od; > Bucles condicionales El bucle condicional se programa en Maple como:
Ejemplo Sumar los primeros números naturales hasta que el resultado sea superior a un valor M dado o el último sumando sea superior a un número N dado Considérese M = 200 y N = 40
"el último sumando es:" 20 "la suma es:" , 210 , , Ejemplo [> restart: [> N := 40: M := 200: [> suma := 0: [> n :=0: [> while ((suma <= M) and (n <= N)) do suma := suma + n: n := n + 1: od: [> print("la suma es:",suma, "el último sumando es:",n-1);
Ejercicio 4 (Método de bipartición) Sea la función f(x) (en general no lineal), de la que sabemos que es continua en el intervalo [a, b] y que f(a)·f(b) < 0. Elmétodo de biparticiónpermite determinar un punto x* en el cual f(x*) ≈ 0 de la siguiente manera:
a < x* < b a < x* < c c < x* < b f(x) c = (a+b)/2 x* b a f(x) x* b a Ejercicio 4 (Método de bipartición) (cont.) f(a) . f(b) < 0 Sif(a) . f(c) < 0 Si no El intervalo de búsqueda se ha reducido a la mitad
Ejercicio 4 (Método de bipartición) (cont.) Criterio de parada: Cuando|b-a|sea muy pequeño(< ε) o se hayan realizado muchas iteraciones (> maxiter). Como solución se toma: x*=(a+b)/2
Ejercicio 4 (Método de bipartición) (cont.) Determinar la raíz de la ecuación 8x - cos x – 2x2 = 0en [0, π/6] 1) Definir f 2) a ← 0; b ← π/6; 3) maxiter ← 100; ε← 0.0001; 4) iter ←0; Mientras (|b-a| ≥ ε y iter ≤maxiter) hacer: c ← (a+b)/2 Si f(a)*f(c) < 0 entonces: b ← c Si no, hacer: a ← c Fin condición iter ← iter + 1; Fin bucle condicional