【MATLAB】绘制泽尼克多项式

【MATLAB】绘制泽尼克多项式

  • 公式
  • 代码
  • 其他

上次只给了公式没有给代码,很多小伙伴表示不是很认可。今天直接把代码发上来了

by HPC_ZY


公式

笛卡尔坐标系下泽尼克(Zernike)系数


代码

生成泽尼克多项式的函数(归一化)

% 生成泽尼克多项式的函数
function [x,y,z] = getZernikeBasicFunc()
x = -1:0.01:1;
[x,y] = meshgrid(x);
[theta,r] = cart2pol(x,y);
z{1} = ones(size(x)).*1/sqrt(pi);
z{2} = r .* cos(theta).*2/sqrt(pi);
z{3} = r .* sin(theta).*2/sqrt(pi);
z{4} = r.^2 .* cos(2.*theta).*sqrt(6/pi);
z{5} = (2.*r.^2 - 1) .* sqrt(3/pi);
z{6} = r.^2 .* sin(2.*theta) .* sqrt(6/pi);
z{7} = r.^3 .* cos(3.*theta) .* sqrt(8/pi);
z{8} = (3.*r.^3 - 2.*r) .* cos(theta) .* sqrt(8/pi);
z{9} = (3.*r.^3 - 2.*r) .* sin(theta) .* sqrt(8/pi);
z{10} = r.^3 .* sin(3.*theta) .* sqrt(8/pi);
z{11} = r.^4 .* cos(4.*theta) .* sqrt(10/pi);
z{12} = (4.*r.^4 - 3.*r.^2) .* cos(2.*theta) .* sqrt(10/pi);
z{13} = (6.*r.^4 - 6.*r.^2 + 1).*sqrt(5/pi);
z{14} = (4.*r.^4 - 3.*r.^2) .* sin(2.*theta).*sqrt(10/pi);
z{15} = r.^4 .* sin(4.*theta).*sqrt(10/pi);
for n = 1:15
   z{n}(r>1) = nan; 
   z{n} = z{n}/max(abs(z{n}(:)));
end

使用方法与显示

% 生成
[x,y,z] = getZernikeBasicFunc();
% 两种显示方式
figure
for n = 1:15
	subplot(3,5,n),pcolor(x,y,z{n}), shading interp
	axis square
	axis off
	colorbar
end

figure
for n = 1:15
	subplot(3,5,n),mesh(x,y,z{n}), shading interp
	axis square
	colorbar
end

其他

没别的了

你可能感兴趣的:(MATLAB,matlab)