wiki:SoC2014

Version 4 (modified by christopher_kormanyos, 9 years ago) ( diff )

typos and clarity

Google Summer of Code 2014

Welcome to the Boost C++ Libraries' home page for Google Summer of Code (GSoC). This page provides information about student projects, proposal submission templates, advice on writing good proposals, and links to information on getting started writing with Boost.

This year Boost is looking to fund work on a number of different kinds of proposals:

  • toolkit-like extensions to existing libraries,
  • finishing or extending sandbox libraries,
  • new data structures and algorithms, and
  • multiple competing proposals for the same project.

For projects involving new or experimental libraries, the process of getting source code "Boost-branded" can take much longer than a single summer. In many cases, it can take much longer than a single year. Even if a library is accepted, there is an expectation that the original author will continue to maintain it. Building a library as part of Boost can easily entail a multi-year commitment. For this reason, we are willing to consider multi-year GSoC projects. However, prospective students must limit the scope of their work to a single summer. We may invite the most successful students to re-apply in 2014.

Requirements

Students must submit a proposal. A template for the proposal can be found here here. Hints for writing a good proposal can be found here.

We strongly suggest that students interested in developing a proposal for Boost discuss their ideas on the mailing list in order to help refine the requirements and goals. Students who actively discuss projects on the mailing list are also ranked before those that do not.

Projects

The following projects have been suggested by potential mentors. If the descriptions of these projects seem a little vague... Well, that's intentional. We are looking for students to develop requirements for their proposals by doing initial background research on the topic, and interacting with the community on the mailing list to help identify expectations.

Projects from previous years can be found here. There are still a number of interesting projects found in these pages.

Boost.Math Generalized Hypergeometric Functions

Boost.Math http://www.boost.org/doc/libs/1_55_0/libs/math/doc/html/index.html is a large well-established Boost library, but new mathematical functions can always be added.

Generalized hypergeometric functions are convergent power series that have rational coefficients.

http://en.wikipedia.org/wiki/Generalized_hypergeometric_function

Hypergeometric functions are remarkably versatile because many well-known functions of pure and applied mathematics are special cases of hypergeometric functions. These include various mathematical constants, elementary transcendental functions, Bessel functions, the incomplete gamma function, confluent hypergemetric functions, generalized Legendre functions, and (infinitely) many more.

Even though the theory of hypergeometric functions is well-established, very few programs or libraries offer support for these fascinating and versatile functions.

In this project, we will implement fast, accurate calculations of certain generalized hypergeometric functions and establish convergent parameter ranges for these. We will write them with generic templates, as is customary and suitable for Boost.Math.

Our work will make use of many numerical methods for special functions, including expansions in Chebyshev polynomials, rational approximations, Pade approximations, Taylor series, asymptotic series, and others.

The main goals of the project are:

  • Investigate calculation methods for hypergeometric_0f1, 1f0, 1f1, 1f2, 2f1.
  • Evaluate regions of parameter convergence for these.
  • Ensure that calculations are fast and accurate computation for all built-in types and multiple-precision types.
  • Optional: Add support generalized Legendre functions of type-I to Boost.Math.
  • Optional: Replace certain internal calculations within Boost.Math with hypergemetric functions.

This project requires strong interest in and dedication to serious mathematical programming and knowledge of C++, especially using templates which Boost.Math makes much use of to support not only built-in float, double and long double but also multiple precision types. You will need to have experience of using Boost libraries, including Boost.Test, and a rudimentary or working knowledge of GIT will be useful.

A preliminary investigation for this project can be found here: https://github.com/boostorg/multiprecision/blob/develop/example/hypergeometric_luke_algorithms.cpp In this file, we are investigating Chebyshev expansions for multiple-precision calculations of hypergeometric functions.

If this code leaves you terrified, then this project is not for you. But if it only frightens you a little bit yet also piques your interest (and you have a passion for numerical programming), then you are the right candidate for this project!

If you would like to demonstrate your skills, use the file in the link above such that hypergeometric_0f1 is used for multiple-precision calculations of cylindrical Bessel functions (i.e., cyl_bessel_j). Use Boost's cpp_dec_float_50 type, for example. Discuss the relation between hypergeometric_0f1 and cyl_bessel_j, investigate convergence properties, and take a peek at run-time characteristics. You can use any platform, Linux, Mac or Microsoft with your IDE of choice, perhaps Visual Studio, Eclipse, Code Blocks, or NetBeans.

This project will by mentored by Christopher Kormanyos, and supported by Paul Bristow and John Maddock mathematical and algorithmic expertise, administration, Boost infrastructure.

Note: See TracWiki for help on using the wiki.