def min_sections(self, tolerance: float = 5, N_max: int = 150, plot: bool = False) -> int: """ Obtiene el mínimo N con el que se puede representar a la línea con cuadripolos RC, cada uno con valores rL/N y cL/N tolerance es el porcentaje del punto de la asíntota que consideramos Con plot se decide si plotear TpVsN """ # parametros del circuito C = self.c * self.L R = self.r * self.L tao = 5 * R * C # parametros de la fuente V = 2.5 pulse_width = tao period = pulse_width # parametros de la simulacion end_time = pulse_width time_step = end_time / 1e4 # contenedores de los resultados T_vec = [] N_vec = [] for N in [N + 1 for N in range(N_max)]: # creamos los objetos source = StepSource(V, pulse_width, period) circuit = Circuit(R, C, source, self.uid, N) simulation = Simulation(time_step, end_time, circuit, self.uid) results = Results(self.uid) # simulamos y procesamos los resultados simulation.run(results.filename) results.process() T_vec.append(results.get_rise_time()) N_vec.append(N) # limpiamos los archivos circuit.clean() simulation.clean() results.clean() if plot: plt.plot([int(n) for n in N_vec], [t * 1e15 for t in T_vec]) plt.ylabel('Tiempo de crecimiento [fs]') plt.xlabel('Cantidad de cuadripolos') plt.title( f'Tiempo de crecimiento para línea de {int(np.ceil(self.L*1e6))} micro' ) plt.grid() plt.savefig('TpVsN.png') plt.show() # Consideramos el N mínimo como el mínimo de los N que tienen un tiempo # de propagación no mayor a un {tolerancia}% de la asíntota N_min = N_vec[np.min( np.nonzero(T_vec < np.min(T_vec) * (1 + tolerance / 100)))] return N_min