【发布时间】:2021-06-19 10:52:24
【问题描述】:
我有一个代码尝试使用梯形规则的方法以数值方式求解给定区间内的函数积分(参见Trapezoid method 中的公式),现在,对于区间中的函数 sin(x) [-pi/2.0,pi/2.0],等待积分为零。
在这种情况下,我将分区数 'n' 设为 4。问题是,当我有 20 位小数的 pi 时,它是零,有 14 位小数时它是 8.72e^(-17),那么小数点后 11 位为零,小数点后 8 位为 8.72e^(-17),小数点后 3 位为零。我的意思是,对于 pi 的不同近似值,积分为零或接近零的数字,但没有明显的趋势。
感谢您帮助理解为什么会发生这种情况。 (我确实在 Dev-C++ 中运行过)。
#include <iostream>
#include <math.h>
using namespace std;
#define pi 3.14159265358979323846
//Pi: 3.14159265358979323846
double func(double x){
return sin(x);
}
int main() {
double x0 = -pi/2.0, xf = pi/2.0;
int n = 4;
double delta_x = (xf-x0)/(n*1.0);
double sum = (func(x0)+func(xf))/2.0;
double integral;
for (int k = 1; k<n; k++){
// cout<<"func: "<<func(x0+(k*delta_x))<<" "<<"last sum: "<<sum<<endl;
sum = sum + func(x0+(k*delta_x));
// cout<<"func + last sum= "<<sum<<endl;
}
integral = delta_x*sum;
cout<<"The value for the integral is: "<<integral<<endl;
return 0;
}
【问题讨论】:
-
M_PI是一个东西。 -
@tadman 或更现代的
std::numbers::pi_v(如果有)。 -
你在问为什么使用不同的 Pi 值会导致不同的结论?是的,它可能会这样做。
-
@Brian 鉴于它使用 MinGW,可能需要十年时间。
-
我想说的是,当使用更精确的 pi 值时,可以期望得到更精确的积分(在这种情况下更接近于零),但事实并非如此,因为,例如, pi= 3.141 得到零,而用 14 位小数定义的 pi 则不同。
标签: c++ decimal dev-c++ integral