Biotech2 / bioprocess_model.py
C2MV's picture
Update bioprocess_model.py
f03d840 verified
raw
history blame
2.15 kB
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}")