jifen.cpp

来自「用梯形公式和simpson公式求积分」· C++ 代码 · 共 52 行

CPP
52
字号
#include <iostream>
#include <math.h>

#include <assert.h>
using namespace std;
#define PI 3.141592653579
typedef double (*pfn) (double);
double trapezoidal(double a,double b,pfn f,int n);
double simpson(double a,double b,pfn f,int n);
double fn(double x) {return x*x;};
double fn2(double x) {return exp(-x*x);}//{return (x*x-pow(cos(x),3));}
void fs(int n){ assert(n>0&&n<=100);}
void main()
{	
/*测试一下断言
     double a,b;
	 cin>>a;
	 cin>>b;
	 int n=100;
	 //fs(a);
	 cout<<trapezoidal(a,b,fn2,n)<<endl;//将断言放在函数种也可以在调用时执行
*/
	double a=0,b=2;
	int n=1000000;
	pfn f=fn;
	cout<<trapezoidal(a,b,fn2,n)<<endl;
	cout<<simpson(a,b,fn2,n)<<endl;

}

double trapezoidal(double a,double b,pfn f,int n)
{
//	fs(a); //断言放在函数
	if(a>b){double temp; temp=a; a=b; b=temp; }
	double h=(b-a)/n;
	double sum=f(a)*0.5;
	for(int i=1;i<n;i++) sum+=f(a+i*h);
	sum+=f(b)*0.5;
	return sum*h;
}
double simpson(double a,double b,pfn f,int n)
{
	if(a>b){double temp; temp=a; a=b; b=temp; }
	double h=(b-a)/n;
	double sum=f(a);
	for(int i=1;i<n;i++) sum+=f(a+i*h);
	sum+=f(b);
    double sumid=0.0;
	for(i=1;i<n;i++) sumid+=f(a+(i-0.5)*h);

	return (sum*h+2*sumid*h)/3;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?