辛普森公式求函数的近似积分【通用计算】

利用辛普森公式可以近似求出复杂函数的积分值,公式如下:
∫ a b f ( x ) d x ≈ h 3 [ y 0 + y 2 n − 1 + 4 ( ∑ i = 1 n − 1 y 2 i − 1 ) + ∑ i = 1 n − 1 y 2 i ] \int_{a}^{b} f(x) dx \approx \frac{h}{3}\left[ y_0 + y_{2n-1} + 4(\sum\limits_{i=1}^{n-1} y_{2i-1}) + \sum\limits_{i=1}^{n-1} y_{2i} \right] abf(x)dx3h[y0+y2n1+4(i=1n1y2i1)+i=1n1y2i]

其中 y 0 y_0 y0 y 2 n − 1 y_{2n-1} y2n1的值是原函数在等分点上的函数值。

下面是一个简单的示例:

import numpy as np


def calculate_simpson_integral(target_fun, left_zone, right_zone, zone_num):
	""" 使用辛普森规则计算积分近似值 """
	# 计算区间的步长
	step_len = (right_zone - left_zone) / zone_num
	# 在区间上生成 zone_num+1 个等距的点
	dots = np.linspace(left_zone, right_zone, zone_num + 1)
	# 求分段点的函数值
	fun_values = target_fun(dots)
	# 利用公式求近似积分值
	return step_len / 3 * (fun_values[0] + fun_values[-1] +
	                       4 * np.sum(fun_values[1:-1:2]) +
	                       2 * np.sum(fun_values[2:-2:2]))


# 测试
def integral_function(x):
	""" 定义被积函数"""
	return x ** 2


# 定义区间参数和分区数量
left_zone = 0
right_zone = 1
zone_num = 100
result = calculate_simpson_integral(integral_function, left_zone, right_zone,
                                    zone_num)

print("定积分的近似值为:", result)

你可以根据实际需要定义被积函数,然后利用calculate_simpson_integral求其在指定区间上的积分值。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值