Синтаксис :
в 50:200
или 50:30:200
создает объект диапазона в Julia. Эти объекты диапазона не только повторяемы, но и реализуют метод getindex
, который означает, что вы можете просто получить доступ к шагам в диапазоне с синтаксисом a[index]
, как если бы это был массив.
julia> solvetimes = 50:30:200 # 50, 80, 110, 140, ...
50:30:200
julia> solvetimes[3]
110
Вы можете решить свою проблему несколькими способами.
Во-первых, вы можете ввести переменную itercount
для подсчета количества итераций и узнать, по какому индексу timevector
вы установите время решения.
solvetimes = 50:30:200 # increment by 30
timevector = Vector{Float64}(undef,length(solvetimes))
itercount = 1
for i in solvetimes
...
timevector[itercount] = getsolvetime(m)
global itercount
itercount += 1
end
Другим способом было бы создать пустые timevector
и push!
.
solvetimes = 50:30:200 # increment by 30
timevector = Float64[] # an empty Float64 vector
for i in solvetimes
...
push!(timevector, getsolvetime(m)) # push the value `getsolvetime(m)` into `timevector`
end
push!
операция может требовать, чтобы julia выделяла память и копировала данные, чтобы компенсировать увеличение размера массива, следовательно, может быть не очень эффективной, хотя это не имеет большого значения в вашей проблеме.
Другим способом будет итерация от 1 до length
из solvetimes
. Ваша переменная управления циклом все еще увеличивается один за другим, но теперь она представляет индекс в solvetimes
, а не в момент времени.
solvetimes = 50:30:200 # increment by 30
len = length(solvetimes)
timevector = Vector{Float64}(undef, len)
for i in 1:len
global T
T = solvetimes[i]
...
timevector[i] = getsolvetime(m)
end
С этими модификациями k
th значение в timevector
, timevector[k]
обозначает время решения для solvetime[k]
.
Вы также можете найти другие способы решения проблемы, например, использовать Dict
s и т. Д.