簡體   English   中英

Matlab Meshgrid彩色地圖繪制

[英]Matlab Meshgrid color map plotting

我是matlab初學者。 我成功使用meshgrid繪制了我的項目所需的顏色圖,並帶有以下代碼:

首先創建網狀網格:

[x1,z1] = meshgrid(0:1:600,300:1:600);
[x2,z2] = meshgrid(0:1:600,0:1:300);

然后只定義一些常量:

n1 = 1.0;
n2 = 1.5;
lambda = 100;                         % wavelength is 600 nm
k0 = (2*pi)/lambda;                    % freespace wavenumber
ti = 30*pi/180;                        % angle of incident, t1 in Brewster function
kxi = n1*k0*sin(ti);                       % x component of the incident wavevector
kzi = -n1*k0*cos(ti);                      % z component of the incident wavevector
kxr = kxi;                              % x component of the reflected wavevector
kzr = -kzi;                             % z component of the reflected wavevector
Rs = (kzi-kzt)/(kzi+kzt);

現在Eureal是我要繪制的函數,以x1和z1作為其坐標:

Ei = cos(kxi.*x1 + kzi.*z1)+ sin(kxi.*x1 + kzi.*z1).*1i;     %incident E_field use upper x and z
Er = Rs.*(cos(kxr.*x1 + kzr.*z1)+ sin(kxr.*x1 + kzr.*z1).*1i);     %reflected E_field
Eu = Er + Ei;                                                  %Uper E_field
Eureal = real(Eu);

figure;
surf(x1,z1,Eureal,'EdgeColor','None');
view(2);
xlabel('x','fontsize',20);
ylabel('z','fontsize',20);
colormap jet;

我的問題是,我需要一種不同的編碼方式,因為稍后將涉及矩陣計算,但是這種編碼方式無法像第一種方法那樣生成正確的圖形,因此我使用的不同方式如下:

[x,z] = meshgrid(0:5:600,0:5:600);

然后仍然與上面相同的常量,所以我不會鍵入

現在有什么不同:

Ei = zeros(size(x));
Er = zeros(size(x));

for z1 = 80:mm(1)
    for x1 = 1:mm(1)
        Ei(z1,x1) = cos(kxi.*x(x1) + kzi.*z(z1))+ sin(kxi.*x(x1) + kzi.*z(z1)).*1i;%exp(-1i*kzia*z(z1))*exp(-1i*kxia*x(x1));    % ETazi*exp(-1i*kxia*x(x1))
        Er(z1,x1) = Rs.*(cos(kxr.*x(x1) + kzr.*z(z1))+ sin(kxr.*x(x1) + kzr.*z(z1)).*1i); %exp(-1i*kzra*z(z1))*exp(-1i*kxra*x(x1)); % ETazout*exp(-1i*kxia*x(x1))
        Eu = Er + Ei;                                                  %Uper E_field
        Eureal = real(Eu);
        Eplot = zeros(size(x)) + Eureal;
    end
end  

figure
surf(x,z,Eplot,'EdgeColor','None');
view(2);
xlabel('x','fontsize',20);
ylabel('z','fontsize',20);
colormap jet;

我不知道第二種方法有問題的原因是什么,我需要for循環和x(x1),z(z1)索引稍后在涉及矩陣時進行編碼,因為那樣第一種方法就不會工作。

嘗試使用ndgrid函數而不是meshgrid meshgrid函數像FORTRAN一樣使用逐列方法存儲矩陣(您可以在MATLAB中進行檢查: a = [1 4 7; 2 5 8; 3 6 9]; a(:) )。 ndgrid函數產生傳統的逐行矩陣存儲。 或在surf函數中重新排列變量。 例如,使用:

 surf(z1,x1,Eureal,'EdgeColor','None'); % maybe you need to use  Eureal.'

代替

surf(x1,z1,Eureal,'EdgeColor','None');

此外,如果x1z1是整數,則可以在第二種方法中使用Ei(x1,z1)而不是Ei(z1,x1)

注釋:您可以使用復數。 因此,使用:

 Ei = exp(1i*(kxi.*x1 + kzi.*z1));

代替

 Ei = cos(kxi.*x1 + kzi.*z1)+ sin(kxi.*x1 + kzi.*z1).*1i;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM