Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Программа метода дихотомии.
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;
Глава 2
|