私は興味深いがかなり厄介な問題に出くわしました。
データセットから計算された関数を統合しようとしています。データはここにあります:sample.txtへのリンク。
まず、データに線を当てます。approxfun
これは、で線形または非線形で行うことができますsplinefun
。以下の例では、後者を使用しています。さて、フィットした関数を統合しようとすると、エラーが発生します
maximum number of subdivisions reached
しかし、細分化を増やすと、
roundoff error
サンプルコードの値から、この特定のデータセットのしきい値は754->755であることがわかります。
私の同僚は、このデータセットをMatlabに統合するのに問題はありません。データを操作して統合する方法はありますか?Rで数値積分する別の方法はありますか?
data<-read.table('sample.txt',sep=',')
colnames(data)<-c('wave','trans')
plot(data$wave,data$trans,type='l')
trans<- -1 * log(data$trans)
plot(data$wave,trans,type='l')
fx.spline<-splinefun(data$wave,trans)
#Try either
Fx.spline<-integrate(fx.spline,min(data$wave),max(data$wave))
#Above: Number of subdivision reached
Fx.spline<-integrate(fx.spline,min(data$wave),max(data$wave),subdivisions=754)
#Above: Number of subdivision reached
Fx.spline<-integrate(fx.spline,min(data$wave),max(data$wave),subdivisions=755)
#Above: Roundoff error