【问题标题】:How do I estimate the point of fracture of a curve in gnuplot如何估计gnuplot中曲线的断裂点
【发布时间】:2016-09-18 19:10:26
【问题描述】:

我想通过三元算子估计断​​裂点 (x_F)(红色圆圈),以限制我的绘图范围。

Example plot

要实现对 X(Y_max) 值的限制,stats 命令结合三元运算符似乎就足够了:

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

我不能使用 X_max 变量,因为由于测量错误,断裂点 (x_n &gt; x_F) 之外还有几个点。我的想法是将 x 条目$4 相互比较,并将满足$4_prev &gt; $4_curr 的第一个点保存为x_F=$4_prev。

【问题讨论】:

  • 您应该从问题中删除对原始机械工程问题(“骨折”)的引用,或解释它。现在的样子,简直让人迷惑。

标签: iteration gnuplot ternary-operator


【解决方案1】:

一个简单的 delta 函数似乎可以解决问题:delta(x)=(D=x-old_D,old_D=x,D) 和 old_D=NaN 结合三元运算符 (delta($4)&gt;0 ? $5 : 1/0) 而 $5 是 y 值,只要两个连续的 x 值为正数。

【讨论】:

  • 这个解决方案被证明是不够的,因为有数据点超出了我的断裂点。 plot x-数据点可以通过三元运算符轻松排除。但很明显,该条件不会在x_F 处停止,因此绘制了带有delta($4)&gt;0 的断裂点之外的数据点。我建议我需要一种循环来确定x_F 的值并将我的条件扩展到((delta($4)&gt;0) &amp;&amp; ($4 &lt;= x_F) ? $5 : 1/0). So I am back to the original question: How to determine x_F`?
【解决方案2】:

您想在 dx 第一次变为负数后丢弃任何数据点,对吗?你需要一个标志变量,我称之为broken,它是在dx &lt; 0第一次出现之后设置的:

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

这使用逗号作为“串行评估器”,与 C 等中相同。

(现在没有测试,因为我手头没有合适的数据集,也懒得创建。)

更新:您可以将作业 broken=0 放入情节中

plot broken=0, dataf us ....

,能够replot,缩放该图等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多