c语言编程定积分lnx,C语言用辛普森公式求lnx在0到100上的定积分的源程序

c语言编程定积分lnx,C语言用辛普森公式求lnx在0到100上的定积分的源程序

有用点击右侧采纳即可!
代码如下:

#include <math.h>
#include <stdio.h>

double simpson(double (*f)(double), double a, double b, int n) {
    double h = (b - a) / (2 * n);
    double sum = f(a) + f(b);
    for (int i = 1; i <= n; i++) {
        double x = a + 2 * i * h;
        sum += 2 * f(x);
    }
    for (int i = 1; i < n; i++) {
        double x = a + (2 * i - 1) * h;
        sum += 4 * f(x);
    }
    return sum * h / 3;
}

double ln(double x) {
    return log(x);
}

double sinx(double x) {
    return sin(x);
}

int main() {
    int n = 10000;
    double a = 0, b = 100;
    double result = simpson(ln, a, b, n);
    printf("lnx在0到100上的定积分的近似值为: %.15lf\n", result);
    result = simpson(sinx, a, b, n);
    printf("sinx在0到100上的定积分的近似值为: %.15lf\n", result);
    return 0;
}




```c
#include <stdio.h>
#include <math.h>

#define PI 3.1415926535

double f1(double x) {
    return log(x);
}

double f2(double x) {
    return sin(x);
}

double simpson(double (*f)(double), double a, double b, int n) {
    double h = (b - a) / (2 * n);
    double sum = 0;
    int i;
    for (i = 0; i <= 2 * n; i++) {
        if (i == 0 || i == 2 * n) {
            sum += f(a + i * h);
        } else if (i % 2 == 0) {
            sum += 2 * f(a + i * h);
        } else {
            sum += 4 * f(a + i * h);
        }
    }
    return h / 3 * sum;
}

int main() {
    double a = 1;
    double b = 3;
    int n = 100;

    double result1 = simpson(f1, a, b, n);
    double result2 = simpson(f2, 0, PI / 2, n);

    printf("The definite integral of ln(x) from %f to %f is approximately %f\n", a, b, result1);
    printf("The definite integral of sin(x) from %f to %f is approximately %f\n", 0, PI / 2, result2);

    return 0;
}


```