跪求c语言(不是c++)编程龙贝格求积分代码
答案:1 悬赏:40 手机版
解决时间 2021-04-26 20:09
- 提问者网友:姑娘长的好罪过
- 2021-04-26 11:26
跪求c语言(不是c++)编程龙贝格求积分代码
最佳答案
- 五星知识达人网友:人间朝暮
- 2021-04-26 12:41
#include
#include
#include
double fx(double x)//被积函数
{
if(x==0)return 1;
return sin(x)/x;
}
double getS(double a,double b,double h)
{
double res=0.0;
double i;
for(i=a+h/2.0; i res+=fx(i);
return res;
}
double Romberg(double a,double b,double e)
{//龙贝格积分,在区间[a,b]上积分,误差为e
int k=1;
double T1,T2,S1,S2,C1,C2,R1,R2;
double h=b-a;
double s;
T1=(fx(a)+fx(b))*h/2.0;
int counter=0;//循环上限
while(1)
{
counter++;
s=getS(a,b,h);
T2=(T1+h*s)/2.0;
S2=(4.0*T2-T1)/3.0;
h/=2.0;
T1=T2;
S1=S2;
C1=C2;
R1=R2;
if(k==1)
{
k++;
continue;
}
C2=(16.0*S2-S1)/15.0;
if(k==2)
{
k++;
continue;
}
R2=(64.0*C2-C1)/63.0;
if(k==3)
{
k++;
continue;
}
if(fabs(R1-R2)=100)break;
}
return R2;
}
int main()
{
printf("%lf
",Romberg(-1,1,0.00000001));
return 0;
}追问大神,求解各算法步骤及其功能,万分感谢
#include
#include
double fx(double x)//被积函数
{
if(x==0)return 1;
return sin(x)/x;
}
double getS(double a,double b,double h)
{
double res=0.0;
double i;
for(i=a+h/2.0; i res+=fx(i);
return res;
}
double Romberg(double a,double b,double e)
{//龙贝格积分,在区间[a,b]上积分,误差为e
int k=1;
double T1,T2,S1,S2,C1,C2,R1,R2;
double h=b-a;
double s;
T1=(fx(a)+fx(b))*h/2.0;
int counter=0;//循环上限
while(1)
{
counter++;
s=getS(a,b,h);
T2=(T1+h*s)/2.0;
S2=(4.0*T2-T1)/3.0;
h/=2.0;
T1=T2;
S1=S2;
C1=C2;
R1=R2;
if(k==1)
{
k++;
continue;
}
C2=(16.0*S2-S1)/15.0;
if(k==2)
{
k++;
continue;
}
R2=(64.0*C2-C1)/63.0;
if(k==3)
{
k++;
continue;
}
if(fabs(R1-R2)
}
return R2;
}
int main()
{
printf("%lf
",Romberg(-1,1,0.00000001));
return 0;
}追问大神,求解各算法步骤及其功能,万分感谢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯