Zeigen Sie den Schnittpunkt von zwei Kurven
Wenn ich zwei Grundstücke definiert, die durch zwei verschiedene Gleichungen:
x = 0:0.01:30;
y1 = x .^2 + 2;
y2 = x .^3 ;
und ich rechnete diese als
plot(x, y1, x, y2);
Wie bekomme ich einen kleinen ring um den Schnittpunkt programmgesteuert (wie in der folgenden Zeichnung)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie haben, um den Schnittpunkt (px, py) manuell:
Denken Sie daran, dass wir vergleichen zwei zahlen in Gleitkommadarstellung, so dass anstelle von
y1 == y2
wir müssen einen Toleranz. Ich habe es gewählt, alseps
, aber es ist bis zu Ihnen zu entscheiden.Zeichnen Sie einen Kreis um diesen Punkt, können Sie berechnen Sie Ihre Punkte und dann zeichnen Sie, aber ein besserer Ansatz wäre die Handlung einen Punkt mit einem aufgeblasenen Kreis-marker (Kredit Jonas für diesen Vorschlag):
Diese Weise die Dimensionen des Kreises sind nicht betroffen durch die Achsen und die Seitenverhältnisse des Plots.
Beispiel
Diese sollte die folgenden plot:
plot(px,py,'or','MarkerSize',18)
zu zeichnen einen Kreis, ist kreisrund, unabhängig von dem Seitenverhältnis der Handlung.In deinem Beispiel, wenn Sie haben x, y1 und y2
Was Sie tun können, ist
Wenn Sie x1, y1 und x2, y2, wobei x1 ~= x2
könnten Sie zunächst eine 1D-interpolation mit
dann bewerben Sie sich
[~,ix]=min(abs(y1-y2));
Hervorragenden Beitrag von @EitanT, jedoch möchte ich ergänzen dieses mit einem anderen (automatisierten) Weg zu finden, den Schnittpunkt (Vorausgesetzt es gibt eine und die Graphen Verhalten sich nett).
Hier ist unser Ausgangspunkt:
Wir prüfen zunächst, ob diese Werte exakt gleich, für nicht-floating-point-nicht-diskrete Situationen, dies sollte ausreichend sein:
Wenn Sie nicht aufgezeichnet zu werden, genau gleich ist, wird ein Schnittpunkt tritt auf, wenn eine übertrifft die andere, daher betrachten wir den Unterschied:
Zusammen zu fassen diese in kompakter form, ohne zusätzliche Variablen würde ich empfehlen:
Vor allem, wenn die Kenntnis der Funktionen der symbolic math toolbox kann verwendet werden.
Verwenden
vpa(intersection)
um ihn in eine Zahl umzuwandeln oderdouble(intersection)
zu konvertieren, um ein floating-point-Wert.Last but not least, vielleicht der sauberste Weg, um dies zu tun, ist der Befehl polyxpoly:
Glück!