实验五:Romberg算法

实验五:Romberg算法

上一次实验课我们练习使用复化求积公式的使用,先来看一下上一次实验课的内容:
实验内容:将[0,1]区间4等分,仅有等分点的函数值,分别用复化梯形公式、复化Simpson公式和复化Cotes公式计算定积分I=∫_01▒1/(1+x2 )dx的近似值.
实验结果:
复化梯形公式求得此定积分的近似值为:0.782794
复化Simpson公式求得此定积分的近似值为:0.785398
复化Cotes公式求得此定积分的近似值为:0.785529
本节课我们练习使用Romberg算法计算定积分I=∫_01▒1/(1+x2 )dx的近似值,要求误差小于10-6。
实验步骤:可以按照书上的学习步骤,先按不同的二分区间计算梯形公式的计算结果,可以先计算到T8,然后再得到S序列、C序列和R序列,误差的判断只需要判断两次的结果之间的误差就可以。

#include <stdio.h>
#include <math.h>
# define f(x) 1/(1+x*x)
void main()
{
	double t[5][5],a=0,b=1,temp,h,add;
    int n,k=0;
	t[0][0]=(b-a)*(f(a)+f(b))/2;
	for(k=1;k<=4;k++)
	{
		n=int(pow(2,k));//n表示区间份数
		h=(b-a)/n;//h表示二分k次后的区间宽度
		t[k][0]=t[k-1][0]/2;
		add=pow(2,k-1);//add 表示每段区间新增加的节点
		for(int m=1;m<=add;m++)
		{
			temp=(m-1)*(2*h)+h;
			t[k][0]+=(h*f(temp));
		}
	}//这一段是变步长的梯形公式
	 /*for(int i=0;i<=4;i++)
	printf("t[%d][0]=%f\n",i,t[i][0]);*/
	//接下来这一段是完成加速
	for(int j=1;j<=4;j++)//j表示列号
	{
		for(int i=j;i<=4;i++)//i表示行号
		{
			t[i][j]=(        );
		}
		
	}
	//这一段是按列输出结果
	for(j=0;j<=4;j++)
	{
		for(int i=j;i<=4;i++)
		{
			printf("t[%d][%d]=%f\n",i,j,t[i][j]);
			
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值