matlab用辛普森公式求积分_积分近似计算之辛普森公式

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

924b6f84f601eea5b26c21a37a99143d.png

则成立

8db58256d2865a66969b864ef0e15f15.png

辛普森公式

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

08f6c4ace574ee4a6d388c7c891fdd8b.png

以二次曲线逼近实际曲线

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

2c428bfb8c9ae8c8cd52b7bd78960a3c.png

其中

6d9700d62203839619b5fb39d66df5ca.png

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

3cdb56e02e7ba3f60a0ed17de57aa47f.png

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

3a195fe50305fb5acd6f775f907a3542.png

其中

a7c99f8c8b01a8e949febbce22bcacd4.png

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

  • 计算积分
a118564c86e69355bff0658a75974fc7.png
  • 代码

//simpson.c

#include

#include

/*函数定义*/

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等分]积分近似值:

I = %.7lf

  • 1
    点赞
  • 0
    评论
  • 7
    收藏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值