[GSoC 2013] Boost.Math Bernoulli Numbers and Applications to Special Functions
Hi, My name is Lukasz Marecik, I am fifth year student of Mathematics and fourth year student of Computer Science at Warsaw University. I would like to apply to Google Summer of Code 2013 project. I am interested in Bernoulli Numbers and their applications. While thinking about this project and doing some research, I collected some questions and issues, which I would like to discuss with my (potential) mentors. The answers can have strong influence at my official proposal. 1. Is (one of) the goal of this project to implement FROM SCRATCH completely new boost library, which will calculate Bernoulli Numbers ? I have already found two great C++ open-source programs: - http://www.bernoulli.org/ - http://web.maths.unsw.edu.au/~davidharvey/papers/bernmm/ They are already extremely efficient and fast (the funny thing is that they use completely different approach). Can boost project include and adapt one of them ? Why not ? 2. Are we going to implement only precise calculation of Bernoulli numbers or also Bernoulli numbers modulo p (where p is prime) ? 3. How the implementation of method of computing Bernoulli numbers will look like? Will it be a big template which works with all (reasonable) types (built-in, multiprecision) in the same way ? I was thinking for a while about this and I think it would be better to implement separately computing rational Bernoulli numbers (e.g. gmp_rational type) in a modern way: compute B_n modulo a lot of small primes and then reconstruct B_n via Chinese Remainder Theorem. This algorithm is one of the faster for this concrete type: precise rational numbers, but (in my opinion) it will be inefficient, when we want the output be built-in types. I do not know if I express precise what I want. For example: naive Akiyama–Tanigawa algorithm does not assume the type of output: the calculation can be performed at any type. Will our library work with all types in the same manner, or will our library run different algorithms and choose which one is better in this concrete case ? 4. Do I need to make my own research, reads papers about Bernoulli numbers, find the best practical algorithm and then propose it to my mentor or my mentor will help me to find and choose algorithm ? (so: Can I rely on myself only ?). Until now I have found three interesting approach: - use Chinese Remainder Theorem (described above) - use Euler's formula and the zeta-function algorithm - use completely new subquadratic algorithm (the paper was "submitted to publication", but it was not published in magazine until now ; it is online) The first two of them all already implemented and work (I think) in O(n^(2+eps)) time (it is good to mention that we need \theta(n log n) bits to represent precise number). The third one had (asymptotically) better complexity, but it goes throw a lot of complicated Maths, p-adic numbers etc and it has been not implemented yet - so it can turn out that the constant hidden in Big O notation is so big, that it is unpractical. But who knows. Do I need to discuss in my proposal different approach ? 5. Do I need to include in my proposal some words about applications to boost function: - theoretical view: where bernoulli numbers appear - practical view: how those functions are implemented now and how there will be implemented - and why they will be better ? I am sorry, that I am writing so late, but I was not sure for a long time if I want to apply ; I hope I finish my proposal in time. Kind regards, Lukasz Marecik
Hi,
My name is Lukasz Marecik, I am fifth year student of Mathematics and fourth year student of Computer Science at Warsaw University. I would like to apply to Google Summer of Code 2013 project. I am interested in Bernoulli Numbers and their applications. While thinking about this project and doing some research, I collected some questions and issues, which I would like to discuss with my (potential) mentors. The answers can have strong influence at my official proposal.
Luk, You are coming in a bit late in the application phase and the pre-proposal phase is officially over. So if you want to be considered, you need to act fast and do your best on a good proposal. I think you might be over estimating the amount of theoretical work needed. It's really more of a coding and testing job here. You need to start working on your proposal. Start the proposal according to this link https://svn.boost.org/trac/boost/wiki/SoCSubmissionTemplatehttps://svn.boost.org/trac/boost/wiki/SoCSubmissionTemplate. This link may also help https://svn.boost.org/trac/boost/wiki/SoCHints We have received numerous applications for the Boost.Math project and the Multiprecision project. So do your best on the proposal and good luck.
1. Is (one of) the goal of this project to implement FROM SCRATCH completely new boost library, which will calculate Bernoulli Numbers ?
No. Absolutely not. The new functions will be integrated within the already rich context of Boost.Math.
3. How the implementation of method of computing Bernoulli numbers will look like?
Definitely a template design, yes. And probably based on a fast calculation of tangent numbers, whereby Bernoulli numbers have a simple algebraic relation to tangent numbers.
4. Do I need to make my own research, reads papers about Bernoulli numbers, find the best practical algorithm and then propose it to my mentor or my mentor will help me to find and choose algorithm ? (so: Can I rely on myself only ?). Until now I have found three interesting approach:
Actually, we already some rather clear ideas about which algorithms will work best for various precision levels. So you would have a lot of work, but also a lot of support. No one works alone at this level of competence. - use Chinese Remainder Theorem (described above) - use Euler's formula and the zeta-function algorithm - use completely new subquadratic algorithm (the paper was "submitted
Do I need to discuss in my proposal different approach?
You need to write down a few design considerations, not the entire research solution at this stage.
5. Do I need to include in my proposal some words about applications to boost function: - theoretical view: where bernoulli numbers appear - practical view: how those functions are implemented now and how there will be implemented - and why they will be better?
Not really. Just describe the goals that I wrote in the initial announcement of this project. We start with Bn, then improve tgamma(), then implement polygamma, then we have optional support for Hurwitz-zeta. Along the way will be significant work with testing and performance analyses. I described a lot of this stuff in this research paper: http://dl.acm.org/citation.cfm?id=1916469 A lot of implementatino details are in the calgo 910 sources here: http://calgo.acm.org/
I am sorry, that I am writing so late, but I was not sure for a long time if I want to apply ; I hope I finish my proposal in time. Kind regards, Lukasz Marecik
Just do the best you can, even at this late stage. Sincerely, Chris.
participants (2)
-
Christopher Kormanyos
-
Łukasz Marecik