Python - Calculando Operaciones Matemáticas

#41 Ejemplos de Funciones sobre Cálculos y Operaciones Matemáticas #1. Factorial usando recursividad: def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) #2. Calcular el factorial de un número usando un bucle: def factorial(n): result = 1 for i in range(1, n+1): result *= i return result #3. Calcula la suma de una lista de números usando un bucle: def sum_list(arr): result = 0 for i in range(len(arr)): result += arr[i] return result #4. Calcula el producto de una lista de números usando un bucle: def product_list(arr): result = 1 for i in range(len(arr)): result *= arr[i] return result #5. Calcular la media de una lista de números: def mean(arr): return sum(arr) / len(arr) #6. Calcular la mediana de una lista de números: def median(arr): n = len(arr) arr.sort() if n % 2 == 0: return (arr[n//2] + arr[n//2-1]) / 2 else:... return arr[n//2] #7. Calcular la moda de una lista de números: def mode(arr): freq = {} for i in arr: if i in freq: freq[i] += 1 else: freq[i] = 1 max_freq = max(freq.values()) mode = [k for k, v in freq.items() if v == max_freq] return mode #8. Calcular la suma de las cifras de un número: def sum_digits(n): return sum(int(d) for d in str(n)) #9. Calcular el producto de las cifras de un número: def product_digits(n): result = 1 for d in str(n): result *= int(d) return result #10. Calcular el MCD de dos números: def gcd(a, b): while b: a, b = b, a % b return a #11. Calcular el MCM de dos números: def lcm(a, b): return a * b // gcd(a, b) #12. Calcular la potencia de un número usando la recursividad: def power(base, exponent): if exponent == 0: return 1 elif exponent % 2 == 0: return power(base, exponent//2)**2 else: return base * power(base, exponent-1) #13. Calcula la raíz cuadrada de un número usando el método de Newton: def square_root(n): x = n if n == 0: return 0 guess = n/2 while True: new_guess = (guess + n/guess)/2 if abs(guess - new_guess) < 1e-10: return new_guess guess = new_guess #14. Calcular la distancia entre dos puntos (x1, y1) y (x2, y2): import math x1, y1 = 0, 0 x2, y2 = 3, 4 distance = math.hypot(x2 - x1, y2 - y1) print(distance) #15. Calcular la distancia entre un punto (x, y) #y una línea que pasa por dos puntos (x1, y1) y (x2, y2): import math x, y = 3, 4 x1, y1 = 0, 0 x2, y2 = 6, 0 distance = abs((y2 - y1) * x - (x2 - x1) * y + x2 * y1 - y2 * x1) / math.hypot(x2 - x1, y2 - y1) print(distance) #16. Calcular la proyección de un vector (x1, y1) sobre otro vector (x2, y2): import math x1, y1 = 3, 4 x2, y2 = 1, 1 projection = ((x1 * x2 + y1 * y2) / (x2 ** 2 + y2 ** 2)) * x2, ((x1 * x2 + y1 * y2) / (x2 ** 2 + y2 ** 2)) * y2 print(projection) #17. Convertir coordenadas polares (r, theta) a coordenadas cartesianas (x, y): import math r = 5 theta = math.pi / 4 x = r * math.cos(theta) y = r * math.sin(theta) print(x, y) #Ejemplos de Funciones sobre Cálculos Matemáticos. #18. Calcula el número pi utilizando el método de Monte Carlo. import random def monte_carlo_pi(num_samples): inside_circle = 0 for i in range(num_samples): x = random.uniform(-1, 1) y = random.uniform(-1, 1) if x**2 + y**2 <= 1: inside_circle += 1 pi = 4 * inside_circle / num_samples return pi #19. Calcula la integral de una función utilizando el método de Simpson. def simpson_1_3(f, a, b, n): """ Calcula la integral de la función f en el intervalo [a, b] utilizando la regla de Simpson 1/3 con n subintervalos. """ h = (b - a) / n x = [a + i * h for i in range(n+1)] y = [f(xi) for xi in x] integral = y[0] + y[-1] + sum([4*yi for i, yi in enumerate(y) if i % 2 == 1]) + sum([2*yi for i, yi in enumerate(y) if i % 2 == 0 and i > 0]) integral *= h/3 return integral #20. Calcula el área bajo una curva utilizando el método del trapecio. def trapecio(f, a, b, n): """ Calcula el área bajo la curva de la función f en el intervalo [a, b] utilizando el método del trapecio con n subintervalos. """ h = (b - a) / n x = [a + i * h for i in range(n+1)] y = [f(xi) for xi in x] area = sum([(y[i] + y[i+1]) * h / 2 for i in range(n)]) return area #21. Calcula el número de Euler utilizando la serie de Taylor. def euler(n): """ Calcula el número de Euler utilizando la serie de Taylor con n términos. """ e = 0 for i in range(n): e += 1 / factorial(i) return e #e = 1/0! + 1/1! + 1/2! + 1/3! + ... + 1/n! from math import factorial factorial(5) # devuelve 120 #22. Calcula el logaritmo natural de un número utilizando la serie de Taylor. def ln(x, n): """ Calcula el logaritmo natural de x utilizando la serie de Taylor con n términos. """ if x <= 0: return float('-inf') elif x == 1: return 0 else: ln_x = 0 for i in range(1, n+1): ln_x += ((-1)**(i+1)) * ((x-1)**i) / i return ln_x #ln(x) = (x-1) - (x-1)^2/2 + (x-1)^3/3 - (x-1)^4/4 + ... + (-1)^(n+1) * (x-1)^n / n #23. Calcula la función exponencial de un número utilizando la serie de Taylor. def exp(x, n): """ Calcula la función exponencial de x utilizando la serie de Taylor con n términos. """ exp_x = 0 for i in range(n): exp_x += x**i / factorial(i) return exp_x #exp(x) = 1 + x + x^2/2! + x^3/3! + ... + x^n/n! from math import factorial factorial(5) # devuelve 120 #24. Calcula la función de Ackermann de dos números enteros. def ackermann(m, n): """ Calcula la función de Ackermann de dos números enteros m y n. """ if m == 0: return n + 1 elif m > 0 and n == 0: return ackermann(m-1, 1) elif m > 0 and n > 0: return ackermann(m-1, ackermann(m, n-1)) #25. Calcula la función de Ackermann generalizada de tres números enteros. def ackermann_generalizada(m, n, p): """ Calcula la función de Ackermann generalizada de tres números enteros m, n y p. """ if m == 0: return n + p elif m > 0 and n == 0: return ackermann_generalizada(m-1, p, 1) elif m > 0 and n > 0: return ackermann_generalizada(m-1, ackermann_generalizada(m, n-1, p), p) #26. Calcula la función de Jacobsthal de un número entero. def jacobsthal(n): """ Calcula la función de Jacobsthal de un número entero n. """ if n == 0: return 0 elif n == 1: return 1 else: return jacobsthal(n-1) + 2*jacobsthal(n-2) #J(0) = 0 #J(1) = 1 #J(n) = J(n-1) + 2*J(n-2) para n > 1 #27. Calcula la función de Euler de un número entero en Python. def euler_func(n): """ Calcula la función de Euler de un número entero n. """ phi = n p = 2 while p * p <= n: if n % p == 0: phi -= phi // p while n % p == 0: n //= p p += 1 if n > 1: phi -= phi // n return phi #phi(n) = n * (1 - 1/p1) * (1 - 1/p2) * ... * (1 - 1/pk) #28. Calcula el número de Bell de un número entero en Python. def bell_number(n): """ Calcula el número de Bell de un número entero n. """ bell = [[0 for i in range(n+1)] for j in range(n+1)] bell[0][0] = 1 for i in range(1, n+1): bell[i][0] = bell[i-1][i-1] for j in range(1, i+1): bell[i][j] = bell[i-1][j-1] + bell[i][j-1] return bell[n][0] #B(0) = 1 #B(n) = sum_{k=0}^{n-1} binomial(n-1, k) * B(k) #29. Calcula el número de Stirling de primer tipo de un número entero en Python. def stirling_first(n, k): """ Calcula el número de Stirling de primer tipo de n y k. """ if n == 0 and k == 0: return 1 elif n == 0 or k == 0: return 0 else: return (n-1)*stirling_first(n-1, k) + stirling_first(n-1, k-1) s(n, k) = (n-1)*s(n-1, k) + s(n-1, k-1) #30. Calcula el número de Stirling de segundo tipo de un número entero en Python. def stirling_second(n, k): """ Calcula el número de Stirling de segundo tipo de n y k. """ if n == 0 and k == 0: return 1 elif n == 0 or k == 0: return 0 else: return k*stirling_second(n-1, k) + stirling_second(n-1, k-1) #S(n, k) = k*S(n-1, k) + S(n-1, k-1) #31. Calcula el coeficiente binomial de dos números enteros en Python. def binomial_coef(n, k): """ Calcula el coeficiente binomial de n y k. """ if k == 0 or k == n: return 1 elif k > n: return 0 else: return binomial_coef(n-1, k-1) + binomial_coef(n-1, k) #C(n, k) = 1 si k = 0 o k = n #C(n, k) = 0 si k > n #C(n, k) = C(n-1, k-1) + C(n-1, k) si 0 < k < n #C(n, k) = C(n-1, k-1) * n / k #32. Calcula el número de Catalan de un número entero en Python. def catalan_number(n): """ Calcula el número de Catalan de un número entero n. """ if n <= 1: return 1 else: catalan = [0]*(n+1) catalan[0] = 1 catalan[1] = 1 for i in range(2, n+1): for j in range(i): catalan[i] += catalan[j] * catalan[i-j-1] return catalan[n] #C(0) = 1 #C(n) = sum_{i=0}^{n-1} C(i) * C(n-i-1) para n > 0 #33. Calcula el número de Bonacci de un número entero en Python. def bonacci_number(n, m): """ Calcula el número de Bonacci de un número entero n y un entero m. """ if n < m: return 0 elif n == m or m == 1: return 1 else: bonacci = [0]*(n+1) for i in range(m-1): bonacci[i] = 0 bonacci[m-1] = 1 for i in range(m, n+1): bonacci[i] = sum(bonacci[i-m:i]) return bonacci[n] #B(m) = 1 para 1 <= m <= k #B(n) = sum_{i=n-k}^{n-1} B(i) para n > k #34. Calcule el número de Pell de un número entero en Python. def pell_number(n): """ Calcula el número de Pell de un número entero n. """ if n == 0: return 0 elif n == 1: return 1 else: pell = [0]*(n+1) pell[0] = 0 pell[1] = 1 for i in range(2, n+1): pell[i] = 2*pell[i-1] + pell[i-2] return pell[n] #P(0) = 0 #P(1) = 1 #P(n) = 2*P(n-1) + P(n-2) para n > 1 #35. Calcula el número de Lucas de un número entero en Python. def lucas_number(n): """ Calcula el número de Lucas de un número entero n. """ if n == 0: return 2 elif n == 1: return 1 else: lucas = [0]*(n+1) lucas[0] = 2 lucas[1] = 1 for i in range(2, n+1): lucas[i] = lucas[i-1] + lucas[i-2] return lucas[n] #L(0) = 2 #L(1) = 1 #L(n) = L(n-1) + L(n-2) para n > 1 #36. Calcula el número de Mersenne de un número entero en Python. def mersenne_number(n): """ Calcula el número de Mersenne de un número entero n. """ if n == 0: return 0 else: return 2**n - 1 #M(n) = 2^n - 1 #37. Calcula el producto de dos matrices en Python. def multiply_matrix(A, B): """ Calcula el producto de dos matrices A y B. """ if len(A[0]) == len(B): C = [[0 for j in range(len(B[0]))] for i in range(len(A))] for i in range(len(A)): for j in range(len(B[0])): for k in range(len(B)): C[i][j] += A[i][k] * B[k][j] return C else: print("Las matrices no tienen las dimensiones adecuadas para la multiplicación.") #38. Calcula el determinante de una matriz en Python. def determinant(A): """ Calcula el determinante de una matriz A. """ n = len(A) det = 0 if n == 1: det = A[0][0] elif n == 2: det = A[0][0]*A[1][1] - A[0][1]*A[1][0] else: for j in range(n): sign = (-1)**j submatrix = [[A[i][k] for k in range(n) if k != j] for i in range(1, n)] det += sign * A[0][j] * determinant(submatrix) return det #det(A) = a_{1,1} * det(A_{1,1}) - a_{1,2} * det(A_{1,2}) + ... + (-1)^{1+n} * a_{1,n} * det(A_{1,n}) #39. Calcula la inversa de una matriz en Python. def inverse_matrix(A): """ Calcula la inversa de una matriz A. """ n = len(A) A_inv = [[0 for j in range(n)] for i in range(n)] det = determinant(A) if det == 0: print("La matriz no es invertible.") return None else: for i in range(n): for j in range(n): sign = (-1)**(i+j) submatrix = [[A[k][l] for l in range(n) if l != j] for k in range(n) if k != i] A_inv[j][i] = sign * determinant(submatrix) / det return A_inv #40. Calcula el alineamiento óptimo entre dos secuencias en Python. def optimal_alignment(s1, s2, match=1, mismatch=-1, gap=-1): """ Calcula el alineamiento óptimo entre dos secuencias s1 y s2. """ n = len(s1) m = len(s2) score = [[0 for j in range(m+1)] for i in range(n+1)] for i in range(n+1): score[i][0] = i * gap for j in range(m+1): score[0][j] = j * gap for i in range(1, n+1): for j in range(1, m+1): if s1[i-1] == s2[j-1]: diagonal = score[i-1][j-1] + match else: diagonal = score[i-1][j-1] + mismatch up = score[i-1][j] + gap left = score[i][j-1] + gap score[i][j] = max(diagonal, up, left) align1 = "" align2 = "" i = n j = m while i > 0 and j > 0: if score[i][j] == score[i-1][j-1] + (match if s1[i-1] == s2[j-1] else mismatch): align1 = s1[i-1] + align1 align2 = s2[j-1] + align2 i -= 1 j -= 1 elif score[i][j] == score[i-1][j] + gap: align1 = s1[i-1] + align1 align2 = "-" + align2 i -= 1 else: align1 = "-" + align1 align2 = s2[j-1] + align2 j -= 1 while i > 0: align1 = s1[i-1] + align1 align2 = "-" + align2 i -= 1 while j > 0: align1 = "-" + align1 align2 = s2[j-1] + align2 j -= 1 return align1, align2, score[n][m] #41. Calcula la distancia de Levenshtein entre dos cadenas en Python. def levenshtein_distance(s1, s2): """ Calcula la distancia de Levenshtein entre dos cadenas s1 y s2. """ n = len(s1) m = len(s2) d = [[0 for j in range(m+1)] for i in range(n+1)] for i in range(n+1): d[i][0] = i for j in range(m+1): d[0][j] = j for j in range(1, m+1): for i in range(1, n+1): if s1[i-1] == s2[j-1]: substitution_cost = 0 else: substitution_cost = 1 d[i][j] = min(d[i-1][j] + 1, d[i][j-1] + 1, d[i-1][j-1] + substitution_cost) return d[n][m]

Geogebra Python