赋值具有的非单一 rhs 维度多于非单一下标数的解决办法,出错代码为for D = 0:0.01:0.5 U = zeros(N,N); for i = 1:N for j = 1:N r1 = sqrt((x(i)-x).^2 + (x(j)-x).^2 + D.^2); U(i,j) = {sum(func1(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) + sum(func2(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) +sum(func3(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) + sum(func4(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) + sum(func5(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2)}; end end I = abs(U).^2; I = I / max(I(:)); % 绘制动图 imagesc(x*1e6,x*1e6,I); colormap(gray); title(['衍射距离为 ', num2str(D), ' 米']); xlabel('x (um)'); ylabel('y (um)'); drawnow; end
时间: 2023-12-25 18:02:55 浏览: 222
多维引导:Matlab 的引导命令的包装器,允许高维输入-matlab开发
在这段代码中,赋值语句中的 rhs 有多个非单一维度,包括 `func1(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2`、`func2(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2`、`func3(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2`、`func4(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2` 和 `func5(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2`。
解决这个问题的方法是,将赋值语句中的花括号 `{}` 替换为方括号 `[]`,即:
```
U(i,j) = sum(func1(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) + sum(func2(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) +sum(func3(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) + sum(func4(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2) + sum(func5(X-x(i),Y-x(j)).*exp(1i*k*r1)./r1.^2);
```
这样就可以避免赋值语句中维度不匹配的问题。
阅读全文