Ejercicio 1 TP 8

Ejercicio 1 TP 8

by Federico Marko Etchetto -
Number of replies: 0

Buenas tardes, ayer hice este programa de Integración de Romberg para el ejercicio 1 del TP8, lo revisé con majo y como puede llegar a servirnos a todos, me dijo que lo compartiera por acá.

import math

# Cargo la matriz con los puntos de la función (ejemplo de temperaturas)
def cargarmatrizM():
M = [[0, 63], [1, 65], [2, 66], [3, 68], [4, 70], [5, 69], [6, 68],
[7, 68], [8, 65], [9, 64], [10, 62], [11, 58], [12, 55]]
return M

# Defino la función a integrar (usando interpolación de la matriz)
def f(x):
M = cargarmatrizM()
for i in range(len(M) - 1):
if M[i][0] <= x <= M[i + 1][0]:
# Interpolación lineal entre dos puntos consecutivos
x0, y0 = M[i]
x1, y1 = M[i + 1]
return y0 + (y1 - y0) * (x - x0) / (x1 - x0)
return 0 # Valor fuera del rango

# Cálculo de la regla del trapecio compuesto
def trapecio_compuesto(func, a, b, n):
h = (b - a) / n
suma = 0.5 * (func(a) + func(b))
for i in range(1, n):
suma += func(a + i * h)
return h * suma

# Cálculo de la integración de Romberg con orden de estimación fijo
def romberg(func, a, b, orden_max):
R = [[0] * (k + 1) for k in range(orden_max)] # Matriz triangular

# Primera estimación con un solo tramo (n = 1)
R[0][0] = trapecio_compuesto(func, a, b, 1)

for k in range(1, orden_max):
# Refinamiento usando 2^k tramos
R[k][0] = trapecio_compuesto(func, a, b, 2**k)

# Extrapolación de Richardson
for j in range(1, k + 1):
R[k][j] = ((4**j) * R[k][j - 1] - R[k - 1][j - 1]) / (4**j - 1)

# El resultado final es la última estimación disponible
print(f"Integración final alcanzada con orden de estimación {orden_max}")
return R[orden_max - 1][orden_max - 1]

# Programa principal
a = int(input('Ingrese el valor del límite inferior de la integral: '))
b = int(input('Ingrese el valor del límite superior de la integral: '))
orden_max = int(input('Ingrese el orden de estimación deseado: '))

# Calcular el valor de la integral usando Romberg
resultado = romberg(f, a, b, orden_max)

# Calcular la temperatura promedio
temprom = resultado / (b - a)

# Mostrar resultados
print(f'El valor promedio de la temperatura es: {temprom:.6f} ºC')

if temprom <= 58 or temprom >= 62:
print('La estufa no funciona correctamente')
else:
print('La estufa funciona correctamente')

Buen finde para todos!