Я столкнулся с интересной, но довольно раздражающей проблемой.
Я пытаюсь интегрировать функцию, рассчитанную на основе набора данных. Данные можно найти здесь:Ссылка на 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