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
   13   14   15   16   17   18   19   20   21   22   23