Hi Spencer,

Can I just hop in with a question on your integration/quadrature routine? 
I'm working on a value function iteration in a fairly large state space 
(think of the order of 500,000 to 1m grid points per period) and hence have 
to do calculate a lot of expected values. Naturally, I tried out the 
QuantEcon package right away after seeing this thread here and I'm a bit 
puzzled by its performance. When timing the inner part of my loop, in which 
the quadrature is used (and around 400 integrations are performes), using 
`quadgk` takes between 3 and 4 seconds to do the job, while using `qnwlege` 
and `do_quad` clocks in at 18 to 20 seconds. However, for some iterations, 
the time used with `quadgk` explodes to 350 to 450 seconds.

I checked the examples on the quant-econ website and tried to reproduce the 
integration of the cos function found here 
<http://quant-econ.net/jl/julia_libraries.html#optimization-roots-and-fixed-points>.
 
While I can reproduce the result on the website, the relative advantage of 
`do_quad` seems to vanish when I narrow the interval, e.g. when integrating 
from pi/2 to pi, `quadgk` seems to be an order of magnitude faster than 
`do_quad`, especially when timing both steps for `do_quad` (i.e. including 
the calculation of nodes and weights).

Do you have a general idea about when `do_quad` outperforms `quadgk` and 
vice versa? Ideally, I'd like to write my code in a way that chooses the 
better option in each iteration, but at the moment I'm stumped as for how 
to figure out which situation suits which routine.

Thanks!

On Saturday, September 20, 2014 1:06:41 AM UTC+1, Spencer Lyon wrote:
>
> Hi David,
>
> Thanks for the questions, I’ll respond in chunks.
>
> Any experiences/opinions/pitfalls your group discovered on the Python vs 
> Julia question? 
>
> I personally love both languages and use both regularly. I find myself 
> reaching for Julia for most things right now — I love the more advanced 
> features like metaprogramming and parallel processing that are either 
> non-existent or not as well integrated into the python language itself (I 
> know there are many packages that provide similar features for python, but 
> they don’t feel as natural as they do in Julia).
>
> Did you find one is faster than the other?
>
> As you might expect, we found that Julia was faster than Python for most 
> things. This is probably an artifact of the type of algorithms we used. 
> Often we would define an operator that loops over a grid, and then iterate 
> on that operator until we find a fixed point. Because of this looping, 
> Julia has a predictable speed advantage.
>
> Were there major areas where Julia lagged behind Python?
>
> I can think of two places where performance in Julia wasn’t as good as 
> performance in python:
>
>    1. We often need to do quadrature in the innermost part of our loops 
>    (to approximate expected values) and we found that Julia’s quadgk 
>    routine was much slower scipy.integrate.fixed_quad. This is *not* a 
>    fair comparison because the algorithms employed by the two functions are 
>    very different. Specifically quadgk uses an adaptive algorithm while 
>    fixed_quad just uses standard Gaussian quadrature. To get around this 
>    we actually implemented a whole suite of quadrature routines in the file 
>    quad.jl 
>    <https://github.com/QuantEcon/QuantEcon.jl/blob/master/src/quad.jl>. 
>    After switching the Julia code from using quadgk to our own internal 
>    quadrature methods, we got approximately the same solutions, but the code 
>    was between 35-115 faster. 
>    2. Linear interpolation. The function numpy.interp does simple 
>    piecewise linear interpolation. We ended up using the CoordInterpGrid 
>    type from Grid.jl to accomplish this. As of right now the 
>    interpolation steps are the biggest bottleneck in most of the functions we 
>    have. 
>
> We also didn’t really find that Julia was lagging behind Python in terms 
> of libraries that we needed. All the functionality we needed was already 
> available to us. We are using PyPlot.jl to generate graphics, so I guess 
> the some of the Julia code is dependent on Python. Come to think of it the 
> one thing we would like to have that we haven’t been able to find is 
> arbitrary precision linear algebra. In Python this can be achieved through 
> SymPy’s wrapping of mpmath, but as far as I know we don’t yet have 
> arbitrary precision linear algebra in Julia.
>
> On Friday, September 19, 2014 12:40:01 PM UTC-4, David Anthoff wrote:
>
> This is fantastic!
>>
>>  
>>
>> Any experiences/opinions/pitfalls your group discovered on the Python vs 
>> Julia question? I guess you pretty much implemented the same algorithms in 
>> both languages. Did you find one is faster than the other? Were there major 
>> areas where Julia lagged behind Python?
>>
>>  
>>
>> Thanks,
>>
>> David 
>>
>>  
>>
>> *From:* julia...@googlegroups.com [mailto:julia...@googlegroups.com] *On 
>> Behalf Of *Spencer Lyon
>> *Sent:* Thursday, September 18, 2014 7:14 PM
>> *To:* julia...@googlegroups.com
>> *Subject:* [julia-users] ANN: QuantEcon.jl
>>
>>  
>>
>> New package QuantEcon.jl <https://github.com/QuantEcon/QuantEcon.jl>.
>>
>> This package collects code for quantitative economic modeling. It is 
>> currently comprised of two main parts:
>>
>> 1.      A toolbox of routines useful when doing economics
>>
>> 2.      Implementations of types and solution methods for common 
>> economic models. 
>>
>> This library has a python twin: QuantEcon.py 
>> <https://github.com/QuantEcon/QuantEcon.py>. The same development team 
>> is working on both projects, so we hope to keep the two libraries in sync 
>> very closely as new functionality is added.
>>
>> The library contains all the code necessary to do the computations found 
>> on http://quant-econ.net/, a website dedicated to providing lectures 
>> that each economics and programming. The website currently (as of 9/18/14) 
>> has only a python version, but the Julia version is in late stages of 
>> refinement and should be live very soon (hopefully within a week).
>>
>> The initial version of the website will feature 6 lectures dedicated to 
>> helping a new user set up a working Julia environment and learn the basics 
>> of the language. In addition to this language specific section, the website 
>> will include 22 other lectures on topics including
>>
>> ·         statistics: markov processes (continuous and discrete state), 
>> auto-regressive processes, the Kalman filter, covariance stationary 
>> proceses, ect.
>>
>> ·         economic models: the income fluctuation problem, an asset 
>> pricing model, the classic optimal growth model, optimal (Ramsey) taxation 
>> , the McCall search model
>>
>> ·         dynamic programming: shortest path, as well as recursive 
>> solutions to economic models
>>
>> All the lectures have code examples in Julia and most of the 22 will 
>> display code from the QuantEcon.jl library.
>>
>> ​
>>
> ​
>

Reply via email to