land_setup; load land; show_contour2; seek([0.25 -10],@land);
contour(u1,u2,map2,[0 0],'b'); axis square; hold on; contour(u1,u2,map1,[0 0],'k'); hold off; xlabel('curvature of first surface'); ylabel('distance to stop');
function f = land(v); global cv th rn; cv(2)=v(1); % first surface curvature th(3)=v(2); % distance to stop yap = 5.0; uco = tan(10*pi/180); scl = yap^2/2; ya = parax([yap 0],cv,th,rn); usolve = -0.125; m=3; yn=ya(m,1); if (abs(yn)>1e-6) cv(m)= -(rn(m)*usolve-rn(m-1)*ya(m-1,2))/((rn(m)-rn(m-1))*yn); end ya(m,2)=usolve; ya = parax([yap 0],cv,th,rn); yc = parax([0 uco],cv,th,rn); k = -yc(4,1)/ya(4,1); yc = yc + k*ya; lambda = 0.006; w = ford(ya,yc,cv,th,rn,lambda); f(1) = w(2); % coma f(2) = w(3); % astigmatism f = f';
function [s, damp,sigma] = seek(xi,df) xo = xi(:); nv = length(xo); f = feval(df,xo); s(1,:)=xo'; damp(1,1)=0; sigma(1,1)=norm(f); k=1; fprintf('%2s %10s %8s %8s\n','n','sigma','pmin','%step'); fprintf('%2d %10.4g\n',k,sigma(1,1)); for k=2:20 [A fz] = calculate_derivatives(df,xo); dv=-A\fz; [pmin fval]=fminbnd(@func,0,2,[],df,xo,dv); xo = xo+pmin*dv; f = feval(df,xo); fval = norm(f); s(k,:)=xo'; damp(k,1)=pmin; sigma(k,1)=fval; fprintf('%2d %10.4g %8.4f %8.3f\n',k,fval,pmin,100.0*pmin*norm(dv)/norm(xo)); if (fval<1e-10) break; end end hold on; plot(s(:,1),s(:,2),'ko-','LineWidth',1.5); hold off;
Maintained by John Loomis, last updated 6 Feb 2003