Поиск…


Пример для odeset

Сначала мы инициализируем нашу начальную задачу, которую хотим решить.

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

Затем мы используем функцию ode45 без каких-либо определенных опций для решения этой проблемы. Чтобы сравнить это позже, мы построим траекторию.

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

Теперь мы устанавливаем узкий относительный и узкий абсолютный предел терпимости к нашей проблеме.

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

Мы установили жесткий относительный и узкий абсолютный предел толерантности.

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

Мы устанавливаем узкий относительный и плотный абсолютный предел толерантности. Как и в предыдущих примерах с узкими пределами толерантности, мы видим, что траектория полностью отличается от первого графика без каких-либо конкретных опций.

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

Мы установили жесткий относительный и плотный абсолютный предел допуска. Сравнивая результат с другим графиком, мы будем подчеркивать ошибки, сделанные с использованием узких пределов допуска.

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

Следующее должно продемонстрировать компромисс между точностью и временем выполнения.

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

Для сравнения мы затягиваем предел допуска для абсолютной и относительной погрешности. Теперь мы можем видеть, что без большого выигрыша потребуется значительно больше времени для решения нашей начальной задачи.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow