Buscar..


Ejemplo para odeset

Primero inicializamos nuestro problema de valor inicial que queremos resolver.

odefun = @(t,y) cos(y).^2*sin(t);
tspan = [0 16*pi];
y0=1;

Luego usamos la función ode45 sin ninguna opción específica para resolver este problema. Para compararlo después trazamos la trayectoria.

[t,y] = ode45(odefun, tspan, y0);
plot(t,y,'-o');

Ahora establecemos un pariente estrecho y un límite estrecho absoluto de tolerancia para nuestro problema.

options = odeset('RelTol',1e-2,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Puse un límite estricto relativo y estrecho de tolerancia absoluto.

options = odeset('RelTol',1e-7,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Establecemos estrecho límite relativo y estricto absoluto de tolerancia. Como en los ejemplos anteriores con límites estrechos de tolerancia, se observa que la trayectoria es completamente diferente de la primera gráfica sin ninguna opción específica.

options = odeset('RelTol',1e-2,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Puse un límite estricto relativo y estricto de tolerancia. La comparación del resultado con la otra gráfica subrayará los errores cometidos al calcular con límites de tolerancia estrechos.

options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Lo siguiente debe demostrar el compromiso entre la precisión y el tiempo de ejecución.

tic;
options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
time1 = toc;
plot(t,y,'-o');

Para comparación, ajustamos el límite de tolerancia para el error absoluto y relativo. Ahora podemos ver que, sin una gran ganancia de precisión, tomará mucho más tiempo resolver nuestro problema de valor inicial.

tic;
options = odeset('RelTol',1e-13,'AbsTol',1e-13);
[t,y] = ode45(odefun, tspan, y0, options);
time2 = toc;
plot(t,y,'-o');


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow