2016-09-28 122 views
0

我是一個matlab初學者。我成功地使用meshgrid繪製的彩色地圖,我需要爲我的項目,下面的代碼:Matlab Meshgrid彩色地圖繪圖

創建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)i當它涉及到矩陣時,稍後再編碼,因爲那麼第一種方法將不起作用。

+1

是什麼'kzt'和'mm'? –

回答

0

嘗試使用ndgrid函數而不是meshgridmeshgrid函數使用像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'); 

此外,你可以在你的第二個方法使用Ei(x1,z1)代替Ei(z1,x1)如果x1z1是整數。

評論:您可以使用comlex號碼。因此,使用方法:的

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

代替

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