|
Программа. Нелинейное уравнение. Метод простых итераций
function DATA
global a b eps n_plot_dots;
a=1;
b=3;
eps=0.01;
n_plot_dots=100;
end
function [ fx ] = f(x)
fx=x.^2-5;
end
function [ fx ] = fp(x)
fx=x.*2;
end
function [ x,fx ] = fun_Nelin_Prost_Iterac(a,b,eps)
if abs(fp(b))>abs(fp(a))
beta=-2/fp(b);
x=b;
else
beta=-2/fp(a);
x=a;
end %if
for i=1:100
h=beta*f(x);
x=x+h;
if abs(h)<=eps
i
break;
end%if
end%for i
fx=f(x);
end % function
function GLAV_Nelin_Prost_Iterac
global a b eps x fx n_plot_dots;
DATA;
[ x,fx ] = fun_Nelin_Prost_Iterac(a,b,eps);
REPORT;
end
function REPORT
global a b eps x fx n_plot_dots;
disp('Nelin Prost Iterac');
disp(' ');
disp(['a = ' num2str(a,'%10.5f') ]);
disp(['b = ' num2str(b,'%10.5f') ]);
disp(['eps = ' num2str(eps,'%10.5f') ]);
disp('Results');
disp(['x = ' num2str(x,'%10.5f') ]);
disp(['fx = ' num2str(fx,'%10.5f') ]);
h=(b-a)/(n_plot_dots-1);
for i=1:n_plot_dots
if i==1
xmas(i)=a;
else
xmas(i)=xmas(i-1)+h;
end %if
fmas(i)=f(xmas(i));
end
disp(' i x fx ');
disp(' ______________________________')
i=0;
for i=1:length(xmas)
xx=xmas(i);
ffx=fmas(i);
disp(sprintf('%10.3f\t%10.3f\t %10.3f',i,xx,ffx));
end %for
plot(xmas,fmas,'r.');
grid on;
xlabel('x');
ylabel('y');
title('Nelin Prost Iterac');
end
Метод Ньютона или касательных. Пусть известно некоторое приближение x(k-1) к решению x* уравнения f(x)=0. Тогда исходное уравнение можно записать в виде: f(x(k-1)+∆x(k-1))=0 где ∆x(k-1)= x* -x(k-1) и x* = x(k-1)+∆x(k-1). Разложим функцию в ряд Тейлора и ограничимся линейными членами f(x(k-1)+∆x(k-1)) = f(x(k-1))+f′(x(k-1))∆x(k-1) = 0 откуда
, и тогда
Полученное значение принимаем за новое приближение к решению. Тогда итерационную формулу запишем как: 
На каждой итерации, за новое приближение к корню x(k) принимается точка пересечения касательной к графику, построенной в точке f(x(k-1)) с осью абсцисс x:
, тогда
За начальное приближение к корню x(0) принимаем одну из границ отрезка [a; b], содержащего один корень.
Алгоритм
1) Задаем функцию f(x) отрезок [a;b] и точность e. За начальное приближение x принимаем одну из границ заданного отрезка [a,b] x=a.
2) Вычисляем значение шага h= f(x)/f′(x) и новое приближение,
как x = x-h.
3) Проверяем условие окончания если | h | £ e, то выводим последнее значение x и f(x). Иначе перейдем на пункт 2






