Пересечение 2-х участков (шалфей)

не могли бы вы помочь мне найти точки пересечения на графике

import numpy as np
import matplotlib.pyplot as plt

@interact
def foo(count=(1,10,1), t=slider(100,1000,100,default=100)):

    plt.cla()    

    dt = 1/t

    x = np.arange(1, step=dt)
    xl = np.arange(1, step=.000001)

    W = np.zeros(t, np.dtype(float))

#Iteration Logarithm
    l = np.sqrt(2*xl*ln(ln(1/xl)))
    plt.plot(xl, l,'r--')    
    plt.plot(xl, -l,'r--')  

    mu, sig = 0, 1

    for ITER in range(1, count+1): #count of W[i] in plot
        for i in range(1, len(W)):
            W[i] = W[i-1] + np.random.normal(mu, sig) * np.sqrt(dt) #Wiener process
        plt.plot(x,W)            

    plt.xlabel('t',fontsize=26)
    plt.ylabel('W(t)',fontsize=26)
    plt.grid(True)
    @interact
    def _dee(deep=slider(0.0001, .4, 0.001, default=.2)): #scale
        plt.xlim(0, deep)
        plt.ylim(-.5, .5)
        plt.show()

Я использую https://cloud.sagemath.com Не могу понять, как найти точки пересечения графики . Спасибо.


person kAldown    schedule 19.05.2014    source источник


Ответы (1)


Хотя я не знаком с sage, получить точки пересечения для двух выборочных функций должно быть легко — просто вычислите разницу между ними, и пересечение будет происходить каждый раз при изменении знака.

step=0.1
x= np.arange(-5,5, step=step)

f1 = x**2  - 4
f2 = -x**2 + 4

dif= f2-f1
dif_sign= dif/np.abs(dif) #just the sign of the function
dif_sign_dif= np.diff(dif_sign) #places where the sign changes
change_idxs= np.where(dif_sign_dif!=0)[0] #indexes where the sign changes
print -5+change_idxs*step

выход:

[-2.  2.]

Однако, поскольку вы добавляете броуновское движение, время от времени вы будете получать «ложные срабатывания».

person loopbackbee    schedule 19.05.2014