Problem with array filling

11 Ansichten (letzte 30 Tage)
thomas82
thomas82 am 17 Aug. 2012
Hi,
I need to do this:
for i=0.1:0.1:360
j(i*10)=2;
end
but I obtain this error message:
??? Attempted to access j(3); index must be a positive integer or
logical.
Could you help me?
Thanks in advance
Thomas

Akzeptierte Antwort

Image Analyst
Image Analyst am 17 Aug. 2012
Besides the others all saying to cast your index to integer like this:
for k = 0.1 : 0.1 : 360
jArray1(int32(k * 10)) = int32(2);
end
I also want to say that it's usually recommended not to use i and j (though you can) as variable names since they also are the imaginary variable. Hence my new names in the corrected code above.
Also, there are some other ways that are more probably efficient and "MATLAB-ish" to do what you did, such as the methods below:
jArray2 = 2 * ones(1, 3600, 'int32');
jArray3(1 : 3600) = int32(2);

Weitere Antworten (4)

Oleg Komarov
Oleg Komarov am 17 Aug. 2012
Bearbeitet: Oleg Komarov am 17 Aug. 2012

Matt Fig
Matt Fig am 17 Aug. 2012
Bearbeitet: Matt Fig am 17 Aug. 2012
The reason you get this error is because of floating point arithmetic.
Look closely:
isequal((0.1:0.1:1)*10,1:10) % NO!
Here is the closer look:
x = (0.1:0.1:1)*10;
x==(1:10) % Notice the third return is a zero, here's why:
fprintf('%.16f\n%.16f\n',x(3),3) % Print out and compare...

Azzi Abdelmalek
Azzi Abdelmalek am 17 Aug. 2012
Bearbeitet: Azzi Abdelmalek am 17 Aug. 2012
in matlab index must be a real strict positiv integer
it does'nt accept x(0) or x(-1)
h=zeros(360*10/0.1,1)
for j=0.1:0.1:360
ind=int16(j*10) % convert to integer, for biger number, u can use int32, int64
h(ind)=2;
end

thomas82
thomas82 am 18 Aug. 2012
Thank you for your answers, now I understood and resolved! Thomas

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by