为什么在以下代码中我收到此错误:“
下标分配维度不匹配“。
我想创建一个其组件为u1_1
和u1_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
答案 0 :(得分:0)
这是因为u1_1
和u1_2
是维度N
x N
和u1(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)