Entradas etiquetadas con Matemáticas
Resolver lista de ecuaciones cuadráticas en Python
25 mar
Hoy vengo a presentar un script que tuve que realizar para un reto de un Wargame.
El reto en sí, era resolver una gran lista de ecuaciones (aproximadamente 1.000), y posteriormente sumar todos sus resultados (enteros, nada más).
Ej. 78x^2+8x-41446 66x^2+62x-124700 21x^2+15x-81654
Resultados: (23.0, -23.102564102564102) (43.0, -43.939393939393938) (62.0, -62.714285714285715)
Respuesta: 23 + 43 + 62 = 128
No siendo más, aquí dejo el código.
#-*- coding: utf-8 -*- from math import sqrt #Función para resolver las ecuaciones. def sSolve(a,b,c): (x1,x2) = (-b + sqrt(b ** 2 - 4*a*c))/(2*a),(-b - sqrt(b ** 2 - 4*a*c))/(2*a) return (x1,x2) #Abrir el archivo con todas las ecuaciones que se deben resolver. sFile = open('quadratic.txt','r') #Variable para el resultado total. tTotal = 0.0 #Bucle para recorrer línea a línea el archivo. for line in sFile: #Índices para buscar los términos a, b y c. iA = line.find('x^2+') iB = line.find('x-') #Agrupar los valores correspondientes en una tupla (Convertidos en integer) (a, b, c) = int(line[:iA]),int(line[iA+4:iB]),int(line[iB+1:]) #Resolver... rRes = sSolve(a,b,c) #Sumar respuestas válidas (Enteras). tTotal += rRes[0] #Cerrar el archivo. sFile.close() #Imprimir en pantalla el total. print tTotal
Variaciones: Sucesión de Fibonacci
17 jul
Pasando el tiempo, me dio por leer un poco sobre la Sucesión de Fibonacci. Gracias a ello, hice en Python dos formas para realizar esta sucesión
No siendo más, aquí os las dejo:
from math import sqrt, pow def f(x): return ((1/sqrt(5))*pow(((1+sqrt(5))/(2)),x)-(1/sqrt(5))*pow(((1-sqrt(5))/(2)),x))
from math import sqrt, pow a = 1.61803398874989 f = lambda x: (pow(a,x)- pow(-a,-x))/ sqrt(5) for i in range(25): print f(i)
Y en menos líneas…
from math import sqrt, pow a = 1.61803398874989 for i in range(25): print (lambda x: (pow(a,x)-pow(-a,-x))/sqrt(5))(i)
Ecuación de segundo grado
1 nov
Una ecuación de segundo grado es una ecuación polinómica donde el mayor exponente de la incógnita es igual a dos.
Se expresa de la siguiente forma:
La ecuación tiene siempre dos soluciones, llamadas raíces, dadas por la fórmula general:
Donde el símbolo «±» indica que los dos valores son soluciones.
Si observamos el discriminante podemos obtener el número y la naturaleza de las soluciones:
- Dos soluciones reales y diferentes si el discriminante es positivo.
- Dos números complejos si el discriminante es negativo.
Aplicando lo anterior podemos crear un código en el lenguaje que más nos agrade para que resuelva las ecuaciones cuadráticas.
Aquí está el mío, hecho en Python (v. 2.6)
# -*- coding: utf-8 -*- """ @ Solución de ecuaciones cuadráticas @ Autor: .:WindHack:. @ segundogrado.py @ www.daw-labs.com - www.cibernodo.net """ from math import sqrt def __main__(): print ''' Ecuaciones de 2do. Grado ax^2 + bx + c = 0 ''' a = input('Coeficiente de A: ') b = input('Coeficiente de B: ') c = input('Coeficiente de C: ') try: # Si el discriminante es menor que cero, el resultado es imaginario. if ( b ** 2 - 4*a*c ) < 0: r = -b / (2.0*a) i = (sqrt(-(b ** 2 - 4*a*c)))/(2*a) print ''' Solución: X (+): %f + %f X (-): %f - %f ''' % (r,i,r,i) # En caso contrario, el resultado es real. else: (X1,X2) = (-b + Más >
Valor absoluto de un número real en Pascal
14 jul
El Valor absoluto de un número real es la distancia entre el número real y el cero (0) en la recta numérica, sin tener en cuenta su signo sea éste positivo o negativo.
Por ejemplo, 15 es el valor absoluto de -15 y de 15.
Para todo número real , el valor absoluto es positivo. Se nota por y se define como:
Programando cálculo en PascalPara obtener el valor absoluto de un número, tenemos la función Abs(); de la unidad System.pas. Pero bien, como siempre, programaremos nuestra propia función (alternativa).
Tomando en cuenta el siguiente pseudocódigo podremos crear más fácil la función:
Función ValorAbsoluto(Numero)
Inicio
Si Numero < Cero Entonces
Retorno Numero * -1
De otro modo Si Numero > Cero Entonces
Retorno Numero
Sino
Retorno Cero
Fin
Pues no siendo más, aquí dejo mi función.
function AbsoluteValue(X:Real):Real; const ZeroValue = 0.0; begin if X < ZeroValue then Result := -X (* Es igual a X * (-1) *) else if X > ZeroValue then Result := X else Result := ZeroValue; end;
Potenciación de números naturales en C/C++
12 jul
La potenciación es una expresión matemática que consta de dos términos denominados: base (a) y exponente (n).
Se escribe: y se lee «a elevado a la n». Siempre y cuando sean números naturales ésto equivaldría a multiplicar la base por sí misma el número de veces indicado por el exponente.
Programando cálculo en C/C++Para calcular la potencia de un número, podemos recurrir a la función pow(); ya implementada, que se encuentra en <math.h>. O bien hacerla nosotros.
En éste caso elegí la segunda opción. Hacer nuestra propia función para cálculo de potencias. Vamos a manejar variables del tipo double, ya que son más cómodas para trabajar con potencias.
Declararemos la función de la siguiente manera:
double potencia(double base,double exponente);
Bien, ahora a trabajar en ella. Según la declaración, tenemos dos variables a las cuales podemos acceder, pero necesitamos declarar otra, la cual contendrá el resultado de la operación matemática que haremos.
double potencia(double base,double exponente) { double temp = 1; /* Parte de código */ }
Aquella variable la inicializamos en «1», ¿por qué?, porque ésta es necesaria multiplicarla por la base, y teniendo un valor nulo, no nos serviría.
Bien, ahora para multiplicar la base por el número de veces declarada por el exponente usaremos el bucle for, con él multiplicaremos la variable temporal por la base el número de veces declarado, y Más >

