Page 18 - 4299
P. 18
%Функцію f(x) задати у підпрограмі fun_Solve
%Вхід: х0 - початкова точка інтервалу
% xk - кінцева точка інтервалу
% delta -приріст аргументу функції f(x)
%Вихід: Графік функції f(x)
x0=0;
xk=2;
delta=0.1;
i=0;
for x=x0:delta:xk
i=i+1;
X(i)=x;
Y(i)=fun_Solve(x);
end
plot(X,Y,'k-')
%================================================
%Із графіка функції знаходимо інтервал
%локального нуля Їх значення вводимо
%у командному вікні
%================================================
disp('Введіть а');
a=input('a=');
disp('Введіть b');
b=input('b=');
Ya=fun_Solve(a);
Yb=fun_Solve(b);
if Ya*Yb>0
disp('Неправильний інтервал локального нул.');
break
end
%================================================
%Обчислення кількості ітерацій
%Вхід: epselon - точність розв. задачі f(x)=0
%Вихід: N - число ітерацій
%================================================
epselon=1e-6;
N=1+round((log((b-a)/epselon))/log(2));
%================================================
%Реалізія процедури методу діхотомії
%================================================
for k=1:N
c=(a+b)/2;
Yc=fun_Solve(c);
if Yc==0
a=c;
b=c;
b=c;
Yb=Yc;
else
a=c;
Ya=Yc;
end
if b-a<epselon,break,end
end
c=(a+b)/2;
err=abs(b-a);
Yc=fun_Solve(c);
disp('Корінь рівняння f(x)=0')
disp('c=');
disp(c)
17