Design Example 2

dx2.m

global cv th rn;
cv = [ 0 0.25 -0.15];
th = [ 0  0    0];
rn = [ 1 1.5 1 ];

x = [ 0.25 -0.15]';
for (k=1:5)
   fprintf('step %d\n\n',k);
   fprintf('starting point: %.6f  %.6f\n',x); % display starting point
   [A fz] = calculate_derivatives(@sing2,x);
   if (k==1) % display starting A matrix
      A
   end
   
   [U S V] = svd(A,0)
   fz
   
   s = -A\fz;
   x = x + s;
end

Output

step 1

starting point: 0.250000  -0.150000

A =

    0.5000   -0.5000
   -0.0292    0.1958
    0.7891   -1.3307


U =

   -0.4058   -0.8321
    0.1059   -0.4537
   -0.9078    0.3190


S =

    1.7030         0
         0    0.1797


V =

   -0.5416   -0.8407
    0.8407   -0.5416


fz =

    0.1500
   -0.0183
    0.1323

step 2

starting point: -0.155673  -0.283581

U =

   -0.5111   -0.8536
    0.1434    0.0310
   -0.8475    0.5201


S =

    1.3483         0
         0    0.1855


V =

   -0.5308   -0.8475
    0.8475   -0.5308


fz =

    0.0140
   -0.0144
    0.0692

step 3

starting point: -0.074541  -0.173431

U =

   -0.8269   -0.5597
    0.1437   -0.1159
   -0.5437    0.8205


S =

    0.8501         0
         0    0.1375


V =

   -0.6260   -0.7799
    0.7799   -0.6260


fz =

   -0.0006
   -0.0067
    0.0199

step 4

starting point: 0.016005  -0.083650

U =

   -0.9671   -0.2542
    0.0926   -0.3692
   -0.2367    0.8939


S =

    0.7309         0
         0    0.0746


V =

   -0.6879   -0.7258
    0.7258   -0.6879


fz =

   -0.0002
   -0.0031
    0.0052

step 5

starting point: 0.071000  -0.029008

U =

   -0.9918   -0.0973
    0.0490   -0.8884
   -0.1181    0.4486


S =

    0.7129         0
         0    0.0330


V =

   -0.7039   -0.7103
    0.7103   -0.7039


fz =

    0.0000
   -0.0008
    0.0018

sing2.m

function f = sing2(v);
%
% f(1) is power error
% f(2) is coma
% f(3) is spherical aberration

global cv th rn;
cv(2)=v(1); % first surface curvature
cv(3)=v(2); % second surface curvature
yap = 5.0;
uco = 0.1;
scl = yap^2/2;
ya = parax([yap 0],cv,th,rn);
yc = parax([0 uco],cv,th,rn);
f(1) = -ya(4,2)/ya(1,1) - 1/20; % power error
w = ford(ya,yc,cv,th,rn,1);
f(2) = w(2)/scl;
f(3) = w(1)/scl;
f = f';


Maintained by John Loomis, last updated 6 Feb 2003