100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > [计算机数值分析]复化梯形的递推公式的变步长算法求积分

[计算机数值分析]复化梯形的递推公式的变步长算法求积分

时间:2022-02-16 10:50:44

相关推荐

[计算机数值分析]复化梯形的递推公式的变步长算法求积分

如下图变步长的算法框图,其中T1和T2分别代表二分前后的积分值。

问题描述: 运行示例: 源码:

#include<iostream>#include<cmath>double f(double x); //自定义函数using namespace std;int main(void){double a, b, accuracy; //a为区间下限,b为区间上限,accuracy为精度cout << "请输入积分区间:"; //输入提示cin >> a >> b;cout << "请输入精度:"; //输入提示cin >> accuracy;double h, T1, T2; //h为步长,T1为步长二分前的积分值,T2为步长二分后的积分值int i = 0; //记录步长二分次数h = b - a; //初始步长为整个区间T1 = h / 2 * (1 + f(b)); //根据梯形复化求积公式求得T1do{printf("第%d次二分步长,二分后的积分值T2 = %.7f\n", i, T1);double sum = 0; //sum为各分点的函数值的和double x = a + h / 2; //分点的值while (x < b) //未到区间上限{sum += f(x); //将分点往后区间范围内的分点函数值求和x += h; //分点往后移动(在区间上限范围内)}T2 = T1 / 2 + h / 2 * sum; //求得步长二分后的积分值//cout << "第" << i << "次二分步长,二分后的积分值T2 = " << T2 << endl;if (abs(T2 - T1) >= accuracy) //如果精度不符合要求,步长再次二分,修改T1的值为T2,继续递推{h /= 2;double temp;temp = T1;T1 = T2;T2 = temp;i++; //步长二分次数自增1}} while (abs(T2 - T1) >= accuracy);return 0;}double f(double x) //自定义被积函数{double result;result = sin(x) / x;return result;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。