2012-12-09 45 views
1

我哪裏出錯了? 問題出在:R = sqrt(bsxfun(@ minus,XX,(XX)')。^ 2 + bsxfun(@ minus,YY,(YY)')。Matlab-Subscript索引必須是實數正整數或邏輯

EO = 8.8541e-12; %eps0 
A2 = 1.0e-2; %2a 
N = 100; %num of subareas in a plate 
M = sqrt(N); %num of subareas in one axis 
DX = A2/M; % 2b 
DY = DX; %2b 
DL = DX; %2b 

% SECOND, CALCULATE THE ELEMENS OF THE COEFFICIENT MATRIX A 
% Write all the subareas centers coordinates to X and Y 
% SECOND, CALCULATE THE ELEMENS OF THE COEFFICIENT MATRIX A 
% Write all the subareas centers coordinates to X and Y 
x = linspace(DL*0.5,DL*(M-0.5),M); 
y = x; 
[XX,YY]=meshgrid(x,y); 
%%L = NaN(N,N); 
**R = sqrt(bsxfun(@minus,XX,(XX)').^2+bsxfun(@minus,YY,(YY)').^2);** 
idx_diagL = find(eye(N)~=0); 
idx_not_diagL = find(eye(N)==0); 
L(idx_not_diagL) = DL^2./(4.*pi*EO*R(mod(idx_not_diagL,10),floor(idx_not_diagL/N))); 
L(idx_diagL) = DL*0.8814/(pi*EO); %ln(1+sqrt(2)= 0.8814 
+0

另請參閱[此問題](http://stackoverflow.com/questions/20054047/subscript-indices-must-either-be-real-positive-integers-or-logicals-generic-sol)for [generic解決此問題的方法](http://stackoverflow.com/a/20054048/983722)。 –

回答

4

問題是,你說是,但在下面一行:

L(idx_not_diagL) = DL^2./(4.*pi*EO*R(mod(idx_not_diagL,10),floor(idx_not_diagL/N))); 

總之,你的問題是,你指定零個指數矩陣R,但在MATLAB零指數是非法的(它們從1開始,而不是0!)。

現在,你從哪裏得到零指數?您索引R(..., ...)使用以下行和列標:

mod(idx_not_diagL, 10) 

floor(idx_not_diagL/N)) 

這都得到零個值偶爾。

作爲一個解決方法,我建議使用該行的索引以下幾點:

mod(idx_not_diagL, 10) + 1 

至於列索引,還有另一個問題。 floor(...)表達式的範圍從0到99.一旦你修復了它(我不確定你想要達到什麼目的),它就會起作用。

+0

謝謝,但我想我試圖做的就像是不可能的任務......我試圖讓R NXN距離矩陣,但失敗....當然,我在這裏做的是R(10,10),而不是嘗試找出正確的指數,同時訪問R,相當hardcore ... –

+0

我不知道我明白你剛剛說的。 –

相關問題