Categorías
Matemáticas

Resuelve Bhāskara en los números reales, usa la libreria math para el uso de la raiz.

Fuente: frigoli nicolas | Verificado por: Juan Ramírez

Este es un programa de Python que calcula las raíces de una ecuación cuadrática. Las ecuaciones deben tener raíces reales y no pueden ser complejas. – Cita GTP3

donde x es la variable, y ab y c constantes; a es el coeficiente cuadrático (distinto de cero), b el coeficiente lineal y c es el término independiente. Este polinomio se puede interpretar mediante la gráfica de una función cuadrática, es decir, por una parábola. Esta representación gráfica es útil, porque las abscisas de las intersecciones o punto de tangencia de esta gráfica, en el caso de existir, con el eje son las raíces reales de la ecuación. Si la parábola no corta el eje las raíces son números complejos. El primer caso (raíces reales) corresponde a un discriminante positivo, y el segundo (raíces complejas) a uno negativo. – Cita Wikipedia

  • Solución en Python:
from math import sqrt
A = int(input("Ingrese el coeficiente de la variable cuadrática\n"))
B = int(input("Ingrese el coeficiente de la variable lineal\n"))
C = int(input("Ingrese el término independiente\n"))
x1= 0
x2= 0
if ((B**2)-4*A*C) < 0:
  print("La solución de la ecuación es con números complejos")
else:
  x1 = (-B+sqrt(B**2-(4*A*C)))/(2*A)
  x2 = (-B-sqrt(B**2-(4*A*C)))/(2*A)
  print("Las soluciones de la ecuación son:")
  print(x1)
  print(x2)
  • ¿En qué se usa este algoritmo?

en análisis matemático o algebra básica.

Categorías
Criptografía

Pequeño Teorema de Fermat

Fuente: Kai Takami | Verificado por: Juan Ramírez


Si p es un número primo (2, 3, 5, 7, 11, 13…), entonces, para cada número natural a, con a>0 (a mayor a 0), a**p a(p elevado a la a) ≡ a (mod p) (mod significa módulo) [a**p ≡ a (mod p)]

Wikipedia
Triple bar

  • Solución en Python:
p = 2 #Número primo
a = 1 #Menos a p
        
print(a**p % p) # = a
# a (1) elevado a la p (2) es igual a 1 (1*1=1), el resultado (1) módulo 2 es igual a 1 (a).
print(1 % 2)
  • ¿En qué se usa este algoritmo?

Encriptación:
Por ejemplo, si n es un número de 300 dígitos podemos usar el test de Fermat para revisar si es un número primo en segundos.
RSA algorithm para encriptación. (Algoritmo RSA) Existen los números de Carmichael qué pueden «engañar» este teorema (Carmichael)

Categorías
Ordenamiento

¿Cómo hacer un bubble sort?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques


El ordenamiento de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada.

Fuente: https://es.wikipedia.org/wiki/Ordenamiento_de_burbuja


vec = [5, 2, 3, 1, 4]

#El len a vec hace que sea adaptable al tamaño que podría tener la lista
for i in range(len(vec)+ 1):
#Sirve para tomar el anterior número para posteriormente compararlo
    for x in range(len(vec)- i - 1):
        #Intercambio
        if vec[x] > vec[x + 1]:
            print(vec)
            aux = vec[x]
            vec[x] = vec[x + 1]
            vec[x + 1] = aux

print(vec)
Fuente: Wikipedia
Categorías
Entrada de datos

¿Cómo calcular un promedio?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

Para saber el promedio de un número «x» de variables, se tienen que sumar entre si, y luego se dividen por el número de la cantidad de variables que hay a promediar.

Ingreso de datos:

Se ingresan en este caso 3 números enteros a 3 variables.

Asignación de variable resultado:

«resultado» almacena el valor de la suma de «numero1» más «numero2» más «numero3».

Asignación a variable promedio:

«promedio» almacena el valor de «resultado» dividido por 3. (3 en este caso ya que son la cantidad de variables a calcular).

Devolver el resultado:

Se utiliza «print()».

numero1 = int(input("ingrese su primer número: "))
numero2 = int(input("ingrese su segundo número: "))
numero3 = int(input("ingrese su tercer número: "))
resultado = numero1 + numero2 + numero3
promedio = resultado/3
print(f"El promedio es {promedio}")
Categorías
Entrada de datos

¿Cómo calcular la media geométrica?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques


En matemáticas y estadística, la media geométrica de una cantidad arbitraria de números (por decir n números) es la raíz n-ésima del producto de todos los números; es recomendada para datos de progresión geométrica, para promediar razones, interés compuesto y números índice.

{\displaystyle {\bar {x}}={\sqrt[{n}]{\prod _{i=1}^{n}{x_{i}}}}={\sqrt[{n}]{x_{1}\cdot x_{2}\cdots x_{n}}}}

Por ejemplo, la media geométrica de 2 y 18 es la raíz cuadrada del producto de ambos {\displaystyle {\sqrt[{2}]{2\cdot 18}}={\sqrt[{2}]{36}}=6}. Otro ejemplo, la media geométrica de 1, 3 y 9 sería la raíz cúbica del producto de los tres números {\displaystyle {\sqrt[{3}]{1\cdot 3\cdot 9}}={\sqrt[{3}]{27}}=3}.

Fuente: https://es.wikipedia.org/wiki/Media_geom%C3%A9trica


Ingreso de números:

Las entradas de números enteros se realizan con la función «int», en este caso se solicitan 3 datos.

Asignación de variable «media»:

El primer valor que toma «media» es la multiplicación de «numero1» por «numero2» por «numero3».

La segunda asignación se trata de potenciar este resultado por 1 dividido 3.

Imprimir resultado:

Se realiza con «print()»

numero1 = int(input("ingrese su primer número: "))
numero2 = int(input("ingrese su segundo número: "))
numero3 = int(input("ingrese su tercer número: "))

media = numero1*numero2*numero3
media = media**(1/3)

print(f"La media geomética es {media}")
Categorías
POO

¿Cómo hacer una guitarra con POO?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

Enunciado: Diseñe la clase Guitarra, pero intente abstraer características de las guitarras que son
comunes a todas. Ya sabemos que el precio, el número de serie y la fecha de fabricación
son parte de la guitarra. Pero el resto de los atributos se podrían modelar como una clase
diferente.


Framework

«import java.util.Date;»: Es importante usar esta importación cuando queremos utilizar el framework para usar el tipo de dato Date (Sirve para fechas)

Clase

Luego definimos la clase como abstracta (usando abstract), ya que luego vamos a hacer 2 herencias de esta misma, utilizándola como «molde» para otros tipos de guitarras.

Atributos

Se definen los atributos como privados, ya que es una buena práctica para no modificarlos.

Asignación

Luego se asigna valor al atributo de tipo de dato Date, con los demás valores numéricos no son necesarios en este caso ya que se asignan automáticamente en 0.

Gets y Sets

Se definen los gets y sets para los atributos, en el siguiente articulo muestro más a detalle esto, click aquí.

import java.util.Date;

public abstract class Guitarra
{
//atributos
    private int numeroSerie;
    private double precio;
    private Date fechaFabricacion;

    public Guitarra()
    {
        //asignaciones
        fechaFabricacion = new Date(06/21/2022);
    }
    public int getNumeroSerie(){
        return numeroSerie;
    }
    
    public void setNumeroSerie(int numeroSerie){
        this.numeroSerie = numeroSerie;
    }
    
    public double getPrecio(){
        return precio;
    }
    
    public void setPrecio(double precio){
        this.precio = precio;
    }
    
    public Date getFechaFabricacion(){
        return fechaFabricacion;
    }
    
    public void setFechaFabricacion(Date fechaFabricacion){
        this.fechaFabricacion = fechaFabricacion;
    }
    
    public abstract String sonar();
}

Herencia guitarra electrica

Se utiliza «extends» para realizar la herencia desde la clase Guitarra.

Luego se define el atributo único de esta herencia, que es en este caso «fuenteAlimentacion», y modificamos a un precio de ejemplo con «setPrecio(0)»

Se crea el método «sonar()» para comprobar si «puede sonar».

public class Electrica extends Guitarra
{
    private boolean fuenteAlimentacion;

    public Electrica()
    {
        fuenteAlimentacion = true;
        setPrecio(0);
    }
        public boolean getFuenteAlimentacion(){
        return fuenteAlimentacion;
    }
    
    public void setFuenteAlimentacion(boolean fuenteAlimentacion){
        this.fuenteAlimentacion = fuenteAlimentacion;
    }
    
    public String sonar(){
        return "guitarra eléctrica sonando";
    }
    
    }

Se realiza lo mismo con la segunda herencia de guitarra criolla pero con algunas diferencias como el atributo único con el que cuenta.

public class Criolla extends Guitarra
{
    private String cajaResonancia;

    public Criolla()
    {
        cajaResonancia = "";
        setPrecio(0);
    }
    public String getCajaResonancia(){
        return cajaResonancia;
    }
    
    public void setCajaResonancia(String cajaResonancia){
        this.cajaResonancia = cajaResonancia;
    }
    
    public String sonar(){
        return "guitarra criolla sonando";
    }
}
Diagrama UML

– ¿En qué se usa este algoritmo?

Estudiar: Es muy práctico para entender las herencias y polimorfismos en la programación orientada a objetos.

Categorías
Inteligencia artificial

¿Cómo pasar de celcius a fahrenheit con una red neuronal?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

Créditos: Algoritmo del vídeo de Ringa Tech llamado «Tu primera red neuronal en Python y Tensorflow»

Estos son mis apuntes del mencionado vídeo, en caso de haber un error, agradezco tu sugerencia en el botón de abajo de «Corregir este aporte».


No olvides de ir compilando cada paso en caso que utilices Google Colab.

Importación de frameworks de tensorflow y numpy.

import tensorflow as tf
import numpy as np

Arreglos de números donde se colocan los datos de entrada de celcius y los resultados de fahrenheit.

celsius = np.array([-40, -10, 0, 8, 15, 22, 38], dtype = float)
fahrenheit = np.array([-40, 14, 32, 46, 59, 72, 100], dtype = float)

Definición de capas

«tf.keras.layers.Dense» Hace referencia que define una capa de tipo densa. (Las capas de tipo densa significan que cada neurona de una capa, tienen conexiones a todas las neuronas de la siguiente capa).

«units = 1» Hace referencia que hay una neurona de salida.

«input_shape = [1]» Significa que hay una capa de entrada con una sola neurona.

«modelo = tf.keras.Sequential([capa])» Definición de modelo de capa secuencial, asignado a nuestra variable «capa».

capa = tf.keras.layers.Dense(units = 1, input_shape = [1])
modelo = tf.keras.Sequential([capa])

Definición del optimizador y función de perdida

Para el optimizador se utiliza el algoritmo Adam (Adam es un algoritmo de optimización que se puede utilizar en lugar del procedimiento de descenso de gradiente para actualizar los pesos de red de forma automática), en este caso se le asigna el valor de 0.1, porque poco puede hacer lenta la red, y mucho, pasarse del resultado esperado.

modelo.compile(
    optimizer = tf.keras.optimizers.Adam(0.1),
    loss = 'mean_squared_error'
)

Entrenamiento

Se utiliza la función «.fit» sobre el modelo, ejemplo «modelo.fit» especificando los datos de entrada (En este caso la lista celcius) y los datos de salida (En este caso fahrenheit), luego se definen las épocas por las que iterará, con la función «epochs = valor» y para solo imprimir lo esencial se utiliza «verbose = False»

print("Entrenamiento...")
historial = modelo.fit(celsius, fahrenheit, epochs = 1000, verbose = False)
print("Modelo entrenado")

Imprimir los resultados de la función de perdida

(Qué tan mal están los resultados en cada iteración de aprendizaje en las épocas)

import matplotlib.pyplot as plt
plt.xlabel("# Epoca")
plt.ylabel("Magnitud de pérdida")
plt.plot(historial.history["loss"])

Predicción

En este caso se hace una predicción de cuantos son 100 grados celcius en fahrenheit, «El resultado es[[211.74268]]fahrenheit», En realidad es 212 fahrenheit, pero redondeandolo es correcto, una opción podría ser redondearlo con la función round de python para estos casos.

print("Hagamos una predicción")
resultado = modelo.predict([100.0])
print("El resultado es"+ str(resultado) + "fahrenheit")

¿Cómo ver el peso y el sesgo?

print("variable interna del modelo")
print(capa.get_weights())

Anotaciones: En este caso una red neuronal más compleja (agregar capas ocultas) puede terminar de aprender en una época más temprana.

Categorías
Iteración

¿Cómo funciona el bucle for?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

El bucle for se utiliza para repetir una o más instrucciones un determinado número de veces, se utiliza cuando se sabe el número de veces a repetir.

– Solución en Python
nombre = input("Ingrese su nombre: ")

#En este caso la variable i tiene una iteración de 10 veces
for i in range(10):
    print(f"Hola {nombre}")

– ¿En qué se usa este algoritmo?

Estudiar: Es muy práctico para saber como funcionan los bucles for.

Categorías
Iteración

¿El algoritmo filosófico?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

Si un bucle mientras (while), no tiene una condición para finalizar la iteración, va a repetirse sin limites. (Mucho cuidado con esto, ya que puede consumir tu memoria RAM).

– Solución en Python
#Bot filosófico

while True:
    pregunta = ""
    duda = pregunta
    pregunta = input("¿Por qué? ")
    duda = input(f"¿Por qué {pregunta}?")

– ¿En qué se usa este algoritmo?

Estudiar: Es muy práctico para aprender como funcionan los bucles.

Categorías
POO

¿Cómo programar un contador con POO?

Fuente: Juan Ramírez | Verificado por: Maximiliano Vasques

Programemos una variable que aumente su valor, o se reste a través de llamar sus métodos.

– Solución en Java
public class contador
{
//Definición de variable contador
    private int cont;
//Asignación de variable contador
    public contador()
    {
        cont = 0;
    }
//Declaración de gets y sets
    
    public int getCont() {
        return cont;
    }
    
    public void setCont(int cont) {
        this.cont = cont;
    }
//Declaración de métodos
    public void sumarCont()
    {
        setCont(getCont()+1);
        System.out.println(cont);
    }
    
    public void restarCont()
    {
        setCont(getCont()-1);
        System.out.println(cont);
    }
    
}

(No olvides de crear una instancia y probarlo en la terminal llamando al método «sumarCont()» o «restarCont()»)

– ¿En qué se usa este algoritmo?

Estudiar: Es muy práctico para entender la programación orientada a objetos, y los Gets y Sets.

En caso que no entiendas esta explicación, te recomiendo el botón de «Contenido relacionado».