文档库 最新最全的文档下载
当前位置:文档库 › MATLAB与FORTRAN接口技术

MATLAB与FORTRAN接口技术

MATLAB与FORTRAN接口技术
MATLAB与FORTRAN接口技术

MAT LAB与F ORT RAN接口技术

枣庄学院数学与信息科学系 赵晓艾

[摘 要]介绍了动态链接函数库M EX文件,MAT文件及MAT LAB引擎的调用原理,利用MAT LAB和F ORT RAN接口技术实现F ORTRAN程序计算结果的可视化过程。

[关键词]MAT LAB F ORTRAN AP I

MAT LAB是一种面向科学与工程计算的高级语言,凭借其强大的科学计算与可视化功能,简单易用的开放式可扩展环境,取得了在矩阵代数、数值计算、数字信号处理、动态仿真﹑神经网络控制等领域的广泛应用。:它语言简洁,使用方便灵活,程序书写形式自由,图形功能强大。MAT LAB扩充能力强,交互性好,有丰富的库函数,它包含了大量的MAT LAB与C/F ORTRAN语言之间的接口函数,在进行复杂数学运算时可以直接调用,这些接口函数是MAT LAB的一个非常重要的组成部分。虽然MAT LAB是一个完全独立的编程和数据运算的集成环境,使用它可以方便地完成许多工作,但是,很多时候仅靠MAT LAB环境还是不能很好的完成任务,例如:MAT LAB中程序循环,其它语言编写的算法的移植要重新编写M文件等。

F ORT RAN语言是传统的数值处理语言,处理速度高,编程简便,其强大的数值计算能力和长期积累的大量的科学计算程序库及工程应用软件,始终占据着科学和工程计算领域的重要地位,有很多源代码资源可供使用,但它在图形功能方面有较大的不足。

MAT LAB提供的AP I(App licati on Pr ogra m I nterface)弥补了彼此的不足,它支持MAT LAB与外部数据和程序的交互。MAT LAB接口包括:在MAT LAB环境中调用其它语言编写的程序和算法,通过M EX文件实现;MAT LAB与其它编程环境的数据交互,通过MAT文件实现;其它编程环境使用MAT LAB的计算绘图功能,通过MAT LAB计算引擎实现。

1MEX文件

1.1M EX文件介绍

M EX文件是由C/F ORTRAN语言编写的,编译后生成MAT LAB动态链接子程序,可MAT LAB中导入和执行,如同MAT LAB的内置函数一样,主要应用有:对已有的C/F ORTRAN 程序,可通过MEX方式在MAT LAB环境中直接调用;对影响MAT LAB执行速度的F OR循环,可以编写相应的C/F ORTRAN 子程序完成相同的功能,并编译成MEX,提高运行速度。F OR2 TRAN语言MEX文件通常由两部分组成:

(1)入口子程序,是计算子程序与MAT LAB环境之间的接口,用来完成相互之间的调用。

其程序的入口点由函数mexFuncti on定义,入口子程序函数的说明格式如下:

c人口子程序

subr outine mexFuncti on(nlhs,p lhs,nrhs,p rhs)

c参数声明:

integer p lhs(3),p rhs(3)

integer nlhs,nrhs

其中p rhs是指向输入变量的mx A rray类型指针,nrhs是输入变量的个数,p lhs是指向输出变量的mx A rray类型指针,nlhs 是输出变量的个数。

(2)计算子程序,是完全的F ORTRAN语言编程,不涉及到任何的接口内容,这部分程序可以单独编写一个子程序或程序子函数。

M EX文件的使用极为方便,只需在提示符下键入MEX文件名即可,与MAT LAB的内建函数的调用方式完全相同,当执行M EX文件时,MAT LAB系统将首先搜索MAT LAB系统的所有可搜索路径(通过路径浏览器设置),然后载入并执行第一个与用户键入的文件名相匹配的可执行文件。在MAT LAB中,由于M EX文件的执行优先级高于M文件,所以即使一个文件名同时存在两种类型的可执行文件中,也会先执行MEX文件。

F ORT RAN语言的几个常用MEX函数

:

1.2MEX文件调用的基本原理

MAT LAB和F ORTRAN语言的运算单位不同,MAT LAB以矩阵(mx A rray结构体)为基本数据结构,而在F ORTRAN中,文件是由按顺序排列的记录组成的,而记录是数值或字符的序列,是F ORTRAN程序输入输出的基本单位。记录有两种格式:格式记录和无格式记录。格式记录中,数据在文件中的存放是用ASC II码形式;无格式记录中,数据在文件中存放是用二进制代码形式。由于F ORT RAN和MAT LAB的数据类型不能直接匹配,故需调用MAT LAB的AP I函数来完成二者的数据转换,其基本原理是:MAT LAB将需要传递的mx A rray型数据的内存地址作为一个整型数值传递给F ORT RAN程序,然后在F OR2 T RAN中,AP I提供的访问函数(access r outiness)使用此整数值来访问mx A rray的内容,并将此值作为内存地址,读取相应内容。

传统的F ORTRAN77不支持指针变量,因此必须借助MAT LAB的AP I函数;在F ORT RAN90中,可以通过%val直接使用数据而无须调用子例行程序mxCopyPtrT oReal8和mxCopy2 Real8T oPtr。

1.3MEX文件的编译

要编译生成的MEX文件,必须确认已经安装了MAT LAB 应用接口组件及其相应工具,并且要有合适的F ORTRAN语言编译器,在W indows平台下,所使用的编译器必须支持32位的W indows动态链接库(DLL)。

MAT LAB的AP I支持许多编译器,并针对不同的编译器提供不同的选项文件,在生成M EX文件之前必须为编译器配置合适的选项文件。在MAT LAB命令窗口中键入命令:mex–setup,按提示逐步完成,配置完后,使用命令:mex–f(选项文件名)(源文件名)对源文件进行编译。

2MAT LAB与F ORT RAN数据共享

MAT LAB提供了多种数据输入输出方式,用户可以根据需要灵活选择,MAT LAB与F ORT RAN实现数据共享有以下几种方式:

2.1AS C II码方式

AS C II是计算机中用得最广泛的字符集及其编码,ASC II码的数据文件中的数据形式必须是一个矩阵,要求数据文件每一行的数据个数必须相同,每行数据对应于矩阵的每一行,每行的元素用空格分开。把F ORT RAN输出数据保存为ASC II码文件形式,在MAT LAB中用:l oad文件名(带扩张名),该语句在MAT LAB工作空间创建一个与文件名(无扩展名)相同的变量,该变量表示的矩阵即是AS C II码文件的数据组成的矩阵。

2.2底层I/O方式

5

8

1

MAT LAB 提供了文件底层操作函数来装入某种特定格式的数据文件,可以f open 和fread 读取F ORT RAN 创建的数据文件。

2.3M EX 动态程序方式

开发MAT LAB 的动态链接MEX 子程序使原有的F OR 2TRAN 程序和MAT LAB 链接在一起。

2.4外部程序转换

开发F ORT RAN 程序将数据文件直接转换成MAT LAB 的MAT 数据文件,再用l oad 命令装入到MAT LAB 系统中。

MAT 文件是MAT LAB 系统保存文件的默认文件格式,它把文件存储为二进制格式,这种格式为在不同平台或不同应用程序间移动MAT LAB 数据提供了一种便利的机制。一般使用MAT LAB AP I 来完成MAT 文件的读取与存储,常用的函数有

:

3MAT LAB 引擎

3.1MAT LAB 引擎简介

Engine 是指一组MAT LAB 提供的接口函数,通过这些接口函数,用户可以在C /F ORT RAN 的应用程序中实现对MAT LAB 的控制,完成与MAT LAB 引擎的数据交换和命令传递任务。

几个常用的MAT

LAB 引擎的函数:

同时,引擎应用程序还可以使用前面提到的AP I 函数。

3.2引擎调用的基本原理

当F ORTRAN 程序调用某个MAT LAB 函数或命令时,首先通过引擎函数启动MAT LAB 并建立ActiveX 通道,然后把这个函数或命令通过ActiveX 通道传给MAT LAB,由MAT LAB 在后台执行,这可以分成两步来完成:第一步将mx A rray 转换成MAT LAB 可理解的形式。用mxCreate 来创建一个和要传递的数据类型大小相同的矩阵mx A rray;第二步将矩阵放入MAT 2LAB 工作区中,用程序engPut M atrix 和engEvalString 来完成。

3.3引擎程序的编译

在MAT LAB 下作空间执行mex -setup 选择编译器,假设使用F ORT RAN V6.0,源程序名为filena me .f 的文件编译格式如下:mex -f [MAT LAB 根目录」\bin \df60eng mat op ts .bat filena me .f 。

结论

通过AP I 函数不仅可以在MAT LAB 下以动态链接库的形式调用F ORT RAN 语言编写的子程序,而且可以在F ORTRAN 语言中调用MAT LAB 的大量函数,将MAT LAB 作为一个计算引擎,完成MAT LAB 与外界必要的数据交换,极大地增强了MAT LAB 的灵活性,实现F ORTRAN 程序的计算结果可视化。参考文献

[1]刘志俭.MAT LAB 应用程序接口用户指南[M ].北京:科学出版社,2000

[2]贺红梅,包军.MAT LAB 与F ORT RAN 程序的接口技术[J ].电力学报,2002,17(2):126-127

[3]飞思科技产品研发中心.MAT LAB 6.5应用接口编程.电子工业出版社,2001:109-113

(上接184页)

当然万兆以太网是刚发展起来的新的技术力量,有它的不足之处,如其标准有待完善,如现标准传输介质只允许采用光纤,而不能采用铜缆。我们期待其万兆铜缆I EEE 802.3ak 标准的公布。届时万兆每端口价格就会下降。万兆交换机价格偏高也是阻碍其发展的因素,目前我国图书馆的经费有限,只有个别经费充足的图书馆有条件从千兆升级到万兆。

结语

随着I EEE802.3ae 标准的批准实施,10GbE 技术已成为当今网络技术发展的热点,10GbE 技术将被广泛地应用于各种骨干网络与存储网络中,这两者都是图书馆网络的核心需求。随着图书馆资源的不断增加和服务的不断提高,当图书馆带宽成为瓶颈时,万兆以太网的应用能够打破瓶颈,为图书馆提供高带宽、高性能的网络服务,包括组播服务、身份认证以及网络性能保障等多项服务。能够顺利地开展视频、话音、数字图书馆、多媒体数据,资源共享等各种网络应用。就像当年百兆升级十兆,千兆升级百兆一样,万兆也将会成为未来图书馆骨干网络的主流。参考文献

[1]马拉加,景玲,张瑞萍(译者张瑞萍,景玲).信息系统技术.北京:清华大学出版社,2006:55-56

[2]The persistence of Moore ’s la w and s ome s peculati ons a 2bout machine intelligence,2007-01-29htt p://www .zenker .se /Sur p rise /moore .sht m l (Accessed 2007-07-28)

[3]To m Sheldon.Encycl opedia of Net w orking &Telecommu 2nicati https://www.wendangku.net/doc/8f18817579.html, A:the Mc Gra w -H ill Companies,I nc 2004:48-51

[4]中国互联网络信息中心,第20次中国互联网络发展状况统计报告,2007-07-18htt p://www .cnnic .cn /index/0E /00/11/index .ht m (访问日:2007-07-28):24页

[5]胡道远.网络技术教程.北京,清华大学出版社,2005:125-126

[6]谢希仁.计算机网络.4版,北京,电子工业出版社,2004:12

[7]中国教育和科研计算机网:高校图书馆解决方案:.ht 2t p://www .edu .cn /gaoxiao _5335/20060919/t20060919_197411.sht m l 2007-05-01

[8]中国电子政务网.暨南大学网络万兆数字化图书馆成功案例:2007-3-2htt p://www .e -gov .org .cn /chenggonganli/wangluojianshe /200703/50854.ht m l .2007-05-03

681—

fortran常见问题解决

楼主为了减少重复回答问题,特编此帖,并不定期添加和更新内容。 错误难免,欢迎讨论,仅供参考。 很多人问哪里可以找到Fortran编译器,有不少热心学友提供网址,特汇集在这里。虽然俺检验过这些链接,但是它们不一定总有效。 Fortran编译器下载: CVF? FTN95(License:Freeforpersonaluse) 以下操作,如无特别说明,都是以为例。 1.如何加大Stacksize? 选Project=>Settings=>Link=>Category:Output=>? Stackallocations Reserve:这里填新值(默认为1M,若需要10M,则填) 2.如何用Fortran批量生成文件? 设要生成4000个文件,文件名为AA1-AA4000,如何写循环生成文件,而不用写4000次write 命令呢? 用内部文件: character(len=80)::filename,form integer::i doi=1,4000 selectcase(i) case(1:9) write(form,'(i1)')i case(10:99) write(form,'(i2)')i case(100:999) write(form,'(i3)')i case(1000:9999) write(form,'(i4)')i endselect write(filename,*)"AA",trim(form),".TXT" open(10,file=filename) write(10,*)i close(10)

enddo? stop end 3.如何用Fortran动态生成输出格式? 设有一个数组data(100),输出时,希望每行输出num个数,而num由用户输入,如何实现? 用内部文件: character(len=80)::form real::data(100) integer::i,num data=(/(i,i=1,100)/)/ read(*,*)num write(form,*)"(",num,"" write(*,form)data stop end 4.MS是不是很垃圾? 是垃圾,其中Bug太多,多到不可用的地步! 在这个主题里,换了CVF后问题就没了的人已有相当的数目。 如果你用,遇到莫名其妙的错误,建议换,这是一个比较成熟的编译器。 5.如何用F90/95生成随机数? 注意: 现在计算机产生的随机数都是伪随机数。 random_number(x)产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。用了random_seed()后,系统根据日期和时间随机地提供种子,使得随机数更随机了。 programrandom implicitnone real::x callrandom_seed()!系统根据日期和时间随机地提供种子 callrandom_number(x)!每次的随机数就都不一样了 write(*,*)x stop endprogramrandom 6.函数/子程序超载的例子

matlab实现:常见的离散时间信号

1. 单位抽样序列,或称为离散时间冲激,单位冲激: ? ??=01)(n δ 00≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即: ???=-01)(k n δ 0≠=n k n 2.单位阶跃序列 ? ??01)(n u 00<≥n n 在MATLAB 中可以利用ones( )函数实现。 );,1(N ones x = 3.正弦序列 )(cos )(0φω+=n A n x 这里, ,,0ωA 和φ都是实数,它们分别称为本正弦信号)(n x 的振幅,角频率和初始相位。 πω200=f 为频率。 4.复正弦序列 n j e n x ω=)( 5.实指数序列 n A n x α=)( 6. 随机序列 长度为N 的随机序列 基本数学函数参考教材P69页以及随后的使用说明。 注意使用行向量,特别是冒号运算符。 举例,长度为N 的实指数序列在MATLAB 中实现: n a x N n .^1 :0=-= 1. 单位采样 长度为N 的单位采样序列u(n)可以通过下面的MATLAB 命令获得:

u=[1 )1,1(-N zeros ]; 延迟M 个采样点的长度为N 的单位采样序列ud(n)(M

MATLABAPI详解

MATLAB、API详解 【例12.1.4-1】有一个绘圆的M脚本文件circle.m如下。希望获得一个MEX绘圆程序。(1)原始的绘圆脚本文件 [circle.m] clf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t); plot(x,'r*');axis('square') (2)对这脚本文件直接编译将因错误而失败 mcc -x circle ??? Error: File "circle" is a Script M-file and cannot be compiled with the current Compiler. Error in ==> H:\MATLAB53\toolbox\compiler\mcc.dll (3)把脚本文件改写成函数文件。 [circle_f.m]: function circle_f(r) clf;t=0:pi/100:2*pi;x=r*exp(i*t); plot(x,'r*');axis('square') (4)再对circle_f.m进行编译,将顺利通过。 mcc -x circle_f %mcc是编译指令,详见12.4节。 (5)运行生成的MEX文件circle_f.dll circle_f(0.5) %调用circle_f绘制一半径为0.5的圆 which circle_f %查询所调用的circle_f的路径全称。

图 12.2.1-1 【Select MATLAB Componets】对话窗的选项局部图 图 12.2.2.1-1 为产生MEX文件所产生的配置屏1

图 12.2.2.1-2 为产生MEX文件所产生的配置屏2 12.1.1.1配置正确性的验证 (1)mex应用程序的验证 cd d:\mywork %把用户目录指定为当前目录 mex my_yprime.c %由my_yprime.c文件生成my_yprime.dll文件my_yprime(1,1:4) %运行my_yprime.dll文件 which my_yprime %获得my_yprime.dll文件的位置信息 ans = 2.0000 8.9685 4.0000 -1.0947 d:\mywork\my_yprime.dll (2)在MATLAB命令窗中验证mcc应用程序 mcc -x my_yprime_m%<1> my_yprime_m(1,1:4) which my_yprime_m ans = 2.0000 8.9685 4.0000 -1.0947 d:\mywork\my_yprime_m.dll (3)在 DOS提示符后验证mex、mcc应用程序

MATLAB 与C C + + 、FORTRAN语言混合编程

MATLAB 与C/ C + + 、FORTRAN语言混合编程摘要:对MATLAB 与C/ C + + 和FORTRAN 语言进行混合编程的常用方法进行了介绍,分析了其实现方式和各自的利弊,并用实例对MEX 文件实现方式进行了较详细的论述. 关键词: MATLAB ; C/ C + + ; FORTRAN ; 混合编程 中图分类号: TP313 文献标识码: A 文章编号:16722948X(2004) 0620547205 1 混合编程的意义及其实现方式 1. 1 混合编程的意义 MATLAB 语言具有功能强大、开发效率高等诸 多优点, 已在工程实际中得到广泛应用, 但是与 FORTRAN、C/ C + + 等语言相比,其执行效率较低, 特别是当程序中含有大量循环语句(例如迭代计算) 时,MATLAB 就有些力不从心, 速度很慢, 而运用 FORTRAN 等擅长数值计算语言进行编程,其运行效 率高. 一方面,如果放弃MATLAB 强大功能和数量 众多的应用工具箱,无疑是资源的极大浪费. 另一方 面,针对工程实际,人们用FORTRAN、C/ C + + 语言 已编写了大量实用程序,如果将其重新改写成M 文 件移植到MATLAB 环境中,不仅要花费大量的时间 和精力,而且有时还降低了其运行效率. 可否将二者 优势互补呢? 混合编程就是其有效的解决途径. 1. 2 混合编程的实现 正是考虑到上面这些原由,MATLAB 系统提供 了其应用程序接口(Application Program Interface) 来 解决这些问题. API 主要包括3 部分:MEX 文件——— 外部程序调用接口,用来在MATLAB 环境下调用 FORTRAN、C/ C + + 语言编写的程序;MAT 文件应 用程序———数据输入输出接口,用于MATLAB 系统 与外部环境之间互传数据; 计算引擎函数库——— MATLAB 处于后台作为一个计算引擎,与其它应用 程序建立客户机/ 服务器关系,在其它应用程序中调 用[1 ,2 ] . 1. 2. 1 MEX 文件 MEX 文件是按照一定格式,用FORTRAN 或C/ C + + 语言编写的源程序,在MATLAB 下借助相应 的编译器,生成的动态链接函数的统称. 在Windows 操作系统下,是用MATLAB 附带的批处理mex. bat 来编译生成文件后缀名为. dll (Dynamic Link Li2 brary) 动态链接库文件,该文件可在MATLAB 环境 下,像命令函数一样直接运行和调用,使用起来极为 方便. 采取MEX 文件方式,是重复利用已有FOR2 TRAN、C/ C + + 程序,让MATLAB 和FORTRAN、

常用信号的MATLAB表示

5 常用信号的MATLAB表示5.1单位冲激函数、单位冲激序列 示例7: t = -5:0.01:5; y = (t==0); subplot(121); plot(t, y, 'r'); n = -5:5; x = (n==0); subplot(122); stem(n, x); 图5 运行结果如图5所示。

程序说明: (1)由n = -5:5得到一个1×11数组n;而在x = (n==0)中,n==0是一个向量运算,即向量n中的每一个元素与0比较是否相等,其比较结果0或1放在x中。这样得到的向量x也是1×11数组,且正好就是单位冲激序列。 (2)在MATLAB中,任何向量x的下标是从1开始的,不能取零或负值,而x(n)中的时间变量n则不此受限制。因此向量x的下标与时间变量n是两个概念,如本例中向量x(n)的下标是从1到11,而时间变量n是从-5到5。所以必须用一个与向量x等长的定位时间变量n,以及向量x,才能完整地表示序列x(n)。在信号的表示和运算中,这一点请务必注意;只有当序列x(n)的时间变量正好是从1开始时,才能省去时间变量n,因为此时向量的下标与时间变量相同。 (3)单位冲激函数的实现方法实际上与单位冲激序列是完全相同的,都是用序列表示。只不过表示连续时间信号的序列中两相邻元素所对应的时间间隔更小,如本例中t的间隔为0.01,而表示离散时间信号的序列中两相邻元素所对应的时间间隔一般为1。 由于单位冲激序列在信号与系统中经常使用,我们专门编制一个函数文件delta.m,在后面的实验部分直接调用该函数即可产生需要的波形。 % delta.m function [x, n] = delta(n1,n2,k) % 产生冲激序列δ(n-k),其中n1<=n<=n 2, n1<=k<=n2

几种Fortran 编译器简介

几种Fortran 编译器 --------------------------------------------------------------------------------------- 1.CVF Compaq Visual Fortran (CVF), 当今PC平台上功能相当强大与完整的Fortran程序开发工具,还用于Abaqus的开发。 1997年,微软将Fortran PowerStation卖给DEC之后,微软就不再出版Fortran编译器了。后来DEC并入了Compaq,再后来Compaq又和HP合并了。现在最新的版本是HP出的Fortran for Windows v6.6,现在HP/Compaq已经不再开发Fortran了,CVF 6.6是最终的版本了,Compaq的Fortran开发小组已经投入Intel旗下,目前Intel已经有Intel Visual Fortran 11.0。Compaq Visual Fortran 6.6官方的单价也相当昂贵。 Compaq Visual Fortran 6.6 下载: https://www.wendangku.net/doc/8f18817579.html,/SoftDown.asp?ID=11937 Compaq Visual Fortran 6.6 绿色版下载: https://www.wendangku.net/doc/8f18817579.html,/down/10915.html Compaq Visual Fortran 6.5 下载: https://www.wendangku.net/doc/8f18817579.html,/soft/fortran6.5.rar ftp://2006:2006@https://www.wendangku.net/doc/8f18817579.html,/36/https://www.wendangku.net/doc/8f18817579.html,-002124.rar --------------------------------------------------------------------------------------- 2. IVF Intel Visual Fortran (IVF)将Compaq Visual Fortran* (CVF) 语言的丰富功能与英特尔代码生成及优化技术结合在一起。目前Intel已经有Intel Visual Fortran 11.0。 下载: Intel官方网站 ftp://166.111.26.159/software/science/ ftp://202.112.85.101/pub2/Windows/Scientific_Tools/Fortran/https://www.wendangku.net/doc/8f18817579.html,p iler/ 从https://www.wendangku.net/doc/8f18817579.html,/maths/下载。IVF10可以用IVF9的licence https://www.wendangku.net/doc/8f18817579.html,/irc_nas/730/w_cc_p_10.0.025_ia3 2.exe 集成VS2005的IVF10.1:w_fc_p_10.1.021.exe (302MB) Intel(R) Visual Fortran for IA-32 and Intel(R) 64 (with Microsoft Visual Studio 2005

fortran与matlab如何连接

编译环境配置: projects -> setting ->link -> Object/library modulus kernel32.lib libmx.lib libmat.lib libeng.lib integer engOpen,mxCreateDoubleMatrix,mxGetPr,engPutArray,engGetArray integer ep,p_matX,p_matY,p_matfi0,p_mat_ux,p_mat_uy,p_nbound integer status %启动引擎 ep=engOpen('matlab') if (ep .eq. 0) then write(6,*) 'Can''t start MA TLAB engine' stop endif % 在Matlab下执行语句 if (engEvalString(ep,'i_contour=0;').ne.0) then write(6,*) 'engEvalString failed' stop endif % 建立数组指针 pmatX=mxCreateDoubleMatrix(ndiv,ndiv,0) % 建立该数组在Matlab工作空间的名字 call mxSetName(pmatX, 'matX') % 从Matlab工作空间获取变量建立连接fi0(Matlab)→ p_matfi0 (Fortran) p_matfi0=engGetArray(ep,'fi0'); (注: p_matfi0指针是联系Fortran变量和Matlab变量的通道和桥梁) % 更新Fortran数组p_matfi0 (Fortran)→fi0 (Fortran) call mxCopyPtrToReal8(mxGetPr(p_matfi0),fi0,(nx+2)*(ny+2)) % fi0 (Fortran)→ p_matfi0 (Fortran) call mxCopyReal8ToPtr(fi0,mxGetPr(p_matfi0),(nx+2)*(ny+2)) % p_matfi0 (Fortran)→fi0(Matlab) status = engPutArray(ep,p_matfi0) if (status.ne.0) then write(6,*) 'engPutMatrix failed'

实验1 常见离散信号的MATLAB产生和图形显示

实验1 常见离散信号的MATLAB 产生和图形显示 一、实验目的:加深对常用离散信号的理解 二、实验原理: 1.单位抽样序列:???=01)(n δ 00 ≠=n n 在MATLAB 中可以利用zeros()函数实现。 ; 1)1();,1(==x N zeros x 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n ?δ即:? ??=?01)(k n δ 0≠=n k n 2.单位阶越序列:???0 1 )(n u 00<≥n n 在MATLAB 中可以利用ones()函数实现。(1,)x ones N = 3.正弦序列:)/2sin()(?π+=Fs fn A n x 在MATLAB 中 ) /***2sin(*1 :0fai Fs n f pi A x N n +=?= 4.复正弦序列:n j e n x ?=)( 在MATLAB 中 ) **exp(1 :0n w j x N n =?= 5.指数序列:n a n x =)( 在MATLAB 中 n a x N n .^1:0=?= 三、实验内容: 1、编制程序产生上述5种信号(长度可输入确定),并绘出其图形。 2、讨论正弦序列、复指数序列的性质: (1)绘出信号()zn x n e =,当1126z j π=?+、1126z j π=+、112 z =、62πj z +=、6π j z =时 信号的实部和虚部图;当6 π j z =时信号的周期为多少?

(2)绘出信号() 1.5sin(2*0.1)x n n π=的频率是多少?周期是多少?产生一个数字频率为0.9的正弦序列,并显示该信号,说明其周期。 3、使用帮助功能学习square(方波),sawtooth(锯齿波)和sinc 函数,并绘图。 四、实验要求: 1、预先阅读MATLAB 基础; 2、讨论复指数序列的性质。

Fortran编译器及下载地址

Fortran 编译器 --------------------------------------------------------------------------------------- 1. Fortran Powerstation 4.0 Fortran Powerstation 4.0是最老的版本 下载ftp://2006:2006@https://www.wendangku.net/doc/8f18817579.html,/36/https://www.wendangku.net/doc/8f18817579.html,-002123.ZIP --------------------------------------------------------------------------------------- 2.CVF Compaq Visual Fortran (CVF), 当今PC平台上功能相当强大与完整的Fortran程序开发工具,还用于Abaqus的开发。 1997年,微软将Fortran PowerStation卖给DEC之后,微软就不再出版Fortran编译器了。后来DEC并入了Compaq,再后来Compaq又和HP合并了。现在最新的版本是HP出的Fortran for Windows v6.6,现在HP/Compaq已经不再开发Fortran了,CVF 6.6是最终的版本了,Compaq的Fortran开发小组已经投入Intel旗下,目前Intel 已经有Intel Visual Fortran 11.0。Compaq Visual Fortran 6.6官方的单价也相当昂贵。 Compaq Visual Fortran 6.6 下载: https://www.wendangku.net/doc/8f18817579.html,/SoftDown.asp?ID=11937 Compaq Visual Fortran 6.6 绿色版下载: https://www.wendangku.net/doc/8f18817579.html,/down/10915.html Compaq Visual Fortran 6.5 下载: https://www.wendangku.net/doc/8f18817579.html,/soft/fortran6.5.rar ftp://2006:2006@https://www.wendangku.net/doc/8f18817579.html,/36/https://www.wendangku.net/doc/8f18817579.html,-002124.rar ---------------------------------------------------------------------------------------

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. 。新的表示方法更接近标准的数学符号

常见连续信号的MATLAB表示

实验名称:常见连续信号的MATLAB 表示 报告人: 姓名班级学号 一、实验目的 1、熟悉常见连续时间信号的意义、特性及波形; 2、学会使用MATLAB 表示连续时间信号的方法; 3、学会使用MATLAB 绘制连续时间信号的波形。 二、实验内容及运行结果 1、运行以上5个例题的程序,保存运行结果。 2、已知信号()t f 的波形如下图所示,试用MATLAB 绘出满足下列要求的信号波形。 <1)()t f -; <2)()2-t f ; <3)()at f <其中a 的值分别为 21= a 和2=a ); <4)? ?? ??+12 1t f 。 第一题 例题1

程序如下: >> t1=-10:0.5:10。 >> f1=sin(t1>./t1。 >> figure(1> >> plot(t1,f1> >> xlabel('取样间隔p=0.5'>。 >> title('f(t>=Sa(t>=sin(t>/t'>。>> t2=-10:0.1:10。 >> f2=sin(t2>./t2。 >> figure(2> >> plot(t2,f2> >> xlabel('取样间隔p=0.1'>。 >> title('f(t>=Sa(t>=sin(t>/t'>。运行结果如下:

f(t)=Sa(t)=sin(t)/t 取样间隔p=0.5 f(t)=Sa(t)=sin(t)/t 取样间隔p=0.1例题2 程序如下: >> syms t >> f=sin(t>/t。 >> ezplot(f,[-10,10]>运行结果如下:

sin(t)/t t 例题3: 程序如下: >> t=-1:0.01:4。 >> t0=0。 >> ut=stepfun(t,t0>。>> plot(t,ut> >> axis([-1,4,-0.5,1.5]>运行结果如下:

Fortran基本用法小结档

Fortran基本用法小结 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。以下是77和90的一些格式上的区别。

(完整版)matlab基本语句

第2章M ATLAB程序设计 MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构,也可以出现对M-文件的调用(相当于对外部过程的调用)。 由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的,故其既有FORTRAN的特征,又在许多语言规则方面与C语言相同。 2.1 顺序结构语句 在顺序结构语句中,包括表达式语句、赋值语句、输入输出语句、空语句等。

2.1.1 表达式语句 格式: 表达式,%显示表达式值 表达式;%不显示表达式值 表达式%显示表达式值 如: x + y, sin(x); –5 最后的表达式值暂保存在变量ans中。 2.1.2 赋值语句 格式: v =表达式,%结果送v并显示v v =表达式;%结果送v不显示v v =表达式%结果送v并显示v 2.1.3 空语句 格式: , ; 2.1.4 输入语句

1、input语句(实际上是函数) 格式1: input(提示字符串) 功能: 显示提示字符串,可输入数字、字符串(两端用单引号括起)、或表达式 格式2: input(提示字符串,'s') 功能: 显示提示字符串,并把输入视为字符串 2、yesinput语句 格式: yesinput(提示字符串,缺省值,值范围) 功能: 显示提示字符串和缺省值,若只打入回车则以缺省值作为输入值,若输入的值不在指定范围内则认为输入无效,B并等待用户重新输入。 如: t=yesinput('指定线的颜色',… 'red','red|blue|green') 运行结果如下: 指定线的颜色(red):yellow %不在值内

基于matlab的直接序列扩频通信系统仿真

基于MATLAB的直接序列扩频通信系统仿真 1.实验原理:直接序列扩频(DSSS)是直接利用具有高码率的扩频码系列采用各种调 制方式在发端与扩展信号的频谱,而在收端,用相同的扩频码序去进行解扩,把扩展宽的扩频信号还原成原始的信息。它是一种数字调制方法,具体说,就是将信源与一定的PN码(伪噪声码)进行摸二加。例如说在发射端将"1"用11000100110,而将"0"用00110010110去代替,这个过程就实现了扩频,而在接收机处只要把收到的序列是11000100110就恢复成"1"是00110010110就恢复成"0",这就是解扩。这样信源速率就被提高了11倍,同时也使处理增益达到10DB以上,从而有效地提高了整机倍噪比。 1.1 直扩系统模型 直接序列扩频系统是将要发送的信息用伪随机码(PN码)扩展到一个很宽的频带上去,在接收端用与发送端相同的伪随机码对接收到的扩频信号进行相关处理,恢复出发送的信号。对干扰信号而言,与伪随机码不相关,在接收端被扩展,使落入信号通频带的干扰信号功率大大降低,从而提高了相关的输出信噪比,达到了抗干扰的目的。直扩系统一般采用频率调制或相位调制的方式来进行数据调制,在码分多址通信中,其调制多采用BPSK、DPSK、QPSK、MPSK等方式,本实验中采取BPSK方式。 直扩系统的组成如图1所示,与信源输出的信号a(t)是码元持续时间为Ta的信息流,伪随机码产生器产生伪随机码c(t),每个伪随机码的码元宽度为Tc (Tc<

实验一--常见离散信号的MATLAB产生和图形显示

实验一 常见离散信号的MATLAB 产生和图形显示 授课课时:2学时 一、实验目的: (1)熟悉MATLAB 应用环境,常用窗口的功能和使用方法。 (2)掌握MATLAB 在时域内产生常用离散时间信号的方法。 (3)掌握离散信号的基本运算。 (4)掌握简单的绘图命令。 二、实验原理: (一)信号的表示和产生 ① 单位抽样序列 ? ??=01)(n δ 00 ≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即: ???=-0 1)(k n δ ≠=n k n 参考程序: 例1-1:)2010(()(<<-=n n n x )δ clear all n1=-10;n2=20;n0=0;%在起点为n1,终点为n2的范围内,于n0处产生冲激。 n=n1:n2;%生成离散信号的时间序列 x=[n==n0];%生成离散信号x(n) stem(n,x);%绘制脉冲杆图

xlabel(' n');ylabel('x(n)');%横坐标和纵坐标的标注说明。 title('Unit Sample Sequence');%图形上方标注图名 axis([-10 20 0 1.2]);%确定横坐标和纵坐标的取值范围 ② 单位阶跃序列 ???=0 1 )(n u 00<≥n n 例1-2:)202((u )(<<-=n n n x ) clear all n1=-2;n2=20;n0=0; n=n1:n2;%生成离散信号的时间序列 x=[n>=n0];%生成离散信号x(n) stem(n,x,'filled'); xlabel('n');ylabel('x(n)'); title('Unit step Sequence'); axis([-2 20 0 1.2]); ③ 正弦序列 )sin()(?+=wn A n x 例1-3:一正弦信号的频率为1HZ ,振幅值幅度A 为1V ,在窗口显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号并显示该连续信号和离散信号的波形。 参考程序: clear f=1; A=1;nt=2;

第13章 MATLAB外部程序接口技术_习题答案

1 第13章 MATLAB 外部程序接口技术 习题13 一、选择题 1.要在Word 环境下调用MATLAB 的命令,需要调用Word 的( )模板。B A .Normal B .M-Book C .自由格式 D .空白文档 2.在Excel 环境下加载Spreadsheet Link 程序后,会在Excel 窗口的“开始”选项卡中增加一个( )命令组。D A .Excel B .Spreadsheet C .Link D .MATLAB 3.打开一个可读可写的文本文件,其打开方式为 。A A .rt+ B .r+ C .rwt D .a 4.以下选项中,用于定义指向MAT 文件指针的命令是( )。A A .MA TFile *p; B .MAT *p; C .File *p; D .FIL E *p; 5.关于MATLAB 引擎,下列说法中不正确的是( )。C A .利用MA TLA B 引擎,可以在 C 程序中调用MA TLAB 的函数。 B .通过MATLAB 引擎,可以提高开发应用程序的效率。 C .通过MA TLAB 引擎,可以在MA TLAB 中直接调用用C 语言编写的函数 D .包含MA TLAB 引擎函数的程序的执行效率减低。 二、填空题 1.在Word 与MATLAB 之间进行传递的内容称为 ,由M-Book 文档传向MATLAB 的命令称为 ,M-Book 文档中的MATLAB 命令的执行结果称为 。单元(Cell ),输入单元(Input Cell ),输出单元(Output Cell ) 2.Excel 和MA TLAB 的交互操作,通过 程序来实现。Spreadsheet Link 3.MA TLAB 文件操作的基本步骤是,先 文件,在对文件进行 ,最后 文件。打开,读写,关闭 4.对MAT 文件进行操作的C 程序中,一定要包含 头文件。mat.h 5.MEX 函数在头文件 中得到声明。mex.h 三、应用题 1.在MA TLAB 中创建一个100 × 200的随机矩阵,然后将数据导入到Excel 表格中,在Excel 中调用MATLAB 的差分函数按列进行差分运算。 2.已知)2ln(x y + =π,当x 取-3.0、-2.9、-2.8、…、2.8、2.9、3.0时,求各点的 函数值。要求: (1)将函数值输出到一个数据文件中。

Fortran基本用法小结

【以下文字转载自D_Atmosphere 讨论区】 【原文由superjyq 所发表】 我的Fortran基本用法小结 高级语言和算法组heavensky 目录: 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。 另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所

Matlab中文教程共63页

MatLab简介 MATLAB是什么? 典型的使用包括: 数学和计算 算术发展模型, 模拟,和原型 数据分析,开发,和可视化 科学和工程图学 应用发展包括图形用户界面设计 MATLAB表示矩阵实验室。 MATLAB系统 MATLAB系统由5主要的部分构成: 1. MATLAB语言。这是高阶的矩阵/数组语言,带控制流动陈述,函数,数据结构,输入/输出,而且面向目标的编程特点。 Ops 操作符和特殊字符。 Lang 程序设计语言作。 strfun 字符串。 iofun 输入/输出。

timefun 时期和标有日期。 datatypes数据类型和结构。 2. MATLAB工作环境。这是你作为MATLAB用户或程序编制员的一套工具和设施。 3. 制图这是MATLAB制图系统。它为2维上,而且三维的数据可视化,图象处理,动画片制作和表示图形包括高阶的指令在内。它也为包括低阶的指令在内,允许你建造完整的图形用户界面(GUIs),MATLAB应用。制图法功能在MATLAB工具箱中被组织成5文件夹: graph2d 2-的维数上的图表。 graph3d 三维的图表。 specgraph 专业化图表。 graphics 制图法。 uitools 图形用户界面工具。 4. MATLAB的数学的函数库。数学和分析的功能在MATLAB工具箱中被组织成8文件夹。 elmat 初步矩阵,和矩阵操作。 elfun 初步的数学函数。 specfun 专门的数学函数。 matfun 矩阵函数-用数字表示的线性的代数。 datafun 数据分析和傅立叶变换。 polyfun 插入物,并且多项式。

用MATLAB实现常用的离散时间信号及其时域运算

用M A T L A B实现常用的离散时间信号及其时域 运算 WTD standardization office【WTD 5AB- WTDK 08- WTD 2C】

实验四用M A T L A B实现常用的离散时间信号及其时域运算 —— 摘要:在MATLAB中,只能用向量来表示离散时间信号。与连续信号不同,离散时间信号无法用符号运算来表示。用适当的MATLAB语句表示出信号后,就可以利用MATLAB的绘图命令stem来绘出直观的信号波形图,stem是专门用于绘制离散时间信号的。在MATLAB中离散序列的时域运算和变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相乘,因而参加运算的两序列向量必须有相同的维数。 一、实验目的:(1)学习MATLAB语言及其常用指令; (2)学习和掌握用MATLAB语言产生离散时间信号的编程方法; (3)通过编程绘制出离散时间信号的波形,加深理解信号的时域运算。二、实验内容:(1)运用MATLAB的绘图指令绘制离散时间信号; (2)用MATLAB语言实现离散时间信号的时域运算。 三、实验原理:(1)单位阶跃序列和单位样值序列。 离散时间信号只在某些离散的瞬时给出信号的值,因此,它是时间上不连续的序列。单位阶跃序列和单位样值序列在离散时间信号与系统的分析中是两个非常典型的序列,分别记为u(n)和δ(n)。它们的定义分别如下: 1 n≥0 1 n≥0 u(n)= δ(n)= 0 n<0 0 n≠0 若单位阶跃序列的起始点为n0,单位样值序列出现在n0时刻,则表达式分别为:

在MATLAB环境下访问外部函数的共享库文件

在MA TLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中。一旦加载成功,就能直接在MA TLAB中直接请求关于函数的任何信息。而当不再需要该库时,就应当及时把库文件从内存中卸载以节省内存开销。 加载库 语法:loadlibrary(…shrlib?,?hfile?) 其中shrlib为加载的动态链接库文件名(filename.dll),hfile为头文件名,它包含函数原型。例如,当加载包含MA TLAB中mx程序的libmx库时,可以使用下列语句。 hfile=[matlabroot?\extern\include\matrix.h?]; loadlibray(…libmx?, hfile) 卸载库 语法:unloadlibrary libmx 使用两个函数可以获取加载库的信息: libfunctions(…libname?) or libfunctions libname libfunctionsview(…libname?) or libfunctionsview libname 这两个函数的不同之处在于显示结果的方式不同,后者是以图形的方式显示在新的窗口中。而前者返回库libmx中有哪些可用的函数。请看示例: libfunctions libmx Methods for class lib.libmx: mxAddField mxGetFieldNumber mxIsLogicalScalarTrue mxArrayToString mxGetImagData mxIsNaN mxCalcSingleSubscript mxGetInf mxIsNumeric mxCalloc mxGetIr mxIsObject mxClearScalarDoubleFlag mxGetJc mxIsOpaque mxCreateCellArray mxGetLogicals mxIsScalarDoubleFlagSet 如果加上命令开头-full,则可以显示函数返回值的细节。 libfunctions libmx -full Methods for class lib.libmx: [mxClassID, MA TLAB array] mxGetClassID(MA TLAB array) [lib.pointer, MA TLAB array] mxGetData(MA TLAB array) [MA TLAB array, voidPtr] mxSetData(MA TLAB array, voidPtr) [lib.pointer, MA TLAB array] mxGetPr(MA TLAB array) [MA TLAB array, doublePtr] mxSetPr(MA TLAB array, doublePtr) uint8 mxIsFinite(double) uint8 mxIsInf(double) 值得注意的是,这两个函数返回值的类型均是MA TLAB的数据类型,虽然函数是利用C语言编写的。调用库函数 一旦库函数被加载到了内存空间,只要指定库名、函数名和变量就可以使用calllib函数调用库中的任何函数了。语法格式: calllib(…libname?,?funcname?,arg1,…,argn) 下列语句显示如何操作: hfile=['C:\MA TLAB7\extern\include\matrix.h'];

相关文档
相关文档 最新文档