you created R to hold 600 things, things indexable as R[1]..R[600]

mnths=600
R=zeros(Float64,mnths)

later you bring Julia's attention to R[600+1], just one step 'out of bounds'
when i is 600, i+1 is 601

In Julia, the top part of the range is included
That loop should be

for i in 3:(600-1)
  R[i+1] = ..
end


On Friday, August 21, 2015 at 4:37:48 PM UTC-4, Tj Midkiff wrote:
>
> I am trying to write a small script to help my company out.  I came across 
> Julia on a web search naturally when looking for more speed.  I am just 
> getting my feet wet with programming so please be patient with me.
>
> This is one piece of the code that I know is very inefficient, so any help 
> is greatly appreciated.  FYI, the final version will include pulling the 
> initial variables from a SQL database that could include 100k records.  So 
> basically this code could be ran 100k times in the final version at any 
> time (along with many more calculations).  Please comment anywhere I could 
> add more efficiency, because speed is absolutely critical.
>
> I have a spreadsheet I can provide that shows the methodology a little 
> clearer if it would help.
>
> My main question though is why am I getting the BoundsError()...
>
> Thanks for all of the help.
>
>
> qi=3454.0
> di=0.6
> b=0.9
> mnths=600
>
> AI=(1/b)*((1-di)^-b-1)
> ai=AI/12
> q(t)=qi/(1+b*ai*t)^(1/b)
> Q=[q(t-1) for t=1:3]
> a=((Q[2]/Q[3])^b-1)/b
> mOil=zeros(Float64,mnths)
>
> #Is it worth creating a function here?
> mOil[1]=(Q[1]^b/((1-b)*ai))*(Q[1]^(1-b)-Q[2]^(1-b))
> mOil[2]=(Q[2]^b/((1-b)*a))*(Q[2]^(1-b)-Q[3]^(1-b))
> R=zeros(Float64,mnths)
> R[1]=mOil[2]/(mOil[2]-mOil[1])+b
> for i=1:2
>   R[i+1]=R[1]-i*b
> end
>
> for i=3:600 #Getting a BoundsError() here
>    #mOil[i]=mOil[i-1]*(R[i]/(R[i]-1))
>    R[i+1]=R[1]-i*b
> end
>
>
>

Reply via email to