ЛАБОРАТОРНАЯ РАБОТА 5-1 Задание 1 С помощью средств программной среды Matlab был найден отрезок локализации для наименьшего положительного корня: Из рисунка видно, что график пересекает ось ОХ между 1 и 2, при этом меняя свой знак на противоположный. Значит отрезок локализации будет [1;2] удовлетворяя условие b - a = 1. В качестве начального приближение выберем значение 1.8. Приведем код соответствующей программы для расчёта в среде Matlab: clear all; x=-1:0.1:3;%сетка х y=length(x);%сетка y y=fun(x);%вызов функции для расчета сетки y plot(x,y);%график для определения отрезка локализации grid on; %с графика видно, что отрезок локализации будет [1;2] для положительного корня a=1;%нижняя граница b=2;%верхняя граница x00=1.8;%выберем начальное приближение на отрезке x01=1.7; d=1.7;%фиксированая точка e0=1e-3;%погрешность 1 e1=1e-4;%погрешность 2 [x1,n1]=bisec(a,b,e0);%вызов функции для расчета по методу бисекции q=abs(recur_fun_deriv(b-a));%проверили рекурсивную формулу на отрезке по условию Липшица [x2,n2]=simple_iter(x00,e1);%вызов метода простой итерации %найдем оптимальную скорость сходимости на отрезке для метода релаксации g=a:0.1:b; h=fun_deriv(g); M=max(abs(h)); m=min(abs(h)); alpha=2/(M+m);%оптимальная скорость схождения [x3,n3]=relaxation(x00,alpha,e1);%вызов метода релаксации [x4,n4]=newton(x00,e1);%вызов метода ньютона [x5,n5]=secant(x00,x01,e1);%вызов метода секущих [x6,n6]=false_position(x00,d,e1);%вызов метода ложного положения function y = fun(x)%функция y=log(x+2)-x.^2; end function xi = recur_fun(x)%рекуррентная формула xi=sqrt(log(x+2)); end function y = fun_deriv(x)%производная от начальной фукнции y=1./(x+2)-2.*x; end function [c,n] = bisec(a,b,e) c=0;%инициализация начального значения n=0;%инициализация начального значения while 1 c=(a+b)/2; if fun(c)==0 x=c; break; end if (fun(c)*fun(a))<0 b=c; else a=c; end n=n+1; if abs(b-a)<=e break; end end end function [x,n] = simple_iter(x0,e) x=0; n=0; prev=x0; while 1 x=recur_fun(prev); n=n+1; if abs(prev-x)<=e break; end prev=x; end function [x,n] = relaxation(x0, alpha, e) x=0; n=0; prev=x0; while 1 x=prev+alpha*fun(prev); n=n+1; if abs(prev-x)<=e break; end prev=x; end function [x,n] = newton(x0,e) x=0; n=0; prev=x0; while x=prev-fun(prev)/fun_deriv(prev); n=n+1; if abs(prev-x)<=e break; end prev=x; end end function [x,n] = secant(x0,x1,e) x=0; n=0; prev0=x0; prev1=x1; while 1 x=prev1-(prev1-prev0)/(fun(prev1)-fun(prev0))*fun(prev1); n=n+1; if abs(prev1-x)<=e break; end a=prev1; prev1=x; prev0=a; end end function [x,n] = false_position(x0,d,e) x=0; n=0; prev=x0; while 1 x=prev-(d-prev)/(fun(d)-fun(prev))*fun(prev); n=n+1; if abs(prev-x)<=e break; end prev=x; end end Задание 2 Метод бисекции относится к классу глобально-сходимых методов. Он имеет линейную сходимость и из-за этого достаточно медленный, что и видно по таблице. На поиск корня ушло наибольшее количество итераций при том, что требуемая точность была понижена. В случае нашей функции метод простой итерации оказался достаточно эффективным из-за малого коэффициента q - 0,159, что обеспечило приемлемую скорость сходимости почти что на уровне квадратической метода Ньютона. Метод релаксаций — это хороший инструмент в тех случаях, когда мы не можем воспользоваться другими итерационными методами из-за сложности нахождения рекурсивной функции или удовлетворения условий тех итерационных методов. Но он уступает в своей скорости другим итерационным методам, что и видно с полученных результатов. Метод Ньютона уже имеет отличную скорость нахождения корней (квадратическая сходимость) и показал наилучший результат по количеству итераций. Но стоит помнить о ряде ограничений при выборе данного метода. Во-первых, он чувствителен к начальному приближению и потому часто используется в комбинации с другими методами, например, бисекции, что позволяет задать правильное направление поиска корня. Во-вторых, порой расчет производных очень затруднительный или невозможный процесс, который стоит игнорировать. Для этого и есть модифицированные методы Ньютона, которые будут рассмотрены дальше. Метод секущих позволяет избавиться от производной, что во многих случаях может упростить расчеты и повысить скорость. Но он требует уже два начальных приближения и в последующих итерациях 2 предыдущих значения корня. В нашем случае этот метод не уступил по скорости методу Ньютона. Метод ложного положения позволяет получить сразу 2 преимущества над прошлыми методами: отсутствие производной при расчетах и 1 начальное приближение. Но за это он расплачивается, ведь имеет линейную сходимостью, уступив в нашем случае всем методам, кроме релаксаций и бисекции. В нашем случае применение метода Ньютона и его модификации дало наилучшие результаты. Так же хорошо подошел метод простой итерации. Все другие методы достаточно медленны и можно ими пренебречь. Задание 3
|