这倒是一道数学题。不幸的是,我们的电脑屏幕并不是真正由 4D 制成的,我们的大脑也不是。所以你问的好像是不可能的。确实,您想显示一组密集的数据(0 到 4 之间的立方体),而我们无法显示立方体“内部”的内容。
回到 R,你总是可以显示它的一部分,例如 fixz
和 plot sqrt(x^2 + y^2 + z^2)
for x
and y
。这里有两个例子:
# Points where the function should be evaluated
x <- seq(0, 4, 0.01)
y <- seq(0, 4, 0.01)
z <- seq(0, 4, 0.01)
# Compute the distance from origin
distance <- function(x,y,z) {
sqrt(x^2 + y^2 + z^2)
}
# Matrix to store the results
slice=matrix(0, nrow=length(x),ncol=length(y))
# Fill the matrix with a slice at z=3
i=1
for (y_val in y)
{
slice[,i]=distance(x,y_val,3)
i=i+1
}
# PLot with plot3D library
require(plot3D)
persp3D(z = slice, theta = 100,phi=50)
# PLot with raster library
library(raster)
plot(raster(slice,xmn=min(x), xmx=max(x), ymn=min(y), ymx=max(y)))
如果你改变你的z
价值观,你不会真正改变形状(只是让它“更平坦”以获得更大的z
)。请注意,函数在和中是对称的x
,如果您保持或不变,则会生成相同的图。y
z
x
y
对于关于最大值的最后一个问题,您可以重新使用slice
矩阵并执行以下操作:
max_ind=which(slice==max(slice),arr.ind = TRUE)
x[max_ind[,1]]
y[max_ind[,2]]
(见获取矩阵最小元素的行列名)
但是再次通过数学,我们可以从您的方程式中看到最大值总是通过最大化x
和y
获得z
。实际上,该函数只是测量到原点的距离。