Schnittpunkt zweier Graphen in Python, finde den x-Wert:

9

Sei 0 & lt; = x & lt; = 1. Ich habe zwei Spalten f und g der Länge 5000 jeweils. Jetzt plane ich:

%Vor%

Ich möchte den Punkt 'x' finden, wo die Kurve sich schneidet. Ich möchte nicht die Schnittmenge von f und g finden. Ich kann es einfach mit:

%Vor%     
Shiva Prakash 27.02.2015, 13:52
quelle

6 Antworten

34

Sie können np.sign in Kombination mit np.diff und np.argwhere verwenden, um die Indizes von Punkten zu erhalten, an denen sich die Linien kreuzen (in diesem Fall sind die Punkte [ 0, 149, 331, 448, 664, 743] ):

%Vor%

Zuerst berechnet es f - g und die entsprechenden Vorzeichen mit np.sign . Durch Anwenden von np.diff werden alle Positionen angezeigt, an denen sich das Vorzeichen ändert (z. B. die Linien kreuzen sich). Die Verwendung von np.argwhere gibt uns die genauen Indizes.

    
Matt 27.02.2015, 14:03
quelle
1

Auch wenn f und g sich schneiden, kann man nicht sicher sein, dass f [i] == g [i] für die ganze Zahl i (der Schnittpunkt tritt wahrscheinlich zwischen Punkten auf).

Sie sollten stattdessen wie

testen %Vor%     
Hugh Bothwell 27.02.2015 14:28
quelle
1

Für die Arrays f und g könnten wir einfach folgendes tun:

%Vor%

Dies ergibt die Matrix aller Kreuzungspunkte. Jede 1 ist ein Crossover von unten nach oben und jeder -1 ein Crossover von oben nach unten.

    
Pradeep Vairamani 31.10.2015 03:46
quelle
1

Nun, ich suchte nach einer Matplotlib für zwei Kurven, die sich in der Größe unterschieden und nicht die gleichen x-Werte hatten. Hier ist, was ich mir ausgedacht habe:

%Vor%     
bunkus 24.02.2017 19:03
quelle
0

Es kann mehrere Schnittpunkte geben, Sie können den Punkt (x,y) an jeder Kreuzung durch das folgende Listenverständnis finden

%Vor%

Als einfaches Beispiel

%Vor%

Es wurde also ein Schnittpunkt bei x = 3, y = 6 gefunden. Beachten Sie, dass wenn Sie float verwenden, die beiden Werte möglicherweise nicht exakt gleich sind, sodass Sie eine Toleranz anstelle von == verwenden können.

    
CoryKramer 27.02.2015 14:04
quelle
0

Der Schnitt erfolgt wahrscheinlich zwischen Punkten. Sehen wir uns das Beispiel unten an.

%Vor%

Zeichnen Sie die 2 obigen Kurven zusammen mit ihren Schnittpunkten und verwenden Sie als Schnittpunkt die Durchschnittskoordinaten vor und nach dem Vorschlag von idx Schnittpunkt, alle Punkte sind näher an der ersten Kurve .

%Vor%

verwendet als Schnittpunkt die Durchschnittskoordinaten vor und nach, aber für beide y1- und y2-Kurven sind sie normalerweise näher am wahren Schnittpunkt

%Vor%

Für eine noch genauere Schnittpunktschätzung könnten wir Interpolation verwenden.

    
Ioannis Nasios 12.02.2018 14:04
quelle

Tags und Links