我有一个说明某个图形的代码。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
declare function={ Nprime(\x) = 1/(sqrt(2*pi))*exp(-0.5*(pow(\x,2)));
d2(\x,\y,\KK,\RR,\SIG) = (ln(\x/\KK)+(\RR-(pow(\SIG,2)/2)*\y))/(\SIG*(sqrt(\y)));
myfun(\x,\y,\KK,\RR,\SIG) = exp(-\RR*\y)*Nprime(d2(\x,\y,\KK,\RR,\SIG))/(\x*\SIG*sqrt(\y));
},
]
\begin{axis}[y domain=0.01:0.3,domain=95:105,view={150}{20}]
\addplot3[surf] {myfun(x,y,100,0,0.09)};
\end{axis}
\end{tikzpicture}
\end{document}
我想要Nprime(\x)
声明并积分一个累积分布函数 `N(\x)。非常接近的累积分布函数近似值也可以。其他一切都应保持不变。有人知道怎么做吗?提前致谢!!!公式如下:在此处输入链接描述
此处提供了类似的东西在此处输入链接描述但我不知道如何根据我的需求进行整合:(
这是一个修改过的版本,但它不起作用。函数的最后一部分,即 (\x*\SIG*sqrt(\y)) 被删除了,因为在本例中不需要它。以下是代码
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
declare function={ normcdf(\x,\m,\s) = 1/(1 + exp(-0.07056*((\x-\m)/\s)^3 - 1.5976*(\x-\m)/\s));;
d2(\x,\y,\KK,\RR,\SIG) = (ln(\x/\KK)+(\RR-(pow(\SIG,2)/2)*\y))/(\SIG*(sqrt(\y)));
myfun(\x,\y,\KK,\RR,\SIG) = exp(-\RR*\y)*normdcf(d2(\x,\y,\KK,\RR,\SIG))
},
]
\begin{axis}[y domain=0.01:0.3,domain=95:105,view={150}{20}]
\addplot3[surf] {myfun(x,y,100,0,0.09)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
您的代码中有三个问题:
- 定义末尾缺少分号
myfun
。使用 定义的所有函数都declare function
必须以分号结尾。 - 函数名称中有拼写错误(应该是
normcdf
,而不是normdcf
)。 - 函数调用不正确
normcdf
。它需要三个参数:x 值、平均值和正态分布的标准差。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
declare function={ normcdf(\x,\m,\s) = 1/(1 + exp(-0.07056*((\x-\m)/\s)^3 - 1.5976*(\x-\m)/\s));
d2(\x,\y,\KK,\RR,\SIG) = (ln(\x/\KK)+(\RR-(pow(\SIG,2)/2)*\y))/(\SIG*(sqrt(\y)));
myfun(\x,\y,\KK,\RR,\SIG) = exp(-\RR*\y)*normcdf(d2(\x,\y,\KK,\RR,\SIG),0,1);
},
]
\begin{axis}[y domain=0.01:0.3,domain=95:105,view={210}{20}]
\addplot3[surf] {myfun(x,y,100,0,0.09)};
\end{axis}
\end{tikzpicture}
\end{document}