用matlab cumtrapz和整合累计梯形积分

2024-05-20 17:10:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我把一些matlab代码转换成python代码并调试这两个代码我从调用cumtrapz函数得到了不同的结果,我还验证了这两个函数的输入数据是相似的。代码如下:

Python代码

from numpy import zeros, ceil, array, mean, ptp, abs, sqrt, power
from scipy.integrate import cumtrapz

def step_length_vector(ics_y, fcs_y, acc_y, l, sf):
    step_length_m1 = zeros(int(ceil(len(ics_y)/2))-1) 

    for i in range(0, len(ics_y)-2, 2):
        av = acc_y[int(ics_y[i]):int(ics_y[i+2])+1]
        t = array(range(1, int((ics_y[i+2]-ics_y[i])+2)))/sf
        hvel = cumtrapz(t, av - mean(av), initial=0)
        h = cumtrapz(t, hvel - mean(hvel), initial=0)
        hend = ptp(h)
        sl = 6.8*(sqrt(abs(2*l*hend - hend**2)))
        step_length_m1[int(ceil(i/2))] = sl

    return step_length_m1

Matlab代码

^{pr2}$

这两个代码的hvel变量不同。也许我用错了scipycumtrapz,因为我认为接收到的initial值是0。在这两种情况下,输入ics_y(ICsy)fcs_y(FCsY),acc{}都是一维数组,l和{}是标量。在

谢谢!!!在


Tags: 函数代码stepmeanlengthinitialintacc
1条回答
网友
1楼 · 发布于 2024-05-20 17:10:04

(如果这个问题是关于cumtrapz,那么应该将测试简化为使用matlab和Python中相同的输入数组对cumtrapz的单个调用。请务必仔细阅读matlab的每个函数和文档。SciPy函数通常不是相应matlab函数的精确副本。)

问题是当你同时给出x和{}值时,它们在matlab/octave中给出的顺序是x, y,但在SciPy版本中,它是y, x。在

例如

octave:11> t = [0 1 1.5 4 4.5 6]
t =

   0.00000   1.00000   1.50000   4.00000   4.50000   6.00000

octave:12> y = [1 2 3 -2 0 1]
y =

   1   2   3  -2   0   1

octave:13> cumtrapz(t, y)
ans =

   0.00000   1.50000   2.75000   4.00000   3.50000   4.25000

要获得与^{}相同的结果:

^{pr2}$

相关问题 更多 >