您的位置:首页 > 其它

复化梯形和复化辛普生公式,积分函数在0~1上积分结果应该是PI

2010-06-01 18:56 417 查看
#include <conio.h> /* 此头函数请不要删除 */
#include <stdio.h>
float N,A,B,X;
float F(float x);

float Ti() //复化梯形公式
{
float i,n,h,t,g=0;
n=N;
h=(B-A)/n;

for(i=1;i <n;i++)
{X=A+i*h;
g=F(X)+g;
}
t=h*(F(A)+2*g+F(B))/2;
return(t);
}

float Si() //复化辛普生公式
{float i,n,h,t,p=0,g=0;
n=N;
h=(B-A)/n;
for(i=1;i <(1+n/2);i=i+2)
{X=A+i*h;
g=F(X)+g;
}
i=0;
for(i=2;i <(n/2);i=i+2)
{X=A+i*h;
p=F(X)+p;
}
t=h*(F(A)+4*g+2*p+F(B))/3;
return(t);
}

float F(float x) //被积分函数f(x)
{float f;
f=4/(1+x*x);
return(f);
}

double main() //主函数
{float z;
int i;
loop:printf( "/n/n/n1为复化梯形公式,2为复化辛普生公式./n请输入你要用的公式的代码:/n ");
scanf( "%d ",&i);
if(i!=1&&i!=2)
{printf( "输入错误代码! ");
goto loop;
}
else {printf( "输入积分上下限:/n ");
scanf( "%f%f ",&A,&B);

printf( "/n输入子区间个数:/n ");
scanf( "%f ",&N);
// printf( "/n/n%f,%f,%f ",A,B,N);
if(i==1)
{z=Ti();
printf( "利用复化梯形公式计算 ");
}
else if(i==2)
{z=Si();
printf( "利用复化辛普生公式计算 ");
}

printf( "结果为:%f ",z);
goto loop;
getch(); /* 此语句请不要删除*/
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: