में इस पत्र , Honarvar और Paramesran एक बहुत अच्छी तरह से पुनरावर्ती रेडियल Zernike बहुआयामी पद गणना करने के लिए एक दिलचस्प विधि निकाले जाते हैं। बड़े पूर्णांकों द्वारा विभाजन या गुणन के बिना पुनरावृत्ति फार्मूला आश्चर्यजनक रूप से सीधा है:
आरमn( ρ ) = ρ (आर| एम-1 |एन - 1( ρ ) +आरएम + १एन - 1( Ρ ) ) -आरमएन - 2( ρ )
मैं माननीय चित्र और परमेशर पेपर में आकृति 1 पर एक नज़र डालने की सलाह दूंगा, जो स्पष्ट रूप से अलग-अलग Zernike polynomials के बीच निर्भरता को दिखाता है।
यह निम्नलिखित ऑक्टेव लिपि में लागू किया गया है:
clear % Tested with Octave instead of Matlab
N = 120;
n_r = 1000;
R = cell(N+1,N+1);
rho = [0:n_r]/n_r;
rho_x_2 = 2*[0:n_r]/n_r;
R{0+1,0+1} = ones(1,n_r+1); % R^0_0 Unfortunately zero based cell indexing is not possible
R{1+1,1+1} = R{0+1,0+1}.*rho; % R^1_1 ==> R{...+1,...+1} etc.
for n = 2:N,
if bitget(n,1) == 0, % n is even
R{0+1,n+1} = -R{0+1,n-2+1}+rho_x_2.*R{1+1,n-1+1}; % R^0_n
m_lo = 2;
m_hi = n-2;
else
m_lo = 1;
m_hi = n-1;
end
for m = m_lo:2:m_hi,
R{m+1,n+1} = rho.*(R{m-1+1,n-1+1}+R{m+1+1,n-1+1})-R{m+1,n-2+1}; % R^m_n
end
R{n+1,n+1} = rho.*R{n-1+1,n-1+1}; % R^n_n
end;
Z = @(m,n,rho) (-1)^((n-m)/2) * rho.^m .* jacobiPD((n-m)/2,m,0,1-2*rho.^2);
m = 22;
n = 112;
figure
plot(rho,Z(m,n,rho))
hold on
plot(rho,R{m+1,n+1},'r');
xlabel("rho")
ylabel("R^{22}_{112}(rho)")
legend("via Jacobi","recursive");
%print -djpg plt.jpg
m = 0;
n = 46;
max_diff_m_0_n_46 = norm(Z(m,n,rho)-R{m+1,n+1},inf)
उदाहरण के लिए, इस कोड द्वारा निर्मित आंकड़ा दिखाता है कि एम = 22, तथा n = 112, प्रलयकारी निरस्तीकरण निकट आता है ρ = 0.7, यदि ज़र्निक रेडियल बहुपद की गणना जैकोबी बहुपद के माध्यम से की जाती है। इसलिए, किसी को निचले-स्तर के ज़र्निक पॉलीओमियल्स की सटीकता के बारे में भी चिंता करनी होगी।
इन उच्च-क्रम Zernike बहुपद को स्थिर तरीके से गणना करने के लिए पुनरावर्ती विधि अधिक उपयुक्त लगती है। फिर भी, के लिएम = ० तथा n = 46जैकोबी और पुनरावर्ती विधि के बीच अधिकतम अंतर केवल (?) है 1.4e-10
, जो आपके आवेदन के लिए पर्याप्त सटीक हो सकता है।