首页 > 解决方案 > Trapeze 与 Python 的集成

问题描述

我想做空中飞人整合。这是我的代码:

import numpy as n
import matplotlib.pyplot as plt
import math as m
import loaddataa as ld
import scipy.integrate as integrate 

dataListStride = ld.loadData("../Data/Fabienne")
indexStrideData = 0 #Daten ohne Gyrometer
strideData = dataListStride[indexStrideData]

def horizontal(yAngle, yAcceleration, xAcceleration):
    a = (m.cos(yAngle)*yAcceleration)-(m.sin(yAngle)*xAcceleration)
    return a

resultsHorizontal = list()

for i in range (len(strideData)):
    strideData_yAngle = strideData.to_numpy()[i, 2]
    strideData_xAcceleration = strideData.to_numpy()[i, 4]
    strideData_yAcceleration = strideData.to_numpy()[i, 5]
    resultsHorizontal.append(horizontal(strideData_yAngle, strideData_yAcceleration, strideData_xAcceleration))

resultsHorizontal.insert(0, 0)

print("The values are: " +str(resultsHorizontal))

print("Es gibt " +str(len(resultsHorizontal)) + " Werte.")

scale_factor = 0.01
x_values = np.arange(len(resultsHorizontal)) * scale_factor
plt.plot(x_values, resultsHorizontal)

在这里您可以看到当前输出和我想要对输出进行的所需添加:输出

在图片上的红色框中,您可以看到我接下来要做什么。例如,有没有办法以循环的形式使这更容易?

我已经尝试过了:integrate.cumtrapz(resultsHorizontal, dx=0.01)然后我再次得到一个包含 150 个值的列表,就像它应该的那样。不幸的是,只有第一个值是正确的,其余的不是。所以我必须以另一种方式来做。

应该是这样的:我想做从0到第一个值(列表resultsHorizo​​ntal中的计算值。你可以在图中看到),然后从第一个值到第二个,然后从第二到第三,依此类推,直到倒数第二个值。所以最后我的值与列表 resultsHorizo​​ntal 中的值相同。

标签: pythonarrayslistnumpy

解决方案


如果我理解正确,您想计算数组连续值之间的单个梯形区域(如果我错了,请纠正我)。为此,您可以手动计算(假设图像dx是恒定的并且值存储在arr

trapz = [(arr[i]+arr[i+1])/2*dx for i in range(len(arr)-1)]

这个列表当然会比列表短一个元素,arr因为点之间只有N-1间隔N。如果您坚持获取N这些区域的值,请进一步说明您将如何做到这一点(我认为存在歧义,特别是在边界处)。使用 numpy one 也可以将上述缩写为

trapz = (arr[:-1]+arr[1:])/2*dx

推荐阅读