C++实现定积分运算

文章目录

题目

在这里插入图片描述


代码

#include <iostream>
#include <cmath>
#include <functional>

using namespace std;

// 定积分函数
double integrate(function<double(double)> func, double a, double b, int num_intervals) {
    double h = (b - a) / num_intervals;  // 计算每个小区间的宽度
    double result = (func(a) + func(b)) / 2.0;  // 初始化结果为端点的函数值之和的一半

    // 使用梯形法则进行数值积分
    for (int i = 1; i < num_intervals; ++i) {
        double x = a + i * h;
        result += func(x);
    }

    result *= h;  // 乘以小区间宽度得到最终结果
    return result;
}

// 要积分的函数
double Func1(double x) {
    return x + 2 - x * x;
}
double Func2(double x) {
    return sqrt(1 - x * x) + x;
}
double Func3(double x) {
	double tmp = (4 - x * x);
    return sqrt(tmp * tmp * tmp);
}
double Func4(double x) {
    return sin(x);
}

function<double(double)> ReturnFunc(int op) {
	if (op == 1) return Func1;
	else if (op == 2) return Func2;
	else if (op == 3) return Func3;
	else return Func4;
}

int main() {
    int num_intervals = 1000;
	int op; 
	double a, b;
	while (cin >> op >> a >> b) {
		auto f = ReturnFunc(op);
    	double result = integrate(f, a, b, num_intervals);
		if (op != 4)
			printf("∫[%.2lf~%.2lf]f%d(x)dx=%.2lf\n", a, b, op, result);
		else {
			printf("∫[%.2lf~%.2lf]sin(x)dx=%.2lf\n", a, b, result);
		}
	}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ღCauchyོꦿ࿐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值