在 PGFplots 中标记局部最大值并计算梯度

在 PGFplots 中标记局部最大值并计算梯度

我正在使用张力计的数据来生成应力-应变曲线,但我想找到屈服点以及测试开始与该点之间的梯度以计算杨氏模量。PGFplots 可以找到这些点并计算出来吗?阅读手册表明这可以通过和fpu数学解析库来实现,但我目前陷入困境。

这是我的 MWE:

\documentclass[tikz,border=1pt]{standalone} 
\usepackage{etoolbox}
\usepackage{csquotes}
\usepackage{xpatch}

\usepackage{amsmath}
\usepackage{unicode-math}

%% Main Font list
\setmainfont{TeX Gyre Pagella}
\setsansfont{TeX Gyre Adventor}[Scale=MatchUppercase]
\setmathfont{TeX Gyre Pagella Math}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{positioning}
\usetikzlibrary{external}
\usepgflibrary{arrows.meta}
\usepgflibrary{fpu}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\pgfplotsset{
  compat=newest,
  every tick label/.append style={font=\footnotesize},
  every axis/.append style={font=\footnotesize},
}

\usepackage{siunitx}
\usepackage{xcolor}

\pagestyle{empty}

\begin{document}

\begin{tikzpicture}
  \pgfplotstableread[col sep=comma, trim cells=true]{G21-28-tensile-data.csv}\tensiledata

  \def\initialDiameter{5.61}
  \def\initialLength{25}
  \pgfmathparse{(pi * (\initialDiameter) ^ 2)/4}
  \let\initialArea=\pgfmathresult

  \pgfplotstablecreatecol[
  create col/expr={\thisrow{Load} / \initialArea * 1000}
  ]
  {StressCalc}\tensiledata

  \pgfplotstablecreatecol[
  create col/expr={\thisrow{Extension} / \initialLength}
  ]
  {StrainCalc}\tensiledata

  \begin{axis}[
    xlabel={Strain (ε) (\si{\mm\per\mm})},
    ylabel={Stress (σ) (\si{\mega\pascal})},
    xmin=0,
    ymin=0,
    width=20cm,
    height=10cm,
    xtick pos=left,
    ytick pos=left,
    ]
    \addplot[no marks, red] table [x=StrainCalc, y=StressCalc]{\tensiledata} ;
  \end{axis}
\end{tikzpicture}

\end{document}

应力-应变图

屈服点是图形左侧峰值处的局部最大值(大约在(0.002,330)处),如果我能弄清楚如何将该点存储为坐标,我就可以使用该atan函数找到该点和(0,0)之间的梯度。

用于呈现图表的数据在这里:https://gist.github.com/zoqaeski/8e3f31866f41d3dcfe61c226f6c4a991

相关内容