Блок-схема метода простых итераций. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Блок-схема метода простых итераций.



начало
x, f(x)
a,b,ε || f(x),f’(x)
b:= -2/f’(b) x:=b
| h | £ ε
конец
h:= bf(x) x:= x+h
|f’(b)|>|f’(a)|
b:= -2/f’(a) x:=a

Программа. Нелинейное уравнение. Метод простых итераций

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

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

начало
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


 



Поделиться:


Последнее изменение этой страницы: 2021-03-09; просмотров: 106; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.31.240 (0.007 с.)