龙空技术网

积分近似计算之辛普森公式

数言C语 209

前言:

而今姐妹们对“c语言求的近似值”可能比较讲究,咱们都想要分析一些“c语言求的近似值”的相关文章。那么小编在网摘上收集了一些对于“c语言求的近似值””的相关知识,希望小伙伴们能喜欢,朋友们一起来学习一下吧!

对于积分区间[a, b],若

则成立

辛普森公式

辛普森公式可看作是改良的梯形公式。梯形公式是以直线逼近实际曲线,而辛普森公式则以二次曲线(即抛物线)逼近。

以二次曲线逼近实际曲线

根据辛普森公式可得各积分小区间内的积分值如下式所示:

其中

于是,全积分区间[a, b]的积分值为

为便于计算机计算,上式可写成

其中

C语言程序实现辛普森公式计算积分计算积分代码

//simpson.c

#include <stdio.h>

#include <math.h>

/*函数定义*/

double f(double x)

{

return (1.0-x)*exp(-1*x);

}

/*辛普森公式计算积分*/

double simpson(

double a, double b, int n)

{

double h = (b-a)/n;

double s0,s1=0.0,s2=0.0;

double S;

double x;

int i;

s0 = f(a) + f(b);

for( i = 1; i < n; i += 2 )

{

x = a + h * i;

s1 += f(x);

}

for( i = 2; i < n; i += 2 )

{

x = a + h * i;

s2 += f(x);

}

S = h*(s0+4*s1+2*s2)/3;

return S;

}

int main(void)

{

//积分区间[a, b]

double a = -1.0, b = 1.0;

//区间分割数

int N[5]={10,20,30,50,100};

int i = 0;

for( i = 0; i < 5; i++ )

printf("[%3d等分]积分近似值:\n\

I = %.7lf\n",

N[i], simpson(a, b, N[i]));

return 0;

}

编译・执行

$ gcc -lm -o simpson simpson.c

$ ./simpson

[ 10等分]积分近似值:

I = 3.0862715

[ 20等分]积分近似值:

I = 3.0861682

[ 30等分]积分近似值:

I = 3.0861626

[ 50等分]积分近似值:

I = 3.0861614

[100等分]积分近似值:

I = 3.0861613

标签: #c语言求的近似值 #c语言计算公式的值 #c语言公式