任务描述
计算函数曲线在区间(a,b)与x轴包围的面积,可将这个区域平行于y轴切分成相等宽度的小梯形,每个梯形的面积可近似求出,所有梯形面积的和就是函数曲线与x轴包围的面积,也就是函数在给定区间的积分值,dx越小,梯形近似度越高,计算结果越精确,也就是说区间切分段的越多,结果越精确。
计算函数sin(x)在区间(a,b)与x轴包围的面积,a,b由用户输入,区间切分多少段也由用户输入。
输入格式
输入包括两行
第一行是由空格分隔的两个实数,代表积分区间(input().split()可把空格分隔的输入切分成两部分)
第二行是一个正整数,代表切分数量
输出格式
积分值,结果保留2位小数
示例
输入:
-3.14 3.14
1000
输出:
4.00
平均代码量 10 行
图解:
总共的面积就等于1000个这样的梯形面积相加
代码
import math
a,b=map(eval,input().split())
n=int(input())
#计算切分的每个梯形的高(dx)x轴 abs函数求绝对值
dx=float(abs(b-a)/n)
S=0
#1000个梯形 梯形面积:上底+下底 * 高 /2
#高=sina -->a为起始位置
#下底=sin(a+dx) 然后依次加到下一个梯形上
for i in range(n):
sd=abs(math.sin(a))
xd=abs(math.sin(a+dx))
S+=((sd+xd)*dx/2)
a=a+dx
print('{:.2f}'.format(S))
参考:
abs函数:https://www.runoob.com/python/func-number-abs.html