R 用平面GLS逼近曲面

R 用平面GLS逼近曲面,r,least-squares,surface,approximation,plane,R,Least Squares,Surface,Approximation,Plane,有一个由二维数组形式的点定义的曲面。也就是说,数组索引是x和y坐标,数组元素的值是对应点的z坐标值 有必要找到一个函数a·x+b·y+c=z,该函数从最小二乘的角度来看是最优的,也就是说,计算相应的系数a、b和c。有没有办法在R中做到这一点 谢谢大家! 这是为三维空间中的点集合找到最佳拟合平面的问题 有一个简单的方法来看待这个问题。将矩阵中的每个元素视为具有两个独立变量(x和y)和一个因变量(z)的“观测”。 然后,只需运行线性模型,即可通过最小二乘法找到系数: lm(z ~ x_indices

有一个由二维数组形式的点定义的曲面。也就是说,数组索引是x和y坐标,数组元素的值是对应点的z坐标值

有必要找到一个函数a·x+b·y+c=z,该函数从最小二乘的角度来看是最优的,也就是说,计算相应的系数a、b和c。有没有办法在R中做到这一点


谢谢大家!

这是为三维空间中的点集合找到最佳拟合平面的问题

有一个简单的方法来看待这个问题。将矩阵中的每个元素视为具有两个独立变量(x和y)和一个因变量(z)的“观测”。 然后,只需运行线性模型,即可通过最小二乘法找到系数:

lm(z ~ x_indices + y_indices)
事实上,我们可以用它来构造一个简单的函数,以矩阵作为输入,并给出a、b和c的值作为输出:

best_plane <- function(any_2d_matrix)
{
  x_values <- rep(seq(ncol(any_2d_matrix)), each = nrow(any_2d_matrix))
  y_values <- rep(seq(nrow(any_2d_matrix)), ncol(any_2d_matrix))
  z <- as.vector(any_2d_matrix)
  suppressWarnings(result <- summary(lm(z ~ x_indices + y_indices))$coef)
  return(c(a = result[2, 1], b = result[3, 1], c = result[1, 1]))
}
如果我们添加大量随机噪声,我们仍然非常接近:

best_plane(my_matrix + rnorm(100))
#>          a          b          c 
#>  3.2486162  0.5054093 -4.3669805 
best_plane(my_matrix)
#>    a    b    c 
#>  3.2  0.5 -4.0 
best_plane(my_matrix + rnorm(100))
#>          a          b          c 
#>  3.2486162  0.5054093 -4.3669805