Documentacióndifusion_1d(u0, alpha, dx, dt, pasos, bc_tipo, bc_izq, bc_der)
Nombre
difusion_1d - Simula difusion termica 1D mediante diferencias finitas explicitas.
Sinopsis
tray = fisicas.difusion_1d(u0, alpha, dx, dt, pasos, bc_tipo, bc_izq, bc_der)
Descripcion
Simula la evolucion temporal completa del perfil u(x,t) para la ecuacion de difusion unidimensional.
Ecuacion continua:
Esquema explicito:
Condicion aproximada de estabilidad:
Comportamiento
- Parte del perfil inicial
u0y construye una malla temporal depasos+1estados. - Aplica condiciones de borde fijas o aisladas segun
bc_tipo. - Advierte cuando el parametro
lambdasupera el umbral tipico de estabilidad. - Retorna una
TABLAcon el vector de tiemposty la matrizUde evolucion completa.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
| u0 | VECTOR | Condicion inicial u(x, t=0), dada como VECTOR. |
| alpha | NUMERICO | Coeficiente de difusion o difusividad termica. |
| dx | NUMERICO | Espaciamiento entre puntos de la malla. |
| dt | NUMERICO | Paso temporal. |
| pasos | NUMERICO | Cantidad de pasos de tiempo a simular. |
| bc_tipo | STRING | Tipo de condicion de borde. |
Valores soportados:
- "fija": condicion Dirichlet; fija los extremos con bc_izq y bc_der.
- "aislada": condicion Neumann 0 aproximada; copia el vecino en los bordes.
- Otro valor: se trata como "aislada". | | bc_izq | NUMERICO | Valor de borde izquierdo, usado solo si bc_tipo = "fija". | | bc_der | NUMERICO | Valor de borde derecho, usado solo si bc_tipo = "fija". |
Valor de retorno
TABLA - TABLA con la evolucion temporal completa.
Campos principales:
t: VECTOR de tiempos simulados.U: MATRIZ con la simulacion completa.
Cada fila U[n] representa el perfil completo en el instante t[n].
Ejemplo
ejemplo.blox
INCLUIR "fisicas.api"
INCLUIR "graficos.api"
FUNCION PRINCIPAL
INICIO
NUMERICO N, i
NUMERICO alpha, dx, dt, pasos
TABLA R
// Mallado
N = 101
dx = 1.0/(N-1)
// Parámetros físicos y numéricos
alpha = 0.01
dt = 0.2 * dx*dx / alpha // asegura lambda = 0.2 (estable)
pasos = 300
// Perfil inicial: todo 0, pico en el centro
VECTOR u0[] // Dimenion N
STRING expr
// Carga vector u0 (condicion de contorno)
expr = "10*e^(-1/1*x)*sin(1/3*x)"
u0 = fisicas.carga_formula(expr, N)
// Bordes fijos a 0
R = fisicas.difusion_1d(u0, alpha, dx, dt, pasos, "fija", 0, 0)
VECTOR t[]
MATRIZ U[][]
t = R.t
U = R.U
// Tomamos el último perfil para graficar u(x) al final
VECTOR u_final[N]
PARA i = 0 HASTA N-1 HACER
u_final[i] = U[pasos][i]
FIN_PARA
// x para graficar
VECTOR x[N]
PARA i = 0 HASTA N-1 HACER
x[i] = i*dx
FIN_PARA
graficos.xy(x, u_final, "Difusion 1D (perfil final)", "PROG98 - FISICAS - difusion.png")
FINAL
VECTOR u0[N]
PARA i = 0 HASTA N-1 HACER
u0[i] = 0
FIN_PARA
u0[ENTERO(N/2)] = 100```
Restringido: este ejemplo no puede ejecutarse en el Playground web porque la API requerida no está disponible en el sandbox.