2016-05-21 14 views
0

Ich möchte den Bruchpunkt (x_F) (roter Kreis) über ternären Operator schätzen, um den Bereich meiner Handlung darauf zu beschränken.Wie schätze ich den Bruchpunkt einer Kurve in gnuplot

Example plot

Um eine Beschränkung auf die X (Y_max) -Wertes die Statistiken Befehl in Kombination mit ternärem Operator zu erreichen scheint ausreichend zu sein:

stats 'foo.csv' u 5 nooutput name 'Y_' 
stats 'foo.csv' u 4 every ::Y_index_max::Y_index_max nooutput 
X_max = STATS_max 
plot 'foo.csv' u 4:(($4 <= X_max) ? $5 : 1/0) w l notitle 

ich die X_max- verwenden, kann nicht variabel, weil dort mehrere Punkte hinter dem Bruchpunkt liegen() aufgrund von Messfehlern. Meine Idee war, die x-Einträge $4 miteinander zu vergleichen und den ersten Punkt, der $4_prev > $4_curr erfüllt, zu speichern und als x_F=$4_prev zu speichern.

+0

Sie sollten den Verweis auf Ihre ursprüngliche Maschinenbau-Problem ("Fraktur") aus der Frage entfernen, * oder * erklären. So wie es jetzt ist, es ist nur verwirrend. – Karl

Antwort

0

Eine einfache delta-Funktion scheint den Trick zu tun: delta(x)=(D=x-old_D,old_D=x,D) und old_D=NaN in Kombination mit dem ternären Operator (delta($4)>0 ? $5 : 1/0) während $5 ist der y-Wert, der so lang wie die Differenz von zwei Sequent x-Werten aufgetragen wird, ist positiv .

+0

Diese Lösung erwies sich als nicht ausreichend, da es Datenpunkte gibt, die über meinen Bruchpunkt hinausgehen. [plot] (http://i.stack.imgur.com/oSSRk.png) Die _x_-Datenpunkte können über den Ternäroperator leicht ausgeschlossen werden. Aber offensichtlich hört die Bedingung nicht bei "x_F" auf und daher sind die Datenpunkte jenseits des Bruchpunktes mit einem "Delta ($ 4)> 0" geplottet. Ich schlage vor, ich brauche eine Art Schleife, um den Wert von 'x_F' zu bestimmen und meine Bedingung auf' ((delta ($ 4)> 0) && ($ 4 <= x_F) zu erweitern? $ 5: 1/0) . Also bin ich zurück auf die ursprüngliche Frage: Wie bestimmt man 'x_F'? – hundmitperuecke

0

Sie möchten jeden Datenpunkt verwerfen, nachdem dx zum ersten Mal negativ geworden ist, oder? Sie erhalten eine Flagvariable brauchen, ich es broken genannt, die nach dem ersten Auftreten von dx < 0 gesetzt:

broken = 0 
plot dataf us (lastx=thisx, thisx=$4): \ 
    (broken ? 1/0 :($4 < lastx) ? $5 : (broken=1, 1/0)) 

Dies das Komma als „serial Evaluator“ verwendet, genau wie in C usw.

(nicht jetzt getestet, wie ich bei der Hand gesetzt keine geeignete Daten haben und war zu faul, zu erstellen.)

Update: Sie haben die Zuordnung setzen kann gebrochen = 0 in die Handlung

plot broken=0, dataf us .... 

, um replot, zoomen Sie das Grundstück usw.