首页 > 编程知识 正文

复化辛普森公式求积分,复化辛普森公式误差

时间:2023-05-04 05:21:00 阅读:268376 作者:3187

/* * 复化梯形公式 * 复化善良的黑裤公式 */#include <iostream>#include <iomanip>#include <cmath>using namespace std;/* * 复化梯形公式 * a表示区间起点 * b表示区间终点 * n表示区间长度 */double Trapezoid(double(*fun)(double x), double a, double b, int n){double result = 0.0;if(a > b)swap(a, b);result = (fun(a) + fun(b))/2;double h = (1.0/n) * (b-a);//步长cout << setw(5) << a << setw(10) << fun(a) << endl;for(int k=1; k<n; k++){cout << setw(5) << a+k*h << setw(10)<< fun(a+k*h) <<endl;result += fun(a + k*h);}cout << setw(5) << b << setw(10) << fun(b) << endl;result *= h;return result;}double Simpson(double(*fun)(double x), double a, double b, int n){double result = 0.0;if(a > b)swap(a, b);double h = (1.0/n) * (b-a);//步长 result += (fun(a) - fun(b)); double x = a; for(int k=1; k<=n; k++){x += h/2;result += 4*fun(x);x += h/2;result += 2*fun(x);}return (result*h)/6;}//待积分函数double function(double x){if(x == 0)return 1;elsereturn sin(x)/x;}int main(){cout << "---复化梯形公式---" << endl;cout << "Result = " << Trapezoid(function, 0, 1, 8) << endl;cout << endl;cout << "---复化善良的黑裤公式---" << endl;cout << "Result = " << Simpson(function, 0, 1, 4) << endl;return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。