我是一名尝试做项目的Matlab初学者。
我想绘制一个二维颜色图,变量Et1in作为x和z的函数(如x和z是地图的坐标,Et1in是颜色代表的颜色),我有问题绘图,问题用以下代码证明:
这里我为x,z创建一个meshgrid,以便稍后使用surf函数绘制颜色贴图
[x,z] = meshgrid(0:100:600,0:100:600);
mm = size(z);
所以我要绘制的函数(Et1in)实际上是2×1矩阵Et1left的第一个元素,计算如下(kzia,GammaT1,Rs1,Ts1 ......只是先前定义的常量):
M1 = [1/Ts1,Rs1/Ts1;Rs1/Ts1,1/Ts1];
P1 = [exp(1i*delta1),0; 0,exp(-1i*delta1)];
M2 = [1/Ts2,Rs2/Ts2;Rs2/Ts2,1/Ts2];
Et1in = zeros(7,7)
for z2 = 3:mm(1)
for x2 = 3:mm(1)
Et1left = inv(P1)*[exp(-1i*kzia*z(z2));GammaT1*exp(-1i*kzia*z(z2))];
Et1in = Et1left(1,1)*exp(-1i*kxia*x(x2));
end
end
并绘制颜色贴图,我用过:
Eplot = zeros(size(x)) + real(Et1in)
figure;
surf(x,z,Eplot,'EdgeColor','None');
view(2);
xlabel('x','fontsize',20);
ylabel('z','fontsize',20);
colormap jet;
所以问题是, Et1left 是通过乘以2乘2矩阵来计算的:
(inv(P1))
使用2 x 1矩阵:
[exp(-1i*kzia*z(z2));GammaT1*exp(-1i*kzia*z(z2))],
其中x和z是2乘1矩阵分量中的变量。
所以如果我不使用for循环,那么Matlab会返回错误,表示矩阵维度不一致,因为x和z是meshgrid,这意味着维度矩阵:
[exp(-1i*kzia*z(z2));GammaT1*exp(-1i*kzia*z(z2))]
不再是2乘1,因为x和z是由meshgrid函数创建的矩阵。
如果我确实使用for循环,那么我绘制的函数在任何地方都是相同的值,因为在Matlab中Et1的值会为for循环生成的每个新值覆盖Et1in的值,所以绘制的地图只是循环生成的最后一个值。
答案 0 :(得分:0)
我理解你是否想要在循环中保持git ack
的值?
如果有,请更改
Et1in
到
Et1in = Et1left(1,1)*exp(-1i*kxia*x(x2));