1

どこで私は間違えましたか?問題は次のとおりです: R = sqrt(bsxfun(@minus,XX,(XX)').^2+bsxfun(@minus,YY,(YY)').^2);

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
4

1 に答える 1

4

問題はあなたが言うところではなく、次の行にあります。

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

要するに、問題は matrixRにゼロ インデックスを指定することですが、MATLAB ではゼロ インデックスは不正です (0 ではなく 1 から始まります!)。

では、どこでゼロ インデックスを取得しますか? R(..., ...)次の行と列の添え字を使用してインデックスを作成します。

mod(idx_not_diagL, 10)

floor(idx_not_diagL / N))

どちらも時々ゼロ値を取得します。

修正として、行インデックスに次を使用することをお勧めします。

mod(idx_not_diagL, 10) + 1

列インデックスに関しては、別の問題があります。式のfloor(...)範囲は 0 から 99 です。修正すると (何を達成しようとしているのかわかりません)、機能します。

于 2012-12-09T15:15:23.913 に答える