/**********************************
用复化梯形、复化Simpson公式计算……
并与其真值比较(分八段)
***********************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float FuhuaSimpson(float a,float b,int n);//[a,b]区间内
float FuhuaTixing(float a,float b,int n);
float Fun(float x);
void main()
{
float y1,y2;
y1=FuhuaSimpson(0,3.14159,8);
y2=FuhuaTixing(0,3.14159,8);
printf("复化simpson结果是:%f\n\n",y1);
printf("与真值比较得:%f\n\n\n\n",fabs(y1-2));
printf("复化梯形结果是:%f\n\n",y2);
printf("与真值比较得:%f\n",fabs(y2-2));
}
float FuhuaSimpson(float a,float b,int n)
{
float xk1,xk2,xk,m,h,s;
m=0;
int k;
h=(b-a)/n;
for(k=1;k<=n;k++)
{
xk1=(a+h*k);
xk2=a+h*(k-1);
xk=(xk2+xk1)/2;
m=m+4*Fun(xk)+2*Fun(xk1);
}
s=h/6*(Fun(a)-Fun(b)+m);
return s;
}
float FuhuaTixing(float a,float b,int n)
{
float h,m,T,xk;
int k;
m=0;
h=(b+a)/n;
for(k=1;k<n;k++)
{
xk=a+h*k;
m=m+Fun(xk);
}
T=h/2*(Fun(a)+2*m+Fun(b));
return T;
}
float Fun(float x)
{
return sin(x);
}
复化求积
最新推荐文章于 2023-10-27 19:12:03 发布