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()
函数是它的倒数,计算e x)。这意味着您的表达式变成(使用最简单的转换)只是:
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
}
推荐阅读
- c# - 为什么我的按钮在 MouseOver 上没有改变颜色?
- testing - msal npm 构建运行因加载程序问题而失败
- c# - 准备需要命令有一个事务
- javascript - Discord.js / Node.js - await 仅在异步函数中有效
- python - Python Tkinter 在一个函数中打开多个窗口
- postgresql - Postgres 访问数据库中的所有内容
- react-native - react-native run-android中的错误
- split - GoogleMaps(或任何)方向 API:将路线分成每 100 公里
- macos - minikube 错误试图在 osx 上达到 172.17.0.4:8080
- javascript - 你将如何将此 for 循环转换为 foreach?这是我正在练习模板字符串的代码