Acciones

Diferencia entre revisiones de «Ejercicios 5: Programación»

De Software Libre para la Enseñanza y el Aprendizaje de las Matemáticas (2010-11)

(Ejercicio 1.2.)
(Ejercicio 4.2.)
 
(No se muestran 15 ediciones intermedias de 5 usuarios)
Línea 8: Línea 8:
  
 
'''Solución:'''
 
'''Solución:'''
 +
(%i1) tangente(f,a):= block ([m],
 +
      m:at(diff(f(x),x),x=a),
 +
      y=ratsimp(f(a)+m*(x-a)))$
 +
(%i2) (f(x):=x^3,tangente(f,2));
 +
(%o2) y=12*x-16
  
 
=== Ejercicio 1.2. ===
 
=== Ejercicio 1.2. ===
Línea 14: Línea 19:
 
'''Solución:'''
 
'''Solución:'''
 
tangente(ln(tan(abs(x)),-%pi/12);
 
tangente(ln(tan(abs(x)),-%pi/12);
 +
(%i3)(f(x)=ln(tan(abs(x))), tangente(f,-%pi/12));
 +
(%o3)y=(18*%pi^2*x+%pi^3)/864
  
 
== Ejercicio 2 ==
 
== Ejercicio 2 ==
Línea 34: Línea 41:
  
 
'''Solución:'''
 
'''Solución:'''
 +
 +
signosTrinomio(a,b,c):=block([l],
 +
l:realroots(a*x^2+b*x+c),
 +
if (length(l)=0) then
 +
  (if (is(limit(a*x^2+b*x+c,x,inf)>0))
 +
  then (cons([[-inf,inf],"+"],[]))
 +
  else (cons([[-inf,inf],"-"],[])) )
 +
elseif (length(l)=1) then
 +
  (if (is(limit(a*x^2+b*x+c,x,inf)>0))
 +
  then (cons([[-inf,rhs(l[1])],"+"],cons([rhs(l[1]),0],cons([[rhs(l[1]),inf],"+"],[]))))
 +
  else (cons([[-inf,rhs(l[1])],"-"],cons([rhs(l[1]),0],cons([[rhs(l[1]),inf],"-"],[])))) )
 +
else
 +
  (if (is(limit(a*x^2+b*x+c,x,inf)>0))
 +
  then (cons([[-inf,rhs(l[1])],"+"],cons([rhs(l[1]),0],cons([[rhs(l[1]),rhs(l[2])],"-"],cons([rhs(l[2]),0],cons([[rhs(l[2]),inf],"+"],[]))))))
 +
  else (cons([[-inf,rhs(l[1])],"-"],cons([rhs(l[1]),0],cons([[rhs(l[1]),rhs(l[2])],"+"],cons([rhs(l[2]),0],cons([[rhs(l[2]),inf],"-"],[])))))) )
 +
)$
  
 
=== Ejercicio 2.2. ===
 
=== Ejercicio 2.2. ===
Línea 39: Línea 62:
  
 
'''Solución:'''
 
'''Solución:'''
 +
signosTrinomio(-6,-3,14/3);
 +
[[[-inf,-39146837/33554432],"-"],[-39146837/33554432,0],[[-39146837/33554432,22369621/33554432],"+"],
 +
[22369621/33554432,0],[[22369621/33554432,inf],"-"]]
  
 
== Ejercicio 3 ==
 
== Ejercicio 3 ==
Línea 49: Línea 75:
  
 
'''Solución:'''
 
'''Solución:'''
 +
X(n):=block(
 +
if random(7)=6 print(“Se ha obtenido el valor 6”)
 +
else n=n+1 print(n,”número de lanzamientos hasta el momento));
  
 
=== Ejercicio 3.2. ===
 
=== Ejercicio 3.2. ===
Línea 58: Línea 87:
  
 
'''Solución:'''
 
'''Solución:'''
 +
simulación(n):=block([lista,k],
 +
lista : [],
 +
for k from 1 thru n do
 +
  (if random(k) then lista : cons(k,lista)))$
  
 
=== Ejercicio 3.3. ===
 
=== Ejercicio 3.3. ===
Línea 63: Línea 96:
  
 
'''Solución:'''
 
'''Solución:'''
 +
media(n):=block([lista,k],
 +
lista: []
 +
for k from 1 thru n do
 +
(if random(k) then lista: cons(k,lista))$
 +
mean(lista))$
  
 
== Ejercicio 4 ==
 
== Ejercicio 4 ==
Línea 78: Línea 116:
  
 
'''Solución:'''
 
'''Solución:'''
 +
Goldbach(n):=block([lista,k],
 +
lista: [k],
 +
for k from 2 thru n do
 +
(if primep(n-x) then lista: cons(k,lista)))
  
 
=== Ejercicio 4.2. ===
 
=== Ejercicio 4.2. ===
 
Descomponer 2010 como suma de dos primos.
 
Descomponer 2010 como suma de dos primos.
 +
 +
Doy todas los pares de números primos que son solución del problema
  
 
'''Solución:'''
 
'''Solución:'''
 +
for k from 1 thru 1005 do
 +
(if primep(k) and primep(2010-k) then print(k,"y" , 2010-k, "es una de las soluciones"))$
  
 
=== Ejercicio 4.3. ===
 
=== Ejercicio 4.3. ===
Línea 90: Línea 136:
  
 
'''Solución:'''
 
'''Solución:'''
 +
goldbachTodas(n):=block([lista,k],
 +
lista:[],
 +
(if primep(k) then lista : cons(k,lista)))$
 +
 +
Esta es mi solución, la anterior veo que no funciona
 +
 +
goldbachTodas(n):=block([lista,k,m], lista : [],m:0,
 +
for k from 1 thru n do (if primep(k) then lista : cons(k,lista)),
 +
reverse(lista), for k from 1 thru length(lista) do
 +
if (primep(n-lista[k])) then if (lista[k]>n-lista[k]) then (print (n-lista[k],lista[k], "descomposicion num:",m),m:m+1));
  
 
=== Ejercicio 4.4. ===
 
=== Ejercicio 4.4. ===
Línea 95: Línea 151:
  
 
'''Solución:'''
 
'''Solución:'''
 +
 +
goldbachTodas(n):=block([lista,k,m], lista : [],m:0,
 +
for k from 1 thru n do (if primep(k) then lista : cons(k,lista)),
 +
reverse(lista), for k from 1 thru length(lista) do
 +
if (primep(n-lista[k])) then if (lista[k]>n-lista[k]) then (print (n-lista[k],lista[k], "descomposicion num:",m),m:m+1));
 +
 +
 +
goldbachTodas(2010);

Revisión actual del 00:43 10 may 2011

Ejercicio 1

Ejercicio 1.1.

Definir la función tangente tal que tangente(f,a) es la ecuación de la tangente a la función f en el punto de abscisa a. Por ejemplo,

  (%i1) (f(x):=x^3, tangente(f,2));
  (%o1) y=12*(x-2)+8

Solución:

(%i1) tangente(f,a):= block ([m],
      m:at(diff(f(x),x),x=a),
      y=ratsimp(f(a)+m*(x-a)))$
(%i2) (f(x):=x^3,tangente(f,2));
(%o2) y=12*x-16

Ejercicio 1.2.

Calcular la tangente a f(x)=ln(tan(|x|) en el punto de abscisa -pi/12.

Solución: tangente(ln(tan(abs(x)),-%pi/12);

(%i3)(f(x)=ln(tan(abs(x))), tangente(f,-%pi/12));
(%o3)y=(18*%pi^2*x+%pi^3)/864

Ejercicio 2

Ejercicio 2.1.

Definir el procedimiento signosTrinomio tal que signosTrinomio(a,b,c) es la tabla de la variación de los signos del trinomio ax^2+bx+c. Por ejemplo,

  (%i1) signosTrinomio(1,-2,1);
  (%o1) [[[-inf,1],+],[1,0],[[1,inf],+]]
  (%i2) signosTrinomio(-1,2,-1);
  (%o2) [[[-inf,1],-],[1,0],[[1,inf],-]]
  (%i3) signosTrinomio(1,-3,2);
  (%o3) [[[-inf,1],+],[1,0],[[1,2],-],[2,0],[[2,inf],+]]
  (%i4) signosTrinomio(-1,3,-2);
  (%o4) [[[-inf,2],-],[2,0],[[2,1],+],[1,0],[[1,inf],-]]
  (%i5) signosTrinomio(1,0,1);
  (%o5) [[[-inf,inf],+]]
  (%i6) signosTrinomio(-1,0,-1);
  (%o6) [[[-inf,inf],-]]

Se supone que a es distinto de cero.

Solución:

signosTrinomio(a,b,c):=block([l],
l:realroots(a*x^2+b*x+c),
if (length(l)=0) then 
 (if (is(limit(a*x^2+b*x+c,x,inf)>0)) 
 then (cons([[-inf,inf],"+"],[]))
 else (cons([[-inf,inf],"-"],[])) )
elseif (length(l)=1) then
 (if (is(limit(a*x^2+b*x+c,x,inf)>0)) 
 then (cons([[-inf,rhs(l[1])],"+"],cons([rhs(l[1]),0],cons([[rhs(l[1]),inf],"+"],[]))))
 else (cons([[-inf,rhs(l[1])],"-"],cons([rhs(l[1]),0],cons([[rhs(l[1]),inf],"-"],[])))) )
else 
 (if (is(limit(a*x^2+b*x+c,x,inf)>0)) 
 then (cons([[-inf,rhs(l[1])],"+"],cons([rhs(l[1]),0],cons([[rhs(l[1]),rhs(l[2])],"-"],cons([rhs(l[2]),0],cons([[rhs(l[2]),inf],"+"],[]))))))
 else (cons([[-inf,rhs(l[1])],"-"],cons([rhs(l[1]),0],cons([[rhs(l[1]),rhs(l[2])],"+"],cons([rhs(l[2]),0],cons([[rhs(l[2]),inf],"-"],[])))))) )
)$

Ejercicio 2.2.

Calcular la tabla de la variación de los signos del trinomio -6x^2-3x+14/3

Solución:

signosTrinomio(-6,-3,14/3);
[[[-inf,-39146837/33554432],"-"],[-39146837/33554432,0],[[-39146837/33554432,22369621/33554432],"+"],
[22369621/33554432,0],[[22369621/33554432,inf],"-"]]

Ejercicio 3

Se lanza un dado cúbico equilibrado hasta que se obtiene la cara 6 por primera vez. Se designa por X la variable aleatorio que cuenta el número de lanzamientos efectuados. Se dice que X es el tiempo de espera del primer 6.

Ejercicio 3.1.

Definir el procedimiento X() que simule una serie de lanzamientos del dado y devuelva el número de lanzamientos realizados para obtener el 6 por primera vez.

Solución: X(n):=block( if random(7)=6 print(“Se ha obtenido el valor 6”) else n=n+1 print(n,”número de lanzamientos hasta el momento));

Ejercicio 3.2.

Con la ayuda del bucle for, definir el procedimiento simulacion(n) que simule una serie de n lanzamientos y devuelva la lista de frecuencia de los eventos [X=i] para 1 <= i <= 60. Por ejemplo,

  (%i1) simulacion(1000);
  (%o1) [0,145,115,104,88,61,65,53,51,50,40,28,30,29,27,13,21,18,10,6,8,4,9,3,
         5,1,2,4,3,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
         0,0,0]

Solución: simulación(n):=block([lista,k], lista : [], for k from 1 thru n do

 (if random(k) then lista : cons(k,lista)))$

Ejercicio 3.3.

Definir la función media tal que media(n) es el valor medio de X en n lanzamientos. Calcular tres veces media(1000).

Solución: media(n):=block([lista,k], lista: [] for k from 1 thru n do (if random(k) then lista: cons(k,lista))$ mean(lista))$

Ejercicio 4

La conjetura de Goldbach afirma que todo número natural par mayor que 3 se puede escribir como la suma de dos números primos. Por ejemplo,

4 = 2 + 2, 20 = 3 + 17, 50 = 3 + 47

Solución:

Ejercicio 4.1.

Definir la función goldbach tal que goldbach(n) es una descomposición de n como suma de dos números primos. Por ejemplo,

  (%i1) goldbach(20);
  (%o1) [3,17]

Indicación: Iterar los primos desde x=2 hasta n/1 hasta que n-x sea primo.

Solución: Goldbach(n):=block([lista,k], lista: [k], for k from 2 thru n do (if primep(n-x) then lista: cons(k,lista)))

Ejercicio 4.2.

Descomponer 2010 como suma de dos primos.

Doy todas los pares de números primos que son solución del problema

Solución: for k from 1 thru 1005 do (if primep(k) and primep(2010-k) then print(k,"y" , 2010-k, "es una de las soluciones"))$

Ejercicio 4.3.

Definir la función goldbachTodas tal que goldbachTodas(n) es la lista de todas las descomposiciones de n como suma de dos números primos x e y con x<=y. Por ejemplo,

(%i1) goldbachTodas(20);
(%o1) [[7,13],[3,17]]

Solución: goldbachTodas(n):=block([lista,k], lista:[], (if primep(k) then lista : cons(k,lista)))$

Esta es mi solución, la anterior veo que no funciona

goldbachTodas(n):=block([lista,k,m], lista : [],m:0,
for k from 1 thru n do (if primep(k) then lista : cons(k,lista)),
reverse(lista), for k from 1 thru length(lista) do 
if (primep(n-lista[k])) then if (lista[k]>n-lista[k]) then (print (n-lista[k],lista[k], "descomposicion num:",m),m:m+1));

Ejercicio 4.4.

Calcular el número de descomposiciones de 2010 como suma de dos primos.

Solución:

goldbachTodas(n):=block([lista,k,m], lista : [],m:0,
for k from 1 thru n do (if primep(k) then lista : cons(k,lista)),
reverse(lista), for k from 1 thru length(lista) do 
if (primep(n-lista[k])) then if (lista[k]>n-lista[k]) then (print (n-lista[k],lista[k], "descomposicion num:",m),m:m+1));


goldbachTodas(2010);