1

特定のステップ関数の積分である関数を定義したばかりで、取得した三角形関数を積分したいと考えています。ここに画像の説明を入力 jerk:1,-1,1-1 一連のジャークの特定のリストに対応するステップ関数。三角形関数を取得するには、

私は次の式を使用しましたa(t)=kt+ac。k はジャーク、ac は各ステップの連続性と変化を保証する定数です。しかし、式を使用するとv(t)=(1/2)kt^2+ac*t+vc、速度に負の値が得られますが、これは正しくありません。

積分の数値を返すいくつかの scipy 関数を見つけましたが、曲線が必要です。これを統合する方法について何か考えはありますか? ありがとうございます

4

2 に答える 2

1

関数を使用できscipy.integrate.quadます...

from scipy.integrate import quad

def g(x): # your triangle function
    return abs((x+1)%2-1)

for x in (0.1*i for i in xrange(40)):
    I = quad(g, 0, x)[0]
    print "x = %f -> g(x) = %f -> I(g, 0, x) = %f" % (x, g(x), I)

それはあなたが探しているものですか?

@編集:

g 関数が離散の場合、非離散区間の積分を合計できます。

from math import floor
from scipy.integrate import quad

I = 0.0
for x in (1.0*i for i in xrange(4)):
    print "x = %f -> g(x) = %f -> I(g, 0, x) = %f" % (x, g(x), I)
    if floor(x) % 2 == 0:
        g = lambda x: 1
    else:
        g = lambda x: -1
    I += quad(g, x, x+1.0)[0]
于 2012-10-15T08:55:48.670 に答える
0

これはあなたが探しているものかもしれません:

ここに画像の説明を入力

import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

# step Function
def jerkstep(xprime,k):
    return (1 - 2*( int(xprime)%2 == 1 ) )*k

# Triangle function ( step integration)
def jerkint(x,k,ac): 
    return  integrate.quad( jerkstep ,0, x, args =(k) )[0] + ac*x

# Integrate of triangle
def jerkintint(x,k,ac,vc):
    return integrate.quad( jerkint, 0 , x , args = (1,0) )[0] + vc*x

# linearly spaced time samples (~ x axis)
t = np.linspace(2.0, 10.0, num = 100)

#optional arguments
k = 1
ac = 0
vc = 0

#output functions
jerk = np.array(t);
triangle = np.array(t);
curve = np.array(t);

# Warning : it can be long ( integration not optimized )
for indice,time in zip(range(len(t)),t): # Double indexation on t indices and t values
    print "Time, in seconds : ", time

    jerk[indice] = jerkstep(time,k)
    print "Step function : " , jerk[indice]

    triangle[indice] =jerkint(time,k,ac)
    print "Step function integrate ( = triangle ) : " , triangle[indice]

    curve[indice] = jerkintint(time,k,ac,vc)
    print "Step function double integrate ( = triangle integrate ) : " , curve[indice]
    print "\n"


# plot figure in mathplotlib
fig, axs = plt.subplots(3, 1, sharex=True, sharey=False)
axs[0].plot(t, jerk, 'o-', label=str("Step Function"))
axs[1].plot(t, triangle, 'o-' , label=str("Triangle Function"))
axs[2].plot(t, curve, 'o-' , label=str("Curve Function"))
fig.show()
plt.show()
于 2012-10-15T09:10:57.843 に答える