{"action":"created","issue":{"url":"https://api.github.com/repos/boostorg/math/issues/88","repository_url":"https://api.github.com/repos/boostorg/math","labels_url":"https://api.github.com/repos/boostorg/math/issues/88/labels{/name}","comments_url":"https://api.github.com/repos/boostorg/math/issues/88/comments","events_url":"https://api.github.com/repos/boostorg/math/issues/88/events","html_url":"https://github.com/boostorg/math/pull/88","id":257555744,"number":88,"title":"Chebyshev","user":{"login":"NAThompson","id":5459618,"avatar_url":"https://avatars1.githubusercontent.com/u/5459618?v=4","gravatar_id":"","url":"https://api.github.com/users/NAThompson","html_url":"https://github.com/NAThompson","followers_url":"https://api.github.com/users/NAThompson/followers","following_url":"https://api.github.com/users/NAThompson/following{/other_user}","gists_url":"https://api.github.com/users/NAThompson/gists{/gist_id}","starred_url":"https://api.github.com/users/NAThompson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NAThompson/subscriptions","organizations_url":"https://api.github.com/users/NAThompson/orgs","repos_url":"https://api.github.com/users/NAThompson/repos","events_url":"https://api.github.com/users/NAThompson/events{/privacy}","received_events_url":"https://api.github.com/users/NAThompson/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2017-09-13T23:59:40Z","updated_at":"2017-09-17T22:27:28Z","closed_at":null,"author_association":"COLLABORATOR","pull_request":{"url":"https://api.github.com/repos/boostorg/math/pulls/88","html_url":"https://github.com/boostorg/math/pull/88","diff_url":"https://github.com/boostorg/math/pull/88.diff","patch_url":"https://github.com/boostorg/math/pull/88.patch"},"body":"This is a first draft of the Chebyshev transform. Since the Chebyshev transform relies on the discrete cosine transform, I have put a dependency of FFTW3 in `boost/math/special_functions/chebyshev_transform.hpp`, and hence is must be linked with the flags `-lfftw3` if you use the double precision template instantiation, `-lfftw3f` for the float precision template instantiation, and `-lfftw3l` for the long double template instantiation. Ostensibly it could work in `__float128` precision (see [here](http://www.fftw.org/fftw3_doc/Precision.html) but I was unable to figure out how to make it compile if `__float128` isn't supported on the platform at all.\r\n\r\nI used a C++17 `if constexpr` to simulate template metaprogramming on the `fftw_plan`. I think this is ugly and I think there's a better way, so if someone could take a look and see what can be done I'd appreciate it!\r\n\r\nThe numerical derivative works well, but does not have asymptotically optimal scaling, and I also need to be able expand the number of places where the function can be evaluated in case no coefficients are smaller than the tolerance. (Right now, they are only truncated.)\r\n\r\nSo, more work to do, as always, but I think this is enough to get the discussion going esp. with regard to the dependency on FFTW."},"comment":{"url":"https://api.github.com/repos/boostorg/math/issues/comments/330098490","html_url":"https://github.com/boostorg/math/pull/88#issuecomment-330098490","issue_url":"https://api.github.com/repos/boostorg/math/issues/88","id":330098490,"user":{"login":"NAThompson","id":5459618,"avatar_url":"https://avatars1.githubusercontent.com/u/5459618?v=4","gravatar_id":"","url":"https://api.github.com/users/NAThompson","html_url":"https://github.com/NAThompson","followers_url":"https://api.github.com/users/NAThompson/followers","following_url":"https://api.github.com/users/NAThompson/following{/other_user}","gists_url":"https://api.github.com/users/NAThompson/gists{/gist_id}","starred_url":"https://api.github.com/users/NAThompson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NAThompson/subscriptions","organizations_url":"https://api.github.com/users/NAThompson/orgs","repos_url":"https://api.github.com/users/NAThompson/repos","events_url":"https://api.github.com/users/NAThompson/events{/privacy}","received_events_url":"https://api.github.com/users/NAThompson/received_events","type":"User","site_admin":false},"created_at":"2017-09-17T22:27:28Z","updated_at":"2017-09-17T22:27:28Z","author_association":"COLLABORATOR","body":"Ok, now I just need to make the constructor adaptive so that if we don't pick a large enough number of Chebyshev points, we can expand it. Also should consider doing an indefinite integration routine, using the equation given [here](https://en.wikipedia.org/wiki/Chebyshev_polynomials#Differentiation_and_integration)"}}
{"actor":{"display_login":"NAThompson"}}