数值计算方法实验3
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
变步长梯形法的流程图:
0 ⇒ S, a +
h ⇒x 2
S + f ( x) ⇒ S , x + h ⇒ T2 2 2
1 T2 + (T2 − T1 ) ⇒ S 2 3
= k=1?
h ⇒h 2 T2 ⇒ T1 , S 2 ⇒ S1 k + 1 ⇒ k,
S2 +
1 ( S 2 − S1 ) ⇒ C 2 15
xk + 1 ,所要计算 f
2
值的次
1 I − T2 n ≈ (T2 n − Tn ) 3
1 I ≈ T2 n + (T2 n − Tn ) 3 1 (T2 n − Tn ) 3
∫ 1+ x
0
1
4
2. 积分近似值 T2n 的误差大致等于 3.
2
dx
-4
利用龙贝格积分法计算,使精确度达到 10
1 (T2 n − Tn ) 3
1 h n −1 = Tn + ∑ f ( x k + 1 ) 2 2 2 k =0
6.前一项 Tn 是二分前的积分值, 后一项只涉及二分时新增加的分点 教师签字: 教师签字: 实验目的: 实验目的: 编写变步长的梯形法则及龙贝格方法等算法程序,上机调试通过。 实验环境: 实验环境: 硬件环境:IBM-PC 或兼容机 软件环境:Windows 操作系统 编程语言:C 语言 实验内容: 实验内容: 用变步长梯形法求下列积分,使精确度达到 10-4 二. 龙贝格积分法的步骤。 1. 将积分区间分成 n 等份和 2n 等份时,求得积分近似值 Tn 和 T2n,则有误差估计式 数为 n 7.递推公式由于避免了老节点的重复计算,而使计算量减少了一半
Ik =
h f ( xk ) + 2 f ( xk + 1 ) + f ( xk +1 ) 2 4
n −1
[
]
5.对区间[a, b]因此有
T2 n = ∑ =
h f ( x k ) + 2 f ( x k + 1 ) + f ( x k +1 ) 2 k =0 4
[
]
n −1 h n −1 [ f ( x k ) + f ( x k +1 )] + h ∑ f ( x k + 12 ) ∑ 4 k =0 2 k =0
二. 龙贝格积分法 #include<stdio.h> #include<math.h> double f(double x){return sin(x);} void main(){
3
3.T2n
的全部分点中有 n + 1 个是二分前原有的点
实验报告
学院( 学院(系)名称: 名称: 姓名 班级 课程名称 实验时间 批改意见: 批改意见: 学号 实验项目 数值计算方法 专业 数值积分 课程代码 实验地点 成绩
4.每个小区间[xk , xk+1]经过二分再增加一个新分点 后,用复化梯形公式求得该区间上的积分值为
= k=2?
C 2 ⇒ C1
龙贝格积分法的流程图:
C2 +
开始
1 (C 2 − C1 ) ⇒ R2 63
= k=3?
R2 ⇒ R1
读入 a, b, ε |R2-R1|<ε?
h b − a ⇒ h, [ f (a ) + f (b)] ⇒ T1 2 1⇒ k
< 打印 R2
2
附录(源程序及运行结果) : 一. 变步长梯形法 #include<stdio.h> #include<math.h> double f(double x){return 4/(1+x*x);} void main(){ double a,b,h,T1,T2,e,S,x; printf("请输入区间 a 和 b:"); scanf("%lf,%lf",&a,&b); printf("精度:"); scanf("%lf",&e); h=b-a; T2=h/2*(f(a)+f(b)); do{ T1=T2; S=0; x=a+h/2; do{ S=S+f(x); x=x+h; }while(x<b); T2=T1/2+h*S/2; h=h/2; }while(fabs(T2-T1)>=e); printf("用变步长梯形法输出 T2:%lf\n",T2); } 运行结果:
与 T2n 之和比 T2n 更接近于真值 I
∫ sin xdx
0
1
4. 可以得到一种更好的计算积分的公式
1 4 1 T = T2 n + (T2 n − Tn ) = T2 n − Tn 3 3 3
实验步骤: 实验步骤: 一. 变步长梯形法的步骤。 思想:将区间逐次对分进行计算,用前后两次计算的结果进行估计,若合乎精度要求,就停止计 算;否则再次对分,重复以上计算过程,直至达到精度要求为止。 变步长梯形求积法的实现 1.设将区间[a, b] n 等分,共有 n + 1 个分点,按复化梯形公式计算 Tn,需要计算 n + 1 个 f (x) 的值 2.如果将求积区间再次对分,若仍然直接用复化梯形公式计算二分后的积分值 T2n 计算 2n+1 个 f(x) 的值 ,则需要 实验结果: 实验结果: 结果 一. 变步长梯形法 输入积分区间和精度后,输出结果 3.141582,根据精度要求,最终结果为:3.1416 二. 龙贝格积分法 输入积分区间和精度后,输出结果为 0.459698,根据精度要求,最终结果为:0.4597
double a,b,h,T1,T2=1,e,S,S1,S2=1,x,C1,C2,R1=0,R2=1; printf("请输入区间 a 和 b:"); scanf("%lf,%lf",&a,&b); printf("精度:"); scanf("%lf",&e); h=2*(b-a); T2=(b-a)/2*(f(a)+f(b)); int k=0; while(fabs(R2-R1)>=e){ k=k+1; h=h/2; T1=T2; S1=S2; S=0; x=a+h/2; do{S=S+f(x); x=x+h; }while(x<b); T2=T1/2+h/2*S; S2=T2+(T2-T1)/3; if(k==1){continue;} C2=S2+(S2-S1)/15; if(k==2){C1=C2;continue;} R2=C2+(C2-C1)/63; if(k==3){R1=R2;C1=C2;continue;} C1=C2; R1=R2; } printf("%lf",R2); } 运行结果: