script2
Contents
fit ray errors
clear; load rayfan_f2doublet yfit = [ y y.^3 y.^5 y.^7 y.^9 ]; sz=size(yfit); n = sz(2); rtable = zeros(n,n); close all for k=1:n c = yfit(:,1:k)\dy; rtable(k,1:k)=c'; yf = yfit(:,1:k)*c; subplot(3,2,k); %plot(y,dy,y,yf); fanplot(y,[dy yf]); title(sprintf('order %d',2*k-1)); end rtable
rtable = 0.0023 0 0 0 0 -0.1436 0.2318 0 0 0 0.0049 -0.4311 0.5702 0 0 -0.0286 -0.1406 -0.0440 0.3650 0 -0.0234 -0.2150 0.2371 -0.0231 0.1770

quality of fit
close all; order = 1:2:9; qual = zeros(size(order)); ref = max(abs(dy)); for k=1:length(order) c = rtable(k,1:k)'; yf = yfit(:,1:k)*c; diff = dy - yf; qual(k) = max(abs(diff))/ref; end stem(order,qual,'k','LineWidth',2); grid; xlabel('order'); ylabel('maximum relative difference'); axis([0 10 0 1]);

fit opd
yfit = [ ones(size(y)) y.^2 y.^4 y.^6 y.^8 y.^10]; sz=size(yfit); n = sz(2); table = zeros(n,n); for k=1:n c = yfit(:,1:k)\opd; table(k,1:k)=c'; yf = yfit(:,1:k)*c; subplot(3,2,k); %plot(y,opd,y,yf); fanplot(y,[opd yf],10); title(sprintf('order %d',2*k-2)); end table
table = 3.2729 0 0 0 0 0 0.3335 8.6031 0 0 0 0 -0.7104 19.0291 -11.7089 0 0 0 0.0978 1.6588 38.8640 -35.7055 0 0 -0.0093 5.7093 17.0337 1.0004 -19.0008 0 0.0019 5.0442 22.7466 -15.7789 0.8558 -8.1496

quality of fit
close all; order = 0:2:10; qual = zeros(size(order)); ref = max(abs(opd)); for k=1:length(order) c = table(k,1:k)'; yf = yfit(:,1:k)*c; diff = opd - yf; qual(k) = max(abs(diff))/ref; end stem(order,qual,'k','LineWidth',2); grid; xlabel('order'); ylabel('maximum relative difference'); axis([0 12 0 1]);

get OPD from ray error
fact = [2 4 6 8 10 ];
fact = ones(size(fact'))*fact;
% ua for f/2 system
ua = 0.25;
lambda = 0.5876e-3;
epsilon = lambda/ua;
ifact = (1./fact);
otable = -rtable.*ifact/epsilon;
otable
otable = -0.4940 0 0 0 0 30.5405 -24.6501 0 0 0 -1.0492 45.8578 -40.4347 0 0 6.0936 14.9500 3.1198 -19.4128 0 4.9777 22.8732 -16.8106 1.2287 -7.5312
% show differences for k=1:4 subplot(2,2,k); n = k+1; c = table(n,1:n)'; y1 = yfit(:,1:n)*c; c = [0; otable(k,1:k)']; y2 = yfit(:,1:k+1)*c; fanplot(y,[opd y1 y2],10); title(sprintf('order %d',2*k+2)); end

Integrating the ray error fit to get an OPD fit does not work well unless the quality of fit is good.