2017-01-15 8 views
3

私は同じ長さの2つのベクトルxとyを持っています。3Dプロットを作るR

x <- c(12,14,14,15,16,18) 
y <- c(25,36,32,30,36,42) 

と関数f

f <- function(a,b) { 
sum((y - a - b*x)^2) 
} 

とbは二つのベクトルがそのようなことをしている場合:私は、各のでabのすべての可能なペアのfを評価する必要が

a <- seq(from=-5,to=5, by=.1) 
b <- seq(from=-2.5, to=7.5, by=.1) 

私はa, b, and z=f(a,b)の3Dプロットを作ることができました。

outerが見つかりましたが、これは機能しません。希望の結果が得られるように代替案を提案してもらえますか?

おかげ

答えて

2

を、あなたはplot3Dパッケージを使用することができます1)は、各aについてz = f(a、b)を計算する。

### Compute z = f(a, b) 
a <- seq(from=-5,to=5, by=.1) 
b <- seq(from=-2.5, to=7.5, by=.1) 

X <- c(12,14,14,15,16,18) 
Y <- c(25,36,32,30,36,42) 

f <- function(a,b) { 
    sum((Y - a - b*X)^2) 
} 

m <- expand.grid(a, b) 
z <- mapply(f, m$Var1, m$Var2) 

(2)メッシュを宣言し、それに応じた結果をプロットします

### Plot3D 
M <- mesh(a, b) 
x.plot <- M$x 
y.plot <- M$y 

z.plot <- matrix(z, nrow=nrow(x)) 

persp3D(x.plot, y.plot, z.plot) 

そして、これが生成します。

persp3D plot

結果は

ものの、二重チェックする必要が
1
xy = expand.grid(a, b) 
#  z = f(xy[,1], xy[,2]) 
mapply(f, xy$Var1, xy$Var2) # see comment below 

最初はabのデカルト積ます:(

library(plot3D) 

:2つの別々の部品で

a = 1:3 
b = 4:5 
expand.grid(a, b) 
# prints (I'm not sure about the row order) 
# 1 4 
# 1 5 
# 2 4 
# 2 5 
# 3 4 
# 3 5 
+1

を与えます。関数を 'xy'に適用する必要があります。つまり、' mapply(f、xy $ Var1、xy $ Var2) 'のようになります。 – Sotos

+0

あなたが正しいと思います。 –

1

ここではcurve3dを使用して非常に簡単な解決策ですパッケージ、

curve3d(f(x,y), from=c(-5,-2.5), to=c(5,7.5), sys3d="persp", theta=90, phi=45) 

は、それがあるので、これは動作しません

curve3dpersp