Fortran入门:字符串处理与数值转换程序集

需积分: 49 21 下载量 50 浏览量 更新于2024-07-18 1 收藏 482KB PDF 举报
Fortran程序集是一系列用Fortran语言编写的实用示例,旨在帮助初学者掌握Fortran编程的基础知识。Fortran是一种历史悠久且广泛应用于科学计算、数值分析和工程领域的高级编程语言。在这个文档中,提供了四个关键的程序示例: 1. 字符串操作: - 程序`ex39`演示了如何将输入的字符串中的小写字母转换为大写。它使用`len_trim`函数获取字符串长度,然后通过`ichar`和`char`函数进行字符转换,实现了字符的大小写互换。 2. 数字字符串转整数: - `ex104`程序展示了如何定义一个外部函数`f`,接收一个由数字组成的字符串作为输入,将其转换为整数。通过遍历字符串的每个字符,将其ASCII值减去`ichar('0')`的值,然后乘以对应的权重(10的幂),最终累加得到整数。 3. 十进制数转二进制: - `ex110`提供了一个方法,通过循环和取模运算,将输入的十进制整数转换为二进制字符串形式。在每次迭代中,根据余数决定二进制位的值(0或1)。 4. 二进制字符串转十进制: - `ex111`则相反,接收一个二进制字符串,通过遍历每个字符,利用二进制位值和对应的权重(2的幂次)相加,得到对应的十进制数值。 这些程序集涵盖了字符串处理、基本数学运算以及不同进制间的转换,这些都是编程中常见的基础操作。学习者可以通过这些实例理解Fortran语言的变量声明、数据类型、控制结构和函数调用等核心概念。同时,它们也展示了Fortran在数值计算方面的强大之处,适合那些对科学计算和工程应用感兴趣的开发者使用。通过实践这些程序,初学者可以逐渐熟悉Fortran的语法,并提升编程技能。
2010-03-29 上传
中国科学院大气所李建平的 线性相关 Linear Correlation mscorrelation_2(n,x,y,r)   Correlations between two anomaly series of 12 calendar months, 4 seasons (DJF, MAM, JJA and SON), monthly, seasonal and annual data from monthly anomaly series x(i,12) and y(i,12) (i=1,...,n) 求逐月异常序列x(n,12)和y(n,12)(n是年)的相关系数r(24),其中j=1~12是1~12个月的情形,13~22是冬、春、夏、秋、冬季逐月、春季逐月、夏季逐月、秋季逐月、逐月、年、冬半年逐月(NDJFMA)、夏半年逐月(MJJASO)的序列的情形。 llcorrelation(n,x,y,nt,rt)   Calculating lagged and leading correlation coefficients rt(-nt:nt) between two anomaly series x(i) and y(i). 求(逐日、逐月、逐季、年际)异常序列x(n)和y(n)之间的滞后超前的相关系数rt(-nt:nt),其中nt最大的滞后或超前时间(单位:日、月、季、年等)。 llyear(ny,nm,x,y,ly,rt)   ly-year lagged and leading correlation coefficients rt(-ly:ly,nm) between two anomaly series x(ny,nm) and y(ny,nm). 求逐月异常序列x(n,12)和y(n,12)(n是年)相同月份之间的滞后超前nt年的相关系数rt(-nt:nt,12),其中nt最大的滞后或超前时间(单位:年)。 mllcorrelation(n,nt,x,y,rt)   nt-month (or nt-season, or others) lagged and leading correlation coefficients rt(-nt:nt,nm) between two anomaly series x(ny,nm) and y(ny,nm). 求逐月、逐季或其他异常序列x(n,nm)和y(n,nm)(n是年)不同月份之间的滞后超前nt月的相关系数rt(-nt:nt,nm),其中nt最大的滞后或超前时间(单位:月、季或其他)。 correlationmiss(n,x,y,undef,r,nr)   Correlation coefficient r between two series with missing data 求有缺省资料的两个序列x(n)和y(n)的相关系数r。   谱分析 Spectrum Analysis   一维离散功率谱分析 Discrete Fourier spectrum of one-dimensional series fourier(n,x,a,b,c,s,cta)   The discrete Fourier spectrum of one-dimensional series x(n). 求一维序列x(n)的离散Fourier谱分析,s(0:m)离散功率谱,c(0:m)振幅谱,cta(0:m)位相谱,其中m=[n/2.]。 dspectrum(n,lw,x,tl,sl,st95)   Subroutine for discrete spectrum analysis of an one-dimensional series x(i) (i=1,...,n). 具有噪音检验的一维序列x(n)的离散功率谱分析,ol(lw)频率,tl(lw)周期,sl(lw)离散功率谱,st95(lw)红噪音或白噪音谱的95%置信上限,其中lw=[n/2.]。注意:很多同学在使用这个程序时都问及在计算滞后相关的模块中,求滞后相关为什么用n而不用n-i,其实这是由实际资料的特性和统计学的基本原理决定的(很多统计学书中也谈到这一点)。一是序列的平稳性假设就要求序列的均值和方差保持不变,二是通常资料太短,导致用较短的资料得到的相关结果具有不稳定性,掩盖了事物的真相,因此,用n要好于n-i。一些同学也做了试验证实了这一点(有时n-i还得到错误的结论,需要各自使用者注意的地方)。谢谢大家提出的问题。 一维连续功率谱分析 Continuous spectrum analysis of an one-dimensional series cspectrum(n,m,x,ol,tl,sl,st95,strw)   Subroutine for continuous spectrum analysis of an one-dimensional series x(i) (i=1,...,n). 一维序列x(n)的连续功率谱分析,ol(0:m)频率,tl(0:m)周期,sl(0:m)连续功率谱,st95(0:m)红噪音或白噪音谱的95%置信上限,strw(0:m) 红噪音或白噪音的谱密度,其中m=[n/2.]。 交叉谱分析 Continuous cross spectrum analysis of two one-dimensional series ccrossspectrum(n,m,x,y,ol,tl,px,py,px95,py95,rxy,cxy,lxy,rxy951,rxy952)   Subroutine for continuous cross spectrum analysis of two one-dimensional series x(i) and y(i) (i=1,...,n). 两序列x(n)和y(n)的交叉谱分析,ol(0:m)频率,tl(0:m)周期,px(0:m)是x(n)的连续功率谱,py(0:m)是y(n)的连续功率谱,pxy(0:m)协谱,qxy(0:m)余谱,rxy(0:m)凝聚谱,cxy(0:m)位相差谱,lxy(0:m)滞后时间长度谱,rxy951(0:m)凝聚谱F-检验的95%置信上限,rxy952(0:m)凝聚谱Goodman-检验的95%置信上限,其中m=[n/2.]。   合成分析 Composite Analysis   标量的合成分析 Composite analysis for scalar quantity differencehl1(n,x,f,coefh,coefl,fh,fl,dh,dl,dhl,tn)   求f(n)在指数x(n)为高指数年(x(n)>coefh的年)的平均值fh、低指数年(x(n)coefh的年)的平均值fh(2)、低指数年(x(n)<coefh的年)的平均值fl(2)、高指数年与气候平均的合成差dh(2)、低指数年与气候平均的合成差dl(2)、以及高低指数年的合成差dhl(2)和差的显著性tn(5,3)。 differhl2V(n,x,f,nc,fh,fl,dh,dl,dhl,tn)   求矢量f(n,2)在指数x(n)为nc个最强的指数年的平均值fh(2)、nc个最弱的指数年的平均值fl(2)、nc个最强的指数年与气候平均的合成差dh(2)、nc个最弱的指数年与气候平均的合成差dl(2)、以及强弱指数年的合成差dhl(2)和差的显著性tn(5,3)。   主分量分析 Principal Component Analysis (PCA)   经验正交函数分解 Empirical Orthogonal Functions (EOF's) eof(m,n,mnl,f,ks,er,egvt,ecof)   求时空场f(m,n)的特征向量egvt(m,mnl),时间系数ecof(mnl,n),特征值er(mnl,1),累积特征值er(mnl,2),解释方差er(mnl,3),累积解释方差er(mnl,4) 旋转经验正交函数分解 Rotated Empirical Orthogonal Functions (REOF's) reof(m,n,mnl,np,f,ks,er,egvt,ecof,rer,regvt,recof)   求时空场f(m,n)的特征向量egvt(m,mnl),时间系数ecof(mnl,n),旋转特征向量regvt(m,mnl),时间系数recof(mnl,n)   插值 Interpolation   样条内插 Spline Interpolation splinev(n,x,y,m,t,yp1,ypn,sy)   已知节点x(n)和函数值y(n),用三次样条求节点t(m)上的内插值sy(m)。   滤波分析 Filter   二阶Butterworth带通滤波器 Second Order Butterworth Band-Pass Filter Bfilter2(n,x,y,a,b1,b2)   求序列x(n)(n是资料长度)的二阶Butterworth带通滤波序列y(n) 高斯低通滤波器 M-term Guassian-Type Filter guassfilter_2(n,m,x,y)   求序列x(n)(n是资料长度)的m项高斯低通滤波序列y(n)   插值 Interpolation   样条内插 Spline Interpolation splinev(n,x,y,m,t,yp1,ypn,sy)   已知节点x(n)和函数值y(n),用三次样条求节点t(m)上的内插值sy(m)。   微分方程数值积分 Numerical Integration of Differential Equations   一到六阶定步长显式Runge-Kutta方法 Fixed Stepsize Explicit Runge-Kutta Method of Orders from 1 to 6 Runge-Kutta.f   subroutine eu1(n,yn,h) : the Euler's method subroutine rk2(n,yn,h) : the improved Euler's method subroutine rk3(n,yn,h) : a Runge-Kutta method of order 3 subroutine rk4(n,yn,h) : a Runge-Kutta method of order 4 subroutine rk5(n,yn,h) : a Runge-Kutta method of order 5 subroutine rk6(n,yn,h) : a Runge-Kutta method of order 6 subroutine rkm2(n,yn,h): another Runge-Kutta method of order 2 subroutine rkh3(n,yn,h): another Runge-Kutta method of order 3