[ 
https://issues.apache.org/jira/browse/MATH-1325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15267993#comment-15267993
 ] 

Fran Lattanzio commented on MATH-1325:
--------------------------------------

I pushed an initial cut of the multivariate finite differencing code. For now, 
this only consists of:
1. Generating coefficients (exactly) via tensor product of univariate coeffs.
2. Taking multivariate numerical partials using a fixed bandwidth. The 
bandwidth strategy is, however, pluggable, so we could insert something smarter 
in the future.

Also, I made some changes to the Precision class to support rounding to exact 
IEEE powers of 2. I wasn't totally happy with where this code ended up, but 
Precision already had the necessary bit masks etc. to support this, so it was 
certainly the easiest place... 

I will try to add more unit tests, improve the JavaDocs, and finish off the 
exception handling in the next 4-5 day.

> Improve finite differencing infrastructure
> ------------------------------------------
>
>                 Key: MATH-1325
>                 URL: https://issues.apache.org/jira/browse/MATH-1325
>             Project: Commons Math
>          Issue Type: New Feature
>            Reporter: Fran Lattanzio
>            Priority: Minor
>
> The existing finite difference framework in commons math is a limiting 
> because it accepts only fixed bandwidth parameters. Furthermore, the finite 
> difference coefficients/descriptions are not exposed to the user in any 
> reasonable fashion (e.g. a user doing a numerical ODE solve probably wants to 
> just grab suitable coefficients from somewhere). 
> Conceptually, I think the work of finite difference can be broadly divided 
> into three tasks:
> 1. Generation of finite difference coefficients. Again, one should be able to 
> do this and get the results outside of the context of taking an actual 
> derivative. Ideally, we could generate coefficients for any flavor (forward, 
> central, backward) and order.
> 2. Selection of the bandwidth. This is, to be honest, the trickiest part of 
> computing a numerical derivative. There is some "art" to picking a proper 
> bandwidth that will generate an accurate numerical derivative - there are two 
> competing sources of error (roundoff, due to the finite representation of 
> floating points; and truncation, due to the inherent nature of finite 
> differences). Ideally, we want to pick a bandwidth that will minimize the 
> *total* error.
> 3. Actually computing the finite difference derivative estimate. This is 
> really easy once you have 1. and 2.
> 4. Extend 1-3 to include support for multivariate finite differences.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to