龙贝格算法C语言实现
算法理论
注意点
需要明确区别变量k和m:
k 表示区间[a,b]的二分数,等价于区间[a,b]被分为2k 个小区间,等价于每个小区间的步长h = (a-b)/2k。
m 表示理查森外推加速方法的加速次数,在此处的梯形值可直接由查理森外推算法的公式进行行递归而得。但需要注意的是,在进行行递归的时候一定要有初始值(即在二分数为k 时的梯形初始值)。
算法应用实例
实例
定义函数接口:
double Integral(double a, double b, double(*f)(double x, double y, double z), double TOL, double l, double t)
在接口定义中:a、b 分别为定积分的上、下界,f 是积分核函数,其中x是积分哑元,y、z 是本题目定义的特殊参数,分别对应 y ( x ) = l ∗ s i n ( t x ) y(x)=l*sin(tx) y(x)=l∗sin(tx)中的 l l l 和 t t t 的值。另外需要注意,在本实例情景下, y ( x ) = l ∗ s i n ( t x ) y(x)=l*sin(tx) y(x)=l∗sin(tx)的输出单位为厘米,而最终的输出的长度值要求以米为单位,需要进行单位换算。
解读实例
实例即可转化为数学问题:已知积分 ∫ a b f ( x ) d x \int_a^bf(x)dx ∫abf(x)dx,用龙贝格求积算法,并结合梯形公式求积分在精度为 T O L TOL TOL时的近似值。其中,需要注意的是, f ( x ) = y ( x ) = l ∗ s i n ( t x ) f(x)=y(x)=l*sin(tx) f(x)=y(x)=l∗sin(tx),且 l l <