⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 integral.c.txt

📁 Using 3 methods to integrate the function f(x) = 1/(1+x*x)
💻 TXT
字号:
//####################################################################
// Estimating PI using the fact that the integral of 1/(1+x*x) from 0
// to 1 is PI/4.
// The purpose of the program is to compare 3 different numerical
// integration methods.
//####################################################################
#include <stdio.h>
typedef double (*DfD) (double);

double midpoint_int (DfD f,
                double x0, double x1, int n)
{
  int i;
  double x, dx, sum = 0.0;
  dx = (x1-x0)/ n;
  for (i = 0, x = x0 + dx/2; i < n; i++, x += dx)
    sum += f(x);
  return sum * dx;
}

double trapezoidal_int (DfD f,
            double x0, double x1, int n){
  double x, dx, sum;
  int i;
  dx = (x1-x0)/ n;
  sum = (f(x0) + f(x1))/2;
  for (i=1,x = x0 + dx; i < n; i++, x += dx)
    sum += f(x);
  return sum * dx;
}

double simpsons_int(DfD f,
            double x0, double x1, int n){
  double x, sum, dx = (x1 - x0) / n;
  sum = f(x1) - f(x0);

  for(x = x0; x+dx/2 < x1; x += dx)
    sum += 2.0 * f(x) +
           4.0 * f(x + dx/2);

  return sum * dx / 6.0;
}

double fun(double x)
{
    return 1.0/(1+x*x);
}

int main()
{
    double x0=0, x1=1;
    int n=100;
    double mp = 4*midpoint_int(fun, x0, x1, n);
    double tz = 4*trapezoidal_int(fun, x0, x1, n);
    double si = 4*simpsons_int(fun, x0, x1, n);

    printf("midpoint:    pi= %f\n", mp);
    printf("trapezoidal: pi= %f\n", tz);
    printf("simpson:     pi= %f\n", si);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -