Why am I not able to use decimal numbers in my code? (Index in position 1 is invalid. Array indices must be positive integers or logical values)
10 ビュー (過去 30 日間)
古いコメントを表示
I'm getting the error "Index in position 1 is invalid. Array indices must be positive integers or logical values", meaning that my numbers with decimals won't work (which I need), as in the rho, and some others I need to change, and I'm kind of unsure of what to change.
clc
clear all;
close all;
loop=1;
Nx=50;
Ny=50;
M=4000;
%--------------------------------------------------------------------------
%--Initialize V-matrix and Rho-matrix--------------------------------------
%---V(i,j)=potential inside the 2-D box------------------------------------
%---rho(i,j)=charge density inside the 2-D box-----------------------------
%---i is along X-axis and j is along Y-axis--------------------------------
%--------------------------------------------------------------------------
V(1:Nx,1:Ny)=0.0;
rho(1:Nx,1:Ny)=0.0;
rho(0.05,0.025)=0; % charge at the center of the box
%--------------------------------------------------------------------------
% Boundary conditions
V(1,:)=0;
V(Nx,:)=1;
V(:,1)=0;
V(:,Ny)=0;
X=1:Nx;
Y=1:Ny;
contour(X,Y,V,0:1:50,'linewidth',2)
h=gca;
get(h,'FontSize')
set(h,'FontSize',12)
colorbar('location','eastoutside','fontsize',12);
axis([1 Nx 1 Ny])
xlabel('X','fontSize',12);
ylabel('Y','fontSize',12);
title('Electric Potential Distribution, V(X,Y)','fontsize',12);
fh = figure(1);
set(fh, 'color', 'white');
2 件のコメント
Walter Roberson
2019 年 4 月 2 日
Are you sure you want to go as far out as rho(x=50, y=50) = 0.0 when you are also working at the scale of rho(x=0.05, y=0.025) = 0 ? In order to place everything at grid coordinates, you would have to use indexes rho(x,y) -> Rho(row = 40*x, column = 40*y) which would take you out to row 2000 and column 2000, and rho(x=0.05, y=0.025) would then map to Rho(row=2, column=1) .
But your comment puts the charge (0) "at the center of the box", implying that the box would have to extend from about x=-50 to x=+50 and y=-50 to y=+50, which would require using grid coordinates such as Rho(row=80*x+4001, column=80*y+4001) for a total of 8001 rows and columns.... are you sure that is what you want?
回答 (2 件)
Star Strider
2019 年 4 月 2 日
This is the assignment that throws the error:
rho(0.05,0.025)=0; % charge at the center of the box
Note that 0.05 and 0.025 are not integers.
Since ‘rho’ is a (50x50) double array, perhaps you intend:
rho(25, 25)=0; % charge at the center of the box
With that change, your code runs without error, although the result is likely less than what you want.
2 件のコメント
Walter Roberson
2019 年 4 月 2 日
The only way it could have worked is if you had defined a custom storage class that permitted non-integer indices.
Walter Roberson
2019 年 4 月 2 日
factor = 40;
loop=1;
Nx=50;
Ny=50;
M=4000;
%--------------------------------------------------------------------------
%--Initialize V-matrix and Rho-matrix--------------------------------------
%---V(i,j)=potential inside the 2-D box------------------------------------
%---rho(i,j)=charge density inside the 2-D box-----------------------------
%---i is along X-axis and j is along Y-axis--------------------------------
%--------------------------------------------------------------------------
V(1:Nx*factor,1:Ny*factor)=0.0;
rho(1:Nx*factor,1:Ny*factor)=0.0;
rho(0.05*factor,0.025*factor)=0; % charge at the center of the box
%--------------------------------------------------------------------------
% Boundary conditions
V(1,:)=0;
V(Nx*factor,:)=1;
V(:,1)=0;
V(:,Ny*factor)=0;
X=1:Nx*factor;
Y=1:Ny*factor;
contour(X,Y,V,0:1:50,'linewidth',2)
h=gca;
get(h,'FontSize')
set(h,'FontSize',12)
colorbar('location','eastoutside','fontsize',12);
axis([1 Nx 1 Ny])
xlabel('X','fontSize',12);
ylabel('Y','fontSize',12);
title('Electric Potential Distribution, V(X,Y)','fontsize',12);
fh = figure(1);
set(fh, 'color', 'white');
The contour will be empty because almost everything is 0 and the exceptions that are 1 are only directly against the edges. But at least it will not give invalid index.
13 件のコメント
Walter Roberson
2019 年 4 月 3 日
Attached.
But are you sure that you want to put a charge of 0 at the center point? Why bother, considering that the array starts all 0 (except the edges) ?
参考
カテゴリ
Help Center および File Exchange で Graphics Object Programming についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!