|
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') |
|
|
|
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) |
|
|
|
|
|
used_symbols = expr.free_symbols |
|
|
|
used_params = [str(s) for s in used_symbols if s != t_symbol] |
|
|
|
|
|
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': |
|
|
|
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']: |
|
|
|
if 'biomass' not in self.models: |
|
raise ValueError("Biomasa debe estar configurada antes de Sustrato o Producto.") |
|
biomass_func = self.models['biomass']['function'] |
|
|
|
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}") |
|
|