有人能帮忙如何使用 pgfplot 绘制 Foxhole 函数吗?该函数定义为:0:998004 {0:002+∑ (从 j = 1 到 j= 25) [j + [x1 − a(1j)]^6 + [x2 −a(2j)]^6 ]^(-1)}^(-1); x1, x2 in [−65:536; 65:536]
其中 a(ij) 是以下矩阵的元素
(−32 −16 0 16 32 −32 −16 ... 0 16 32
−32 −32 −32 −32 −32 −16 −16 ... 32 32 32)
我面临的困难是如何在 pgfplot 中编写矩阵部分。抱歉,我的文本格式不正确,有关函数的格式良好的定义以及函数的图的样子,请参阅: https://www.al-roomi.org/benchmarks/unconstrained/2-dimensions/7-shekel-s-foxholes-function
答案1
您的矩阵似乎只是一个嵌套循环。可以通过在此嵌套循环中累积函数来实现求和。pgfplots
可能不是合适的工具,至少如果您和我一样没有耐心的话。即使对于这个相当少的样本,这也会花费很长时间。
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\xdef\myf{0.02}
\foreach \X [count=\nX] in {-32,-16,0,16,32}
{\foreach \Y [count=\nY] in {-32,-16,0,16,32}
{\xdef\myf{\myf+1/(\nX+5*(\nY-1)+(x-1*(\X))^6*(y-1*(\Y))^6)}}}
%\typeout{\myf}
\begin{axis}[domain=-40.5:40.5,domain y=-40.5:40.5,samples=42,samples y=42]
\addplot3[surf,z buffer=sort]{1/(\myf)};
\end{axis}
\end{tikzpicture}
\end{document}