Раздел: Документация
0 ... 103 104 105 106 107 108 109 ... 365 Таблица 6.7, Параметры контроля точности вычислений
Убедиться в том, что заданных по умолчанию значений, в частности, относительной погрешности 103, не всегда достаточно для получения хорошего приближения, можно на следующем простом примере. Решите систему дифференциальных уравнений У\=Уг< на отрезке [а, 100] при начальных условиях у1(а) = \па, у2(а) = 1/а, взяв о = 0.001. Легко проверить, что точным решением этой системы является yl=\nt, y2=l/t. Напишите самостоятельно файл-функцию для решения данной системы со-лвером ode45, содержащую подфункцию rsbad для вычисления правой части системы. Расположите на одном графике точное и приближенное решение. Результат, приведенный на рис. 6.10, является довольно неожиданным для погрешности 10~3 (используемой по умолчанию). Применение других солверов и задание более мелкого максимального или начального шагов не улучшает ситуацию. Выход состоит в уменьшении относительной погрешности вычислений при помощи формирования options с использованием odeset и включении options дополнительным четвертым аргументом в солвер. Для задания относительной погрешности служит параметр RelTol. например options = odeset(RelTol, 1.0е-04) Сравнение приближенного и точного решений (погрешность по умолчанию) /61-г-1-"—I-1-1-1-1-1--i-
О 10 20 30 W 50 60 70 ВО 90 100 Рис. 6.10. Сравнение приближенного решения с точным (погрешность по умолчанию) Дополните созданную файл-функцию вызовами ode<35, предваряя каждое обращение к солверу установкой точности. Не забывайте включать options в список аргументов солвера! Рис. 6.11. Сравнение приближенного решения с точным при различных погрешностях При возникновении затруднений обратитесь к листингу 6.17. Выведите графики приближенных решений для погрешностей 1(Н, 1(Н, 10 * так, как показано на рис. 6.11. Только точность Ю-6 обеспечивает получение приближенного решения, график которого почти совпадает с графиком точного решения. j Листинг 6.17. Файл-функция для исследования влияния погрешности function difficultproblem a = 0.001; YO = [log(a); 1/a]; % задание начальных условий % вызов солвера ode45 для решения с различной точностью % и вывод графиков приближенных решений % относительная точность 0.001 options = odeset{RelTol, 1.0е-3); [T, Y] = ode45(@rsbad, [a 100], Y0, options); plot(T, Y(:,l), k:) % относительная точность 0.0001 options = odeset(1RelTol, 1.0e-4); [T, Y] = ode45(@rsbad, [a 100], YO, options); hold on plot(T, Y(:, 1), k—) ft относительная точность 0.000001 options = odeset(RelTol, 1.Oe-6) ; [T, Y] = ode45(@rsbad, [a 100], Y0, options); plot(T, Y(:, 1), k-) % вывод графика точного решения t = [а:4:100] ; у = log(t); plottt, у, ко) % нанесение информации на график xlabel (*\itf ) ylabel(\ity) title С Сравнение приближений при различных погрешностях) 0 ... 103 104 105 106 107 108 109 ... 365
|