几个星期前我发布了这个问题并且没有收到任何回复我的问题的回复,所以我再次尝试用希望清理R代码。
我在这里做的是采用天然存在的C12和C13气体同位素,其在各自的馏分(F12和F13)处以线性速率(P)产生,总和为1.然后消耗两种同位素气体C13的速率为k12,C13的速率为k13。然后我想用最小化函数求解P和k12。
方程是:
方程1:conc.12 =((F12 * P)/ k12) - (((F12 * P)/ k12)-c12zero)exp(-k12(t-t0))
方程2:conc.13 =((F13 * P)/ k13) - (((F13 * P)/ k13)-c13zero)exp(-k13(t-t0))
方程3:错误=总和(((conc.12-c12meas)/0.07)^ 2)+ sum(((zh-c13-c13meas)/0.07)^ 2)
< conc.12和conc.13是在时间t的两种同位素的估计浓度 c12meas和c13meas是在时间t测量的两种同位素的浓度t0是初始时间点
k12和k13是两种同位素的指数衰减系数,k13 = k12 / 1.06
P是12CH4和13CH4的线性生产率
c12meas <- c(109.7000,118.9150,127.6693,135.9858,143.8865,151.3922,
158.5226, 165.2964, 171.7316, 177.8450, 183.6528, 189.1701,
194.4116, 199.3911, 204.1215, 208.6154, 212.8847, 216.9404,
220.7934, 224.4537)
c13meas <- c(19.35660,18.74356,18.15943,17.60285,17.07253,16.56722,
16.08575,15.62698,15.18986,14.77336,14.37650,13.99837,
13.63807,13.29476,12.96765,12.65597,12.35899,12.07602,
11.80639,11.54949)
t <- c(1:20)
isotopes<- function (x) { #where x[1] = P, x[2] = k12
t0<-t[1]
c12zero=100
c13zero=20
k13=x[2]/1.06
F12=0.98
F13=1-F12
ratio.12<- (F12*x[1])/x[2]
exp.12<- exp(-x[2]*(t-t0))
conc.12<-ratio.12 - ((ratio.12-c12zero)*exp.12)
ratio.13<- (F13*x[1])/k13
exp.13<- exp(-k13*(t-t0))
conc.13<- ratio.13 - ((ratio.13-c13zero)*exp.13)
error <- sum(((conc.12-c12meas)/0.07)^2)
+sum(((conc.13-c13meas)/0.07)^2)
results <- list(conc.12, conc.13, error)
return(results)
}
函数本身工作正常:
newdata <- isotopes(x= c(15, 0.05))
newdata
尝试使用optimx功能。你需要加载包。
x= c(15, 0.05)
optim.result <- optimx(x, isotopes, all.methods=T)
出现以下错误消息: optimx.check中的错误(par,optcfg $ ufn,optcfg $ ugr,optcfg $ uhess,lower,: 无法在初始参数下评估函数