exp、log和log10是Fortran标准定义的泛型、元素内在函数。exp(x)计算以自然常数e为底的指数,log(x)计算自然对数,log10(x)计算常用对数。它们常用于增长与衰减、时间常数和数量级计算,适合在指数模型中用exp求状态,并与log或log10结合反求未知量或换算分贝。
语法结构
exponentialValue = exp(x)
naturalLogarithm = log(x)
commonLogarithm = log10(x)
- exp的参数可以是实数或复数,返回值与参数类型、种类相同。
- log的参数可以是实数或复数;实数计算要求参数大于零,复数参数不能为零。
- log10的标准参数是实数,实数计算同样要求参数大于零;结果与参数具有相同种类。
- 较大的正指数可能使exp上溢,绝对值很大的负指数可能下溢;调用对数前应检查参数范围。
应用模型
RC电路断开电源后,电容电压按衰减,其中V₀是初始电压,τ是时间常数。测得当前电压后,可以通过反求经过时间;电压比对应的衰减量为。
本文代码
! EXP模拟RC电路电压衰减,LOG和LOG10反求时间与分贝。
program expLogDemo
use iso_fortran_env, only: real64
implicit none
real(real64) :: initialVoltage, timeConstant, elapsedTime
real(real64) :: voltage, recoveredTime, attenuationDb
initialVoltage = 5.0_real64
timeConstant = 2.0_real64
elapsedTime = 3.0_real64
voltage = initialVoltage * exp(-elapsedTime / timeConstant)
recoveredTime = -timeConstant * log(voltage / initialVoltage)
attenuationDb = 20.0_real64 * log10(initialVoltage / voltage)
print "(A,F8.4,1X,A)", "3秒后的电压:", voltage, "V"
print "(A,F8.4,1X,A)", "反求经过时间:", recoveredTime, "s"
print "(A,F8.4,1X,A)", "电压衰减:", attenuationDb, "dB"
end program expLogDemo
编译运行
(base) hong@hongdeMacBook-Pro 049.expLog % gfortran -Wall -Wextra -std=f2018 exampleExpLog.f90
(base) hong@hongdeMacBook-Pro 049.expLog % ./a.out
3秒后的电压: 1.1157 V
反求经过时间: 3.0000 s
电压衰减: 13.0288 dB
现象分析
电压指数中的无量纲比值为-t/τ=-3/2=-1.5,exp(-1.5)约为0.22313016。初始电压5.0 V乘以该衰减因子得到1.1156508 V,按四位小数显示为1.1157 V。
当前电压与初始电压之比约为0.22313016,也就是exp(-1.5)。自然对数log(exp(-1.5))在浮点误差范围内恢复-1.5,再乘以-τ=-2,反求时间为3.0 s。这展示了log对实数指数关系的反解作用。
初始电压与当前电压之比约为4.481689,log10(4.481689)约为0.6514417;乘以电压幅值采用的系数20,得到13.0288 dB。log与log10处理的是同一个正数比值,但底数和物理用途不同。
核心知识点
- exp计算自然指数,log计算自然对数,log10计算以10为底的对数。
- 实数log与log10要求参数大于零;比值参与对数时还应保证分子、分母及单位具有合理含义。
- log可反解以e为底的指数模型,log10适合数量级和分贝换算。
- 指数与对数在数学上互逆,但浮点计算只能在可表示范围和舍入误差内近似恢复原值。