面白いですが厄介な問題が発生しました。R:Integrate:分割数の最大値に達しました。丸め誤差
私は、データセットから計算された関数を統合しようとしています。 データはLink to 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
適合機能を投稿することを検討してください。私はパラメータの見積もりを得ていないようですが、それはスプラインファンの仕組みではないかもしれませんが、何か間違ったことをしています。 –
あなたのデータは驚異的に「フラット」なので、 'integrate'を呼び出し、' rel.tol'と 'abs.tol'引数を使って変換限界を1e-9のように設定すれば、正確な答えが得られます。 –
@ MarkMillerここには良いチュートリアルがあります:http://casoilresource.lawr.ucdavis.edu/drupal/node/896関数をプロットするには 'plot(data $ wave、fx.spline(data $ wave)、type = 'l')と書くことができます。 –