achromatic doublet
Contents
lens specification
clear
load glass
rd = [0 30.658123 -26.733948 -25.366250 -57.832251 0];
th = [0 2 0.1 1 48.484530 0];
rn = [1 1.5168 1 1.728277 1 1];
gn = char('N-BK7', 'N-SF10');
wvl = [ 0.48613 0.58756 0.65627];
sa = [ 0 5.1 5.1 5.1 5.1 0];
cv = curvature(rd);
lp = find(rn>1);
py = 5;
puc = tan(2*pi/180);
paraxial raytrace
pa = [py 0];
pc = [0 puc];
axial = parax(pa,cv,th,rn);
chief = parax(pc,cv,th,rn);
fprintf('\n%3s %12s %12s %12s %12s\n','srf','py','pu','pyc','puc');
for m = 1:length(th)
fprintf('%3d %12.6f %12.6f %12.6f %12.6f\n',m-1,axial(m,:),chief(m,:));
end
srf py pu pyc puc
0 5.000000 0.000000 0.000000 0.034921
1 5.000000 -0.055567 0.000000 0.023023
2 4.888866 -0.178792 0.046045 0.034031
3 4.870986 -0.022533 0.049448 0.020512
4 4.848453 -0.100000 0.069960 0.034569
5 0.000000 -0.100000 1.746038 0.034569
n = size(gn);
for k=1:n(1)
idx(k) = strmatch(gn(k,:),glass.name);
end
wvln = linspace(0.4,0.7,21);
for k=1:length(idx)
n = idx(k);
rg(k,:) = sellmeier(glass.disperse(n,:),wvln);
end
Find focus shift vs. wavelength
dz = zeros(size(wvln));
rnsave = rn;
n = length(rn);
for k=1:length(wvln)
for m = 1:length(lp)
rn(lp(m)) = rg(m,k);
end
py = parax(pa,cv,th,rn);
dz(k) = -py(n,1)/py(n,2);
end
rn = rnsave;
plot(dz,wvln,'k','LineWidth',2);
grid
xlabel('focus shift');
ylabel('wavelength ( \mum)');