2014-11-22 1 views
0

Когда я пытаюсь определить диапазон в цикле for, когда диапазон меньше 1, я получаю ошибки.FOR петли и диапазон в Julia

Например, следующий код:

i = linspace(0, 3, 200) 
graph = zeros(length(i), 1) 

for j in 0:0.015:3 
    graph[j] = j*cos(j^2) 
end 

сообщает следующее сообщение об ошибке: ERROR: BoundsError()

Почему?

+1

Я не уверен, что этот код должен делать, но 'j' начинается с' 0', который не является допустимым индексом. Следующее значение равно '0.015', что, конечно же, также не является допустимым индексом. – StefanKarpinski

+0

@Stefan Что я хотел сделать, так это оценить функцию 'f (x) = x * cos (x^2)' от 0 до 3. Я хотел сохранить результаты в массиве 200x1 и затем построить его с помощью 'PyPlot '. Из того, что вы сказали, я понимаю, что циклы 'for' принимают только целые числа. Думаю, мне нужно что-то сделать, используя 'linspace'. – Echetlaeus

+0

@Echetlaeus: FYI, я думаю, что ваш вопрос не отражает адекватное усилие (и как таковое может быть опущено). У вас есть googled, что означает «BoundsError()» и/или читал о циклах и диапазонах в Julia (или на другом языке), проблема была бы очевидна. – cd98

ответ

4

Как отметил Стефан Карпински, это не цикл for (variable), который принимает только целые числа, а индекс массива. Вы не можете получить доступ к 0.15-му элементу массива.

Как об этом:

x = linspace(0, 3, 200) 
y = zeros(length(x)) 

for i = 1:length(x) 
    j = x[i] 
    y[i] = j*cos(j^2) 
end 

Или даже:

x = linspace(0, 3, 200) 
y = zeros(length(x)) 

for (i, j) in enumerate(x) 
    y[i] = j * cos(j * j) 
end 
+3

@ Oceanos: это также будет работать: 'x = linspace (0, 3, 200); y = [j * cos (j^2) для j в x] ' – user4235730

4

ИМХО, для цикла занимает больше места, не будучи более четким. Обратите внимание, убедитесь, что считается «julianic», но в питона мире, я думаю, что большинство людей будут идти на список понимание:

tic() 
x = linspace(0, 3, 200) 
y = [j*cos(j*j) for j in x] 
toc() 

elapsed time: 0.014455408 seconds 

Даже лучше на мои глаза и быстрее является:

tic() 
x = linspace(0, 3, 200) 
y = x.*cos(x.^2) 
toc() 

elapsed time: 0.000600354 seconds 

где . в .* или .^ указывает, что вы применяете элемент метода/функции по элементу. Не уверен, почему это происходит быстрее. Эксперт Джулии может помочь нам в этом.