sin、cos和tan是fortran标准定义的泛型、元素内在函数,分别计算正弦、余弦和正切。它们的实数参数表示弧度而不是角度,返回结果的kind与参数相同。这组函数常用于周期运动、波动和几何计算,适合在速度或力的方向已知时与乘法结合分解分量,并可用tan表示直线或轨迹的斜率。
语法结构
sineValue = sin(angleRadians)
cosineValue = cos(angleRadians)
tangentValue = tan(angleRadians)
- 参数可以是实数或复数;本文只讨论最常见的实数角度。三个函数的结果与参数具有相同类型和种类。
- 程序不会识别数值采用角度制还是弧度制。角度值必须先按转换。
- 实数sin和cos的结果位于-1到1之间。tan没有有限范围,在cos(angle)接近零时会得到绝对值很大的结果并放大舍入误差。
- 本文按Fortran 2018编译,因此手动完成角度转换,不依赖Fortran 2023新增的角度制三角函数。
应用模型
物体以速度v、仰角θ发射时,水平初速度为,竖直初速度为。忽略空气阻力时,初始轨迹斜率满足。
本文代码
! 用SIN和COS分解初速度,并用TAN计算轨迹初始斜率。
program trigBasicDemo
use iso_fortran_env, only: real64
implicit none
real(real64), parameter :: pi = acos(-1.0_real64)
real(real64) :: launchAngleDegrees, launchAngleRadians
real(real64) :: initialSpeed, horizontalSpeed, verticalSpeed
real(real64) :: trajectorySlope, componentRatio
launchAngleDegrees = 35.0_real64
initialSpeed = 20.0_real64
launchAngleRadians = launchAngleDegrees * pi / 180.0_real64
horizontalSpeed = initialSpeed * cos(launchAngleRadians)
verticalSpeed = initialSpeed * sin(launchAngleRadians)
trajectorySlope = tan(launchAngleRadians)
componentRatio = verticalSpeed / horizontalSpeed
print "(A,F9.6,1X,A)", "发射角:", launchAngleRadians, "rad"
print "(A,F8.4,1X,A)", "水平初速度:", horizontalSpeed, "m/s"
print "(A,F8.4,1X,A)", "竖直初速度:", verticalSpeed, "m/s"
print "(A,F9.6)", "TAN计算的斜率:", trajectorySlope
print "(A,F9.6)", "速度分量之比:", componentRatio
end program trigBasicDemo
编译运行
(base) hong@hongdeMacBook-Pro 050.trigBasic % gfortran -Wall -Wextra -std=f2018 exampleTrigBasic.f90
(base) hong@hongdeMacBook-Pro 050.trigBasic % ./a.out
发射角: 0.610865 rad
水平初速度: 16.3830 m/s
竖直初速度: 11.4715 m/s
TAN计算的斜率: 0.700208
速度分量之比: 0.700208
现象分析
程序先用acos(-1.0_real64)得到双精度π,再计算35×π/180,得到约0.610865238弧度。若直接把35.0传给三角函数,Fortran会把它理解为35弧度,而不是35度,结果将不符合本例的物理角度。
cos(0.610865238)约为0.819152,乘以初速度20得到水平分量16.3830 m/s;sin(0.610865238)约为0.573576,乘以20得到竖直分量11.4715 m/s。两个无量纲三角函数值分别表示速度在两个坐标方向上的比例。
tan(0.610865238)得到0.700208。另一方面,11.4715/16.3830也约为0.700208,因为公共因子v在v sin(θ)/(v cos(θ))中约去。两种计算结果一致,验证了轨迹斜率与速度分量之比的关系。
核心知识点
- Fortran 2018中的sin、cos、tan按弧度解释实数角度,角度值必须先乘π/180。
- sin和cos适合计算向量分量,tan可表示分量之比或斜率。
- 三个函数都是元素内在函数,返回结果的类型和kind跟随参数。
- 使用tan前应注意cos(angle)是否接近零,避免奇点附近的不稳定结果。