📄 sinpson.txt
字号:
题目:
用变步长辛卜生求积法求解:
算法分析:
设定积分为
要求误差小于e
如下:
令h=(b-a)/2,s0=f(a)+f(b),s1=f(a+b)
s2=0,s=(s0+4s1)h/3,n=1
L: 令h=h/2;n=2n;s2=s1+s2,s1=0
对i=1~~n令s1=s1+f(a-h+2ih)
令s*=(s0+4s1+2s2)h/3 d=|s*-s|/15,s=s*
若|D|>ε则转到L 否则 输出S并停止计算。
源程序:
#include <stdio.h>
#include <math.h>
void main()
{
double x1,xh,eps,Result;
double Simpson_VariStep(double x1,double xh,double eps);
x1=0; //积分区间下限
xh=3.14159265/2; //积分区间上限
eps=1.0e-5; //精度要求
Result=Simpson_VariStep(x1,xh,eps);
printf("\n Result =%f",Result);
}
double AFunction(double x);
double Simpson_VariStep(double x1,double xh,double eps)
{
double AFunction();
int subs ,n,i;
double result,s1,t1,s2,t2,x,p,width;
n=1;
width=xh-x1;
t1=width*(AFunction(x1)+AFunction(xh))/2.0;
s1=t1;
s2=s1+2.0*eps;
subs=1;
while(subs)
{
p=0.0;
for(i=0;i<=n-1;++i)
{
x=x1+(i+0.5)*width;
p=p+AFunction(x);
}
t2=(t1+width*p)/2.0;
s2=(4*t2-t1)/3.0;
result=s2;
subs=fabs(s2-s1)>=eps;
t1=t2;
n=n+n;
width=width/2.0;
s1=s2;
}
return (s2);
}
double AFunction( double x)//被积函数
{
double result ;
result =sin(x)/x;
return (result);
}
结果: p = 1.3708
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -