📄 jifen.cpp
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -