這是辛普森積分法。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)廣宗,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
給你寫了fun_1( ),fun_2(),請(qǐng)自己添加另外幾個(gè)被積函數(shù)。
調(diào)用方法 t=fsimp(a,b,eps,fun_i);
a,b --上下限,eps -- 迭代精度要求。
#includestdio.h
#includestdlib.h
#include math.h
double fun_1(double x)
{
return 1.0 + x ;
}
double fun_2(double x)
{
return 2.0 * x + 3.0 ;
}
double fsimp(double a,double b,double eps, double (*P)(double))
{
int n,k;
double h,t1,t2,s1,s2,ep,p,x;
n=1; h=b-a;
t1=h*(P(a)+P(b))/2.0;
s1=t1;
ep=eps+1.0;
while (ep=eps)
{
p=0.0;
for (k=0;k=n-1;k++)
{
x=a+(k+0.5)*h;
p=p+P(x);
}
t2=(t1+h*p)/2.0;
s2=(4.0*t2-t1)/3.0;
ep=fabs(s2-s1);
t1=t2; s1=s2; n=n+n; h=h/2.0;
}
return(s2);
}
void main()
{
double a,b,eps,t;
a=0.0; b=3.141592653589793238; eps=0.0000001;
// a definite integral by Simpson Method.
t=fsimp(a,b,eps,fun_1);
printf("%g\n",t);
t=fsimp(a,b,eps,fun_2);
printf("%g\n",t);
// ...
printf("\n Press any key to quit...");
getch();
}
源代碼如下:
#include#includefloat f1(float x)
{
return(1.0+x);
}
float f2(float x)
{
return(2.0*x+3.0);
}
float f3(float x)
{
return(exp(x)+1);
}
float f4(float x)
{
return(pow(1+x,2));
}
float f5(float x)
{
return(pow(x,3));
}
float fsimp(float a,float b,float (*p)(float))
{
float c,s;
c=(a+b)/2;
s=(b-a)/6*(p(a)+4*p(c)+p(b));
return s;
}
int main()
{
float a,b;
printf("請(qǐng)輸入積分下限a的值:");
scanf("%f",a);
printf("請(qǐng)輸入積分上限b的值:");
scanf("%f",b);
printf("%f\n",fsimp(a,b,f1));
}
擴(kuò)展資料
1、對(duì)應(yīng)于一個(gè)積分式要有一段程序,可以改變程序的一小部分來改變所要求的積分式。
2、除數(shù)不能位0。
3、兩個(gè)整數(shù)相除,結(jié)果仍是整數(shù)。
4、若被除數(shù)其中有一個(gè)為浮點(diǎn)數(shù)或者兩個(gè)都為浮點(diǎn)數(shù),則結(jié)果為浮點(diǎn)類型。操作數(shù)必須為整數(shù),不能是浮點(diǎn)數(shù)。
#includeiostream.h
//定義結(jié)構(gòu)類型
struct?student
{
int???num;
char??name[20];
float?grade;
};
void?main(void)
{
//聲明數(shù)組
int?i,size;
char?str[]="This?is?a?string.";
int?int_values[]?=?{51,?23,?2,?44,?45,0,11};?
float?float_values[]?=?{15.1,?13.3,?22.2,?10.4,?1.5};??
student?st_arr[]={101,"WangLin",92,102,"LiPing",85,103,"ZhaoMin",88};
//顯示char類型數(shù)組元素及其大小
size=sizeof(str)?/?sizeof(char);
cout"Number?of?elements?in?str:?";
coutsizeendl;
for(i=0;isize;i++)?{
coutstr[i];
}
coutendl;
//顯示int類型數(shù)組元素及其大小
size=sizeof(int_values)?/?sizeof(int);
cout"Number?of?elements?in?int_values:?";
coutsizeendl;
for(i=0;isize;i++)?{
coutint_values[i]"?";
}
coutendl;
//顯示float類型數(shù)組元素及其大小
size=sizeof(float_values)?/?sizeof(float);
cout"Number?of?elements?in?float_values:?";
coutsizeendl;
for(i=0;isize;i++)?{
coutfloat_values[i]"?";
}
coutendl;
//顯示student類型數(shù)組元素及其大小
size=sizeof(st_arr)?/?sizeof(student);
cout"Number?of?elements?in?st_arr:?";
coutsizeendl;
for(i=0;isize;i++)?{
coutst_arr[i].num"?";
coutst_arr[i].name"?";
coutst_arr[i].gradeendl;
}
}
#includeiostream.h
//add()函數(shù)的定義,其有返回值
double?add(double?x,double?y)
{
double?z;
z=x+y;
coutx"+"y"="zendl;
return(z);
}
main()
{
double?a=0.5,b=1.0;
//以不同參數(shù)形式調(diào)用函數(shù)add()
cout"add(1.5,2.5)="add(1.5,2.5)endl;
cout"add(a,b)="add(a,b)endl;
cout"add(2*a,a+b)="add(2*a,a+b)endl;
cout"----------------------"endl;
//以表達(dá)式方式調(diào)用函數(shù)add()
double?c=2*add(a,b);
cout"c="cendl;
cout"----------------------"endl;
//以語句式方式調(diào)用函數(shù)add()
add(2*a,b);
cout"----------------------"endl;
//用其他類型參數(shù)調(diào)用函數(shù)add()
int?n=1,m=2;
cout"add("n","m")="add(n,m)endl;
}
#includeiostream.h
//定義符號(hào)函數(shù)sgn(),其返回值為int類型
int?sgn(double?x)
{
if?(x0)?return(1);????//返回出口1
if?(x0)?return(-1);???//返回出口2
return(0);??????????//返回出口3
}
//main()函數(shù)定義
main()
{
double?x;
int?i;
for?(i=0;i=2;i++)?{
cout"x=";
cinx;
cout"sgn("x")="sgn(x)endl;
}
}
把積分算式算出來,然后用C寫。
比如[a,b]的積分上限和下限,對(duì)x積分,就是x^2/2, 代入a,b