packages = ["pandas", "matplotlib", "statsmodels"]
# importamos librerias
import io
import asyncio
import pandas as pd
import matplotlib.pyplot as plt
import math
import numpy as np
from js import document, FileReader
from pyodide.ffi import create_proxy
################################### las funciones que se llaman aparte cada una tras cargar los datos pulsando botones
def densidad_norm(x):
p_z = (math.exp(-(x**2)/2))/(math.sqrt(2*math.pi))
return p_z
# definimos función universal de aproximación
# z numero real: extremo de intervalo para cálculo de probabilidad
# c numero real: extremo de la cola
# t numero natural: cantidad de subintervalos
# cadena que toma valores "mimmal", "maximal", "aproximacion"
#
def general(z,c,t,m):
# generamos subintervalos de áreas
t_int = [] # generamos extremos de subintervalos
t_dist = (z-c)/t
k = 0;
if m == "minimal": # caso para anadir c1 y quitar punto z
t_int.append(c)
for i in range(t):
k = k + t_dist
t_int.append(c+k)
if m == "minimal":# caso para anadir c1 y quitar punto z
t_int.pop(t)
if m == "maximal":# caso para quitar el primer punto
t_int.pop(0)
# generamos aproximaciones de areas
area = 0
for j in t_int:
area = area + t_dist*densidad_norm(j)
return area
def función_principal(z,c,t):
# genera solo aproximacion y el error que se comete
# pero ya teniendo en cuenta la cola
aproximado = (general(z,c,t,"maximal")+general(z,c,t,"minimal"))/2
error = general(z,c,t,"maximal")+1/2 -general(0,c,t,"minimal") -general(z,c,t,"minimal")
return aproximado, error
def salida_grafica(z,c,t):
# t cantidad de subintervalos
# creamos una lista hasta t
intervalo_base=[]
for i in range(t):
intervalo_base.append(i+1)
intervalo1 = []
intervalo2 = []
for i in intervalo_base:
intervalo1.append(función_principal(z,c,i)[0])
intervalo2.append(función_principal(z,c,i)[1])
return intervalo1, intervalo2
def aceptar():
value_1 = float(document.getElementById("zeta").value)
value_2 = float(document.getElementById("cola").value)
value_3 = int(document.getElementById("intervalos").value)
manual_div1 = Element("dato2") # indicamos donde lo vamos a representar
t = salida_grafica(value_1,value_2,value_3)
manual_div1.element.innerText = ""; # borrar todo
manual_div1.element.innerText = t[0][value_3-1],t[1][value_3-1];
plt.style.use('classic')
fig,ax=plt.subplots()
ax.plot(t[0],c="green", label="aproximación")
ax.plot(t[1],c="red", label="error")
ax.legend(loc='upper right')
#Damos formato a la gráfica
# si queiro añadir el sombreado entre las gráficas
#plt.fill_between(fechas, max, min,facecolor='grey',alpha=0.5)
fig.autofmt_xdate()
plt.title("ERROR", fontsize=16)
plt.xlabel("CANTIDAD DE SUBINTERVALOS",fontsize=14)
fig.set_size_inches(5.5, 5.5)
display(fig, target="dato2")
# borrar todao
def borrar2():
manual_div = Element("dato2")
manual_div.element.innerText = " ";