前言:
本文计算离散点微分和积分的内容,参考的是origin软件提供的算法。
鉴于在百度和谷歌搜索标题的结果不尽人意,因此想在此做一个详细的总结。
若阅读时间有限,可直接阅读第二或第三部分的代码及其运行结果。
若有疑问或者错误,欢迎评论区留言提问或者指正,谢谢。
一、原理解释
【微分部分】
大致含义:对于端点以外的散点,其导数为:与其相邻两点的斜率的平均值; 而位于端点的散点,其导数为:与其最近一点的斜率。
![Origin中计算离散点导数的计算公式](https://img-blog.csdnimg.cn/20200827230129753.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dvb2RDb2RlVnNCYWRCcw==,size_16,color_FFFFFF,t_70)
【积分部分】
大致含义:两点之间的积分,为两点连线,和两点对x轴的垂线,以及两垂足之间的线段所组成的梯形的面积。本文咱不探讨存在水平线baseline的情况下散点积分的数学面积(面积可正可负)与绝对面积(恒为正),感兴趣的读者可以点击参考文献4去阅读。
![Origin中计算离散点积分的计算公式](https://img-blog.csdnimg.cn/20200827230423931.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dvb2RDb2RlVnNCYWRCcw==,size_16,color_FFFFFF,t_70)
注解:
1.梯形面积公式 = 1/2 * (上底+下底) * 高
2.x(i+1) - x(i)(含有i的括号内的式子均为下标):表示梯形的高
3.f(x(i+1))+f(x(i))(含有i的括号内的式子均为下标):表示梯形上下底之和
二、纯代码:
【微分部分】
# 定义计算离散点导数的函数
def cal_deriv(x, y): # x, y的类型均为列表
diff_x = [] # 用来存储x列表中的两数之差
for i, j in zip(x[0::], x[1::]):
diff_x.append(j - i)
diff_y = [] # 用来存储y列表中的两数之差
for i, j in zip(y[0::], y[1::]):
diff_y.append(j - i)
slopes = [] # 用来存储斜率
for i in range(len(diff_y)):
slopes.ap