本篇文章给大家谈谈c语言龙贝格求积,以及龙贝格求积公式c语言对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、龙贝格求积公式的算法2、c语言编程龙贝格积分算法3、C语言如何求定积分?4、龙贝格求积,c语言代码
龙贝格求积公式的算法
对区间[a, b],令h=b-a构造梯形值序列{T2K}。
T1=h[f(a)+f(b)]/2
把区间二等分,每个小区间长度为 h/2=(b-a)/2,于是
T2 =T1/2+[h/2]f(a+h/2)
把区间四(2)等分,每个小区间长度为h/2 =(b-a)/4,于是
T4 =T2/2+[h/2][f(a+h/4)+f(a+3h/4)…………………
把[a,b] 2等分,分点xi=a+(b-a)/ 2 ·i (i =0,1,2 · · · 2k)每个小区间长度为(b-a)/ 2 .
例:
I = ∫(4/(1+X) )dx 积分区间为0到1.
解 按上述五步计算,此处 f(x)=4/(1+x) a=0 b=1 f(0)=4 f(1)=2
由梯形公式得
T1=1/2[f(0)+f(1)]=3
计算f(1/2)=16/5 用变步长梯形公式得
T2=1/2[T1+f(1/2)]=3.1
由加速公式得
S1=1/3(4T2-T1)=3.133333333
求出f(1/4) f(3/4) 进而求得
T4=1/2{T2+1/2[f(1/4)+f(3/4)]}
=3.131176471
S2=1/3(4T4-T2)=3.141568628
C1=1/15(16S2-S1)=3.142117648
计算f(1/8) f(3/8) f(5/8) f(7/8)进而求得
T8=1/2{T4+1/4[f(1/8)+f(3/8)+f(5/8)+f(7/8)]}
=3.138988495
S4=1/3(4T8-T4)=3.141592503
C2=1/15(16S4-S2)=3.141594095
R1=1/63(64C2-C1)=3.141585784
把区间再二分,重复上述步骤算得
T16=3.140941613 S8=3.141592652
C4=3.141592662 R2=3.141592640
由于 |R1-R2|=0.00001,计算可停止,取R2=3.14159 N Tn Sn Cn Rn 1 3 3.133333333 3.142117648 3.141585784 2 3.1 3.141568628 3.141594095 3.141592640 4 3.131176471 3.141592503 3.141592662 8 3.138988495 3.141592652 16 3.140941613
c语言编程龙贝格积分算法
这个程序,我正好在学计算方法的时候写过,直接贴代码
C++实现如下:
#includeiostream
#includecmath
using namespace std;
const int MAXRepeat = 100; //最大允许重复
double function(double x)//被积函数,根据自己的需要手工输入
{
double s;
s = 1.0 / (1 + x);
return s;
}
void Romberg(double a, double b, double epsion, double f(double x))
{
int m = 1;
int n = 1;
int k;
double h;
double ep;
double p;
double xk;
double s;
double q;
double T[MAXRepeat];
h = b – a;
T[0] = 0.5 * h * (f(a) + f(b));
ep = epsion + 1.0;
while ((ep = epsion) (m MAXRepeat))
{
p = 0.0;
for (k = 0; k n; k++)
{
xk = a + (k + 0.5) * h; // n-1
p = p + f(xk); //计算∑f(xk+h/2),T
} // k=0
p = (T[0] + h * p) / 2.0; //T`m`(h/2),变步长梯形求积公式
s = 1.0;
for (k = 1; k = m; k++)
{
s = 4.0 * s; //[pow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m)-1],2m阶牛顿柯斯特公式,即龙贝格公式
q = (s * p – T[k – 1]) / (s – 1.0);
T[k-1] = p;
p = q;
}
ep = fabs(q – T[m – 1]);
m++;
T[m – 1] = q;
n++; // 2 4 8 16
h /= 2.0;
}
for (int i = 0; i m; i++)
{
int j;
if (!(i % j))
{
coutT[i]endl;
}
else
{
coutT[i]” “;
}
j++;
}
}
int main()
{
double a;
double b;
double epsion;
cout”Please input the lower limit: “;
cina;
cout”Please input the upper limit: “;
cinb;
cout”Please input the precision : “;
cinepsion;
Romberg( a, b, epsion, function);
return 0;
}
希望对您有所帮助!!!
C语言如何求定积分?
4.龙贝格求积公式,求解定积分
C/C++ code
#includestdio.h
#includemath.h
#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;in;i++)
sum+=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;mMAX;m++)
{ for(i=0;im;i++)
T[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)(T[m-1][1]T[m][1]-e))
{ printf(“Answer=%f\n”,T[m][1]); getch();
return ;
}
}
}
6. 牛顿-科特斯求积公式,求定积分
C/C++ code
#includestdio.h
#includemath.h
int NC(a,h,n,r,f)
float (*a)[];
float h;
int n,f;
float *r;
{ int nn,i;
float ds;
if(n1000||n2)
{ if (f)
printf(“\n Faild! Check if 1n1000!\n”,n);
return(-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(nnn)
*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();
}
看看这个或许有帮助
龙贝格求积,c语言代码
#includeiostream.h
#includemath.h
# define Precision 0.000001//积分精度要求
# define e 2.71828183
#define MAXRepeat 10 //最大允许重复
double function(double x)//被积函数
{
double s;
s=pow(e,x)*cos(x);
return s;
}
double Romberg(double a,double b,double f(double x))
{
int m,n,k;
double y[MAXRepeat],h,ep,p,xk,s,q;
h=b-a;
y[0]=h*(f(a)+f(b))/2.0;//计算T`1`(h)=1/2(b-a)(f(a)+f(b));
m=1;
n=1;
ep=Precision+1;
while((ep=Precision)(mMAXRepeat))
{
p=0.0;
for(k=0;kn;k++)
{
xk=a+(k+0.5)*h; // n-1
p=p+f(xk); //计算∑f(xk+h/2),T
} // k=0
p=(y[0]+h*p)/2.0; //T`m`(h/2),变步长梯形求积公式
s=1.0;
for(k=1;k=m;k++)
{
s=4.0*s;// pow(4,m)
q=(s*p-y[k-1])/(s-1.0);//[pow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m)-1],2m阶牛顿柯斯特公式,即龙贝格公式
y[k-1]=p;
p=q;
}
ep=fabs(q-y[m-1]);//前后两步计算结果比较求精度
m=m+1;
y[m-1]=q;
n=n+n; // 2 4 8 16
h=h/2.0;//二倍分割区间
}
return q;
}
main()
{
double a,b,Result;
cout”请输入积分下限:”endl;
cina;
cout”请输入积分上限:”endl;
cinb;
Result=Romberg( a, b, function);
cout”龙贝格积分结果:”Resultendl;
return 0;
}
本文来自CSDN博客,转载请标明出处:
c语言龙贝格求积的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于龙贝格求积公式c语言、c语言龙贝格求积的信息别忘了在本站进行查找喔。