2

プロットしたい: production.ts(31, .002, 10,12,125313.93,211,95,x,"2014-02-01","2014-05-14",z,y)x、y、zの関数として

Mathematica のこのプロットのようなものとして (R で可能であれば): http://i.stack.imgur.com/3PRaf.png

私は機能を持っています:

library("lubridate"); library("rgl")

production.ts <- function(a, b, z, c, d, e, 
                    f, g, h, j, r, k) {
  elapsed <- (4-z)*10 + (4-c)
  un.days <- 100 - elapsed
  gone.days <- day(as.Date(h))
  rem.days <- day(as.Date(j))
  r.days <- as.numeric(as.Date(j) - as.Date(h))

  m.r <- f/100*d
  inputs <- d * a * (gone.days - 1)/365 + r
  prin <- m.r + inputs 
  costs <- (r.days/365 * r + 1) * prin 
  added.p <- a/100*d + r 
  due <- d * 1-un.days
  tomr.f <- 1- due + k^2
  acct.paid <- (d - due)*tomr.f
  net <- added.p + due + acct.paid
  pv.net <- net/(1+r*(e-30-day(as.Date(j)))/365)
  end <- d - due - acct.paid
  more.add.p <- end*a*(rem.days-1)/365
  rem <- (f-g)/100 * end
  total.fv <- pv.net + rem + more.add.p 
  out <- costs - total.fv

  out 
}


x<-seq(-10,10,by=.1)
y<-seq(0,1000,by=.1)
z<-seq(0,90,by=.1)

私が試してみました: func.3d<-Vectorize(production.ts(31, .002, 10,12,125313.93,211,95,x,"2014-02-01","2014-05-14",z,y))

c <- func.3d; c <- cut(c,breaks=64); cols <- rainbow(64)[as.numeric(c)]

open3d()
plot3d(x, y, z, col=cols,type="s",size=1)

しかし、これは線をプロットし、色は関数が出力する値と一致しません。

どうすればこれができるか知っている人はいますか?ありがとう、私はあなたの時間を本当に感謝しています!

4

1 に答える 1

3

このような?

x<-seq(-10,10,length=100)
y<-seq(0,1000,length=100)
z<-seq(0,90,length=100)
df <- expand.grid(x=x,y=y,z=z)

f <- function(x,y,z) {production.ts(31, .002, 10,12,125313.93,211,95,x,"2014-02-01","2014-05-14",z,y)}
df$c <- f(df$x,df$y,df$z)
c <- cut(df$c,breaks=64)
cols <- rainbow(64)[as.numeric(c)]
open3d()
plot3d(df$x, df$y, df$z, col=cols,type="p",size=1)

あなたのコードは線をプロットしていませんでした。そのように x、y、および z を渡すと、すべての要素が一緒plot3d(...)に循環するため、ポイント、別のポイントなどになります。ベクトルの長さが異なるため、短いものは再利用されて、最も長いものの長さに合わせられます。これの視覚効果は、点が線上にあるということです。x[1],y[1],z[1]x[2],y[2],z[2]

x、y、z のすべての組み合わせをプロットし、その組み合わせに基づいて各点に色を付けます。上記のコードはそれを行います。プロットはあなたのようには見えませんが、それが関数の定義方法によるものかどうかはわかりません。

また、x、y、および z を定義した方法では、201 X 10001 X 901 = 1,811,191,101 ポイントとなり、処理するには多すぎます。上記のコードは、1,000,000 ポイントをプロットします。

最後に、球のプロット ( type="s") は非常にコストがかかり、この場合は不要です。

于 2014-03-21T19:48:06.300 に答える