全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
8191 10
2016-07-19
最近遇到一个棘手的问题,本来应该是一个光滑的函数,但是由于R自身运行的精度不高,导致出现的曲线不光滑。

如果提高R内在运行的精度呢?

注意:我不是说打印出来的精度,而是指R程序运行的内在精度。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-7-19 12:31:53
你知道r是什么精度吗
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-19 13:07:39
R默认的double精度正常情况下应该够用了,感觉是你算法有问题。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-19 15:12:59
  myfun <- function(P, y){
    ropt <- P[1]
    topt <- P[2]
    tmin <- P[3]
    tmax <- P[4]
    fun0 <- function(x){
      x[x < tmin] <- tmin
      x[x > tmax] <- tmax
      return(x)
    }
    y <- fun0(y)
    temp1 <- (ropt*(-(y-tmin)^3*(2*tmax+tmin-3*topt)^3+3*(y-tmin)^2*(2*tmax+tmin-3*topt)^2*(tmax-topt)^2-
      6*(y-tmin)*(2*tmax+tmin-3*topt)*(tmax+tmin-2*topt)*(tmax-topt)^2*(tmin-topt)
      +6*(tmax+tmin-2*topt)^2*(tmax-topt)^2*(tmin-topt)^2*log(y*(2*tmax+tmin-3*topt)+2*topt^2
      -tmax*(tmin+topt))))/( 3*(2*tmax+tmin-3*topt)^4*(-tmin+topt) )
    z     <- tmin
    temp2 <- (ropt*(-(z-tmin)^3*(2*tmax+tmin-3*topt)^3+3*(z-tmin)^2*(2*tmax+tmin-3*topt)^2*(tmax-topt)^2-
      6*(z-tmin)*(2*tmax+tmin-3*topt)*(tmax+tmin-2*topt)*(tmax-topt)^2*(tmin-topt)
      +6*(tmax+tmin-2*topt)^2*(tmax-topt)^2*(tmin-topt)^2*log(z*(2*tmax+tmin-3*topt)+2*topt^2
      -tmax*(tmin+topt))))/( 3*(2*tmax+tmin-3*topt)^4*(-tmin+topt) )
    temp3 <- temp1-temp2
    return(temp3)

  }


x <- seq(0, 100, len=2000)

par <- c( 0.8004191, 59.2451616, 24.4516643, 76.6365741)

plot(x, myfun(par, x), type="l")


谢谢上述两位的讨论,我附上一个函数,这个函数有四个参数。方程式较为复杂,我猜想就是因为这个复杂方程影响了计算的精度,导致曲线不光滑,按照道理,上述曲线应该是光滑的。

谢谢你们继续讨论!




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-19 15:15:41
你们稍微更改一下par中的任何一个值,稍微变化一下,就会出现一个光滑函数,为什么呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-19 20:26:45
请将函数myfun 最后的return(temp3),改为return(data.frame(t1=temp1,t2=temp2,t3=temp3))。。。瞧瞧t1,t2,t3各是啥数??我的计算结果是:

x <- seq(0, 100, len=2000)

par <- c( 0.8004191, 59.2451616, 24.4516643, 76.6365741)
yda<-myfun(par,x)
head(yda)
            t1           t2                     t3
1 2.519266e+15 2.519266e+15  0
2 2.519266e+15 2.519266e+15  0
3 2.519266e+15 2.519266e+15  0
4 2.519266e+15 2.519266e+15  0
5 2.519266e+15 2.519266e+15  0
6 2.519266e+15 2.519266e+15  0
tail(yda)
               t1           t2                      t3
1995 2.519266e+15 2.519266e+15 23.5
1996 2.519266e+15 2.519266e+15 23.5
1997 2.519266e+15 2.519266e+15 23.5
1998 2.519266e+15 2.519266e+15 23.5
1999 2.519266e+15 2.519266e+15 23.5
2000 2.519266e+15 2.519266e+15 23.5
summary(yda)
       t1                  t2                               t3      
Min.   :2.519e+15   Min.   :2.519e+15   Min.   :-0.50  
1st Qu.:2.519e+15   1st Qu.:2.519e+15   1st Qu.: 0.00  
Median :2.519e+15   Median :2.519e+15   Median : 7.00  
Mean   :2.519e+15   Mean   :2.519e+15   Mean   :10.47  
3rd Qu.:2.519e+15   3rd Qu.:2.519e+15   3rd Qu.:23.50  
Max.   :2.519e+15   Max.   :2.519e+15   Max.   :24.00  
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群