Implementing the derivative in C/C++

前端 未结 8 1243
旧时难觅i
旧时难觅i 2020-12-04 17:09

How is the derivative of a f(x) typically calculated programmatically to ensure maximum accuracy?

I am implementing the Newton-Raphson method, and it re

8条回答
  •  无人及你
    2020-12-04 17:28

    alt text

    alt text

    1) First case:

    alt text

    alt text — relative rounding error, about 2^{-16} for double and 2^{-7} for float.

    We can calculate total error:

    alt text

    Suppose that you are using double floating operation. Thus the optimal value of h is 2sqrt(DBL_EPSILON/f''(x)). You do not know f''(x). But you have to estimate this value. For example, if f''(x) is about 1 then the optimal value of h is 2^{-7} but if f''(x) is about 10^6 then the optimal value of h is 2^{-10}!

    2) Second case:

    alt text

    Note that second approximation error tends to 0 faster than first one. But if f'''(x) is very lagre then first option is more preferable:

    alt text

    Note that in the first case h is proportional to e but in the second case h is proportional to e^{1/3}. For double floating operations e^{1/3} is 2^{-5} or 2^{-6}. (I suppose that f'''(x) is about 1).


    Which way is better? It is unkown if you do not know f''(x) and f'''(x) or you can not estimate these values. It is believed that the second option is preferable. But if you know that f'''(x) is very large use first one.

    What is the optimal value of h? Suppose that f''(x) and f'''(x) are about 1. Also assume that we use double floating operations. Then in the first case h is about 2^{-8}, in the first case h is about 2^{-5}. Correct this values if you know f''(x) or f'''(x).

提交回复
热议问题