C语言如何求定积分?

求1/(x+x^3),区间在1-2上.急求!!!
2024-11-16 05:58:55
推荐回答(4个)
回答1:

4.龙贝格求积公式,求解定积分
C/C++ code
#include
#include
#define f(x) (sin(x)/x)
#define N 20
#define MAX 20
#define a 2
#define b 4
#define e 0.00001
float LBG(float p,float q,int n)
{ int i;
float sum=0,h=(q-p)/n;
for (i=1;isum+=f(p+i*h);
sum+=(f(p)+f(q))/2;
return(h*sum);
}
void main()
{ int i;
int n=N,m=0;
float T[MAX+1][2];
T[0][1]=LBG(a,b,n);
n*=2;
for(m=1;m{ for(i=0;iT[i][0]=T[i][1];
T[0][1]=LBG(a,b,n);
n*=2;
for(i=1;i<=m;i++)
T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
if((T[m-1][1]T[m][1]-e))
{ printf("Answer=%f\n",T[m][1]); getch();
return ;
}
}
}
6. 牛顿-科特斯求积公式,求定积分
C/C++ code
#include
#include
int NC(a,h,n,r,f)
float (*a)[];
float h;
int n,f;
float *r;
{ int nn,i;
float ds;
if(n>1000||n<2)
{ if (f)
printf("\n Faild! Check if 1return(-1);
}
if(n==2)
{ *r=0.5*((*a)[0]+(*a)[1])*(h);
return(0);
}
if (n-4==0)
{ *r=0;
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
return(0);
}
if(n/2-(n-1)/2<=0)
nn=n;
else
nn=n-3;
ds=(*a)[0]-(*a)[nn-1];
for(i=2;i<=nn;i=i+2)
ds=ds+4*(*a)[i-1]+2*(*a)[i];
*r=ds*(h)/3;
if(n>nn)
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
return(0);
}
main()
{
float h,r;
int n,ntf,f;
int i;
float a[16];
printf("Input the x[i](16):\n");
for(i=0;i<=15;i++)
scanf("%d",&a[i]);
h=0.2;
f=0;
ntf=NC(a,h,n,&r,f);
if(ntf==0)
printf("\nR=%f\n",r);
else
printf("\n Wrong!Return code=%d\n",ntf);
getch();
}
看看这个或许有帮助

回答2:

4.龙贝格求积公式,求解定积分
C/C++
code
#include
#include
#define
f(x)
(sin(x)/x)
#define
N
20
#define
MAX
20
#define
a
2
#define
b
4
#define
e
0.00001
float
LBG(float
p,float
q,int
n)
{
int
i;
float
sum=0,h=(q-p)/n;
for
(i=1;isum+=f(p+i*h);
sum+=(f(p)+f(q))/2;
return(h*sum);
}
void
main()
{
int
i;
int
n=N,m=0;
float
T[MAX+1][2];
T[0][1]=LBG(a,b,n);
n*=2;
for(m=1;m{
for(i=0;iT[i][0]=T[i][1];
T[0][1]=LBG(a,b,n);
n*=2;
for(i=1;i<=m;i++)
T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
if((T[m-1][1]T[m][1]-e))
{
printf("Answer=%f\n",T[m][1]);
getch();
return
;
}
}
}
6.
牛顿-科特斯求积公式,求定积分
C/C++
code
#include
#include
int
NC(a,h,n,r,f)
float
(*a)[];
float
h;
int
n,f;
float
*r;
{
int
nn,i;
float
ds;
if(n>1000||n<2)
{
if
(f)
printf("\n
Faild!
Check
if
1return(-1);
}
if(n==2)
{
*r=0.5*((*a)[0]+(*a)[1])*(h);
return(0);
}
if
(n-4==0)
{
*r=0;
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
return(0);
}
if(n/2-(n-1)/2<=0)
nn=n;
else
nn=n-3;
ds=(*a)[0]-(*a)[nn-1];
for(i=2;i<=nn;i=i+2)
ds=ds+4*(*a)[i-1]+2*(*a)[i];
*r=ds*(h)/3;
if(n>nn)
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
return(0);
}
main()
{
float
h,r;
int
n,ntf,f;
int
i;
float
a[16];
printf("Input
the
x[i](16):\n");
for(i=0;i<=15;i++)
scanf("%d",&a[i]);
h=0.2;
f=0;
ntf=NC(a,h,n,&r,f);
if(ntf==0)
printf("\nR=%f\n",r);
else
printf("\n
Wrong!Return
code=%d\n",ntf);
getch();
}
看看这个或许有帮助

回答3:

#include
#include
#define
TT
(3.141592627)
void
main()
{
int
i,n;
double
a,b,h,s1,s2,s3,s=0;
//scanf("%f,%f,%d",&a,&b,&n);
a
=
0;
b
=
TT/2;
n=
100;
h=(b-a)/n;
s1=sin(a);s2=sin(b);
for(i=1;i<=n;i++)
{
//
s=s+sin(a+(i-1))*h+sin(a+i*h);
s=s
+
sin(a
+
i
*
h);
}
//s3=(s1+2*s-s2)*h/2;
s3
=
(s
*
2
+
sin(a)
-
sin(b))
*
h
/
2;
printf("s=%f\n",s3);
}
你再消化一下
TT的值可能的再精确点
才完事。

回答4:

#include
using
namespace
std;
#define
min
0
#define
max
1.0
inline
double
f(double
x)
{
return
x*x;
}
double
ladder(int
n)//用梯形法求积分
{
double
width=(max-min)/n;
double
sum=0;
for
(double
d=min;d
>n;
if
(cin.good()&&n>0)
break;
cout<<"输入错误,请重新输入:";
cin.clear();
cin.sync();
}
cout<<"梯形法积分为:"<
评论
0
0
0
加载更多