0

我想看看三个变量 x、y 和 z 如何使用 R 响应函数 f。

我已经搜索了 R 解决方案(例如使用 4d 绘图的 rgl),但似乎没有一个允许输入函数作为第四个变量,同时允许在其整个值范围内操作 x、y 和 z。

# First I create three variables that each have a domain 0 to 4
x 
y 
z 

# Then I create a function from those three variables
f <- sqrt(x^2 + y^2 + z^2)

编辑:我最初声明我希望 x、y 和 z 为 seq(0, 4, 0.01) 但实际上我只希望它们的范围从 0 到 4,并且独立于其他变量。换句话说,我想在一系列值上绘制函数,让 x 独立于 y 和 z 等移动,而不是绘制 3-D 线。结果应该是一个 3-D 表面。

我想:a)查看函数 f 如何在 x、y 和 z 值 0 到 4 的范围内响应所有可能的 x、y 和 z 组合,以及 b)找出存在的最大值/最小值,尤其是在持有时一个变量常数。

4

1 回答 1

1

这倒是一道数学题。不幸的是,我们的电脑屏幕并不是真正由 4D 制成的,我们的大脑也不是。所以你问的好像是不可能的。确实,您想显示一组密集的数据(0 到 4 之间的立方体),而我们无法显示立方体“内部”的内容。

回到 R,你总是可以显示它的一部分,例如 fixz和 plot sqrt(x^2 + y^2 + z^2)for xand 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,如果您保持或不变,则会生成相同的图。yzxy

对于关于最大值的最后一个问题,您可以重新使用slice矩阵并执行以下操作:

max_ind=which(slice==max(slice),arr.ind = TRUE)
x[max_ind[,1]]
y[max_ind[,2]]

(见获取矩阵最小元素的行列名

但是再次通过数学,我们可以从您的方程式中看到最大值总是通过最大化xy获得z。实际上,该函数只是测量到原点的距离。

于 2019-08-20T09:53:27.537 回答