Return the cartesian zernikes up to order n (as noll’s index).
If limit_r is false (default true), the polynoms for r>1 are not set to NaN because strictly, the polynoms are only defined for 0 <= r <= 1.
Size of x must be equal size of y.
Demo: type "demo zernike_cartesian"
See also: zernike_name, zernike_noll_to_nm, zernike_polar, zernike_R_poly.
The following code
t = linspace (-1, 1, 80);
[x, y] = meshgrid (t, t);
max_order = 16;
Z = zernike_cartesian (x, y, max_order);
for k = 1:max_order
subplot (4, 4, k)
factors = zeros (max_order, 1);
factors(k) = 1;
z = reshape (Z*factors, size (x));
imagesc (z)
axis ("off", "equal")
zname = strrep (zernike_name (k), " ", "\n");
title (zname)
endfor
Produces the following figure
| Figure 1 |
|---|
![]() |
The following code
n=30;
[x,y,z] = sombrero (n);
z += 0.05 * peaks (x./4, y./4);
z += 0.02 * x;
figure
surf (x, y, z)
title ("Original sombrero + peaks + tilt");
## approximate sombrero+peaks
d = 10;
x /= d;
y /= d;
max_order = 50;
Z = zernike_cartesian (x, y, max_order, false);
f = Z\z(:);
## create approximated plot
z_approx = reshape (Z * f, n, n);
figure
surf (10 * x, 10 * y, z_approx)
title ("approximated");
Produces the following figures
| Figure 1 | Figure 2 |
|---|---|
![]() |
![]() |
Package: optics