- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
#include iostream #include iomanip #include COMPLEX
using namespace std; typedef double TYPE; #define MAX_ROW 20
TYPE g_Interval_Lower, g_Interval_Upper; // 数值积分的区间上下限
TYPE g_Epsilon;
int g_InitalNum; // T00 中的等份区间数。
TYPE R[MAX_ROW][MAX_ROW];
TYPE T_Table[MAX_ROW * MAX_ROW]; // 下三角矩阵的一维压缩存储。
// 积分函数 f(x) 在 点 x 处的值。
TYPE func(TYPE x)
{
// 1/x 在[1,3]上积分。
return 1 / x;
// sin(x) / x 在 [0,1]上积分。if(0 == x)
return 1;
return sin(x) / x;
}
void main()
{
cout 请输入数值积分区间的下界:\n; cin g_Interval_Lower;
cout 请输入数值积分区间的上界:\n; cin g_Interval_Upper;
cout 请输入复化梯形求积公式的初始等分数:\n; cin g_InitalNum;
cout 请输入 Romberg 积分的误差上限:\n; cin g_Epsilon;
cout \n 正在开始计算 Romberg 数值积分表:\n;
TYPE h = (g_Interval_Upper - g_Interval_Lower) / g_InitalNum; int m = 1;
TYPE T00 = 0.5 * h * (func(g_Interval_Lower) + func(g_Interval_Upper)); TYPE sum = 0;
for(int k = 1; k = g_InitalNum-1; k++)
sum = sum + func(g_Interval_Lower + k * h); T00 = T00 + sum * h;
R[0][0] = T00;
// T_Table[0] = T00;
// 计算方式参考教材(《计算方法》张池平编著)第 61 页的 T 数表,逐行依次从左至右计算得到。
// 计算公式采用上课时补充的改正后的那个公式。
TYPE hk = h;
int max_Iters = g_InitalNum; int nStopRow = 0, nIndex = 0;
for(m = 1; m MAX_ROW; m++)
{
// R[0][m] 表示T 型积分 T(0)(m); sum = 0;
hk = hk * 0.5;
max_Iters = max_Iters * 2;
for(int kk = 1; kk = max_Iters / 2; kk++)
sum += func(g_Interval_Lower + (2 * kk - 1) * hk); TYPE Hn = 2* hk * sum;
R[0][m] = 0.5 * (R[0][m-1] + Hn);
// T_Table[]
nStopRow = m;
for(k = m - 1; k = 0; k--)
{ // R[m][k]表示 T 型积分 T(m)(k); int nPower4 = pow(4, m - k);
R[m - k][k] = (nPower4 * R[m-k-1][k+1] - R[m-k-1][k]) / (nPower4 - 1);
}
if(fabs(R[m][0] - R[m-1][0]) g_Epsilon)
{
nStopRow = m; break;
}
}
cout Romberg 数值积分表如下:\n; for(m = 0; m = nStopRow; m++)
{
for(k = m; k = 0; k--)
cout setprecision(10) setiosflags(ios::showpoint) setiosflags(ios::left) setw(13) R[m - k][k];
cout endl;
}
}
原创力文档


文档评论(0)