修改下面这个代码
% MATLAB script to simulate a microlens array
% Parameters
microlens_diameter = 50e-6; % 50 micrometers
microlens_spacing = 10e-6; % 10 micrometers
focal_length = 300e-6; % 300 micrometers
curvature_radius = 2.1e-6; % 2.1 micrometers
wavelength = 1000e-9; % 1000 nm
array_size = 64; % 64x64 microlens array
points_per_lens = 100; % Sampling points per microlens
% Create mesh grid for the shape of a single microlens
[x, y] = meshgrid(linspace(-microlens_diameter/2, microlens_diameter/2, points_per_lens));
% Calculate the surface profile of a single microlens
R = curvature_radius;
z_single = R - sqrt(R^2 - x.^2 - y.^2);
z_single(x.^2 + y.^2 > (microlens_diameter/2)^2) = 0; % Mask out areas outside the lens
% Initialize the entire microlens array
z_array = zeros(points_per_lens * array_size, points_per_lens * array_size);
% Fill the microlens array with repeated patterns
for i = 0array_size-1)
for j = 0array_size-1)
x_offset = i * points_per_lens;
y_offset = j * points_per_lens;
z_array(x_offset+1:x_offset+points_per_lens, y_offset+1:y_offset+points_per_lens) = ...
max(z_array(x_offset+1:x_offset+points_per_lens, y_offset+1:y_offset+points_per_lens), z_single);
end
end
% Plot microlens array surface
figure;
surf(linspace(-array_size*(microlens_diameter+microlens_spacing)/2, ...
array_size*(microlens_diameter+microlens_spacing)/2, array_size*points_per_lens) * 1e6, ...
linspace(-array_size*(microlens_diameter+microlens_spacing)/2, ...
array_size*(microlens_diameter+microlens_spacing)/2, array_size*points_per_lens) * 1e6, ...
z_array * 1e6);
title('Microlens Array Surface Profile');
xlabel('X (micrometers)');
ylabel('Y (micrometers)');
zlabel('Height (micrometers)');
shading interp;
axis equal tight;
colormap jet;
view(3);
% Simulate the diffraction pattern at the focal plane
k = 2*pi / wavelength;
[X, Y] = meshgrid(linspace(-array_size*(microlens_diameter+microlens_spacing)/2, ...
array_size*(microlens_diameter+microlens_spacing)/2, array_size*points_per_lens));
lens_phase = exp(-1j * k/(2*focal_length) * (X.^2 + Y.^2));
field_at_lens = lens_phase .* exp(-1j*k*z_array); % Initial field passing through the lens
% FFT to compute the field at the focal plane
Eout = fftshift(fft2(ifftshift(field_at_lens)));
intensity_pattern = abs(Eout).^2;
% Normalize intensity
intensity_pattern = intensity_pattern / max(intensity_pattern();
% Plot intensity pattern at the focal plane
figure;
imagesc(linspace(-array_size*(microlens_diameter+microlens_spacing)/2, ...
array_size*(microlens_diameter+microlens_spacing)/2, array_size*points_per_lens) * 1e6, ...
linspace(-array_size*(microlens_diameter+microlens_spacing)/2, ...
array_size*(microlens_diameter+microlens_spacing)/2, array_size*points_per_lens) * 1e6, ...
intensity_pattern);
title('Intensity Pattern at Focal Plane');
xlabel('X (micrometers)');
ylabel('Y (micrometers)');
colormap hot;
colorbar;
axis equal tight;
出现的问题是>> array
错误使用 surf (line 71)
X、Y、Z 和 C 不能是复数。
出错 array (line 35)
surf(linspace(-array_size*(microlens_diameter+microlens_spacing)/2, ...
|