带平滑窗口的R中的Bourdet导数
我使用本PDF中的算法计算压力导数: 我已经能够相对容易地实现“两点”和“三连续点”方法,使用dplyr的滞后/超前函数将原始列前后偏移一行 这两种方法的问题在于,我们使用的高分辨率数据中可能存在大量噪声。这就是为什么有第三种方法“三个平滑点”更难实现的原因。有一个用户定义的“窗口宽度”,W,通常介于0和0.5之间。该算法选择point_L和point_R作为第一个点,使得ln(deltaP/deltaP_L)>W和ln(deltaP/deltaP_R)>W。以下是我到目前为止的结果:带平滑窗口的R中的Bourdet导数,r,loops,iteration,smoothing,derivative,R,Loops,Iteration,Smoothing,Derivative,我使用本PDF中的算法计算压力导数: 我已经能够相对容易地实现“两点”和“三连续点”方法,使用dplyr的滞后/超前函数将原始列前后偏移一行 这两种方法的问题在于,我们使用的高分辨率数据中可能存在大量噪声。这就是为什么有第三种方法“三个平滑点”更难实现的原因。有一个用户定义的“窗口宽度”,W,通常介于0和0.5之间。该算法选择point_L和point_R作为第一个点,使得ln(deltaP/deltaP_L)>W和ln(deltaP/deltaP_R)>W。以下是我到目前为止的结果: #If
#If necessary install DPLYR
#install.packages("dplyr")
library(dplyr)
#Create initial Data Frame
elapsedTime <- c(0.09583, 0.10833, 0.12083, 0.13333, 0.14583, 0.1680,
0.18383, 0.25583)
deltaP <- c(71.95, 80.68, 88.39, 97.12, 104.24, 108.34, 110.67, 122.29)
df <- data.frame(elapsedTime,deltaP)
#Shift the elapsedTime and deltaP columns forward and back one row
df$lagTime <- lag(df$elapsedTime,1)
df$leadTime <- lead(df$elapsedTime,1)
df$lagP <- lag(df$deltaP,1)
df$leadP <- lead(df$deltaP,1)
#Calculate the 2 and 3 point derivatives using nearest neighbors
df$TwoPtDer <- (df$leadP - df$lagP) / log(df$leadTime/df$lagTime)
df$ThreeConsDer <- ((df$deltaP-df$lagP)/(log(df$elapsedTime/df$lagTime)))*
((log(df$leadTime/df$elapsedTime))/(log(df$leadTime/df$lagTime))) +
((df$leadP-df$deltaP)/(log(df$leadTime/df$elapsedTime)))*
((log(df$elapsedTime/df$lagTime))/(log(df$leadTime/df$lagTime)))
#Calculate the window value for the current 1 row shift
df$lnDeltaT_left <- abs(log(df$elapsedTime/df$lagTime))
df$lnDeltaT_right <- abs(log(df$elapsedTime/df$leadTime))
#如有必要,安装DPLYR
#安装程序包(“dplyr”)
图书馆(dplyr)
#创建初始数据帧
拖延时间