fortran中批处理实现

合集下载

FORTRAN程序调用MATLAB引擎实现计算可视化

FORTRAN程序调用MATLAB引擎实现计算可视化

收稿日期:2000-05-29作者简介:聂万胜(1969-),男,内蒙古人,博士,主要研究方向:航空推进理论的科学计算和可视化、飞行器测试发射的科学计算和可视化.文章编号:1001-9081(2000)11-0060-02FORTRAN 程序调用MATLAB 引擎实现计算可视化聂万胜,庄逢辰,黄玲,邹勤(装备指挥技术学院,北京怀柔101416)摘要:探索了FORTRAN 程序调用MATLAB 函数的基本原理,用实例介绍了调用MATLAB 引擎函数,实现FORTRAN 程序计算结果的可视化过程。

并给出如何编译带有MATLAB 引擎函数的FORTRAN 程序的具体技术。

关键词:FORTRAN ;MATLAB ;引擎;可视化中图分类号:TP311.52文献标识码:A1概述FORTRAN 和C 等高级语言使人们无需直接对计算机硬件资源进行操作。

而被称为第四代计算机语言的MATLAB ,则利用其丰富的函数资源,代替了C 语言和FORTRAN 的冗长代码,给用户带来了最直观、最简洁的程序开发环境。

在欧美很多高校,MATLAB 已经成为自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;在设计研究单位和工业部门,MATLAB 被广泛地用于研究和解决各种具体问题。

其最主要的特点有:语言简洁,使用方便灵活,程序书写形式自由,库函数极其丰富,图形功能强大。

由于不管是C 语言还是FORTRAN 语言,其图形和可视化功能的实现都需要较为专业的编程水平,所以本文旨在充分发掘MATLAB 的功能,利用MATLAB 所提供的接口函数实现FORTRAN 程序的计算结果可视化,充分综合了FORTRAN 程序的执行速度快而MATLAB 可视化处理简单方便,开发周期短的优点。

2FORTRAN 调用MA TLAB 函数的原理由于FORTRAN 程序和MA TLAB 的运算单位不同,前者以数为运算单位,后者以矩阵为基本的运算单位,所以数据类型不能直接匹配。

FORTRAN简明教程

FORTRAN简明教程

FORTRAN简明教程
一、FORTRAN简介
FORTRAN,指程序设计语言,由IBM在1956年发明,主要用于科学计算、数值运算等。

它将汇编语言中的功能集成在一个简单的命令语句中,
减少了汇编语言的繁琐的编译过程。

它也是目前世界上最古老的计算机程
序设计语言。

FORTRAN由“Formula Translating System”派生而来,主要用于工
程和科学计算,非常适用于此领域的算法及数学公式的应用。

基于这种语言,开发者可以轻松描述数字问题,并同时检测、审核、维护和优化此代码。

二、FORTRAN的优缺点
1、优点
a.FORTRAN是一种很容易上手的程序设计语言,它的语言规范很容易
理解,而且简单易用。

b.FORTRAN支持大量数值操作,所以它在计算机科学和工程领域有广
泛的应用。

c.FORTRAN程序非常高效,它的优化程序可以提高程序运行效率,而
且运算速度很快。

d.FORTRAN支持很多的数据类型,这样可以更有效地操作和管理数据。

2、缺点
a.FORTRAN不支持图形用户界面(GUI),这样用户需要熟悉命令行,才能完成程序的编写。

Fortran进行批处理地方法

Fortran进行批处理地方法

Fortran中批量处理文件的方法总结—循环读取目录下的所有符合条件的文件=====================一、简单的介绍在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。

对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦!这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。

我总结的批处理方法大概可以用下面这个示意图来说明:|||将文件目录写入一个文本文件,供fortran循环读取|————手动输入文件名|————运行程序之前命令行工具导出文件名|————程序运行后,未开始计算之前,生成文件名| ————调用CMD命令生成| ————GETFILEINFOQQ方法生成| ————调用WIN32API生成||在程序运行时动态生成文件名||对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。

第二种方法主要是说明其思路。

二、方法的介绍1、将文件目录写入一个文本文件,供fortran循环读取1.1、手动输入文件名这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。

1.2、运行程序之前命令行工具导出文件名这是一个既高效又保险的方法,主要思路就是通过强大的CMD命令列出目录下的文件到一个指定的文件中,然后由fortran去循环读取该文件中的文件名信息,从而批量处理。

a、从运行工具打开你的CMD窗口;b、转到要处理的当前目录(可省略):CD /d 路径,如:CD /d e:\test这样可以快速到达e:\test目录c、使用DIR命令列出文件目录信息到指定的文件,通常使用的Dir *.*>新文件名这个命令在这里已经不能满足要求,因为会列出一堆对于我们处理而言无用的信息,现在要使用的命令是:DIR /b filter>newfile注意,其中的filter为文件筛选,必须自己修改为所需的,比如你可以把它改成*.txt,这样,就会列出当前目录下的所有txt结尾的文件了。

FORTRAN常用命令

FORTRAN常用命令

FORTRAN常⽤命令FORTRAN 77语句形式表ASSIGN S TO i BACKSPACE u BACKSPACE (alist) BLOCK DA TA [sub] CALL sub CHARACTER COMMON COMPLEX CONTINUEDA TA DIMENSIONDODOUBLE PRECISION ELSE IF (e) THEN ENDFILE u ENDFILE (alist) ENTRYEQUIV ALENCE EXTERNAL Proc FORMA T fs[typ]FUNCTION fun () GO TO iGO TO sGO TO 标号赋值语句回退语句数据块⼦程序语句引⽤⼦程序语句字符型说明语句公共语句复型说明语句继续语句数据初值语句数组说明语句循环语句双精度型说明语句ELSE IF语句⽂件结束语句⽂件结束语句⼊⼝语句等价语句外部语句格式语句函数⼦程序语句赋值GOTO语句⽆条件GOTO语句计算GOTO语句IF (e) stIF (e) S1,S2,S3 IF (e) THEN IMPLICIT typ INQUIRE INQUIRE INTEGER INTRINSIC LOGICAL OPEN PARAMETER PAUSE PRINT PROGRAM READREADREAL RETURN REWIND REWINDSA VESTOP SUBROUTINE WRITE 逻辑IF语句算术IF语句块IF语句类型隐含说明语句按⽂件询问语句按设备询问语句整型说明语句内部语句逻辑型说明语句⽂件打开语句参数语句暂停语句打印语句程序语句读语句实型说明语句返回语句反绕语句反绕语句保存语句停⽌语句⼦例⾏⼦程序语句输出语句。

fortran循环结构及基本语句

fortran循环结构及基本语句

fortran循环结构及基本语句Fortran中的循环结构包括DO循环和DO WHILE循环。

基本语句包括赋值语句、条件语句和IO语句。

1.DO循环结构:DO循环结构用于重复执行一段代码块,语法如下:DO variable = start, end, step!代码块ENDDO在循环开始前,将变量初始化为start的值,然后执行代码块。

然后将变量增加step的值,并检查是否达到end的值,如果没有达到则继续执行代码块,直到达到end的值为止。

2.DOWHILE循环结构:DOWHILE循环结构用于在满足条件时重复执行一段代码块,语法如下:DO WHILE (condition)!代码块ENDDO在每次循环开始前,检查condition是否为真,如果为真则执行代码块,然后再次检查condition。

只有当condition为假时,循环才会结束。

3.赋值语句:赋值语句用于将一个值赋给一个变量,语法如下:variable = expression可以使用算术运算符和函数来计算expression的值,并将结果赋给变量。

4.条件语句:条件语句用于根据条件选择执行不同的代码块,常用的条件语句有IF语句和SELECTCASE语句。

-IF语句的语法如下:IF (condition) THEN!代码块1ELSE IF (condition) THEN!代码块2ELSE!代码块3ENDIF根据condition的值选择执行代码块1、代码块2或代码块3-SELECTCASE语句的语法如下:SELECT CASE (expression)CASE (value1)!代码块1CASE (value2)!代码块2CASEDEFAULT!代码块3ENDSELECT根据expression的值选择执行相应的代码块,如果没有匹配的值,则执行默认的代码块。

5.IO语句:IO语句用于输入和输出数据,常用的IO语句有WRITE和READ语句。

如何用Fortran批量读取文件

如何用Fortran批量读取文件
enddo
复杂的方法可以是:自己写个子程序,进行自己需要的转换。(略
1. 如何加大Stack size?
选Project => Settings => Link => Category: Output =>
Stack allocations
Reserve: 这里填新值(默认为1M,若需要10M,则填10000000)
open(12,file=FILENAME(L))
read(12,*) .......
enddo
法2
do i=1,number of files
file_name=ቤተ መጻሕፍቲ ባይዱhar(i+48)//'.dat'
file_number=i+100
open(fileid=file_number,file=file_name)
write(form,*) "(",num,"f10.3)"
write(*,form) data
stop
end
4. 如何用F90/95生成随机数?
注意:
现在计算机产生的随机数都是伪随机数。
random_number(x) 产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。
read(fileid=file_number,*) vars
close(fileid)
enddo
需要读取大批量的数据,文件有一定的规律,特别是按照数字的顺序排列的,现给出读取文件名的方法:
简单方法:
Character*40 fname
integer m

fortran语言语法

fortran语言语法

FORTRAN是世界上最早出现的高级编程语言,是工程界最常用的编程语言,它在科学计算中(如航空航天、地质勘探、天气预报和建筑工程等领域)发挥着极其重要的作用。

经过40多年的发展,伴随着FORTRAN语言多次版本的更新及相应开发系统的出现,其功能不断完善,最新版本的开发系统几乎具备了VC、VB的所有特点,如图形界面编程、数据库等。

目前,工科院校开设的计算机编程语言课首选仍然是FORTRAN :<说实话,从科技发展的趋势来说这不是好事。

您可以设想一下,如果需要用鹅毛笔抄写大量的古籍是什么感受!强烈建议阅读《发掘C#特性赋予科学计算项目以威力》1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→()2 FORTRAN77变量类型2.1隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。

2.2用类型说明语句确定变量类型:可以改变I-N规则2.3用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。

2.4数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))2.5使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/-1.0,-1.0,-1.0/DATA A/-1.0/,B/-1.0/,C/-1.0/DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)DATA CHN/10*' '/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则•程序中的变量名,不分大小写;•变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;•一行只能写一个语句;•程序的第一个语句固定为PROGRAM 程序名称字符串•某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;•某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;•某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;•某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;•某行的第73至80字符位为注释区,80字符位以后不能有内容。

fortran常见问题解决

fortran常见问题解决

为了减少重复回答问题,特编此帖,并不定期添加和更新内容。

错误难免,欢迎讨论,仅供参考。

很多人问哪里可以找到Fortran 编译器,有不少热心学友提供网址,检验过这些链接,但是它们不一定总有效。

Fortran 编译器下载:CVF特汇集在这里。

虽然俺FTN95 (License: Free for personal use)以下操作,如无特别说明,都是以为例。

1. 如何加大Stack size?选Project => Settings => Link => Category: Output Stack allocationsReserve: 这里填新值(默认为1M若需要10M则填)2. 如何用Fortran 批量生成文件?设要生成4000个文件,文件名为AA1-AA4000,如何写循环生成文件命令呢?用内部文件:character(len=80) :: filename,forminteger :: ido i=1,4000select case (i)case (1:9)write(form,'(i1)') icase (10:99)write(form,'(i2)') i=>, 而不用写4000 次writecase (100:999)write(form,'(i3)') icase (1000:9999)write(form,'(i4)') iend selectwrite(filename,*) "AA",trim(form),".TXT"open(10,file=filename)write(10,*) iclose(10)end dostopend3.如何用Fortran 动态生成输出格式?设有一个数组data(100),输出时,希望每行输出num个数,而num由用户输入,如何实现?用内部文件:character(len=80) :: formreal :: data(100)integer :: i,numdata = (/ (i,i=1,100) /)/read(*,*) numwrite(form,*) "(",num,""write(*,form) data stopend4.MS 是不是很垃圾?是垃圾,其中Bug 太多,多到不可用的地步!在这个主题里,换了CVF后问题就没了的人已有相当的数目。

批处理命令 编译

批处理命令 编译

批处理命令编译
批处理命令是Windows操作系统中一种非常方便的命令行工具,可以用来自动执行一系列命令。

编译则是将源代码转换为可执行文件的过程。

在编译过程中,批处理命令也可以起到很大的作用。

本文将介绍如何使用批处理命令编译程序。

首先,我们需要准备好编译器。

在 Windows 中,常用的编译器有 GCC、Visual C++ 等。

这里我们以 GCC 为例,介绍如何使用批处理命令编译程序。

1. 打开文本编辑器,输入以下代码:
@echo off
gcc -o hello.exe hello.c
其中,@echo off 表示关闭回显,gcc 表示调用 GCC 编译器,-o hello.exe 表示将编译结果输出为 hello.exe,hello.c 则是要编译的源代码文件。

2. 将以上代码保存为 hello.bat 文件(注意后缀名
为 .bat)。

3. 在命令提示符中输入 hello.bat,按下回车键即可开始编译。

以上就是使用批处理命令编译程序的基本步骤。

在实际应用中,还可以添加其他操作,如清除编译结果、自动打包等。

批处理命令的强大功能可以为编译工作带来很大的便利,值得我们去深入学习和探索。

Fortran 批量处理文件

Fortran 批量处理文件

Fortran 批量处理文件程序中需要读取或处理大量文件的时候,在代码中写入大量的open语句就显得很笨重,如果文件很多(比如有1000个文件),这种方法根本不可行。

针对这种情况,介绍两种解决方法。

方法一:考虑如下情形:假设存在100个文件,分别存储了1900-1999年的降雨量,现在需要计算着100年的总降雨量。

文件名为:前缀+年份+后缀,例如:降雨量-1900.dat、降雨量-1901.dat 。

由于文件名是有规律的,仅年份变化,可以用循环来一次读取文件。

program testinteger ireal s, acharacter(20):: filename='降雨量-1234.dat's = 0.0do i=1900, 1999!内部文件读写,将filename第8-11字符换为相应年份write(filename(8:11),'(i4)') iopen(11,file=filename)read(11,*) aclose(11)s = s + aend doend program这种方法优点是可以按顺序读取文件,缺陷也很明显,只能处理有规律的文件名。

方法二:如果文件名没有规律,使用另一种方法。

先用命令行指令将需要处理的文件的文件名写入另外一个文件当中:call system ('dir *.txt /b > 1.dat' )上述代码含义:找出工作目录下所有txt文件,将其文件名存入1.dat当中,注意二者的后缀不应相同(txt, dat)。

为了避免错误,需要事先删除无用的txt文件。

修改命令行指令,可以找出任意符合条件的文件,比如找出上例中存储降雨量的文件:call system ('dir 降雨量-*.dat /b > 1.txt' )完整代码如下:program testinteger ireal s, acharacter(512):: filename!文件1.dat中存储工作目录下所有txt文件列表call system ('dir *.txt /b > 1.dat' )s = 0.0open(10,file='1.dat')do!读取文件名read(10,'(a)',iostat=i) filenameif(i/=0) exitopen(11,file=filename)read(11,*) aclose(11)s = s + aend doclose(10,status='delete') !关闭并删除文件1.datend program方法二优点是不要求文件名称有很强规律性,缺点是处理每个文件的顺序是未知的。

Fortran77 程序基础

Fortran77 程序基础



关系表达式是最简单的一种逻辑表达式,它的一般形式为: <关系运算量> <关系运算符> <关系运算量> 关系运算量可以是算术量,也可以是字符量。算术量可以是数值型常 量、数值型变量、数值函数,还可以是算术表达式。如:
A+B>3.5 40>=40 40<C COS(B)<=0.5 (M+N)*X==0.0 X-Z.NE.(Y+X) 等价于 等价于 等价于 等价于 等价于 等价于 A+B.GT.3.5 40.GE.40 40.LT.C COS(B).LE.0.5 (M+N)*X.EQ.0.0 X-Z.NE.(Y+X)


表控格式输入、输出 格式输入、输出


格式输入输出控制符
常用控制符 i,f,a 写法: nIw;nfw.d; naw 如: integer year, month, day write(*, "(3i8)") year, month, day 又如: real runoff write (*, "(f9.2)") runoff
(A.GT.B).AND.(A.NE.C) (X.LT.-1.0).OR.(X.GT.1.0) .NOT.((A+C)*D.LE.0.0) (A.GT.B).EQV.(C.LE.D) 等价于(A>B).AND.(A/=C) 等价于(X<-1.0).OR.(X>1.0) 等价于.NOT.((A+C)*D<=0.0) 等价于(A>B).EQV.(C<=D)


逻辑表达式的一般形式为: <逻辑运算量><逻辑运算符><逻辑运算量>[<逻辑运算符><逻辑运算量>„] 同关系表达式不同,一个逻辑表达式中可以包括多个逻辑运算符,例如逻辑 表达式“A.GE.10.0.AND.A+C.GT.B+D.OR..NOT..TRUE.”中包含 了.AND.、.OR.、.NOT.三个逻辑运算符。在逻辑表达式中除了有逻辑运算符 外,还可以有关系运算符和算术运算符。 下面是一些逻辑表达式的例子:

fortran指令大全

fortran指令大全

fortran指令大全附录 C SCILAB 部分函数指令表(c)LIAMA. All rights reserved.(注解:本指令表只收集了部分常用指令, 有关全部指令请参照文档文件)+ 加- 减* 矩阵乘数组乘*.1. 通用指令^ 矩阵乘方数组乘方^.\ 反斜杠或左除help 在线帮助/ 斜杠或右除apropos 文档中关键词搜寻或.\ 数组除/. ans 缺省变量名以及最新表达式的运算结果== 等号~= 不等号clear 从内存中清除变量和函数< 小于exit 关闭SCILAB > 大于quit 退出SCILAB <= 小于或等于save 把内存变量存入磁盘>= 大于或等于exec 运行脚本文件&,and 逻辑与mode 文件运行中的显示格式|,or 逻辑或getversion 显示SCILAB 版本~,not 逻辑非ieee 浮点运算溢出显示模式选择: 冒号who 列出工作内存中的变量名( ) 园括号edit 文件编辑器[ ] 方括号type 变量类型{ } 花括号what 列出SCILAB 基本命令小数点.format 设置数据输出格式, 逗号chdir 改变当前工作目录; 分号getenv 给出环境值// 注释号mkdir 创建目录= 赋值符号pwd 显示当前工作目录' 引号evstr 执行表达式' 复数转置号转置号'.ans 最新表达式的运算结果2.运算符和特殊算符%eps 浮点误差容限, =2-52≈2.22×10-16%i 虚数单位= √(-1) %inf 正无穷大%pi 圆周率,π=3.1415926535897....3. 编程语言结构abort 中止计算或循环break 终止最内循环case 同select 一起使用continue 将控制转交给外层的for或while循环else 同if一起使用elseif 同if一起使用end 结束for,while,if 语句for 按规定次数重复执行语句if 条件执行语句otherwise 可同switch 一起使用pause 暂停模式return 返回select 多个条件分支then 同if一起使用while 不确定次数重复执行语句eval 特定值计算feval 函数特定值计算或多变量计算function 函数文件头global 定义全局变量isglobal 检测变量是否为全局变量error 显示错误信息lasterror 显示最近的错误信息sprintf 按格式把数字转换为串warning 显示警告信息4.基本数学函数acos 反余弦acosh 反双曲余弦acot 反余切acoth 反双曲余切acsc 反余割acsch 反双曲余割asin 反正弦asinh 反双曲正弦atan 反正切atanh 反双曲正切cos 余弦cosh 双曲余弦cotg 余切coth 双曲余切sin 正弦sinh 双曲正弦tan 正切tanh 双曲正切exp 指数log 自然对数log10 常用对数log2 以2为底的对数sqrt 平方根abs 绝对值conj 复数共轭imag 复数虚部real 复数实部ceil 向上(正无穷大方向)取整fix 向零方向取整floor 向下(负无穷大方向)取整round 四舍五入取整sign 符号函数gsort 降次排序erf 误差函数erfc 补误差函数gamma gamma 函数interp 插值函数interpln 线性插值函数intsplin 样条插值函数smooth 样条平滑函数spline 样条函数quarewave 方波函数sign 符号函数double 将整数转换为rank 矩阵秩trace 矩阵迹cond 矩阵条件数rcond 逆矩阵条件数inv 矩阵的逆lu LU分解或高斯消元法pinv 伪逆qr QR分解givens Givens 变换linsolve 求解线性方程lyap Lyapunov 方程hess Hessenberg 矩阵poly 特征多项式schur Schur 分解expm 矩阵指数expm1 矩阵指数的Pade逼近expm2 用泰勒级数求矩阵指数expm3 通过特征值和特征向量求矩阵指数funm 计算一般矩阵函数logm 矩阵对数sqrtm 矩阵平方根6. 特性值与奇异值spec 矩阵特征值gspec 矩阵束特征值bdiag 块矩阵, 广义特征向量eigenmarkov 正则化Markov 特征向量pbig 特征空间投影svd 奇异值分解sva 奇异值分解近似7. 矩阵元素运算cumprod 元素累计积cumsum 元素累计和hist 统计频数直方图max 最大值mean 平均值median中值min 最小值prod 元素积sort 由大到小排序std 标准差sum 元素和trapz 梯形数值积分corr 求相关系数或方差8. 稀疏矩阵运算sparse 稀疏矩阵(只存储非零元素)adj2sp 邻接矩阵转换为稀疏矩阵full 稀疏矩阵转换为全矩阵mtlb_sparse 将SCILAB 稀疏矩阵转换为MATLAB稀疏矩阵格式sp2adj 稀疏矩阵转换为邻接矩阵speye 稀疏矩阵方式单位阵sprand 稀疏矩阵方式随机矩阵spzeros 稀疏矩阵方式全零阵lufact 稀疏矩阵LU 分解lusolve 稀疏矩阵方程求解spchol 稀疏矩阵Cholesky分解9. 输入输出函数diary 生成屏幕文本记录disp 变量显示file 文件管理input 用户键盘输入load 读已存的变量mclose 关闭文件mget 读二进制文件mgetl 按行读ASCII 码文件mgetstr 读字符串中单个字mopen 打开文件mput 写二进制文件mfscanf 读ASCII 码文件print 将变量记录为文件read 读矩阵变量save 存变量为二进制文件strartup 启动文件write 按格式存文件xgetfile 对话方式获取文件路径x_dialog 建立Xwindow参数输入对话框Tk_Getvar 得到Tk 文件变量Tk_EvalFile 执行Tk 文件10. 函数与函数库操作deff 在线定义函数edit 函数编辑器function 打开函数定义functions SCILAB 函数或对象genlib 在给定目录下建立所有文件的函数库get_function_path读函数库的文件存储目录路径getd 读函数库中的全部文件getf 在文件中定义一个函数lib 函数库定义macro SCILAB函数或对象macrovar 输入变量个数newfun 输出变量个数11. 字符串操作code2str 将SCILAB 数码转换为字符串convstr 字母大小转换emptystr 清空字符串grep 搜寻相同字符串part 字符提取str2code 将字符串转换为SCILAB数码string 字符串转换strings SCILAB 对象, 字符串strcat 连接字符strindex 字符串的字符位置搜寻strsubst 字符串中的字符替换12. 日期与时间date 日期getdate 读日期与时间timer CPU时间计时13. 二维图形函数plot2d 直角坐标下线性刻度曲线champ 2 维向量场champ1 由颜色箭头表示的2维向量场contour2d 等高线图errbar 曲线上增加误差范围框线条grayplot 应用颜色表示的表面xgrid 画坐标网格线histplot 统计频数直方图Matplot 散点图阵列14. 三维图形函数plot3d 三维表面plot3d1 用颜色或灰度表示的三维表面param3d 三维中单曲线param3d1 三维中多曲线contour 三维表面上的等高线图hist3d 三维表示的统计频数直方图geom3d 三维向二维上的投影15. 线条类图形xpoly 单线条或单多边形xpolys 多线条或多各多边形xrpoly 正多边形xsegs 非连接线段xfpoly 单个多边形内填充xfpolys 多个多边形内填充xrect 矩形xfrect 单个矩形内填充xrects 多个矩形内填充xarc 单个弧线段或弧园xarcs 多个弧线段或弧园xfarc 单个弧线段或弧园填充xfarcs 多个弧线段或弧园填充xarrows 多箭头16. 图形注释, 变换xstring 图形中字符xstringb 框内字符xtitle 图形标题xaxis 轴名标注plotframe 图形加框并画坐标网格线isoview 等尺寸比例显示(原图形窗口不改变)square 等尺寸比例显示(原图形窗口改变)xsetech 设置小窗口xchange 转换实数为图形象素坐标值subplot 设置多个子窗口17. 图形颜色及图形文字colormap 应用颜色图getcolor 交互式选择颜色图addcolor 增加新色于颜色图graycolormap 线性灰度图hotcolormap 热色(红到黄色)颜色图xset 图形显示方式设定xget 读当前图形显示方式设定getsymbol 交互式选择符号和尺寸18. 图形文件及图形文字xsave 将图形存储为文件xload 从磁盘中读出图形文件xbasimp 将图形按PS文件打印或存储为文件xs2fig 将图形生成Xfig 格式文件xbasc 取消图形窗及其相关内容xclear 清空图形窗driver 选择图形驱动器xinit 图形驱动器初始化xend 关闭图形xbasr 图形刷新replot 更改显示范围后的图形刷新xdel 关闭图形xname 改变当前图形窗名称19. 控制分析用图形bode 伯德图坐标gainplot 幅值图坐标(伯德图中的幅值图) nyquist 奈奎斯特图m_circle M-圆图chart 尼库拉斯图black Black-图evans 根轨迹图sgrid s 平面图plzr 零-极点图zgrid z 平面图20. 图形应用中的其它指令graphics 图形库指令表xclick 等待鼠标在图形上的点击输入locate 由鼠标点击读入图形中的多点位置坐标xgetmouse 由鼠标点击读入图形中的当前点位置坐标21. 系统与控制abcd 状态空间矩阵cont_mat 可控矩阵csim 线性系统时域响应dsimul 状态空间的离散时域响应feedback 反馈操作符flts 时域响应(离散、采样系统〕frep2tf 基于传递函数的频域响应freq 频域响应g_margin 幅值裕量imrep2ss 基于状态空间的脉冲响应lin 线性化操作lqe Kalman 滤波器lqg LQG补偿器lqr LQ补偿器ltitr 基于状态空间的离散时域响应obscont 基于观测器的控制器observer 观测器obsv_mat 观测矩阵p_margin 相位裕量phasemag 相位与幅值计算ppol 极点配置repfreq 频域响应ricc Riccati 方程rtitr 基于传递函数的离散时域响应sm2ss 系统矩阵到状态空间变换ss2ss 反馈连接的状态空间到状态空间变换ss2tf 状态空间到传递函数变换stabil 稳定性计算tf2ss 传递函数到状态空间变换time_id SISO系统最小方差辨识22. 鲁棒控制augment 被控对象增广操作bstap Hankel 矩阵近似ccontrg H∞控制器dhnorm 离散H∞范数h2norm H2 范数h_cl 闭环矩阵h_inf H∞控制器h_norm H∞范数hankelsv Hankel 矩阵奇异值leqr H∞控制器的LQ增益linf 无穷范数riccati Riccati 矩阵sensi 敏感函数23. 动态系统arma ARMA 模型arma2p 基于AR模型中获得多项式矩阵armac ARMAX 辨识arsimul ARMAX系统仿真noisegen 噪声信号发生器odedi 常微分方程仿真检测prbs_a 伪随机二进制序列发生器reglin 线性拟合24. 系统与控制实例artest Arnold 动态系统bifish 鱼群人口发展的离散时域模型boucle 具有观测器的动态系统相位图chaintest 生物链模型gpech 渔业模型fusee 登陆火箭问题lotest Lorennz 吸引子mine 采矿问题obscontl 可控可观系统portr3d 三维相位图portrait 二维相位图recur 双线性回归方程systems 动态系统tangent 动态系统的线性化tadinit 动态系统的交互初始化25. 非线性工具(优化与仿真〕bvode 边界值问题的常微分方程dasrt 隐式微分方程过零解dassl 代数微分方程datafit 基于测量数据的参数辨识derivative 导数计算fsolve 非线性函数过零解impl 线性微分方程int2d 二维定积分int3d 三维定积分intg 不定积分leastsq 非线性最小二乘法linpro 线性规划lmisolver 线性不等矩阵ode 常微分方程ode_discrete 离散常微分方程ode_root 常微分方程根解odedc 连续/离散常微分方程optim 非线性优化quapro 线性二次型规划semidef 半正定规划26. 多项式计算coeff 多项式系数coffg 多项式矩阵逆degree 多项式阶数denom 分母项derivat 有理矩阵求导determ 矩阵行列式值factors 因式分解hermit Hermit 型horner 多项式计算invr 有理矩阵逆lcm 最小公倍数ldiv 多项式矩阵长除numer 分子项pdiv 多项式矩阵除pol2des 多项式矩阵到表达式变换pol2str 多项式到字符串变换polfact 最小因式residu 余量roots 多项式根simp 多项式化简systmat 系统矩阵27. 信号处理%asn 椭圆积分%k Jacobi 完全椭圆积分%sn Jacobi 椭圆函数analpf 模拟量低通滤波器buttmagButterworth 滤波器响应cepstrum 倒谱计算cheb1mag Chebyshev 一型响应cheb2mag Chebyshev 二型响应chepol Chebyshev 多项式convol 卷积corr 相关, 协方差cspect 谱估计(应用相关法)dft 离散富立叶变换fft 快速富立叶变换filter 滤波器建模fsfirlin FIR滤波器设计hank 协方差矩阵到Hankel矩阵变换hilb Hilbert 变换iir IIR数字滤波器intdec 信号采样率更改kalm Kalman 滤波器更新mese 最大熵谱估计mfft 多维快速富立叶变换mrfit 频率响应拟合phc Markov 过程srkf Kalman 滤波器平方根sskf 稳态Kalman 滤波器system 观测更新wfir 线性相位FIR 滤波器weiener Weiener(维纳)滤波器window 对称窗函数yulewalk 最小二乘滤波器zpbutt Buthererworth 模拟滤波器zpch1 Chebyshev 模拟滤波器28. 音频信号analyze 音频信号频域图auread 读*.au 音频文件auwrite 写*.au 音频文件lin2mu 将线性信号转换为µ率码信号loadwave 取*.wav 音频文件mapsound 音频信号图示mu2lin 将µ率码信号转换为线性信号playsnd 音频信号播放savewave 存*.wav 音频文件wavread 读*.wav 音频文件wavwrite 写*.wav 音频文件29. 语言与数据转换工具ascii 字符串的ASCII码excel2sci 读ASCII 格式的Excel 文件fun2string 将SCILAB 函数生成ASCII 码mfile2sci 将MATLAB 的M 格式文件转换为SCI格式文件mtlb_load 取MATLAB第4版本文件中变量matlb_save 按MATLAB 第 4 版本文件格式存变量pol2tex 将多项式转换为TeX格式sci2for 将SCILAB函数转换为FORTRAN格式文件texprint 按TeX 格式输出SCILAB 对象translatepaths 将子目录下的所有MATLAB 文件转换为SCI文件格式一个公式写成Fortran 语言代码program baiduinteger::I,J,Nreal*8::Cr,Treal*8,dimension(:),all ocatable ::P,XN=3!变量X的个数Cr=5.0d0!常量Cr,自己设定T=4.0d0!常量T,自己设定allocate(P(N),X(N))! =======读入变量X 的值do I=1,Nwrite(*,*)"请输入第",I," 个变量的值:"read(*,*)X(I)enddo! =======读入变量X 的值do I=1,NP(I)=(-4.2d0/Cr**2*X( I)+2.9/Cr)*Twrite(*,*)“第”,I," 个变量X 对应结果:",P(I)enddoend。

在fortran下进行openmp并行计算编程

在fortran下进行openmp并行计算编程

在fortran下进⾏openmp并⾏计算编程最近写⽔动⼒的程序,体系太⼤,必须⽤并⾏才能算的动,⽆奈只好找了并⾏编程的资料学习了。

我想我没有必要在博客⾥开⼀个什么并⾏编程的教程之类,因为⽹上到处都是,我就随⼿记点重要的笔记吧。

这⾥主要是openmp的~1 临界与归约在涉及到openmp的并⾏时,最需要注意的就是被并⾏的区域中的公共变量,对于需要reduce的变量,尤其要注意,⽐如这段代码:program mainimplicit noneinclude 'omp_lib.h'integer N,M,ireal(kind=8) tN=20000t=0.0!$OMP PARALLEL DOdo i=1,Nt=t+float(i);M=OMP_get_num_threads()enddowrite(*, "('t = ', F20.5, ' running on ', I3, ' threads.')") t,Mpausestopend串⾏代码可以很容易的得到正确结果:t = 200010000.00000 running on 1 threads.不幸的是,如果是并⾏的话,可能每次都得到⼀个不同的结果:t = 54821260.00000 running on 8 threads.t = 54430262.00000 running on 8 threads.....原因很简单,假设do被并⾏了两个线程,A1,A2,则每个线程都可以t,在其中⼀个线程访问t的时候,另⼀个线程修改了t,导致t的某些值“丢了”。

解决⽅法有两种,第⼀种就是“临界”,就是锁定t:!$OMP PARALLEL DOdo i = 1, N!$OMP CRITICALt = t+float(i)!$OMP END CRITICALM = OMP_get_num_threads()enddo这样每个时刻只有⼀个线程能访问这个变量。

fortran 简明教程

fortran 简明教程

fortran 简明教程Fortran是世界上最早的高级程序设计语言之一,广泛应用于科学计算、工程和数值分析等领域。

以下是Fortran的简明教程:1. 程序结构:一个Fortran程序由不同的程序单元组成,包括主程序、子程序和模块等。

每个程序单元都以END结束。

主程序是程序的入口点,可以包含变量声明、执行语句和控制语句等。

子程序可以包含函数和子例程,用于执行特定的任务。

模块用于提供程序中的公共代码和数据。

2. 变量声明:在Fortran中,变量必须先声明后使用。

变量类型包括整数型、实数型、字符型等。

例如,声明一个整数型变量可以这样写:INTEGER :: x3. 执行语句:执行语句用于控制程序的流程和执行顺序。

Fortran提供了多种控制语句,如IF语句、DO循环、WHILE循环等。

例如,使用IF语句进行条件判断:IF (x > 0) THEN y = x x ELSE y = -x x END IF4. 输入输出:Fortran提供了基本的输入输出功能。

可以使用READ语句从标准输入读取数据,使用WRITE语句将数据输出到标准输出。

例如,读取一个实数并输出到屏幕:READ(,) x WRITE(,) x5. 数组和矩阵:Fortran支持一维和多维数组,以及矩阵运算。

例如,声明一个二维实数数组并赋值:REAL :: A(3,3) A =RESHAPE((/1,2,3,4,5,6,7,8,9/), (/3,3/))6. 子程序和模块:子程序可以用于封装特定的功能或算法,并在主程序中调用。

模块可以包含公共的函数、子例程和变量等,用于提供可重用的代码和数据。

7. 调试和优化:Fortran提供了多种调试工具和技术,如断点、单步执行、变量监视等。

还可以使用性能分析工具来检查程序的性能瓶颈并进行优化。

以上是Fortran的简明教程,希望能帮助您快速入门Fortran编程。

FORTRAN90用法总结

FORTRAN90用法总结
6>对指针初始化(对头指针清空)
SUBROUTINE SETUP(L)
TYPE(LIST)L
NULLIFY(L%END)
END SUBROUTINE SETUP
10、指针
1>定义指针
类型说明,POINTER::指针变量名...
类型说明,TARGET::目标变量名...
P=>A
2>动态变量
例:INTEGER,POINTER::P
INTEGER S
ALLOCATE(P)
P=4
S=P
DEALLOCATE(P)
PRINT *,S
END
3>指针数组变量定义
类型说明,DIMENSION(:...:),POINTER::指针变量名
END TYPE派生类名称
2>类型定义
TYPE(派生类名称)::结构体
②结构体名.成员名
4>定义的同时赋值
TYPE(派生数据类型名)::结构体变量名=派生数据类型名(成员初值表)
5>结构体数组
TYPE(派生数据类型名),DIMENSION(维说明符)::结构体数组名
[类型],ALLOCATABLE::数组名(:[,:]...)...
②申请
ALLOCATE(数组名(维说明))
③释放
DEALLOCATE(数组名)
8、子程序
1>子程序
CONTAINS(内部子程序的标志(外部EXTERNAL))
[类型说明] FUNCTION函数名(虚参表)
函数体
END
2>子例行程序
SUBROUTINE子例行程序名(虚参表)
标号 FORMAT(格式说明)
3>其他编辑符

Fortran进行批处理的方法

Fortran进行批处理的方法

Fortran中批量处理文件的方法总结—循环读取目录下的所有符合条件的文件=====================一、简单的介绍在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。

对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦!这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。

我总结的批处理方法大概可以用下面这个示意图来说明:|||将文件目录写入一个文本文件,供fortran循环读取|————手动输入文件名|————运行程序之前命令行工具导出文件名|————程序运行后,未开始计算之前,生成文件名| ————调用CMD命令生成| ————GETFILEINFOQQ方法生成| ————调用WIN32API生成||在程序运行时动态生成文件名||对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。

第二种方法主要是说明其思路。

二、方法的介绍1、将文件目录写入一个文本文件,供fortran循环读取1.1、手动输入文件名这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。

1.2、运行程序之前命令行工具导出文件名这是一个既高效又保险的方法,主要思路就是通过强大的CMD命令列出目录下的文件到一个指定的文件中,然后由fortran去循环读取该文件中的文件名信息,从而批量处理。

a、从运行工具打开你的CMD窗口;b、转到要处理的当前目录(可省略):CD /d 路径,如:CD /d e:\test这样可以快速到达e:\test目录c、使用DIR命令列出文件目录信息到指定的文件,通常使用的Dir *.*>新文件名这个命令在这里已经不能满足要求,因为会列出一堆对于我们处理而言无用的信息,现在要使用的命令是:DIR /b filter>newfile注意,其中的filter为文件筛选,必须自己修改为所需的,比如你可以把它改成*.txt,这样,就会列出当前目录下的所有txt结尾的文件了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档