jueves, 8 de junio de 2023

Ejemplo de representación gráfica de una función definida a tramos con GNU MAXIMA

Representemos la gráfica de la siguiente función definida a tramos: $$f(x)=\left\{\begin{matrix}x+1 & \text{si} & x \lt 0 \\ 2^{-x} & \text{si} & x \ge 0 \end{matrix}\right.$$

Para hacerlo con la ayuda de GNU MAXIMA, escribimos la siguiente instrucción en el panel correspondiente:

(%i33)	wxplot2d([if x<0 then x+1 else 2^-x],[x,-4,4]);

$\diamond$

-oOo-

Utilidades:

  [1] GNU MAXIMA

Una ejercicio con curvas cónicas. Intersección de curvas cónicas: representación gráfica y resolución de un sistema de ecuaciones cuadráticas con GNU MAXIMA

Nos proponemos calcular las coordenadas de los puntos de intersección de la circumferencia $C:x^2+y^2=3^2$ (de radio igual $3$ y centrada en el origen de coordenadas) y la elipse $E:\dfrac{x^2}{4^2}+\dfrac{y^2}{2^2}=1$ (centrada también en el origen de coordenadas, con semiejes $a=4$ y $b=2$). Para ello, debemos resolver el sistema de cuaciones cuadráticas $\left\{\begin{matrix}x^2+y^2=3^2 \\ \dfrac{x^2}{4^2}+\dfrac{y^2}{2^2}=1\end{matrix}\right.$

Primero, visualicemos las gráficas de dichas cónicas:

   (%i31)	wxplot2d([x^2+y^2=9,x^2/16+y^2/4=1],[x,-10,10],[y,-10,10]);
  
A la vista de las mismas, vemos que se intersecan en $4$ puntos del plano

A continuación, vamos a calcular las coordenadas exactas de los puntos de intersección:

(%i9)	c:x^2+y^2=3^2$ /* ecuación de la circumferemcia */
	
(%i10)	e:x^2/4^2+y^2/2^2=1$ /* ecuación de la elipse */

/* instrucción de resolución del sistema de ecuaciones 
formado por las dos ecuaciones anteriores y respuesta 
de MAXIMA */  
(%i11)	solve([c,e],[x,y]); 
(%o11)	[[x=-(2*sqrt(5))/sqrt(3),y=-sqrt(7)/sqrt(3)],
          [x=-(2*sqrt(5))/sqrt(3),y=sqrt(7)/sqrt(3)],
            [x=(2*sqrt(5))/sqrt(3),y=-sqrt(7)/sqrt(3)],
              [x=(2*sqrt(5))/sqrt(3),y=sqrt(7)/sqrt(3)]]
  
  
Así, pues, vemos que las coodenadas $(x,y)$ de los $4$ puntos de intersección son: $\left\{ \left( 2\,\sqrt{\dfrac{5}{3}},\sqrt{\dfrac{7}{3}}\right), \left( 2\,\sqrt{\dfrac{5}{3}},-\sqrt{\dfrac{7}{3}}\right),\left( -2\,\sqrt{\dfrac{5}{3}},\sqrt{\dfrac{7}{3}}\right), \left( -2\,\sqrt{\dfrac{5}{3}},-\sqrt{\dfrac{7}{3}}\right) \right\}$. $\diamond$

-oOo-

Utilidades:

  [1] GNU MAXIMA

Ejemplo de uso de GNU Maxima para representar las gráficas de varias funciones en un mismo diagrama

(%i15)	f(x):=x^2$
	g(x):=-x$
	wxplot2d([f(x),g(x)],[x,-1,1]);
$\diamond$

-oOo-

Utilidades:

  [1] GNU MAXIMA

martes, 6 de junio de 2023

¿Cómo saber si un número (el que primero se nos ocurra) es primo? ¿Cómo encontrar los números primos menores que un cierto número (pongamos que 1000)?

Aquí tenéis un algoritmo básico y el código del programa correspondiente en lenguaje Python [1]

def es_primo(numero):
    if numero < 2:
        return False
    for i in range(2, int(numero ** 0.5) + 1):
        if numero % i == 0:
            return False
    return True

# Ejemplo de uso:
numero = int(input("Ingrese un número: "))
if es_primo(numero):
    print(numero, "es un número primo.")
else:
    print(numero, "no es un número primo.")

-oOo-

Y para encontrar los números primos mayores o iguales que $2$ y menores que $1000$, podéis escribir y hacer funcionar el siguiente programa en vuestro intérprete de Python (los hay que podéis utilizar en línea, sin instalar software de desarrollo en vuestro ordenador como, por ejemplo, éste [3]: https://www.tutorialspoint.com/online_python_compiler.php):

  def es_primo(numero):
    if numero < 2:
        return False
    #la búsqueda acaba en la raíz cuadrada del número introducido más una unidad    
    for i in range(2, int(numero ** 0.5) + 1): 
        if numero % i == 0:
            return False
    return True

primos = []
for num in range(2, 1001):
    if es_primo(num):
        primos.append(num)

print("Números primos hasta 1000:")
print(primos)
  

Al poner en marcha el programa, a cuyo archivo le he dado el nombre de numerosprimos.py, >>> %Run numerosprimos.py
Nota: el símbolo >>> indica el prompt de la cónsola de vuestro entorno de desarrollo (fuera de línea, he utilizado el IDE Thonny [2] (habiendo instalado préviamente Python [1]), que es software libre, y es de fácil uso)
Podéis comprobar que se obtiene (rápidamente, en pocos segundos) ...
Números primos hasta 1000: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
>>>

Observación

Otra manera de hacerlo consiste en implementar el algoritmo de la criba de Eratóstenes, tal como podéis ver en este artículo que he escrito en otro de mis blogs; en particular, con un programa escrito, también, en lenguaje Python.

$\diamond$

-oOo-

Utilidades:

  [1] El software básico para trabajar con Python: https://www.python.org/
  [2] Un entorno de trabajo: https://thonny.org/
  [3] Un compilador en línea: https://www.tutorialspoint.com/online_python_compiler.php