以TCL为单位的自然对数公式

  • 本文关键字:自然 TCL 为单位 tcl
  • 更新时间 :
  • 英文 :


此公式将用tcl编码。

Y= Intercept + Slope1*(X – X0) + (Slope2 – Slope1)*Delta*ln(1+exp((X-X0)/Delta))

我搜索了这个公式中的 ln(( 可以在 tcl 中使用 log(( 进行编码。

但是,我无法在 tcl 中获得正确的输出。

这是我编码的内容,你能看看吗?有什么意见吗?谢谢。

set Intercept 0.7416
set Slope1 52.42
set x0 0.01491
set Slope2 0.2533
set Delta 0.002275
set y_frac [expr {
$Intercept + $Slope1*($x/$tend - $x0/$tend)
+ ($Slope2-$Slope1) * $Delta * log10(1.0 + exp(($x/$tend - $x0/$tend)/$Delta))
}]
set y [expr {$y_frac *100.0}]     ​

log()函数计算其参数的自然对数(就像exp()函数是它的逆函数,计算ex(。这意味着您的表达式(使用最简单的转换(只是:

set Y [expr {
$Intercept + $Slope1*($X – $X0) + ($Slope2 – $Slope1)*$Delta*log(1+exp(($X-$X0)/$Delta))
}]

我会稍微重构表达式,因为增量是自然提取的东西:

set dX     [expr { $X - $X0 }]
set dSlope [expr { $Slope2 - $Slope1 }]
set Y      [expr { $Intercept + $Slope1*$dX + $dSlope*$Delta*log(1+exp($dX/$Delta)) }]

此时,定义一个过程来封装它可能会更容易。

proc computeY {y} {
global Intercept Slope1 Slope2 Delta x0
set dX     [expr { $x - $x0 }]
set dSlope [expr { $Slope2 - $Slope1 }]
set Y      [expr { $Intercept + $Slope1*$dX + $dSlope*$Delta*log(1+exp($dX/$Delta)) }]
return [expr { $Y * 100.0 }]; # Your final rescaling
}

最新更新