Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Численные Методы (часть 1).doc
Скачиваний:
13
Добавлен:
14.11.2019
Размер:
654.85 Кб
Скачать

Программа метода дихотомии.

function [x1,err,k,y]=dixot(fun,x0,x1,epsilon,max1);

%Метод дихотомии. Точность задана по абсолютной %разности корней.

%Шаг делится пополам сразу, но при этом известно, что %функция на концах интервала разного знака.

%Вызов из основной программы

%[x1,err,k,y]= dixot1('fun',0,3,0.0001,100)

for k=1:max1

deltax=(x1-x0)/2;

x2=x1;

x1=x0+deltax;

y=feval(fun,x1);

if y<0, x0=x1; x1=x2;

end;

err=abs(x1-x0);

if err<epsilon, break, end;

end;

Программа fun.m файла для метода дихотомии

function y=fun(x)

y=-5-2*x+x^3;

Программа метода простых итераций.

function [k,p,err,P]=priter(funit,p0,epsilon,max1)

%Метод итераций. Точность задана по абсолютной %разности корней

%Вызов из основной программы %[k,p,err,P]=priter('funit',1.6,0.00001,20)

P(1)=p0;

for k=2:max1

P(k)=feval(funit,P(k-1));

err=abs(P(k)-P(k-1));

relerr=err/(abs(P(k))+eps);

p=P(k);

if(err<epsilon)|(relerr<epsilon),break;end

end

if k==max1

disp('число итераций исчерпано')

end

P=p' ;

Программа funit.m файла для метода итераций.

function p=funit(p)

p=1+p - p.^2/4;

Программа метода Бэрстоу.

function [p,q]=berst

A=[1 4 6 4 1]; n=5;

b=zeros(1,n+2);

c=zeros(1,n+2);

p=-1.5; q=-0.9; dp=1;; dq=1;

while ((abs(dp)>10^-15) & (abs(dq)>10^-15))

for k=3:n+2

b(k)=A(k-2)+p*b(k-1)+q*b(k-2);

c(k)=b(k)+p*c(k-1)+q*c(k-2);

end

dp1=b(n+2)*c(n-1)-b(n+1)*c(n);

dp2=c(n)*c(n)-c(n+1)*c(n-1);

dq1=b(n+1)*c(n+1)-b(n+2)*c(n);

dp=dp1/dp2;

dq=dq1/dp2;

p=p+dp; q=q+dq;

end

Программа метода хорд.

function [c,err,yc,k]=hord(funh,a,b,delta,epsilon,max1)

%Вход: funh-функция,

% a,b-начальный интервал,

% delta-допустимое отклонение для корня,

% epsilon-допустимое отклонение для y,

% max1- максимальное число итераций.

%Выход: с-приближение к корню,

% err- ошибка вычисления точки c,

% yс- значение функции в точке c,

% k- число итераций.

%Обращение из программы %[c,err,yc,k]=hord('funh',0,2,0.0001,0.0001,10)

ya=feval(funh,a);

yb=feval(funh,b);

if ya*yb>0 disp('знаки совпадают'), break,end

for k=1:max1

dx=yb*(b-a)/(yb-ya);

c=b-dx;

ac=c-a;

yc=feval(funh,c);

if yc==0,break;

elseif yb*yc>0 b=c; yb=yc;

else a=c; ya=yc; end

dx=min(abs(dx),ac);

if abs(dx)<delta,break,end

if abs(yc)<epsilon,break,end

end

c;

err=abs(b-a)/2;

yc=feval(funh,c);

Программа funh.m файла для метода хорд.

function y=funh(x)

y=x*sin(x)-1;

Программа метода секущих.

function [p1,err,k,y]=sekusch(funs,p0,p1,delta,epsilon,max1)

%Вход funs-функция

% p0,p1-начальные приближения

% delta-допустимое отклонение p1

% epsilon-допустимое отклонение y

% max1- максимальное число итераций

%Выход p1-приближение к корню

% err- ошибка вычисления

% k- число итераций

% y- значение функции

%Обращение из программы [p1,err,k,y]=sekusch('funs',-2.6,-%2.4,0.0001,0.0001,10)

for k=1:max1

p2=p1-feval(funs,p1)*(p1-p0)/(feval(funs,p1)-feval(funs,p0));

err=abs(p2-p1);

relerr=2*err/(abs(p2)+delta);

p0=p1;

p1=p2;

y=feval(funs,p1);

if (err<delta)|(relerr<delta)|(abs(y)<epsilon),break,end

end

Программа funs.m файла для метода секущих.

function y=funs(x)

y=2-3*x+x.^3;