Fortran标准函数库

Fortran标准函数库
Fortran标准函数库

附录 FORTRAN 90标准函数

符号约定:

●I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型。

●s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind 值=k)。

●[…]表示可选参数。

●*表示常用函数。

表1 数值和类型转换函数

函数名 说明

ABS(x)* 求x的绝对值∣x∣。x:I、R, 结果类型同x; x:C, 结果:R

AIMAG(x) 求x的实部。x:C, 结果:R

AINT(x[,kind])* 对x取整,并转换为实数(kind)。x:R, kind:I, 结果:R(kind)

AMAX0(x1,x2,x3,…)* 求x1,x2,x3,…中最大值。x I:I, 结果:R

AMIN0(x1,x2,x3,…)* 求x1,x2,x3,…中最小值。x I:I, 结果:R

ANINT(x[,kind])* 对x四舍五入取整,并转换为实数(kind)。x:R, kind:I, 结果:R(kind) CEILING(x)* 求大于等于x的最小整数。x:R, 结果:I

CMPLX(x[,y][,kind])) 将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,kind:I, 结果:C(kind) CONJG(x) 求x的共轭复数。x:C, 结果:C

DBLE(x)* 将x转换为双精度实数。x:I、R、C, 结果:R(8)

DCMPLX(x[,y]) 将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R, 结果:C(8) DFLOAT(x) 将x转换为双精度实数。x:I, 结果:R(8)

DIM(x,y)* 求x-y和0中最大值, 即MAX(x-y,0)。x:I、R, y的类型同x,结果类型同x DPROD(x,y) 求x和y的乘积,并转换为双精度实数。x:R, y:R, 结果:R(8)

FLOAT(x)* 将x转换为单精度实数。x:I, 结果:R

FLOOR(x)* 求小于等于x的最大整数。x:R, 结果:I

IFIX(x)* 将x转换为整数(取整)。x:R, 结果:I

IMAG(x) 同AIMAG(x)

INT(x[,kind])* 将x转换为整数(取整)。x:I、R、C, kind:I, 结果:I(kind)

LOGICAL(x[,kind])* 按kind值转换新逻辑值。x:L, 结果:L(kind)

MAX(x1,x2,x3,…)* 求x1,x2,x3,…中最大值。x I为任意类型, 结果类型同x I

MAX1(x1,x2,x3,…)* 求x1,x2,x3,…中最大值(取整)。x I:R, 结果:I

MIN(x1,x2,x3,…)* 求x1,x2,x3,…中最小值。x I为任意类型, 结果类型同x I

MIN1(x1,x2,x3,…)* 求x1,x2,x3…中最小值(取整)。x I:R, 结果:I

MOD(x,y)* 求x/y的余数,值为x-INT(x/y)*y。x:I、R, y的类型同x, 结果类型同x MODULO(x,y) 求x/y余数,值为x-FLOOR(x/y)*y。x:I、R, y的类型同x, 结果类型同x NINT(x[,kind])* 将x转换为整数(四舍五入)。x:R, kind:I, 结果:I(kind)

REAL(x[,kind])* 将x转换为实数。x:I、R、C, kind:I, 结果:R(kind)

SIGN(x,y)* 求x的绝对值乘以y的符号。x:I、R, y的类型同x, 结果类型同x

SNGL(x) 将双精度实数转换为单精度实数。x:R(8), 结果:R

ZEXT(x) 用0向左侧扩展x。x:I、L, 结果:I

表2 三角函数

函数名 说明

ACOS(x)* 求x的反余弦arccos(x)。x:R,结果类型同x,结果值域:0~π

ACOSD(x)* 求x的反余弦arccos(x)。x:R,结果类型同x,结果值域:0~180°

ASIN(x)* 求x的反正弦arcsin(x)。x:R,结果类型同x,结果为弧度,值域:0~π ASIND(x)* 求x的反正弦arcsin(x)。x:R,结果类型同x,结果为度,值域:0~180° ATAN(x)* 求x的反正切arctg(x)。x:R,结果类型同x,结果为弧度,值域:-π/2~π/2 ATAND(x)* 求x的反正切arctg(x)。x:R,结果类型同x,结果为度,值域:-90~90° ATAN2(y,x) 求x的反正切arctg(y/x)。y:R,x和结果类型同x,结果值域:-π~π ATAN2D(y,x) 求x的反正切arctg(y/x)。y:R,x和结果类型同x,结果值域:-180~180° COS(x)* 求x的余弦cos(x)。x:R、C,x取值弧度,结果类型同x

COSD(x)* 求x的余弦cos(x)。x:R,x取值度,结果类型同x

COSH(x) 求x的双曲余弦ch(x)。x:R,结果类型同x

COTAN(x)* 求x的余切ctg(x)。x:R,x取值度,结果类型同x

SIN(x)* 求x的正弦sin(x)。x:R、C,x取值弧度,结果类型同x

SIND(x)* 求x的正弦sin(x)。x:R,x取值度,结果类型同x

SINH(x) 求x的双曲正弦sh(x)。x:R,结果类型同x

TAN(x)* 求x的正切tg(x)。x:R,x取值弧度,结果类型同x

TAND(x)* 求x的正切tg(x)。x:R,x取值度,结果类型同x

TANH(x) 求x的双曲正切th(x)。x:R,结果类型同x

注:三角函数名前有C、D的函数为复数、双精度型函数。

表3 指数、平方根和对数函数

函数名 说明

ALOG(x) 求x的自然对数ln(x)。x:R(4),结果:R(4)

ALOG10(x) 求x以10为底一般对数log10(x)。x:R(4),结果:R(4)

EXP(x)* 求指数,即e x。x:R、C,结果类型同x

LOG(x)* 求自然对数,即e x。x:R、C,结果类型同x

LOG10(x)* 求以10为底对数,即。x:R,结果类型同x

SQRT(x)* 求x的平方根。x:R、C,结果类型同x

注:指数函数名、平方根函数名、对数函数名前有C、D的函数为复数、双精度型函数。

表4 参数查询函数

函数名 说明

ALLOCATED(a)* 判定动态数组a是否分配内存。a:A,结果:L,分配:.TRUE.,未分配:.FALSE. ASSOCIATED(p[,t])*判定指针p是否指向目标t。p:P,t:AT,结果:L,指向:.TRUE.,未指向:.FALSE. DIGITS(x) 查询x的机内编码数值部分二进制位数(除符号位和指数位)。x:I、R,结果:I EPSILON(x)* 查询x类型可表示的最小正实数。x:R,结果类型同x。最小正实数:1.1920929E-07 HUGE(x)* 查询x类型可表示的最大数。x:I、R,结果类型同x

ILEN(x) 查询x的反码值。x:I,结果类型同x

KIND(x)* 查询x的kind参数值。x:I、R、C、CH、L,结果:I

MAXEXPONENT(x)* 查询x的最大正指数值。x:R,结果:I(4)

MINEXPONENT(x)* 查询x的最大负指数值。x:R,结果:I(4)

PRECISION(x)* 查询x类型有效数字位数。x:R、C,结果:I(4)

PRESENT(x) 查询可选形参x是否有对应实参。x:AT,结果:L。有:.TRUE.,没有:.FALSE. RADIX(x) 查询x类型的基数。x:I、R,结果:L

RANGE(x)* 查询x类型的指数范围。x:I、R、C,结果:I(4)

SIZEOF(x)* 查询x的存储分配字节数。x:AT,结果:I(4)

TINY(x)* 查询x的最小正值。x:R,结果类型同x

表5 实数检测和控制函数

函数名 说明

EXPONENT(x)* 求实数x机内编码表示的指数值。x:R,结果:I

FRACTION(x)* 求实数x机内编码表示的小数值。x:R,结果类型同x

NEAREST(x,s) 根据s的正负号求最接近x的值。x:R,结果:R,且不为0

RRSPACING(x) 求x与系统最大数之间的差值。x:R,结果类型同x

SCALE(x,I)* 求x乘以2i。x:R,i:I,结果类型同x

SET_EXPONENT(x,i) 求由x的机内编码小数值与指数i组成的实数。x:R,i:I,结果类型同x SPACING(x)* 求x与x最近值的差值绝对值。x:R,结果类型同x

表6 字符处理函数

函数名 说明

ACHAR(n) 将ASCII码n转换为对应字符。n:I,n值域:0~127,结果:CH(1)

ADJUSTL(string)* 将字符串string左对齐,即去掉左端空格。string:CH(*),结果类型同string ADJUSTR(string)* 将字符串string右对齐,即去掉右端空格。string:CH(*),结果类型同string CHAR(n)* 将ASCII码n转换为对应字符。n:I,n值域:0~255,结果:CH(1)

IACHAR(c)* 将字符c转换为对应的ASCII码。c:CH(1),结果:I

ICHAR(c)* 将字符c转换为对应的ASCII码。c:CH(1),结果:I

INDEX(s,ss[,b])* 求子串ss在串s中起始位置。s:CH(*),ss:CH(*),b:L,结果:I。b为真从右起 LEN(s)* 求字符串s的长度。s:CH(*),结果:I

LEN_TRIM(s)* 求字符串s去掉尾部空格后的字符数。s:CH(*),结果:I

LGE(s1,s2)* 按ASCII码值判定字符串s1大于等于字符串s2。s1:CH(*),s1:CH(*),结果:L LGT(s1,s2)* 按ASCII码值判定字符串s1大于字符串s2。s1:CH(*),s1:CH(*),结果:L LLE(s1,s2)* 按ASCII码值判定字符串s1小于等于字符串s2。s1:CH(*),s1:CH(*),结果:L LLT(s1,s2)* 按ASCII码值判定字符串s1小于字符串s2。s1:CH(*),s1:CH(*),结果:L REPEAT(s,n)* 求字符串s重复n次的新字符串。s:CH(*),n:I,结果:CH(*)

SCAN(s,st[,b]) 求串st中任一字符在串s中的位置。s:CH(*),ss:CH(*),b:L,结果:I

TRIM(s)* 求字符串s去掉首尾部空格后的字符数。s:CH(*),结果:CH(*)

VERIFY(s,st[,b]) 求不在串st中字符在s中位置。s:CH(*),ss:CH(*),b:L,结果:I。b为真右起

表7 二进制位操作函数

函数名 说明

BIT_SIZE(n)* 求n类型整数的最大二进制位数。n:I,结果类型同n

BTEST(n,p) 判定整数n的二进制表示右起第p位是否为1。n:I,p:+I,p值域:0~64结果:L IAND(m,n)* 对m和n进行按位逻辑“与”运算。m:I,n:I,结果类型同m

IBCHNG(n,p) 将整数n二进制表示右起第p位值取反。n:I,p:+I,p值域:0~64结果类型同n IBCLR(n,p) 将整数n二进制表示右起第p位置0。n:I,p:+I,p值域:0~64结果类型同n IBITS(i,p,l) 从整数n二进制表示右起第p位开始取l位。n:I,p:+I,l:+I,结果类型同n IBSET(n,p) 将整数n二进制表示右起第p位置1。n:I,p:+I,p值域:0~64结果类型同n IEOR(m,n)* 对m和n进行按位逻辑“异或”运算。m:I,n:I,结果类型同m

IOR(m,n)* 对m和n进行按位逻辑“或”运算。m:I,n:I,结果类型同m

ISHA(n,s)* 对n向左(s为正)或向右(s为负)移动s位(算术移位)。n:I,s:I,结果类型同n ISHC(n,s)* 对n向左(s为正)或向右(s为负)移动s位(循环移位)。n:I,s:I,结果类型同n ISHFT(n,s)* 对n向左(s为正)或向右(s为负)移动s位(逻辑移位)。n:I,s:I,结果类型同n ISHFTC(n,s[,size])对n最右边size位向左(s为正)或向右(s为负)移动s位(循环移位)

ISHL(n,s) 对n向左(s为正)或向右(s为负)移动s位(逻辑移位)。n:I,s:I,结果类型同n NOT(n)* 对n进行按位逻辑“非”运算。n:I,结果类型同n

表8 数组运算、查询和处理函数

函数名 说明

判定逻辑数组m各元素是否都为“真”。m;L-A,d:I,结果:L(缺省d)或L-A(d= ALL(m[,d])*

维)

ALLOCATED(a)* 判定动态数组a是否分配存储空间。a:A,结果:L。分配:.TRUE.,未分配.FALSE.

判定逻辑数组m是否有一元素为“真”。m;L-A,d:I,结果:L(缺省d)或L-A(d= ANY(m[,d])*

维)

COUNT(m[,d])* 计算逻辑数组m为“真”元素个数。m;L-A,d:I,结果:I(缺省d)或I-A(d=维) CSHIFT(a,s[,d])* 将数组a元素按行(d=1或缺省)或按列(d=2)且向左(d>0)或向右循环移动s次 EOSHIFT(a,s[,b][,d])将数组a元素按行(d=1或缺省)或按列(d=2)且向左(d>0)或向右循环移动s次 LBOUND(a[,d])* 求数组a某维d的下界。a;A,d:I,结果:I(d=1或缺省)或A(d=2)

MATMUL(ma,mb)* 对二维数组(矩阵)ma和mb做乘积运算。ma:A,mb:A,结果:A

MAXLOC(a[,m])* 求数组a中对应掩码m为“真”最大元素下标值。a:A,m:L-A,结果:A,大小=维数MAXVAL(a[,d][,m])*求数组a中对应掩码m为“真”元素最大值。a:A,d:I,m:L-A,结果:A,大小=维数MERGE(ts,fs,m) 将数组ts和fs按对应m掩码数组元素合并,掩码为“真”取ts值,否则取fs值MINLOC(a[,m])* 求数组a中对应掩码m为“真”最小元素下标值。a:A,m:L-A,结果:A,大小=维数MINVAL(a[,d][,m])*求数组a中对应掩码m为“真”元素最小值。a:A,d:I,m:L-A,结果:A,大小=维数PACK(a,m[,v]) 将数组a中对应m掩码数组元素为“真”元素组成一维数组并与一维数组v合并PRODUCT(a[,d][,m])数组a中对应掩码m为“真”元素乘积。a:A,d:I,m:L-A,结果:A,大小=维数 RESHAPE(a,s)* 将数组a的形按数组s定义的形转换。数组形指数组维数、行数、列数、… SHAPE(a) 求数组a的形。a:A,结果:A(一维)

SIZE(a[,d])* 求数组a的元素个数。a:A,d:I,结果:I

SPREAD(a,d,n) 以某维d扩展数组a的元素n次。a:A,d:I,n:I,结果:A

SUM(a[,d][,m])* 数组a中对应掩码m为“真”元素之和。a:A,d:I,m:L-A,结果:A,大小=维数 TRANSPOSE(a).* 对数组a进行转置。a:A,结果:A

LBOUND(a[,d])* 求数组a某维d的上界。a;A,d:I,结果:I(d=1或缺省)或A(d=2)

UNPACK(a,m,f) 将一维数组a、掩码数组m值和f值组合生成新数组。a;A,m:L-A,f:同a,结果:A

注: 参数m指逻辑型掩码数组,指明允许操作的数组元素。缺省掩码数组指对数组所有元素进行操作。

Matlab工具箱中的BP与RBF函数

Matlab工具箱中的BP与RBF函数 Matlab神经网络工具箱中的函数非常丰富,给网络设置合适的属性,可以加快网络的学习速度,缩短网络的学习进程。限于篇幅,仅对本章所用到的函数进行介绍,其它的函数及其用法请读者参考联机文档和帮助。 1 BP与RBF网络创建函数 在Matlab工具箱中有如表1所示的创建网络的函数,作为示例,这里只介绍函数newff、newcf、newrb和newrbe。 表 1 神经网络创建函数 (1) newff函数 功能:创建一个前馈BP神经网络。 调用格式:net = newff(PR,[S1 S2...S Nl],{TF1 TF2...TF Nl},BTF,BLF,PF) 参数说明: ?PR - R个输入的最小、最大值构成的R×2矩阵; ?S i–S NI层网络第i层的神经元个数; ?TF i - 第i层的传递函数,可以是任意可导函数,默认为'tansig',可

设置为logsig,purelin等; ?BTF -反向传播网络训练函数,默认为'trainlm',可设置为trainbfg,trainrp,traingd等; ?BLF -反向传播权值、阈值学习函数,默认为'learngdm'; ?PF -功能函数,默认为'mse'; (2) newcf函数 功能:创建一个N层的层叠(cascade)BP网络 调用格式:net = newcf(Pr,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) 参数同函数newff。 (3) newrb函数 功能:创建一个径向基神经网络。径向基网络可以用来对一个函数进行逼近。newrb函数用来创建一个径向基网络,它可以是两参数网络,也可以是四参数网络。在网络的隐层添加神经元,直到网络满足指定的均方误差要求。 调用格式:net = newrb(P,T,GOAL,SPREAD) 参数说明: ?P:Q个输入向量构成的R×Q矩阵; ?T:Q个期望输出向量构成的S×Q矩阵; ?GOAL:均方误差要求,默认为0。 ?SPREAD:分散度参数,默认值为1。SPREAD越大,网络逼近的函数越平滑,但SPREAD取值过大将导致在逼近变化比较剧烈的函数时神经元过多,若SPREAD取值过小,则导致在逼近平滑函数时,

中国海洋大学Fortran程序考试典型题

1、找出100-150之间和400-450之间能被9整除的数 2、找出100-999之间的回文数 3、找出水仙花数

4、输出“*”图形 5、输入n个数,找出大于平均值的数和最小数

6、把一个数值型数组的相同数删除到只剩一个 7、形成一个5*5矩阵,对角线元素为“i”,其余为“j”program juzhen implicit none integer I,J integer,parameter::size=5 integer::a(size,size) forall(I=1:size,J=1:size,I>J) a(I,J)=j forall(I=1:size,J=1:size,I==J) a(I,J)=i forall(I=1:size,J=1:size,I

integer,allocatable::c(:) write(*,*) "输入数组A的数据个数" read(*,*) n write(*,*) "输入数组B的数据个数" read(*,*) m l=m+n allocate (a(n)) allocate (b(m)) allocate (c(l)) write(*,*) "从小到大输入A的元素" do i=1,n read(*,*) a(i) end do write(*,*) "从小到大输入B的元素" do i=1,m read(*,*) b(i) end do do i=1,n c(i)=a(i) end do i=1 do while(i=c(n))then n=n+1 c(n)=b(i) goto 10 else if(b(i)>c(j).and.b(i)

FORTRAN程序设计复习题及答案

FORTRAN程序设计复习题 一、选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= B) .NOT. (A*B+C) C) A2+B2/(C+D) <= D) (A+B).NOT.A*B.GT.(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/ C) (3/5)*EXP(X+Y)D) EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.D) A.LT.B.LT.C.LT.D D(4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(正确描述:主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77表达式中,合法的是: A) .AND.. B) 10.0 C) D) 提示:A)相当于 .AND.(.NOT.()) D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列C) 第6列D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 提示:子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+"的值是 A) B) 1 C) D) 0 提示:2/4默认等于整型,=》 D (12)FORTRAN表达式"MOD,"的值是 A) B)0.0 C) D) A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符*

FORTRAN 90 程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。

fortran程序实例

1)实例3—求多个半径下的圆周长 ! z3.f90 --Fortran95 ! FUNCTIONS: ! z3 - Entry point of console application. !************************************************************************* ! PROGRAM: z3 ! PURPOSE: Entry point for the console application. !************************************************************************ program z3 ! 求多个半径下的圆周长 ! 主程序 ! PROGRAM Z3 PRINT *, 'R=',1.2,'C=',C(1.2) PRINT *, 'R=',3.4,'C=',C(3.4) PRINT *, 'R=',15.6,'C=',C(15.6) PRINT *, 'R=',567.3,'C=',C(567.3) END program z3 !子程序 FUNCTION C(R) PI=3.1415926 C=2*PI*R RETURN ! Body of z3 end

2)实例4—键盘与显示器输入/输出 a)Fortran 基本操作 b)程序指令 ! ZXZ_I_O.f90 ! FUNCTIONS: ! ZXZ_I_O - Entry point of console application. ! PROGRAM: ZXZ_I_O ! PURPOSE: Entry point for the console application. !***************输入、输出样式种种************************** program ZXZ_I_O implicit none !变量声明的位置 INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL n INTEGER A,B ! Variables PRINT*,'输入整数A'; READ*, A PRINT*,'输入整数B'; READ*, B B=A+B PRINT*,'B=A+B=',B WRITE(*,*) 'A*B=',A*B PRINT* ,'以上为计算机的计算结果,注意B的值'

fortran程序30个

程序1 PROGRAM chaper1272 INTEGER :: A(10)=(/5,7,4,8,12,2,10,3,9,11/) INTEGER :: sum=0,ave !打开一数据文件,设置一个有格式直接存取文件,将10个数分2个记录写入文件。 !数据文件生成2个记录,每个记录行长度相同,记录长度为25 OPEN(1,FILE='input21.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=25) WRITE(1,"(5I5)",REC=1)(A(I)+10,I=1,5) !按格式说明将头5个数写入第1个记录 WRITE(1,"(5I5)",REC=2)(A(I)+10,I=6,10)!按格式说明将后5个数写入第2个记录 READ(1,"(5I5)",REC=2)(A(I),I=6,10) !按格式说明从第2个记录中读取后5个数 READ(1,"(5I5)",REC=1)(A(I),I=1,5) !按格式说明从第1个记录中读取头5个数 DO I=1,10 sum=sum+A(I) ENDDO ave=sum/10 !打开一个最大记录长度为22的有格式顺序存取文件

OPEN(2,FILE='input22.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=22) WRITE(2,"('10个数之和为:',I5)",REC=1) sum !输出1记录行,记录长度为22 WRITE(2,"('10个数平均值为:',I5)",REC=2)ave !输出1记录行,记录长度为22 WRITE(2,"(A)",REC=3) '程序运行正常结束。' !输出一个记录行,记录长度为22 END 程序2 PROGRAM average REAL sum,ave INTEGER n OPEN(1,file='score.dat') PRINT*,'正在统计平均成绩,请等待。' sum=0.0;n=0 DO READ(1,*,END=100) S sum=sum+s n=n+1 ENDDO 100 ave=sum/n

BP算法及径向基函数网络

BP 算法及径向基函数网络 B0503194班 高翔 1050319110 杨柳青 1050319113 题目1: 2.5 利用BP 算法及Sigmoid 算法,研究以下各函数的逼近问题: (1) 1 () , 1x 100f x x = ≤≤ (2) 10()log x , 1x 10f x =≤≤ (3) ()exp() , 1x 10f x x =-≤≤ (4) ()sin , 1x 2 f x x π =≤≤ 解:该题可以采用BP 神经网络或者是径向基函数网络来解决,首先给出我们利用BP 网络的解决方法,关于如何利用径向基函数网络来解决问题,放在2.6 题中的通过径向基函数网络解决XOR 问题一起讨论。 一、 概述 人工神经网络作为一门20世纪中叶起步的新技术,随着其理论的逐步完善,其应用日益广泛,应用领域也在不断拓展,已经在各个工程领域里得到了广泛的应用。通常神经网络技术主要应用在以下方面。 模式信息处理和模式识别。 最优化问题计算。 信息的智能化处理。 复杂控制。 信号处理。 在1959年,当时的两位美国工程师B.Widrow 和M.Hoff 提出了自适应线形元件。在 1969年,人工智能的创始人之一M.Minsky 和S.Papert 指出单层感知器只能够进行线形分类,对线形不可分的输入模式,哪怕是简单的异或逻辑运算,单层感知器也无能为力,而解决其的唯一方法就是设计训练出具有隐含层的多层神经网络。这一难题在1986年得到了解决。 1986年,D.E. Rumelhart 等人提出解决多层神经网络权值修正的算法——误差反向传播法(Error Back-Propagation )。这种算法也通常被应用在BP (Back-Propagation Network )中。 在目前,在人工神经网络的实际应用中,绝大部分的神经网络模型(80%--90%)是采

Fortran程序总结

1.行的书写(行的长度、分行、续行) 一行可以是0~132个字符,空格有意义, 语句最长不超过2640个字符 一行可以有多个语句,用“;”分隔 一个语句可分行写,读行标记为&(放在尾部),但如为关键字,首尾均加&。 最多可有511个续行。 2.说明语句必须出现在可执行语句之前,格式说明语句(FORMAT语句)除外。 3.注释标志符: 自由格式:!固定格式:C * 语句分隔符:分号;(仅自由格式可以使用) 续行符:自由格式:& 申明标号:1到5位无符号整数 空格:关键字、变量、常量内部不能用空格,但相邻两者之间须用空格 4.信息处理的分类:数值处理和信息处理 现代计算机工作原理:程序存储和程序控制(冯·诺依曼) 1、运算器——算术运算、逻辑运算 2、控制器——根据指令控制计算机工作 运算器、控制器和寄存器称为中央处理器CPU 3、I/O设备——提供数据传输服务 4、总线——数据传输的公共通道 1.机器语言:二进制代码形式,可以被计算机直接执行,不可移植 2.汇编语言:用助记符来代替机器指令,容易记忆,不可移植 3.高级语言:接近自然语言(英语)的程序设计语言,又称算法语言,易学、易用、易 维护,可移植性好例:FORTRAN、BASIC、PASCAL、C、LISP、PROLOG等 5.FORTRAN90程序是一种分块结构,由若干个程序单元块组成: 主程序、外部子程序、模块、块数据单元无论是主程序单元,还是子程序单元,都是独立的程序单位,应该独立编写,它们的形式相似。 非语句行:注释语句:!后的所有字符都被编译器忽略。可独占一行,也可在其它语句之后,空行为注释行(固定格式用C和*) 6.常量的定义:常量是程序执行过程中不能变化的量。 基本数据类型有五种:整型、实型、复型、字符型和逻辑型 前三种属于数值类型,后两种为非数值类型,主要用于文字处理和控制。 FORTRAN 90通过KIND值确定整数的存储开销、最大位数和取值范围,如表所示。缺省KIND 值则取默认值4。 KIND值字节数二进位数取值范围 1 1 8 -128~127 2 2 16 -32768~32767 4 4 32 -2147483648~2147483647 格式:SELECTEND_INT_KIND(N) : 功能:返回范围在-10N~10N的整数的kind-Value 在FORTRAN90中,也可以表示二进制、八进制、十六进制形式的无符号整数。其形式如下:二进制数:B’101101’ 或B”101101” 八进制数:O’76210’ 十六进制数:Z’1FA2’

代理模型中的径向基函数以及matlab程序

径向基函数 利用样本点x i的响应值, 通过基函数的线性叠加来计算待测点x 处响应值的径向基模型的基本形式如下: f x=w i??r i n i=1 =w Tφ 其中权系数w=w1,w2,···,w n T,φ= ?r1,?r2,···,?r n T r i= x?x i是待测点x与样本点x i之间的欧氏距离 ?r是径向函数 常用的径向函数有Gauss函数?r=exp ?r 2 c2 Multiquadric函数?r=r2+c21 2,c是给定大于零的常数 根据插值条件f x j=y i j=1,···,n,可得方程组 ??w=Y 矩阵?= ?ij= ? x i?x j 向量Y=y1,?,y n T i,j=1,?,n 在样本点不重合且函数?为征订函数,上式存在唯一解 w=??1?Y

附:MATLAB程序 %求解RBF方程的系数 function b=RBFMain() clc; clear; %读取插值点的数据 Num=xlsread('set_of_test.xlsx'); [row,line]=size(Num); %读取插值点的结果 F=xlsread('result_of_weight.xlsx'); %计算r值 r=eye(row); for i=1:row for j=1:row temp=0; for k=1:line temp=temp+(Num(i,k)-Num(j,k))^2; end r(i,j)= sqrt(temp+1); end end %求解方程系数 b=r\F; %写入excel xlswrite('set_of_coefficient.xlsx',b); end %RBF径向基函数主程序 function result=RBFMain2() clear;clc; %插值点 Input=xlsread('set_of_test.xlsx'); [row,line]=size(Input); %需要预测的一组插值点 X=xlsread('set_of_indict.xlsx'); %读取系数 b=xlsread('set_of_coefficient.xlsx'); %计算r值 r=[]; for i=1:row temp=0;

计算材料学Fortran程序汇总

INTEGER M(1:10000), NUMBER1(0:364), NUMBER2 REAL X,Y ISEED=RTC() DO J=1, 10000 NUMBER1=0 X=RAN(ISEED) NUMBER1(0)=INT(365*X+1) JJJ=1 DO I=1,364 Y=RAN(ISEED) NUMBER2=INT(365*Y+1) ETR=COUNT(NUMBER1.EQ.NUMBER2) IF (ETR= =1) THEN EXIT ELSE JJJ=JJJ+1 M(J)=JJJ NUMBER1(I)=NUMBER2 END IF END DO END DO DO I=1,10000 IF(M(I).LE.23) SUM=SUM+1 END DO PRINT *,SUM/10000 END ================================================= Monte Carlo Simulation of One Dimensional Diffusion INTEGER X,XX(1:1000,1:1000) REAL XXM(1:1000) ! X:INSTANTANEOUS POSITION OF ATOM ! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃 ! XXM(I): THE MEAN OF XX WRITE(*,*) "实验天数JMAX,实验次数IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第几天实验 X=0 !!! DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN<0.5)THEN X=X+1 ELSE X=X-1 END IF XX(J,I)=X*X END DO END DO OPEN(1,FILE="C:\DIF1.DAT") DO I=1,IMAX XXM=0.0 XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !! WRITE(1,*) I, XXM(I) END DO CLOSE(1) END ============================================================ ! Monte Carlo Simulation of Two Dimensional Diffusion INTEGER X,Y,XY(1:1000,1:1000) REAL XYM(1:1000) ! X:INSTANTANEOUS POSITION OF ATOM ! XY(J,I):X*Y ,J:第几天实验,I:第几步跳跃 ! XYM(I): THE MEAN OF XY WRITE(*,*) "实验天数JMAX,实验次数IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第几天实验 X=0 !!! Y=0 !!! DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN.LT.0.25)THEN x=x y=y-1 END IF IF(RN.LT.0.5.AND.RN.GE.0.25)THEN x=x y=y+1 END IF IF(RN.LT.0.75.AND.RN.GE.0.5)THEN

FORTRAN经典入门程序20例

对于FORTRAN的初学者。这些例子可作为小练习。 1.例题:计算工资问题。每小时工资为RATE,如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。 C Payroll with overtime program payroll real rate, hours, pay read (*,*) rate, hours if (hours>40) then pay=40*rate+(hours-40)*1.5*rate else pay=hours*rate END IF print *,"rate=", rate print *, "hours=", hours print *,"pay=",pay end 2.学生成绩问题。大于80为A级。大于60小于80为B级。小于60为C级。IF的嵌套。注意空格可以看清楚else if ,end if,print的内容. PROGRAM GRADESTUDENT READ *,GRADE IF (GRADE .GE. 80) THEN PRINT *,GRADE,"GRADE=>A" ELSE IF (GRADE.LT.60) THEN PRINT*,GRADE,"GRADE=>C" ELSE PRINT*,GRADE,"GRADE=>B" END IF END IF END 3.三个数按从小到大排序。 PROGRAM MAXMIN REAL A,B,C,T READ *,A,B,C IF (A.GT.B) THEN T=A A=B B=T ELSE END IF IF (B.GT.C) THEN T=B B=C

PROGRAM EQUATION READ (*,*) X IF (X .GE. 0.0) Y=3*X+6 IF (X .LT. 0.0) Y=-X**2+2*X-8 PRINT *,"X=",X, "Y=",Y END 6.CONTINUE语句。为了使循环的起止范围清晰,使用终端语句 例:求5! program ex1 FACT=1 do 10, N=1,5,1 ##DO 语句标号,循环不变量=初值,终值,步长FACT=FACT*N 10continue print*,FACT end 求1!+2!+3!+···+N! READ *,N FACT=1

优秀的fortran程序编程规范

Programming Guidelines for PARAMESH Software Development(NOTE: This document is heavily based upon the Introduction This document describes the programming guidelines to be used by software developers wishing to contribute software to the PARAMESH, parallel, adaptive mesh refinement software. We welcome people to contribute software and/or bug fixes to the PARAMESH AMR software. Software to be added to PARAMESH can come in 2 forms: ?Improvements to the basic PARAMESH kernal software found in the mpi_source, source and hearders directories. ?Software the addes additional functionality to PARAMESH. This type of software should be added as separate entities within the utilities directory. Complete applications should not be added as part of PARAMESH. PARAMESH is only meant to be a tool which supports parallel adaptive mesh applications and any software which supports this goal will be considered for acceptance into PARAMESH. For instance, a solver for the poisson equation that works with PARAMESH would be acceptable, but an application that solves the equation of gas dynamics would not. The PARAMESH software is slowly being evolved to be consistent with this document. Any new software which is contributed should follow these guidlines. If not, it will be rejected. This document deals mainly with Fortran 90, since most new PARAMESH software will probably be written in that language. [Throughout this document, the term "Fortran" should be understood to mean Fortran 90.] Since we expect C and C++ also to be used, a separate document dealing with them will be developed in the future. In the meantime, this document can serve as a general guideline for developing code to be used with PARAMESH in those programming languages. The guidlines in this document should be adhered to by ANY software which will be released as part of the PARAMESH package of source code. This includes software 'utilities' (stored in the paramesh/utilities directory) which add functionality to PARAMESH for different algorithms. It also should be applied to any new code developed and added to the main source code for PARAMESH in the paramesh/source, paramesh/mpi_source, or paramesh/headers directories.

Fortran95程序设计习题答案

Fortran95程序设计习题答案 第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为 'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去 write(*,*) rb/ra ! 输出 1.5 5.program main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/ 2.54 write(*,"(f8.3'米 ='f8.3'厘米 ='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五 章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为 'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄"

径向基核函数 (Radial Basis Function)–RBF

径向基核函数 (Radial Basis Function)–RBF 发表于297 天前?技术, 科研?评论数 8?被围观 3526 views+ 论文中又提到了RBF,虽然是个简单的核函数,但是也再总结一下。关于SVM中的核函数的选择,比较简单和应用比较广的是RBF。 所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。 最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 , 控制 了函数的径向作用范围。 建议首选RBF核函数,因为: 1.能够实现非线性映射;(线性核函数可以证明是他的一个特例;SIGMOID 核函数在某些参数上近似RBF的功能。) 2.参数的数量影响模型的复杂程度,多项式核函数参数较多。 3.the RBF kernel has less numerical difficulties. ———–那么,还记得为何要选用核函数么?———– 对于这个问题,在Jasper’s Java Jacal博客《SVM入门(七)为何需要核函数》中做了很详细的阐述,另外博主对于SVM德入门学习也是做了很详细的阐述,有兴趣的可以去学习,丕子觉得这个文章写得相当好,特意转载了过来,留念一下。 如果提供的样本线性不可分,结果很简单,线性分类器的求解程序会无限循环,永远也解不出来。这必然使得它的适用范围大大缩小,而它的很多优点我们实在不原意放弃,怎么办呢?是否有某种方法,让线性不可分的数据变得线性可分呢? 例子是下面这张图:

FORTRAN经典入门程序20例

a t i m e a n d A l t g s i n b e i n s o 对于FORTRAN 的初学者。这些例子可作为小练习。 1.例题:计算工资问题。每小时工资为RATE,如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。 C Payroll with overtime program payroll real rate, hours, pay read (*,*) rate, hours if (hours>40) then pay=40*rate+(hours-40)*1.5*rate else pay=hours*rate END IF print *,"rate=", rate print *, "hours=", hours print *,"pay=",pay end 2.学生成绩问题。大于80为A 级。大于60小于80为B 级。小于60为C 级。 IF 的嵌套。注意空格可以 看清楚else if ,end if,print 的内容. PROGRAM GRADESTUDENT READ *,GRADE IF (GRADE .GE. 80) THEN PRINT *,GRADE,"GRADE=>A" ELSE IF (GRADE.LT.60) THEN PRINT *,GRADE,"GRADE=>C" ELSE PRINT *,GRADE,"GRADE=>B" END IF END IF END 3.三个数按从小到大排序。PROGRAM MAXMIN REAL A,B,C,T READ *,A,B,C IF (A.GT.B) THEN T=A A=B B=T ELSE END IF IF (B.GT.C) THEN T=B B=C

fortran程序汇总

计算圆周率 REAL R,R1,R2,PI ISEED=RTC() N0=0 N=300000 DO I=1,N R1=RAN(ISEED) R2=RAN(ISEED) R=SQRT(R1*R1+R2*R2) IF(R<1.0)N0=N0+1 END DO PI=4.0*N0/N WRITE(*,*)PI END 一)蒙特卡洛计算生日问题 假设有N个人在一起,各自的生日为365天之一,根据概率理论,与很多人的直觉相反,只需23个人便有大于50%的几率人群中至少有2个人生日相同。 INTEGER M(1:10000), NUMBER1(0:364), NUMBER2 REAL X,Y ISEED=RTC() DO J=1, 10000 NUMBER1=0 X=RAN(ISEED) NUMBER1(0)=INT(365*X+1) JJJ=1 DO I=1,364 Y=RAN(ISEED) NUMBER2=INT(365*Y+1) ETR=COUNT(NUMBER1.EQ.NUMBER2) IF (ETR= =1) THEN EXIT ELSE JJJ=JJJ+1 M(J)=JJJ NUMBER1(I)=NUMBER2 END IF END DO END DO DO I=1,10000 IF(M(I).LE.23) SUM=SUM+1 END DO PRINT *,SUM/10000 END 二)MONTE CARLO SIMULATION OF ONE DIMENSIONAL DIFFUSION 蒙特卡罗计算一维扩散问题

INTEGER X,XX(1:1000,1:1000) REAL XXM(1:1000) ! X:INSTANTANEOUS POSITION OF ATOM ! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃 ! XXM(I): THE MEAN OF XX WRITE(*,*) "实验天数JMAX,实验次数IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第几天实验 X=0 !!! DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN<0.5)THEN X=X+1 ELSE X=X-1 END IF XX(J,I)=X*X END DO END DO OPEN(1,FILE="C:\DIF1.DAT") DO I=1,IMAX XXM=0.0 XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !! WRITE(1,*) I, XXM(I) END DO CLOSE(1) END 三维的! 三)通过该程序了解FORTRAN语言如何画图(通过像素画图)USE MSFLIB INTEGER XR,YR !在的区域中画一个圆 PARAMETER XR=400,YR=400 INTEGER R, S(1:XR,1:YR) X0=XR/2 ! 圆心位置X0,YO Y0=YR/2 R=MIN(X0-10,Y0-10) !圆半径 S=0 !像素的初始状态(颜色) DO I=1,XR DO J=1,YR IF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10 IER=SETCOLOR(S(I,J)) IER=SETPIXEL(I,J) END DO END DO END

相关文档
最新文档