二分法,不动点迭代法,艾特肯加速迭代法,牛顿切线法的matlab程序及举例
§2.1.1 二分法的MATLAB主程序
function [k,x,wuca,yx]=erfen(a,b,abtol)a(1)=a; b(1)=b; ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数 if ya* yb>0, disp('注意:ya*yb>0,请重新调整区间端点a和b.'), returnendmax1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil是向 方向取整for k=1: max1+1a;ya=fun(a); b;yb=fun(b); x=(a+b)/2; yx=fun(x); wuca=abs(b-a)/2; k=k-1;[k,a,b,x,wuca,ya,yb,yx]if yx==0a=x; b=x;elseif yb*yx>0b=x;yb=yx;elsea=x; ya=yx;endif b-a< abtol , return, endendk=max1; x; wuca; yx=fun(x);
§2.1.2 不动点迭代法的MATLAB主程序
function [k,piancha,xdpiancha,xk,yk]=diedai2(x0,tol,ddmax)x(1)=x0;for i=1: ddmax x(i+1)=fun(x(i));piancha=abs(x(i+1)-x(i)); xdpiancha=piancha/( abs(x(i+1))+eps);i=i+1; xk=x(i);yk=fun(x(i)); [(i-1) piancha xdpiancha xk yk] if (pianchaddmax disp('迭代次数超过给定的最大值ddmax') k=i-1; xk=x(i);yk=fun(x(i)); [(i-1) piancha xdpiancha xk yk];return; endP=[(i-1),piancha,xdpiancha,xk,yk]';
§2.1.3 艾特肯加速迭代法的MATLAB主程序
function [k,xk,yk,p]= Aitken (x0,tol, ddmax)x(1)=x0;for i=1: ddmax x1(i+1)=fun(x(i)); x2(i+1)=fun(x1(i+1)); x(i+1)=x2(i+1)-(x2(i+1)-x1(i+1))^2/(x2(i+1)-2*x1(i+1)+ x(i)); piancha=abs(x(i+1)-x(i)); xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1; xk=x(i);yk=fun(x(i)); if (pianchaddmax disp('迭代次数超过给定的最大值ddmax') k=i-1; xk=x(i); yk=fun(x(i)); m=[0,1:i-1]; p=[m',x1',x2',x']; return;endm=[0,1:i-1]; p=[m',x1',x2',x'];
§2.1.4 牛顿切线法的MATLAB主程序
function [k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax)x(1)=x0; for i=1: gxmax x(i+1)=x(i)-fun(x(i))/(dfun(x(i))+eps); piancha=abs(x(i+1)-x(i)); xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1;xk=x(i);yk=fun(x(i)); [(i-1) xk yk piancha xdpiancha]if (abs(yk)g