使用 TiKz 绘制具有多个参数的函数

使用 TiKz 绘制具有多个参数的函数

我需要绘制具有多个给定参数的函数: 在此处输入图片描述

编辑

代码几乎完成了,但我有一个小而棘手的问题,实线应该从 y=3 开始(就像虚线一样),现在略高于 3。这是我的图: 在此处输入图片描述

这是预期的:

在此处输入图片描述

我已经检查了代码好几个小时,但我找不到导致这种差异的错误,而这种差异对我来说太重要了,有人能帮我吗?这是我的代码:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots} 
\pgfplotsset{compat=1.17} 
\pgfplotsset{every non boxed x axis/.append style={x axis line style=-},
     every non boxed y axis/.append style={y axis line style=-}}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} 
\begin{axis}[xlabel={signal},
            ylabel={equilibrium bid},
            axis lines=left,
            declare function={H(\x,\n,\a,\b,\R)=
            pow(\R,(\b*(\n-1)+1))*%0
            pow(((\n*\b)+\a-1),(\b*(\n-1)))*%0
            pow(((\n*\b)+\a),(-\b*(\n-1)))*%0
            pow((\x),(-\b*(\n-1)))+(((\n*\b)+\a)/((\n*\b)+\a-1))*\x*%1
            ((\n-1)*\b)/((((\n-1)*\b)+1))*%0
            (1-pow(\R,((\b*(\n-1))+1))*%1
            pow(((\n*\b)+\a-1),(\b*(\n-1)+1))*%0
            pow(((\n*\b)+\a),((-\b*(\n-1))-1))*%0
            pow((\x),((-\b*(\n-1))-1)));},%-1
            domain=2.1:2.7,no marks,samples=11
            ,smooth, ytick distance=0.01, ymin=2.995, ymax=3.055, xmin=2.1, xmax=2.7] 
 \addplot[color=black, domain=2.1429:2.7]{H(x,2,2.5,0.5,3)}; 
 \addplot[color=black, dashed, domain=2.25:2.7]{H(x,3,2.5,0.5,3)}; 
\end{axis} 
\end{tikzpicture}
\end{figure}
\end{document}

我检查了括号和乘法符号很多次,但确实找不到我的错误。

我很感激任何建议或修改,因为我真的需要得出这个结果。函数公式在文章的开头,也许那里有错误,但我找不到它。

答案1

您可以定义多个变量的函数,并将其中一个变量(或它们的组合)作为绘图变量,就像在任何(其他)计算机代数系统中一样。我没有动力输入您的完整函数,而只是“只”输入第一个项,但这足以说明这一点。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[declare function={H(\x,\n,\a,\b,\R)=pow(\R,\b*(\n-1)+1)*
pow(\n*\b+\a-1,\b*(\n-1))*pow(\n*\b+\a,-\b*(\n-1))*pow(\x,-\b*(\n-1));},
    domain=2:2.7,no marks]
 \addplot{H(x,2,2.5,0.5,3)};
 \addplot[color=red]{H(x,2,2.5,0.5,4)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如您所见,在第二个图中,参数3被更改为4

附录:至于您评论中的代码,如果您添加缺少的乘法符号,此代码将起作用。例如\b(\n-1)需要变成\b*(\n-1)

\documentclass[tikz,border=3mm]{standalone} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.17} 
\begin{document} 
\begin{tikzpicture} 
\begin{axis}[declare function={H(\x,\n,\a,\b,\R)=pow(\R,\b*(\n-1)+1)*% 
  pow(\n*\b+\a-1,\b*(\n-1))*pow(\n*\b+\a,-\b*(\n-1))*pow(\x,-\b*(\n-1))+%
  (\n*\b+\a)/(\n*\b+\a-1)*\x*(((\n-1)*\b)/((\n-1)*\b+1))*%
  (1-pow(\R,\b*(\n-1)+1)*pow(\n*\b+\a-1,\b*(\n-1)+1)*%
  pow(\n*\b+\a,-\b*(\n-1)-1)*%
  pow(\x,-\b*(\n-1)-1));},
  domain=2.1:2.7,no marks,samples=11,smooth] 
 \addplot[color=black]{H(x,2,2.5,0.5,3)}; 
 \addplot[color=red]{H(x,2,2.5,0.6,3)}; 
\end{axis} 
\end{tikzpicture} 
\end{document} 

在此处输入图片描述

需要补充的是,这个函数可能已经超出了pgfplots单独使用时可以合理完成的范围。如果你增加样本,你就会明白为什么。

答案2

如果可以的话,我想用一个有用的技巧(他教我的)来完成@Schrodingerscat。

当你想绘制一个参数少于 9 个的函数时,将其包装tikzpicture\newcommand

在此处输入图片描述

\documentclass[tikz,export]{standalone}
% convert -density 300 -delay 12 -loop 0 -alpha remove MyGraph.pdf MyGraph.gif 
\usepackage{animate}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\tikzset{
    declare function={
    H(\x,\n,\a,\b,\R)= pow(\R,\b*(\n-1)+1)*
                       pow(\n*\b+\a-1,\b*(\n-1))*
                       pow(\n*\b+\a,-\b*(\n-1))*
                       pow(\x,-\b*(\n-1));}}

\newcommand{\MyGraphWithParameters}[4]{
%   \def\ParOne{#1}
%   \def\ParTwo{#2}
%   \def\ParThree{#3}
%   \def\ParFour{#4}

    \begin{axis}[domain=2:2.7,no marks,clip=true, ymin=1,ymax=5]
%   \addplot{H(x,\ParOne,\ParTwo,\ParThree,\ParFour)};
    \addplot{H(x,#1,#2,#3,#4)};
    \addplot[color=red]{H(x,2,2.5,0.5,4)};  
    \end{axis}
}

\begin{document}
\foreach \i in {1,...,10}   %each will be an independant frame in pdf you can call with `\includegraphics{}`
{\begin{tikzpicture}
    \MyGraphWithParameters{\i}{2.5}{0.5}{3}
\end{tikzpicture}
}
\end{document}

然后,您可以按照说明轻松创建动画或 gif这里

相关内容