File size: 2,149 Bytes
f03d840
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
def set_model(self, model_type, equation, params_str):
    """
    Configura el modelo basado en el tipo, ecuaci贸n y par谩metros.
    
    :param model_type: Tipo de modelo ('biomass', 'substrate', 'product')
    :param equation: La ecuaci贸n como cadena de texto
    :param params_str: Cadena de texto con los nombres de los par谩metros separados por comas
    """
    t_symbol = symbols('t')
    # Definir 'X' como una funci贸n simb贸lica en sympy
    X = Function('X')
    
    try:
        expr = sympify(equation)
    except Exception as e:
        raise ValueError(f"Error al parsear la ecuaci贸n '{equation}': {e}")

    params = [param.strip() for param in params_str.split(',')]
    params_symbols = symbols(params)
    
    # Extraer s铆mbolos utilizados en la expresi贸n
    used_symbols = expr.free_symbols
    # Convertir s铆mbolos a strings
    used_params = [str(s) for s in used_symbols if s != t_symbol]
    
    # Verificar que todos los par谩metros en params_str est茅n usados en la ecuaci贸n
    for param in params:
        if param not in used_params:
            raise ValueError(f"El par谩metro '{param}' no se usa en la ecuaci贸n '{equation}'.")

    if model_type == 'biomass':
        # Biomasa como funci贸n de tiempo y par谩metros
        func_expr = expr
        func = lambdify((t_symbol, *params_symbols), func_expr, 'numpy')
        self.models['biomass'] = {
            'function': func,
            'params': params
        }
    elif model_type in ['substrate', 'product']:
        # Estos modelos dependen de biomasa, que ya deber铆a estar establecida
        if 'biomass' not in self.models:
            raise ValueError("Biomasa debe estar configurada antes de Sustrato o Producto.")
        biomass_func = self.models['biomass']['function']
        # Reemplazar 'X(t)' por la funci贸n de biomasa
        func_expr = expr.subs('X(t)', biomass_func)
        func = lambdify((t_symbol, *params_symbols), func_expr, 'numpy')
        self.models[model_type] = {
            'function': func,
            'params': params
        }
    else:
        raise ValueError(f"Tipo de modelo no soportado: {model_type}")