复化的 Simpson 算法c语言编程

来源:百度知道 编辑:UC知道 时间:2024/09/27 17:23:29
输入:端点a,b ,正整数n
输出:定积分的近似值SN
算法过程
1置 h=(b-a)/2n
2F(0)=f(a)+f(b),F1=0,F2=0
3对j=1,2,3......(2n-1)循环执行步4至步5
4置x = a+jh
5如果j是偶数,则F2=F2+f(x),否则F1=F1+f(x)
6置SN=h/3(F0+2F2+4F1)
7输出SN,停机。
急用,谢谢!
f(x)=根号下(4-sinx的平方),希望可以再WIN-TC下通过

#include "math.h"
#include "iostream"
#include "stdio.h"
using namespace std;
#define f(x) sin(x)
#define a 1
#define b 5

long double fs(unsigned long n){
long i;
long double h=((long double)(b-a))/((long double)n);
long double *x;
unsigned long m=n/2;
if(!(x=(long double*)malloc((n+1)*sizeof(long double)))) exit(OVERFLOW);
for(unsigned long i=0;i<=n;i++) x[i]=a+i*h;
long double sum=0.0;
sum=h/3.0*(f((long double)a)+f((long double)b));
for( i=0;i<m;i++)sum+=h/3.0*4.0*f(x[2*i+1]);
for( i=1;i<m;i++)sum+=h/3.0*2.0*f(x[2*i]);
return sum;
}

void main(){
int n,i;
for(k=0;k<13;k++){
cout<<"所分区间数n="<<n<<endl;

long double ans;
ans=fs(n);
printf("答案是:%13.16f\n",ans);
}
}

+++++++++++++++++++++++++++++++++++++++++++++