泽尼克多项式是一个以1953年获诺贝尔物理学奖荷兰物理学家弗里茨·泽尔尼克命名的正交多项式。泽尼克多项式在光学中有很多应用,最典型的是用来描述光学系统的相差。其一般分为奇、偶两类,维基百科中所给出的定义为[1]:
维基百科给出的各阶泽尼克多项式分布如下[1]:
为了产生泽尼克多项式,我们基于维基百科定义在matlab中给出如下代码用于创建函数文件:
function [Znm]=zernike(n,m,r,fi)
p=(n-abs(m))/2;
q=(n+abs(m))/2;
Znm=0;
for k=0:p
c=(-1)^k.*factorial(n-k)./(factorial(k).*factorial(q-k).*factorial(p-k));
Rnm=c*r.^(n-2*k);
Znm0=Rnm.*exp(1i*m.*fi);
Znm=Znm0+Znm;
end
end
尼克多项式分布,如下
n=1,m=1
n=1,m=-1
n=2,m=-2
完整matlab代码如下:
tic
clf;
clear
x=linspace(-1,1,400);
y=x;
[X,Y]=meshgrid(x,y);
circ=zeros(400,400);
R=sqrt(X.^2+Y.^2);
circ(R<=1)=1;
r=R.*circ;
fi=atan2(Y,X)+pi*(abs(sign(Y))-sign(Y));
n=2; m=-2;
Znm=zernike(n,m,r,fi);
imshow(Znm,[]); colormap(turbo)
axis equal;
axis tight;
参考文献:
[1] 泽尔尼克多项式 - 维基百科,自由的百科全书 (wikipedia.org)
更多内容关注微信公众号“光学师兄的日常”。