我的代码有什么错误,我得到“订阅分配维度不匹配”错误

时间:2015-02-12 09:33:35

标签: matlab

为什么在以下代码中我收到此错误:“

  

下标分配维度不匹配“。

我想创建一个其组件为u1_1u1_2的向量。在第三个嵌套for我尝试将u1写为向量,但我遇到了错误,出了什么问题?

clc
clear all
close all
a=3e-2;
E0=0.1;
z=0.42;
L=z;
N=200;
lambda=1030e-9;
k=2*pi/lambda;
w0=0.001;
zr=pi*w0^2/lambda;
R=z*(1+(zr/z)^2);
w=w0*sqrt(1+(z/zr)^2);
D=linspace(-a/2,a/2,N);
[xx,yy]=meshgrid(linspace(-a/2,a/2,N));

for i=1:N
    for j=1:N
        x=xx(i,j);
        y=yy(i,j);
        [teta,r,z] = cart2pol(x,y,z);
        u1_1(i,j)=E0*sqrt((r.^2)./w.^2).*exp(-(r.^2)./w.^2)*(cos(teta));
    end
end

for i=1:N
    for j=1:N
        x=xx(i,j);
        y=yy(i,j);
        [teta,r,z] = cart2pol(x,y,z);
        u1_2(i,j)=E0*sqrt((r.^2)./w.^2).*exp(-(r.^2)./w.^2)*(sin(teta));
    end
end

for i=1:N
    for j=1:N
       x=xx(i,j);
       y=yy(i,j);
       [teta,r,z] = cart2pol(x,y,z);
      u1(i,j)= [u1_1
          -u1_2];
    end
end

3 个答案:

答案 0 :(得分:0)

这是因为u1_1u1_2是维度N x Nu1(i,j)的矩阵是标量。你能看到说scalar = matrix的问题吗?

事实上,最后一个for循环是完全没必要的,你可以用一行替换它:

u1 = [u1_1
      -u1_2];

这会将u1构建为不是矢量,而是构建为维度2*N x N的矩阵。

现在,如果您希望u1只是u1_1 - u1_2,则需要:

u1 = u1_1 - u1_2;

在这种情况下,u1是维度N x N的矩阵。从你的问题中不清楚你想做什么。

答案 1 :(得分:0)

您的代码有两个问题:

u1(i,j)= [u1_1
      -u1_2];

首先:没有u1_1和u1_2的下标 第二:在u1_1和u1_2周围声明数组。这使得rhs成为1x2矩阵。

解决方案:

u1(i,j)=u1_1(i,j)-u1_2(i,j);

答案 2 :(得分:0)

是的,你是对的。 代码的错误发生在第41行。我写了' for'循环 " u1(i,j)= [u1_1-u1_2];"因为在制作u1(带有u1_1和u1_2成分的矢量)之后,我将使用" Trapz"命令来传播u1光束,当我使用" u1 = [u1_1 -u1_2];& #34;,我有一个1 * 200阵列,它的形状是2D。事实上,我想它是3D。 我想我可以描述我想要的东西!