使用霍纳规则计算 Erf 函数(不使用阶乘和幂)
Calculate Erf function using Horner's Rule (without using factorial and power)
虽然我的第一部分使我能够使用阶乘和幂,所以我创建了一些函数原型并使用递归函数来获得错误函数,如下所示:
double erf(double x, int N)
{
if (N < 0) return 0;
return 1.128379167*(power(-1,N)*power(x,2*N+1))/((2*N+1)*fact(N))+erf(x, N-1);
}
问题是第二部分需要我使用霍纳法则当a1,a2,a3....a(n)包含阶乘函数。那么我应该怎么做才能把阶乘函数变成别的东西,这样我就可以用递归函数来计算erf而不用阶乘。
霍纳法则
误差函数可以简化为
res = 1;
term = 1;
for(k=1; k<=N; k++) {
term *= -x*x/k;
res += term/(2*k+1);
}
return 1.128379167*x*res;
对于类似Horner的实现,首先考虑一个内和的例子(即没有公因数1.128379167*x
)
1 - x^2/1!/3 + x^4/2!/5 - x^6/3!/7
= 1 - x^2 * (1/3 - x^2/2 * (1/5 - x^2/3 * (1/7 - ...) ) )
因此,innersum(x,k,N) {
if(k>N) return 0;
return 1/(2*k+1)-x*x/(k+1)*innersum(x,k-1,N);
}
erf(x,N) {
return 1.128379167*x*innersum(x,0,N);
}
相关文章:
- 在 C++ 中的数组上使用阶乘函数
- 阶乘问题在 c++ 中给出错误的输出
- 大数的阶乘给出错误的输出
- 什么模板用法在阶乘中更好
- 为什么我在C++阶乘函数中出现编译错误?
- 计算阶乘的 C++17 倍表达式中的错误
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- 平方模型为零,阶乘模型问题
- 阶乘元规划
- 阶乘-c++ 我想以不同的方式打印
- 阶乘函数只返回C++中输入的答案
- 阶乘使用循环递增给出垃圾值
- 大 n 表示阶乘
- 为什么我不能在非常量表达式上使用此模板阶乘函数?
- 计算最大数字的阶乘
- 这个阶乘程序内部发生了什么?
- 返回阶乘C++的递归函数
- C++ 中是否有任何内置阶乘函数?
- 使用霍纳规则计算 Erf 函数(不使用阶乘和幂)