Documentaciónode_exacta_tabla(expr, x0, y0, h, n)
Nombre
ode_exacta_tabla - Evalua una solucion exacta de EDO y devuelve toda la trayectoria.
Sinopsis
tray = numericos.ode_exacta_tabla(expr, x0, y0, h, n)
Descripcion
Evalua una expresion que representa directamente la solucion exacta sobre un mallado uniforme de paso h.
A diferencia de ode_exacta(), esta variante retorna los vectores completos de x e y.
Validaciones y casos borde
- Valida que
hno sea cero. - Valida que
nsea entero y no negativo. - Si
n == 0, retorna una tabla con el unico punto inicial(x0, y0). - Cada valor nuevo se evalua en el mismo
xque se guarda en la trayectoria. - Admite
hnegativo para recorrer el mallado hacia atras. - Si una validacion falla, emite
ERROR().
Comportamiento
- Avanza
xen incrementos deh. - Evalua la expresion con
RESOLVER()en cada nuevo valor dex. - Guarda el punto inicial y cada punto nuevo calculado.
- Retorna una
TABLAcon dos vectores:xey.
Funciones API relacionadas
numericos.ode_exacta()numericos.ode_euler_tabla()numericos.ode_heun_tabla()numericos.ode_rk4_tabla()
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
| expr | STRING | Expresion matematica en texto evaluada por RESOLVER(). |
| x0 | NUMERICO | Posicion inicial en x; en formulas se representa como . |
| y0 | NUMERICO | Posicion inicial en y; en formulas se representa como . |
| h | NUMERICO | Paso numerico usado en derivacion, integracion o EDO. |
| n | NUMERICO | Cantidad de pasos; debe ser un entero no negativo. |
Valor de retorno
TABLA - Tabla con los vectores x e y obtenidos al evaluar la expresion exacta paso a paso.
Ejemplo
ejemplo.blox
INCLUIR "numericos.api"
INCLUIR "tablas.api"
INCLUIR "vectores.api"
INCLUIR "graficos.api"
FUNCION PRINCIPAL
INICIO "Comparacion Euler vs RK4 para dy/dx = f(x,y)"
STRING f_edo
NUMERICO x0, y0, h, n
NUMERICO y_exacta, y_euler, y_rk4
TABLA tray_exacta, tray_euler, tray_rk4
// Definimos la EDO: dy/dx = f(x, y)
// En este caso dy/dx = (x^2 - 1)/y^2
// cuya solucion analitica es: y = (x^3 - 3*x + 8)^(1/3)
//
f_edo = "(x^2 - 1)/y^2"
x0 = 0
y0 = 2 // y(0) = 2
h = 0.2
n = 25
y_exacta = numericos.ode_exacta("(x^3 - 3*x + 8)^(1/3)", x0, y0, h, n)
y_euler = numericos.ode_euler(f_edo, x0, y0, h, n)
y_rk4 = numericos.ode_rk4(f_edo, x0, y0, h, n)
IMPRIMIR("\nSoluc. exacta: y(5) = ", y_exacta)
IMPRIMIR("\n Euler: y(5) ≈ ", y_euler)
IMPRIMIR("\n RK4 : y(5) ≈ ", y_rk4)
IMPRIMIR("\n")
tray_exacta = numericos.ode_exacta_tabla("(x^3 - 3*x + 8)^(1/3)", x0, y0, h, n)
VECTOR X_exacta, Y_exacta
X_exacta = tray_exacta.x
Y_exacta = tray_exacta.y
tray_euler = numericos.ode_euler_tabla(f_edo, x0, y0, h, n)
VECTOR X_euler, Y_euler
X_euler = tray_euler.x
Y_euler = tray_euler.y
// No se usa ahora
//
tray_rk4 = numericos.ode_rk4_tabla(f_edo, x0, y0, h, n)
VECTOR X_rk4, Y_rk4
X_rk4 = tray_rk4.x
Y_rk4 = tray_rk4.y
// Esta funcion ya fue reemplazada por:
// graficar_trayectorias_n(curvas, titulo, archivo)
// Se deja para ver otras opciones
//
graficos.graficar_trayectorias2(X_euler, Y_euler, "Euler",
X_exacta, Y_exacta, "Exacta",
"dy/dx = (x^2 - 1)/y^2 (Exacta vs Euler)",
"PROG900 - API - NUMERICOS - 4.3 Grafico = Comparacion Euler y Rk4.png")
FINAL
Restringido: este ejemplo no puede ejecutarse en el Playground web porque la API requerida no está disponible en el sandbox.