警告:矩阵对于工作精度是单数的



我有一个方程要计算。但命令窗口显示"警告:矩阵对工作精度是单数的。计算的结果是矩阵中的NaN。

lambda = 13.5e-9;
k = 2*pi/lambda;
r0 = 1e-3;
a = 10e-6; b = 10e-6;
beta = 6*pi/180; 
Lx = 300e-6; Ly = 300e-6; dx=1e-6; dy=1e-6;
x = -Lx/2:dx:Lx/2-dx; y = -Ly/2:dy:Ly/2-dy;
[X,Y] = meshgrid(x,y);
p = X/r0; q = Y/r0;
I = (sinc(k*a*p)).^2*(sinc(k*b*cos(beta)*(q*cos(beta)-sin(beta)+sin(beta)*sqrt(1-p.^2+q.^2)))).^2;

用我的sinc函数,

function result = sinc(x)
if x == 0
result = 1;
else
result = sin(x)/x;
end
end

我在结果 I 中得到了 NaN。我不知道怎么了。

您的sinc函数将矩阵x作为输入。您的x == 0不会发现第一个零以外的其他零。此外,即使你的数据中没有零,我相信这种矩阵除法也不是你想要你的代码做的。

我相信你想要元素划分,而不是矩阵运算:sin(x) ./ x.我会简单地通过以下方式做到这一点:

result = sin(x) ./ x;
result(isnan(result)) = 1; % makes those nans arising from 0/0 to 1.

如果我使用 for,我现在可以做到。我仍然想知道为什么使用网格网格(我在for下面做了%{...,...%}(不起作用。

lambda = 13.5e-9;
k = 2*pi/lambda;
r0 = 0.15;
a = 3e-6; b = 4e-6; % square sizes at object plane (x', y')
I0 = 1; % intensity at center (x=y=0)
beta = 30*pi/180; % rotation aroud x-axis
Lx = 10e-3; Ly = 10e-3; 
dx=13.5e-6; dy=13.5e-6;
x = -Lx/2:dx:Lx/2-dx; y = -Ly/2:dy:Ly/2-dy;
xx = size(x,2); yy = size(y,2);
I = zeros(xx,yy);
for i = 1:xx
for j = 1:yy
x = i*dx-Lx/2;
y = j*dy-Ly/2;
I(i,j) = I0*(sinc(k*a*(x/r0))).^2*(sinc(k*b*cos(beta)*((y/r0)*cos(beta)-sin(beta)+sin(beta)*sqrt(1-(x/r0).^2+(y/r0).^2)))).^2;
end
end
%{
[X,Y] = meshgrid(x,y);
p = X/r0; q = Y/r0;
I(x",y")
I = I0*(sinc(k*a*p)).^2*(sinc(k*b*cos(beta)*(q*cos(beta)-sin(beta)+sin(beta)*sqrt(1-p.^2+q.^2)))).^2;
%}
figure(1)
imagesc(x,y,I)
axis()
colorbar()

最新更新