Блок-схема метода касательных (Ньютона)

начало
x, f(x)
x,ε || f(x).
h:=f(x)/f’(x) x:= x-h
| h | £ ε
конец
да
нет

Оператор МАТЛАБа [x,y]=fzero(@f,[a,b],e) Пусть функция f=inline('x^3-4.790*x^2-3.246*x+12.597'); тогда [x,y]=fzero(f,[a,b],e)  

Программа. Нелинейное уравнение. Метод Ньютона (касательных)

function DATA

global x0 eps n_plot_dots;

x0=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_Newton(x0,eps)

x=x0;

for i=1:100

h=f(x)/fp(x);

x=x-h;

if abs(h)<=eps

   i

   break;

end %if

end %for i

fx=f(x);

end % function

 

function GLAV_Nelin_Newton

global x0 eps n_plot_dots;

DATA;

[ x,fx ] = fun_Nelin_Newton(x0,eps);

REPORT;

end

 

function REPORT

global x0 eps x fx n_plot_dots;

disp('Nelin Newton');

disp(' ');

disp(['x0 = ' num2str(x0,'%10.5f') ]);

disp(['eps = ' num2str(eps,'%10.5f') ]);

disp('Results');

disp(['x = ' num2str(x,'%10.5f') ]);

disp(['fx = ' num2str(fx,'%10.5f') ]);

a=x-2;

b=x+2;

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 Newton');

end


 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: