多项式求值的几个简单算法(C语言)
2017-03-12 22:10
260 查看
最近在读 Numerical Recipes in C++ ,上面给了些多项式求值的算法,很实用。放在这里备用。三个函数,分别是多项式求值,多项式求导数值,多项式求各阶导数值。
下面的代码全都简单验算过,应该没什么问题,可以大胆的使用。
下面的代码全都简单验算过,应该没什么问题,可以大胆的使用。
/** * @brief poly 计算多项式的值,采用 horner 算法 * @param coff 多项式的系数,c0, c1, ... cN * @param n 多项式最高项的次数 * @param x 自变量的取值 * @return 多项式在 x 处的值 */ double poly(const double coff[], int N, double x) { double p = coff ; for(int j = N - 1; j >= 0; j--) { p = p * x + coff[j]; } return p; } /** * @brief dpoly 计算多项式的值和一阶导数值 * @param coff 多项式的系数,c0, c1, ... cN * @param N 多项式最高项的次数 * @param x 自变量的取值 * @param [out] d 多项式在 x 处的导数值 * @return 多项式在 x 处的值 */ double dpoly(const double coff[], int N, double x, double &dp) { dp = 0; double p = coff ; for(int j = N - 1; j >= 0; j--) { dp = dp * x + p; p = p * x + coff[j]; } return p; } /** * @brief ddpoly 计算多项式的第 0 阶到第 M 阶导数 * @param coff 多项式的系数,c0, c1, ... cN * @param N 多项式最高项的次数 * @param x 自变量的取值 * @param dp 多项式在 x 处的各阶导数值,从 0 阶到 M 阶 * @param M 需要求解的多项式的导数的最高阶次 */ void ddpoly(double coff[], int N, double x, double dp[], int M) { dp[0] = coff ; for(int j = 1; j < M; j++) { dp[j] = 0.0; } int nnd = 0; for(int i = N - 1; i >= 0; i--) { nnd = (M < N - i) ? M : N - i; for(int j = nnd; j > 0; j--) { dp[j] = dp[j] * x + dp[j - 1]; } dp[0] = dp[0] * x + coff[i]; } double cnst = 1.0; for(int i = 2; i < M + 1; i ++) { cnst = cnst * i; dp[i] = dp[i] * cnst; } }
相关文章推荐
- C语言的一个简单算法: 26个字母随机步生成
- 几个简单有趣的算法
- 【python学习】简单的几个算法
- 1024 简单多项式求值1
- 几个简单有趣的算法
- (C语言)二分算法实现简单猜数
- 面试过程中遇到的几个简单的算法
- LRU算法的简单实现( C语言 + uthash包)
- 几个简单有趣的算法
- 游戏里的几个简单算法
- 几个简单数论的算法的实现
- 几个简单常用的算法
- C语言几种简单的算法实现2
- 【C语言】 计数、求和、求阶乘等简单算法
- 几个简单常用的算法
- 几个简单有趣的算法
- C语言几种简单的算法实现
- C语言实现一维多项式求值
- 转载:yangsen600的C语言实现的简单排序算法汇总
- 简单实现的几个C语言<string>库函数