《FORTRAN 95程序设计》学习笔记
更新时间:2023-09-27 17:12:01 阅读量: 综合文库 文档下载
- Fortran语言推荐度:
- 相关推荐
《Fortran95 程序设计》学习笔记 by 柳柳
《FORTRAN 95程序设计》学习笔记
66RPG gg
★ 目录 ★
《FORTRAN 95程序设计》学习笔记 .......................................................................................... 1
基础知识(基础、字符串、FORMAT、隐式、TYPE) .......................................................... 1 流程与控制(if、select、do)..................................................................................................... 4 数组(声明、隐式循环、整体操作、可变数组) .................................................................... 5 函数与子程序(子程序、函数、全局变量) ............................................................................ 6 MODULE与面向对象(重载操作符、虚函数) ...................................................................... 9 文件相关(OPEN、WRITE、READ) .................................................................................... 10 指针(指向变量、数组、函数) ......................................................................................... 11 Visual Fortran 编译器(DLL,VB调用) .......................................................................... 12 数值算法与IMSL(数值算法插件) .................................................................................. 14 常用库函数(数学、数组、零碎、子程序) ..................................................................... 15
基础知识(基础、字符串、FORMAT、隐式、TYPE)
★ 【小玩意】二进制观察器:装在M.. Visual Studio\\DF98\\bin,有一个Bitviewer,可以观
察变量储存方式
★ 【语法】续行:行结尾或行开头使用 & 符号;注释:使用 ! 符号 ★ 【语法】数学表达式:+ ;- ;* ;/ ;( ;) ;**乘幂 ★ 【语法】程序结束:STOP (Ruby的exit)
★ 【语法】输出:write(*,*),完整写法:write(unit=*,fmt=*)
? 建议:少用print,尽量用write ★ 【语法】声明
? 整型:integer(kind=4) a ;其中kind是使用的bytes数,4 or 2
? 其他写法:integer*4 a; integer(4) a
? 浮点:real(kind=4) a ;有效数位6位(12345678存为1.234567E7),如果是kind8
则为15位有效数字
? 此外:1E10:单精10^10,1D10:双精10^10 ? 复数:complex :: a=(2,3)
第 1 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? 实部:real(a) ;虚部:imag(a) ? 布尔型:Logical,.true. 和 .false. ★ 【语法与函数】字符串:character(20) string
? 注意理解,fortran的弱智字符串就是一个长度不能变的一维的东西,极其猥琐,和
Java、Ruby不能相提并论的
? string(13:13) = “a” :对第13个字节的读、存 ? string(2:3) = “go”
? string(6) = “我的妈呀”:从第6个位置开始设置为“我的妈呀” ? a = string_a // string_b:用“//”连接两个字符串
? 【常用函数】char(num),ichar(char):ASCII码的转换相关功能
? 【常用函数】len(string),len_trim(string):长度,去掉尾部空格后的长度 ? 【常用函数】index(string,key):找key在string首出现的位置 ? 【常用函数】trim(string):返回去掉尾部空格的字符串(用途不大) ? 【函数】repeat(char,int):返回一个重复int次的char串
? character(len=20) string 普通声明;character(len=*) string 接收的时候可自动长度 ★ 【规范格式】FORMAT格式化
? e.g.
? write (*,100) A
? 100 format(I4) ?这里是100号标识调用的格式
? 参数控制符(前面加数字为重复次数,如4I6或I6。(其中a为一个int))
? A5 :输入/出 5个字符 ?常用功能 ? I5[.4] :输5位整数,最少4位 ?常用功能 ? BN,BZ :定义空格为无东西或为0
? F5.4,D5.4 :5位浮点数,小数占4位 ?其中前面一个常用 ? E5.1[E2] :5位浮点,小数占1位,指数占2位 ? 4X :4个空格 ?常用功能
? / 与 \\:/为中止本行,\\为强制不换行 ?强制不换行常用 ? Tn,TLn,TRn :移动到第n列 / 左移n列 / 右移n列 ? Write(*,”(2X,I5)”) a ;一般使用这种方法进行格式化即可,推荐。
? 注意,complex要用两个浮点数来输出
第 2 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
★ IMPLICIT命令(隐式表达)
? 默认:I、J、K、L、M、N为整数,其余浮点(不好) ? 隐式声明:
? implicit integer(A,B,C) : A、B、C开头的自动为整型,无需单独声明 ? implicit integer(A-F,I,K) :A-F、I、K开头的自动为整型 ? implicit real(M-P) : M-P开头自动视为浮点数
? implicit none : 无隐式声明,最常用,但个人认为在自己有把握的情况下还
是可以自定义一些隐式来方便程序书写
★ 【语法】常数parameter的声明
? 方法1:real,parameter :: pi=3.14 ? 方法2:
? real pi
? parameter(pi = 3.14)
★ 【常用功能】类型转换 (real ?? integer)
? real (int_a) :返回int_a的浮点数 ? int(real_a) :返回real_a的整型 ★ 【语法】设初值:integer :: a=1
★ 【语法】等价声明:equivalence(array(1,1,5) , A)
? 两者使用同一块内存,如上,调用A就是调用array(1,1,5),但是调用A比较快 ★ 【语法】type,自定义数据类型,可组合integer,real,char等,类似一个只有公开变量
的类
? type :: person ? character(20) :: name ? integer::age ? end type person ? 声明:type(person) :: a
? 使用:a%name,a.name (Ruby:一个全是attr_accessor的class)
★ 【用途不大的函数】kind的使用:select_ind_kind(n):返回记录n位整数所需的kind;
select_real_kind(n,e)n位有效,指数e位所需的kind
第 3 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
流程与控制(if、select、do)
★ 【语法】if条件分歧:
? if(逻辑) then ?注意,避免浮点数相等,浮点用abs(a-b)<误差的方法 ? 程序执行内容 ? else if(逻辑) then ? 程序执行内容? else
? 程序执行内容 ? end if
? 单行if:if(逻辑) then 内容
★ 【语法】逻辑标志:== .EQ. ;/= .NE. ;> .GT. ;>= .GE. ;<= .LE. ;.and. ;.or. ;.not. ★ 【语法】select case功能
? select case (某) ?这个某可以是整数和字符,Logical ? case (70:90) ?这个case只能用常数 ? 内容 ? case(60:69) ? 内容 ? case default ? 内容 ? end select
★ 【语法】两个小东西:pause:暂停;stop:退出 ★ 【语法】二进制的逻辑运算 iand 和 ior
? 举例:a = 2(二进制10);b=4(二进制100);c=iand(a,b) 则c=6 ★ 【语法】循环结构
? do I=1,5,1 ?分别是开始,结束,step,亦可do while(条件) ? 执行内容 ? enddo
★ 【流程控制语法】
第 4 页 共 16 页
< .LT. ;
《Fortran95 程序设计》学习笔记 by 柳柳
? cycle:执行下次循环 (Ruby:next) ? exit:循环中断 (Ruby:break) ★ 【署名的循环】
? outdo: do I=1,3 ? inner: do J=2,4
? 内容 ?署名后可以使用诸如if (..) exit outdo;if(..) cycle inner这种 ? end do inner ? end do outdo
★ 【语法】臭名昭著的:goto 行数
数组(声明、隐式循环、整体操作、可变数组)
★ 【语法】数组的声明:Datatype name(size) ?其中Datatype是类型也可是自定义的type
? 比如:integer a(10) 或 integer , dimension(10) :: a
? 类似声明多维数组:integer a(3,3) ?亦可a(0:3 , -3:3)这样自定义某维范围 ★ 【诡异东东】隐式循环与赋初值:Data A /1,2,3,4,5/ ;Data A /5*3/ ?5个3,不是计算
? Data(A(I),I=2,4,2) /2,4/ ?I=2,4,2隐式循环,起、末、STEP,类似do循环 ? Integer :: a(5) = (/1, (2, I=2,4), 5/) ?连续3次2,如果(I, I=2,4)则是2,3,4 ? Write隐式循环:write(*,”(I3,I3,/I3,I3)”)((m(r,c),c=1,2),r=1,2) ?连续输出m(1,1),
m(2,1), m(1,2), m(2,2)
? 初始化统一赋值:ingeter :: a(5) = 5 ;相当于a(1)=a(2)=..=a(5) = 5 ★ 【语法】数组整体操作:
? a = 5 ;将左右值设置为5
? a = (/1,2,3/);重设数值,大小要相同
? a = b;同位置的这是为相等数值。注意,不是地址连接,是赋值!
? a = b + c;a = b – c;a = b * c ;a = b / c;a = sin(b) :也是对位置整体的操作 ★ 【技巧】其他数组操作:
? a(3:5) = 5 ; a(3: ) = 5 ;a(1:3) = b(4:6);a(:,:)=b(:,:,1) ?如a(1-5,1-5)=b(1-5,1-5,1) ? a(1:10) = a(10:1:-1) 类隐式循环翻转a。注意这里的操作过程,先寄存右式,再赋
值左边
第 5 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
★ 【语法】WHERE
? where (a<3) ?对所有a<3的位置
? b = 1 ?设置b=1,注意,a、b同大小 ? else where ?亦可elsewhere (a>5)这样的东西 ? b = 2 ? end where
★ 【语法】FORALL:使用方法forall(范围1,范围2…条件)
? forall (I=1:5,J=1:5,a(I,J)/=0) a(I,J) = 1/a(I,J) ? 相当于:do I=1,5 ;do j=1,5; if a(I,J) /=0 …
★ 【内存细节】数组保存:假设一个A(3,3),则内存排列:
? A(1,1) => A(2,1) => A(3,1) => A(1,2) => A(2,2) => A(3,2) => A(1,3) => A(2,3) =>
A(3,3)。注意,为了使用告诉cache,应尽量使用编号相近的内容,选用内存相近的内容。所以integer::a(2,2)=(/1,2,3,4/)就是a(1,1)=1;a(2,1)=2;a(1,2)=3;a(2,2)=4,按内存分配4个东西。
★ 【语法】可变数组
? 声明: integer,allocatable :: a( : ) ?allocatable表示可变数组;a( : )表示可变一维数
组;多维的可以a(4,: ),a(: , : )这样。
? 分配内存: allocate(a(大小), stat=error) ?这个error整型,=0为成功,否则失败 ? 释放内存: deallocate(a)
? 判断是否已经分配内存:allocated(某),能够return .true. / .false. (Ruby: if xx != nil)
函数与子程序(子程序、函数、全局变量)
★ 【子程序】Subroutine
? program main ?主程序 ? 内容 ?主程序代码 ? end program main ?主程序结束
? subroutine sub1(参数) ?子程序1,调用方法:call sub1 ? 内容,注:可以使用return (Ruby return) ? end subroutine sub1 ?子程序1结束
第 6 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? 说明:子程序独立拥有属于自己的变量声明,同时子程序和Ruby一样也是传进来
地址,所以可以在子程序中修改传入内容的数值。
? 有关字符串:character(*) :: first,传进来的时候可以用*,大小任意。这种功能用于
子程序接受字符串或者初始化给定常量字符串,如:character(*),parameter :: a=”123”
★ 【函数】function
? 声明函数:real,external :: add ,分别定义返回类型,声明为函数,以及函数名。注
意,声明的时候不带参数。 ? function add(a,b)
? real :: add,a,b ?add为返回的参数 ? end function add
? 使用函数时的一个不成文规定:传递进来的东西,只读他的数值就好了,不要去改
变他的数值。
★ 【不推荐的方法】全局变量 (建议使用module)
? integer::a, b ? common a, b ? 使用的时候
? integer:: n1,n2
? common n1,n2 (只能和位置对应,和名字不对应,所以common多了比较无
奈。此时可以用比如common a(2)这样数组一类的,不过都不如用module) ? 此外还可以用比如common /group1/ a这样来分组,初始化需要用block data
写在主程序之外,如:
? block data ?主程序之前就执行,只能赋初值,注意全局变量不能做常量 ? integer a, b
? common /group1/ a,b ? data a,b /3,4/ ? end block data
★ 【小技巧】函数传递参数中的小技巧,不赋值初大小的数值
? subroutine userA(num,n2) ? integer :: num(*) ?不赋值大小
? integer :: n2(6) ?取地址中的前6个东西,汗。此处也可重设范围,如(-2,2)
第 7 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
★ 【提示】变量生存周期提示:Visual Fortran不自动释放变量内存,所以函数中使用变量
的时候一定要使用明显的初始化,不要设置integer :: a=1这样的初始化,因为这个是分配内存时的初始化,第二次执行函数会被无视。 ★ 【语法技巧】传递函数:
? real,external :: func ?声明自定义函数 ? real,intrinsic :: sin ?声明sin是库函数 ? call execfun(sin)
? subroutine execfun(f) ?子程序定义 ? real,external :: f ? write(*,*) f(1.0) ? end subroutine
★ 【猥琐】子程序中的特殊参数:integer,intent(in) :: a; integer,intent(out):: b 表示a只读,b
应被重新赋值。这只是编程的时候让编译器帮忙检查错误,对实际没有意义。 ★ 【语法】函数的使用接口(Interface)
? 用途:1、返回数组,2、参数数目不定,3、返回指针,4、制定参数位置等 ? 举例:返回数组
? interface
? function rand10(lbound,ubound)
? real :: lbound,ubound ? real :: rand10(10) ?返回数组 ? end function; end interface ? 举例:不定参个数
? interface ? function sub(a,b)
? integer,optional :: b,a ?多态,表示a,b可以省略 ? 定义function时:if(present(b)) then…(Ruby: if b!=nil)
? 此外optional之后可以改变位置,比如上面:result = sub(b=2,a=1),意义不大
★ 【常用函数】随机数功能
? 取种子:call Random_Seed()
? 制造:call Random_number(t) ?t是0-1的随机数,注意也可以是直接生成数组
第 8 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
★ 【语法】递归:声明:recursive integer function f(n) result(as);其中recursive表示可以递
归,result(as)这样表示可以用另一个名字做返回的内容,类型还是integer
★ 【语法】内部函数,只能在某范围内调用的函数,contains里面写内容(如函数、子程序
定义)即可。
★ 【少用语法】并行处理:pure,elemental,使用有很多限制,如所有参数为intent(in),
不能改变全局变量等。声明在定义处,如pure function fc()。个人认为暂时用不上这个,以前并行处理不是这么实现??
★ 【有用函数】记录时间:character(20):datatime;call data_and_time(data,time)
MODULE与面向对象(重载操作符、虚函数)
★ 【语法与范例】module用来封装程序模块范例
? module 模块名
? private a ?可以把a私有化,类内的,Ruby@ ? integer a,b
? common a,b ?这样就可以使用全局变量名。或:integer,save :: a,b ? type plea.. ?这样即可常用type(plea) :: XXXX为一个类型定义 ? type的定义内容 ? end type
? Use 父模块名 ?继承机制 ? Contains
? 定义函数、子程序。像是类的方法,默认均为public,如果需要私有化似乎
也可在前面(声明变量之前)private函数名
? end module
? 特别提示:当变量重名,可以use A,aa=>va (把A的va改名为aa用) ★ 【面向对象】同名函数重载。module中:
? interface fu ?虚函数,调用的时候自动从下面选一个参型合适的
? module procedure fu1 ? module procedure fu2 ? end interface
第 9 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
★ 【面向对象】重定义操作符
? interface operator(+) ?特别说明,赋值号也可重载,用assignment(=)
? module procedure add ?候选的函数 ? end interface ? contains
? integer function add(a,b) ?比如a,b都是自定义type类型,返回一个integer,则可
c=a+b这样了。
? 说明:定义可以是已有的各种运算符也可是自定义的类型,比如.dot. (两边有点),
等号默认为赋值(参见数组那种),亦可自定义。
文件相关(OPEN、WRITE、READ)
★ 【编译器】VF中都放在一个Source Files中,可分别编译为*.obj,最后连接为一
个.EXE(RMXP的Script Editor,只是多了一个分别编译的过程)
★ 【语法】include ?文件名.后缀?,相当于把该文件的内容全部ctrl-c过来,对编译和执行
并没有什么意义
★ 【语法与操作】open 打开文件
? open(unit = 编号, file = “hello.txt”)即可打开文件,使用时:write(编号, *) “Hello” ★ 细节:open(unit = 编号, file = filename , form = ?formated文本格式/unformated二进制格
式? , status = ?new第一次打开/old已存在文件/replace重建/scratch弄个暂存盘可以不要file? , access = ?sequential顺序 / direct 直接?, recl = 长度, err=label出错跳转标签, IOStat = var这个数字>0出错,<0文件终了,=0正常, action = ?readwrite/read/write?) ★ 【重要语法】write / read (unit = number , fmt = Format , NML = namelist(专读某个
namelish,无用),rec = record(直读文件终,设置所读写文件模块位置),Iostat = var,ERR = label,END=label(遇到文件结尾的跳转标签),ADVANCE = ?yes/no是否读写后换行?) ★ 【语法】判断文件存在:inquire : inquire(file = filename, exist=alive) ★ 【语法】关闭文件close(fileid,status = ?keep/delete是否删除文件?)
★ 【其他极少用的】rewind(编号):把读写位置返回开头;backspace(..),endfile() ★ 【操作】文件操作:顺序文件、直接访问文件、二进制
? 顺序文件:read(unit = id , fmt = “..” , iostat = ..)接受read的东西;这样反复循环读
第 10 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
一行一行,iostat那个/=0就over了。(Ruby : readline)
? 直接访问文件的操作(还是分行的操作):open的时候设置recl的大小,然后类似:
? read(id , fmt , rec = 编号, ..)XX读编号内容即可。注意:recl=6则1行为4个
字符内容(有两个是”\\n”)
? 二进制文件的操作,与上面相比,改用form = “unformatted”
★ 【重要功能】内部文件与字符串,数字转换:把unit改为 = 字符串,读入数字即可做
到数字转字符串;反之亦可。
★ 【语法】namelist:namelist /na/ a,b,c 输入输出如下 (没用的功能)
? &na ? A=1 ? B=2 ? /
指针(指向变量、数组、函数)
★ 【语法与范例】指针指到变量
? integer, target :: a=1 ?声明一个可以当成目标的变量 ? integer, pointer :: p=1 ?声明一个可以指向整数的指针
? p => a ?设置指向(也可以不指,allocate(p)即可开地址,deallocate(p)干掉
地址。用起来像是个可释放的变量) ? p = 3 ?设置P位置的内存数据
★ 【语法】设置空指针:p => null() 或
? integer , pointer :: p ? nullify(p)
★ 【语法】判断指针是否已经设置内容:associated(pointer,[target]) 。这里如果有target可
以判断指针是否指向target内容。 ★ 【语法与例子】指针数组
? integer , pointer :: a( : ) 声明一维指针数组 ? integer , target :: b(5) = (/1,2,3,4,5/) ? a => b 即 a(1-5) = b(1-5)
第 11 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? a => b(1:5:2) 即a(1,2,3) = b(1,3,5)
? 同理,allocate(a(5)); a=(/1,2,3,4,5/) 注意这种和allocate的数组不同,必须手动
释放子程序霸占的内存。 ? 同理2,integer,pointer :: a( : , : )
★ 【语法】指针函数 :
? interface ?注:如果用了module就不用interface了 ? function getmin(p)
? integer, pointer :: p( : ) 输入一个指针 ? integer, pointer :: getmin 返回一个指针 ? end function ? end interface
★ 【数据结构】队列与堆寨(试误法)。举例:队列
? 定义类型
? type :: datalink ? integer :: I
? type(datalink) , pointer :: prev,next ?两个指针,可以指向datalink的type对象 ? end type datalink ? 使用
? type(datalink),target::node1,node2 ?声明两个新的类型,需要声明可做target ? node1 = datalink(1,null(),node2) ?初始化node1这个type对象,这个地方很有
特色,记住。
Visual Fortran 编译器(DLL,VB调用)
★ DEBUG & RELEASE:Build > Set Active Configuration选择编译模式。Release和Debug
的执行效率有几倍的差距。所以发布的版本最好要用Release格式。
★ 静态链接库:选择Fortran Static Library格式的new Project,这种东西编译后生成*.lib (只
有函数没有program) ?使用这种lib的时候:Fortran Concole Application里面加入*.lib即可。
★ 常用目录 / 文件设置
第 12 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? tool > options 选择Directories标签。Library files(*.lib) / include Files(*.mod,即
module)
? Project > Settings | Link标签,设置常用.lib,这里的|Debug可以设置output的.exe
相对位置
★ DLL动态链接库(Project : Fortran Dynamic Link Library)
? 这个.dll可以拿给别的程序用,无需重新编译。 ? 设置可被外界调用的程序
? subroutine sub()
? !DEC$ ATTRIBUTES DLLEXPORT :: SUB ?这个是注释,是给fortran看的
注释,用于被外界用的dll函数
? 编译后生成XXX.dll和XXX.lib
? 使用时,把XXX.lib加入自己的project并把xxx.dll放到最终的.exe同目录下。(注:
有时会出现要求手动设置)
★ 执行时间分析: Build > Profile
★ 优化程序的观念:加减快于乘除,乘法快于乘幂
★ Visual Basic和DELPHI中调用Fortran的程序(★重要★):
? Fortran:某函数中:
? !DEC$ ATTRIBUTES DLLEXPORT :: CIRCLE_AREA ,函数名编译后会变成
全部大写。
? !DEC$ ATTRIBUTES ALIAS : ”ca” :: CIRCLE_AREA , 强制把函数
CIRCLE_AREA编译为ca这个名字。
? 这样就行了。注意,别的很多语言中(C,VB,DELPHI)传递字符串要传字符
串和长度,所以Fortran输入字符串只有一个,别人要用两个。
? 举例:
? Fortran中
? subroutine Makelower(string)
? !DEC$ ATTRIBUTES DLLEXPORT :: MAKELOWER ? .. end subroutine ? VB中
? Private Declare Sub MAKELOWER lib “forlib.dll”(ByVal s As String , ByVal
第 13 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
I As Long)
? 使用:call MAKELOWER(“aBcDe”,len(“aBcDe”)) ? DELPHI中
? Implementation
? Function MAKELOWER(r:String ; I:Longint);stdcall;external ?forlib.dll? ? {$R , *.dfm}
? 使用:MAKELOWER(Edit2.text, length(Edit2.text))
★ 【超重要功能】全文件搜索:Edit > Find in Files (RMXP的ctrl+shift+F) ★ 【快捷键】ctrl+L :删除一行
数值算法与IMSL(数值算法插件)
★ 常用算法(需要的时候自己搜索):
? 求解非线性函数:二分法Bisection,割线法Secant,牛顿法 ? 积分:梯形积分法,SIMPSON辛普森积分
? 插值与曲线近似:拉格朗日插值,牛顿插值法(Forward Interpolation),Least Square,
曲线近似法(Cubic Spline)
? 排序方法:冒泡排序法,选择排序法,Shell排序法,快速排序法 ? 搜索:顺序搜索,二元搜索(先排序),哈希Hashing搜索思想 ? 树状结构:二叉树等
★ IMSL函数库:位置:\\Microsoft Visual Studio\\DF98\\IMSL (\\HELP),使用前先设置路径。
之后Use IMSL即可 ? 矩阵运算
? A .x. B 矩阵相乘 ? .i.A 矩阵求逆 ? .t.A 矩阵转置
? A .ix. B 矩阵A逆乘以B;类似还有A.xi.B,A.tx.B ? R = CHOL(A) A = RTR
? Q = ORTH(A , [R=R]) A=QR,QTQ=I ? F = DEF(A) 求行列式值
第 14 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? K = RANK(A) 求矩阵的rank值 ? Z = EYE(N) 得到N*N的单位阵 ? A = DIAG(X) 以X Vector设置对角阵 ? X = DIAGONALS(A) 把A的对角线取出
? Y = FFT(X,[WORK=W]) ; X = IFFT(Y,[WORK=W]) 傅立叶变换 ? A = RAND(A) 把矩阵设置为0~1随机数
? 高斯方程组:AX=B:call lin_sol_gen(A,B,X),要求二维数组。
? 多项式函数:ZPLRC,ZPORC,ZPOCC,DZPLRC,DZPORC,DZPOCC。都差
不多,自己查帮助,举例:ZPLRC(integer NDEG, real COEFF(NDEG+1) , complex ROOT(NDEG)),分别是次数,各项系数,解(复数数组) ? 任意函数:(D)ZANLY,(D)ZBREN,(D)ZREAL
? 非线性方程组:(D)NEQNF, (D)NEQNJ, (D)NEQBF , (D)NEQBF
? 微积分:积分(D)QDAGS,(D)QDAGP,(D)QDAGI;多重积分(D)TWODQ,(D)AND,
微分:(D)DERIV
? 微分方程:常微分方程:IVPRK,IVMRK,IVPRG;(D)BVPFD、(D)BVPMS(难
用)
? 插值与曲线近似:曲线近似:(D)CSIEZ、(D)CSINT、(D)CSVAL;最小方差:(D)RLINE
线性,(D)RCVRV多项式,(D)FNLSQ
常用库函数(数学、数组、零碎、子程序)
★ 数学:sin(x),cos(x),asin(x),acos(x),tan(x),atan(x),sinH(x)正切,cosH(x),tanH(x),
exp(x),log(x),log10(x) ★ 零七八碎:
? ABS(x) 绝对值
? AIMAG(x) 返回复数C的虚部 ? AINT( r ) 返回射去小数的参数值
? CEILING(a) 等于或大于a的最小整数;FLOOR(a)等于或小于a的最大整数 ? INT(a) 转成整型
? Max(a,b,c…) , Min(a,b,c…) 最大最小值
第 15 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? MOD(a,b) ,取余a%b ? REAL(a) ,转成浮点
? Epsilon(x) 给一个特小的数,输入x无所谓。用于浮点数相等的误差 ? HUGE(x) x可记录的最大值
? PRESENT(x) 看看x是否有参数传递进来 (Ruby : if x!= nil) ★ 数组专用:
? ANY (a==3) ,a中是否有等于3的? ANY(mask [,dim]) ? ALL(a>5) a中全大于5, ALL(a<4,2) 二维全小于4 ? Count(a==3 [,dim]) 看看a中有多少等于3的 ? CSHIFT(array, shift [,dim]) 循环平移shift位 ? DOT_PRODUCT(a,b) 求a和b的内积
? EOSHIFT(array, shift [,boundary] [,dim]) 移位后用boundary填充空位 ? LBOUND(array [,dim]) 求下限;UBOUND(array [,dim]) 求上限 ? Size(array [,dim]) 返回数组的大小 ? MATMUL(a,b) 矩阵a*b
? Minval / Maxval (array [,dim] [,mask]) 找最小值最大值,mask可以有条件 ? MinLOC / MaxLOC (array [,dim] [,mask]) 找最小值最大值的位置 ★ 两个常用子程序
? Data_and_time(data,time[,zone,value]) 获得时间。其中data,time是字符串 ? Random_Seed(),Random_number(r) 随机数,可输入数组
第 16 页 共 16 页
《Fortran95 程序设计》学习笔记 by 柳柳
? MOD(a,b) ,取余a%b ? REAL(a) ,转成浮点
? Epsilon(x) 给一个特小的数,输入x无所谓。用于浮点数相等的误差 ? HUGE(x) x可记录的最大值
? PRESENT(x) 看看x是否有参数传递进来 (Ruby : if x!= nil) ★ 数组专用:
? ANY (a==3) ,a中是否有等于3的? ANY(mask [,dim]) ? ALL(a>5) a中全大于5, ALL(a<4,2) 二维全小于4 ? Count(a==3 [,dim]) 看看a中有多少等于3的 ? CSHIFT(array, shift [,dim]) 循环平移shift位 ? DOT_PRODUCT(a,b) 求a和b的内积
? EOSHIFT(array, shift [,boundary] [,dim]) 移位后用boundary填充空位 ? LBOUND(array [,dim]) 求下限;UBOUND(array [,dim]) 求上限 ? Size(array [,dim]) 返回数组的大小 ? MATMUL(a,b) 矩阵a*b
? Minval / Maxval (array [,dim] [,mask]) 找最小值最大值,mask可以有条件 ? MinLOC / MaxLOC (array [,dim] [,mask]) 找最小值最大值的位置 ★ 两个常用子程序
? Data_and_time(data,time[,zone,value]) 获得时间。其中data,time是字符串 ? Random_Seed(),Random_number(r) 随机数,可输入数组
第 16 页 共 16 页
正在阅读:
《FORTRAN 95程序设计》学习笔记09-27
2014年教师资格证考试《幼儿综合素质》模拟试卷(案例分析题二)08-07
对桩基检测方法及桩基质量检测数量在规范中的规定 发表于201005-25
7种新手必学的人像构图05-16
Pnosuu经济全球化的影响与后果08-18
中国医科大学16春《外科护理学(本科)》在线作业100分答案01-31
名人论品德dcl14-12-1405-10
(环境日)小学世界环境日主题班会12-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 程序设计
- FORTRAN
- 笔记
- 学习
- 2015年成人高考专升本《教育理论》模拟试题和答案(一)
- 幕墙采光顶钢结构计算幕墙龙骨受力计算书 - 图文
- 中小学音乐特岗教师招聘考试历年真题试卷
- Snort+中文手册
- 东北大学《毛泽东思想和中国特色社会主义理论体系概论》在线作业3辅导答案
- 污水处理厂在线仪表管理和维护的探究
- 化工原理吸收章节习题
- 含参数二次函数分类讨论的方法hai
- 劳务员专业技能练习题
- C语言习题集合(指针)
- 平面构成A卷与答案
- 金属热处理习题
- 重疾话术
- 大工15秋《桥梁工程》在线作业1 满分答案
- 水工程经济课程设计说明书
- 2019 年中考语文一模试卷精选汇编 非连续性文本阅读专题 - 图文
- 电子商务 - 乐施会案例分析
- 电子科大 - 接入网技术 - WLAN接入实验报告
- 词类与句子成分
- 人教版语文三年级下册看拼音写词语(田字格+词语表含答案)