fortran与matlab如何连接

fortran与matlab如何连接
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'

stop

endif

p_nbound=mxCreateDoubleMatrix(1,1,0)

call mxSetName(p_nbound, 'nbound')

call mxCopyReal8ToPtr(double_nbound,mxGetPr(p_nbound),1) status=engPutArray(ep,p_nbound)

if (status.ne.0) then

write(6,*) 'engPutMatrix nbound failed'

stop

endif

% 关闭引擎close engine

status = engClose(ep)

if (status.eq.0) then

write(6,*) 'engClose failed'

stop

endif

matlab与sql总结

总结 一个星期前老师给了一个任务,要求用GUI做成一个simulink仿真界面,通过matlab与SQL的连接,然后把仿真结果存到sql里建的数据库里。从一开始什么都不懂,到现在可以用GUI做一个简单的界面,以及matlab与sql的连接,这一个星期感慨颇多,尤其是查阅相关资料的痛苦,及找到可以借鉴资料的喜悦,到最后逐渐有了一个清晰的思想。过程如下: 一首先了解GUI 1.1 GUI简介[1,2] 图形用户界面(graphical user interface,GUI)是由窗口、光标、按键、菜单、文字说明等对象(Ob-ject)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等假如科技工作者仅仅执行数据分析、解方程等工作,一般不会考虑GUI 的制作。但是如果想向客户提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面是最好的选择之一。 开发实际的应用程序时应该尽量保持程序的界面友好,因为程序界面是应用程序和用户进行交互的环境。在当前情况下,使用图形用户界面是最常用的方法。提供图形用户界面可使用户更方便地使用应用程序,不需要了解应用程序怎样执行各种命令,只需要了解图形界面组件的使用方法;同时,不需要了解各种命令是如何执行的,只要通过用户界面进行交互操作就可以正确执行程序。 在Matlab7.0中,图形用户界面是一种包含多种图形对象的界面,典型的图形界面包括图形显示区域、功能按钮空间以及用户自定义的功能菜单等。为了让界面实现各种功能,需要对各个图形对象进行布局和时间编程。这样,当用户激活对应的GUI对象时,就能执行相应的时间行为。最后,必须保存和发布自己创建的GUI,使得用户可以应用GUI对象。在Matlab中,所有对象都可以使用M文件进行编写。GUI也是一种Matlab对象,因此,可以使用M文件来创建GUI。使用M文件创建GUI的方法也是最基础的,使用其他方法创建GUI图形界面时,实现图形控件的各种功能时,也需要编写相应的程序代码。 除了使用M文件来创建GUI对象之外,Matlab还为用户开发图形界面提供了一个方便高效的集成开发环境:Matlab图形用户界面开发环境(matlab graphical user interface development envi-ronment)简称GUIDE,其主要是一个界面设计工具集。Matlab7.0将所有GUI所支持的用户控件都集成起来,同时提供界面外观、属性和行为响应方法的设置方法。除了可以使用GUIDE创建GUI之外,还可以将设计好的GUI界面保存为一个FIG资源文件,自动生成对应的M文件。该M文件包含了GUI初始化代码和组建界面布局的控制代码。 使用GUIDE创建GUI对象执行效率高,可以交互式地进行组件布局,还能生成保存和发布GUI的对应文件。 FIG文件:该文件包含GUI图形窗口及其子对象的完全描述,包含所有相关对象的属性信息,可以调用hgsave命令或者使用M文件编辑器的File>Save命令生

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 数据库

基MATLAB 数据库 linspace(a,b,c)均匀生成介于a到b的c个值,c默认为100如linspace(0,100,5)即[0 25 50 75 100]linspace(-1.3,1.3)就是生成介于-1.3到1.3的100个值meshgrid是生成网格的函数,一般是生成二维网格矩阵数据,但这里生成的是三维网格矩阵数据。先以二维数据为例,比如要绘制函数z=f(x,y)的图像x方向在[1,2,3,4,5]五个点上采样,即x=1:5y 方向在[10 20 30 40]四个点上采样,即y=10:10:40那么就一共有5*4=20个采样点。分别为(1,10) (2,10) (3,10) (4,10) (5,10)(1,20) (2,20) (3,20) (4,20) (5,20)(1,30) (2,30) (3,30) (4,30) (5,30)(1,40) (2,40) (3,40) (4,40) (5,40)命令[X,Y]=meshgrid(x,y)生成的X就是这20个采样点的横坐标,Y既是其纵坐标,即X=1 2 3 4 51 2 3 4 51 2 3 4 51 2 3 4 5Y=10 10 10 10 1020 20 20 20 2030 30 30 30 3040 40 40 40 40然后再对这20个采样点计算z的值,即Z=f(X,Y),最后用mesh(X,Y,Z)即可绘制图像三维网格数据与此类似,现在xyz三个方向都是取-1.3到1.3的100个数据,总共就是100^3即一百万个采样点,[x,y,z]=meshgrid(linspace(-1.3,1.3));中的x,y和z就分别是这一百万个采样点的三个维度上的坐标。而s=(x.^2 + (9/4)*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (1/9)*y.^2.*z.^3;就得到了函数s=f(x,y,z)=(x.^2 + (9/4)*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (1/9)*y.^2.*z.^3在这一百万个采样点中的值 size():获取矩阵的行数和列数 (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。 (2)[r,c]=size(A), 当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。 (3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的时矩阵A的行数,c=size(A,2) 该语句返回的时矩阵A 的列数。 Input() 数据输入 Disp() 输出项既可以是字符串也可以是矩阵 矩阵运算 w=gallery('cauchy',1000); %产生一个1000×1000的柯西矩阵 t1=clock; % 获取系统时间 w_norm=norm(w) %计算范数 t2=clock; %获取系统时间 t_norm=etime(t2,t1) %计算范数的耗时 t3=clock; %获取系统时间 w_normest=normest(w); %估计范数 t4=clock; %获取系统时间 t_normest=etime(t4,t3) %估计范数的耗时 特殊矩阵的创建 Zeros(m,n) 生成m*n个全零矩阵 Eye(m,n) 生成m*n个单位矩阵 One(m,n) 生成m*n个全1矩阵 Rand(m,n) 生成m*n个随机矩阵 Randn(m,n)生成m*n个标准正态分布随机矩阵linspace(a,b,c)均匀生成介于a到b的c个值,c 默认为100 magic(n) 产生n阶魔方矩阵 矩阵求值det(A) A为一个矩阵 矩阵求秩rank(A) 矩阵求迹trace(A) 即求对角线元素和也等于特征值之和a必须为方阵 矩阵的逆inv(A) 矩阵的伪逆pinv(A) 也称广义矩阵 矩阵特征值和特征向量[VB,DB]=eig(B). 多项式 poly2sym([1 3 2]) 创建多项式 ans = x^2 + 3*x + 2

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'

Matlab数据库编程指南-Godman

Matlab数据库编程指南-Godman Matlab与数据库链接有三种方法,本文只讲述其中以ODBC的方式进行链接。 本文件包含四部分,其中第三部分为我自己写的一些数据库函数操作的函数,第四部分为网上的一些资料。 如有疑问可以邮件联系tntuyh@https://www.360docs.net/doc/1011243959.html, Godman 2009.3.30 晚Good Luck! 第一部分:读取数据其相关信息查看 1.配置数据源 (1).“控制面板”----“管理工具”——“数据源(ODBC)”——“添加”——“创建数据源名称和选择数据库文件”。具体操作见“配置数据源.gif” (2).采用修改注册表,自动配置数据源。 DB_path='D:\Program Files\MATLAB71\work\StuSystem.mdb'; DB_sourcename='Godman'; LinkDB(DB_path,DB_sourcename,1); (LinkDB为自编函数) 2.建立链接对象——database 调用格式: conna=database(‘datasourcename’,’username’,’password’); 如conna=database('SampleDB','','');其中SampleDB为上文中创建 的数据源名称,当默认情况下,数据库文件的username和password为空。 3.建立并打开游标——exec 调用格式: curs=exec(conna,'sqlquery'); 如curs=exec(conna,'select * from database') 其中conna为上文中链接对象,select * from database表示从表database中选择所有的数据. 4.把数据库中的数据读取到Matlab中——fetch 调用格式: curs=fetch(curs,RowLimit); Data=curs.Data;%把读取到的数据用变量Data保存. 如curs=fetch(curs); 把所有的数据一次全部读取到Matlab中,RowLimit为每次读取的数据参数的行数,默认为全部读取,但是全部读取会很费时间(和计算机性能很大关系)。 上述四点是matlab从数据库文件中读取数据到matlab中的基本步骤。 5.数据返回类型 从数据库中读取数据到matlab有三种数据类型(默认为元胞类型cellarray),分别为元胞类型(cellarray),数字型(numeric),结构型(structure)。可以在链接数据库之前通过setdbprefs 函数来进行设置。如果数据库文件中全部是数值型数据时最好采用numeric型的数据,这样可以使得读取速度大幅提高,特别是在大型数据读取时非常明显。我曾经从数据库中读取过100万个数据,用cellarray时用了16s,但是用numeric时却只用了8s,速度提高很大啊,对电脑配置不好的来说,很有帮助的。(还有我的电脑很烂,1.3GHz,384M内存,可能让大家见笑了…….) 调用格式: setdbprefs(‘datareturnformat’,’numric’)

(完整版)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中文教程共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 读数据库

zz: Matlab数据库编程指南 (2011-03-18 17:39:10) 转载▼ 标签: 杂谈 https://www.360docs.net/doc/1011243959.html,/view/5b9fb00abb68a98271fefa61.html Matlab数据库编程指南-Godman Matlab与数据库链接有三种方法,本文只讲述其中以ODBC的方式进行链接。 本文件包含四部分,其中第三部分为我自己写的一些数据库函数操作的函数,第四部分为网上的一些资料。 如有疑问可以邮件联系tntuyh@https://www.360docs.net/doc/1011243959.html, Godman 2009.3.30 晚Good Luck! 第一部分:读取数据其相关信息查看 1. 配置数据源 (1).“控制面板”----“管理工具”——“数据源(ODBC)”——“添加”——“创建数据源名称和选择数据库文件”。具体操作见“配置数据源.gif” (2).采用修改注册表,自动配置数据源。 DB_path='D:\Program Files\MATLAB71\work\StuSystem.mdb'; DB_sourcename='Godman'; LinkDB(DB_path,DB_sourcename,1); (LinkDB为自编函数) 2. 建立链接对象——database 调用格式: conna=database(‘datasourcename’,’username’,’password’); 如conna=database('SampleDB','','');其中SampleDB为上文中创建的数据源名称,当默认情况下,数据库文件的username和password为空。 3. 建立并打开游标——exec 调用格式: curs=exec(conna,'sqlquery'); 如curs=exec(conna,'select * from database') 其中conna为上文中链接对象,select * from database表示从表database中选择所有的数据. 4. 把数据库中的数据读取到Matlab中——fetch 调用格式: curs=fetch(curs,RowLimit); Data=curs.Data;%把读取到的数据用变量Data保存. 如curs=fetch(curs); 把所有的数据一次全部读取到Matlab中,RowLimit为每次读取的数据参数的行数,默认为全部读取,但是全部读取会很费时间(和计算机性能很大关系)。 上述四点是matlab从数据库文件中读取数据到matlab中的基本步骤。 5. 数据返回类型 从数据库中读取数据到matlab有三种数据类型(默认为元胞类型cellarray),分别为元胞类型(cellarray),数字型(numeric),结构型(structure)。可以在链接数据库之前通过setdbprefs 函数来进行设置。如果数据库文件中全部是数值型数据时最好采用numeric型的数据,这样可以使得读取速度大幅提高,特别是在大型数据读取时非常明显。我曾经从数据库中读取过100万个数据,用cellarray时用了16s,但是用numeric时却只用了8s,速度提高很大啊,

DB Toolbox连接Matlab和常用的数据库

DB Toolbox连接Matlab和常用的数据库 数据库工具箱(DB Toolbox)让用户使用MATLAB强大数据分析和可视化工具功能处理存储在数据库中的数据的复杂分析。在MATLAB环境下工作,可以用结构化查询语言(SQL)命令读,写数据库的数据,进行简单和高级条件的数据查询。并且可以连接MATLAB和数据库包括Oracle,Sybase,Microsoft SQL Server和Informix。可以用单一MATLAB同时访问多个数据库,进行大数据量的事务处理。不懂SQL的用户可以用Visual Query Builder处理数据。 一、重点 1)鲁棒接口能力。用ODBC/JDBC连接数据库,包括Oracle,Sybase SQL Server,Sybase SQL Anywhere,Microsoft SQL Server, Microsoft Access,Informix Ingres. 2)SQL语法。在MATLAB环境直接执行SQL查询 3)动态导入数据。调节SQL查询,把数据导入MATLAB。数据库工具箱满足小的和大的查询。 4)数据类型保存。在数据导入和导出行为MATLAB保存数据类型 5)同时访问多个数据库。从数据库导入数据,对该数据执行计算,然后导入到另一个数据库。 6)处理大数据集的能力。 7)连续状态的数据库连接:一旦和某个数据库的连接建立后,数据库一直是打开的,除非在MATLAB中执行关闭语句。这提高了数据库的读取速度,减少了不必要的命令来调入,输出数据。 8)Visual Query Builder.该图形用户接口列数据源和所有表和字段,不懂SQL的用户可以访问和查询数据库 二、函数列表

FORTRAN学习中的一些小心得

FORTRAN 心得 第一部分:一些小心得 1Fortran不区分大小写 2 Fortran有5种基本数据类型,integer,real, character, logical, complex 3 fortran fixed format格式中的变量赋初值一般用DATA,因为它不能用:: 4 real(kind=8) a这种格式只使用于Fortran90,Fortran77中要使用real*8或real(8) 5 FORTRAN中FREE与FIXED两种格式do循环的区别: Fortran 95使用end do来结束循环。 Fortran 77使用DO循环要麻烦一点,它不使用END DO来结束循环,而是使用行号来结束循环,程序代码要在DO的后面写清楚这个循环到哪一行程序代码结束。 Fortran 77中,经常会使用CONTINUE这个命令来结束循环。因为CONTINUE这个命令没有实际的用途,刚好可以拿来做封装使用。 6 循环的流程控制: 循环中的cycle命令相当于c++里的continue命令,用于结束一次循环 循环中的exit命令好比c里面的break,用于结束循环 7 不使用do循环,单纯用GOTO语句也能设计循环程序,但不推荐使用GOTO语句 7 fortran有等价声明:即用equivalence(a,b),这样使得a,b使用同一块内存,这样可以节省内存,有时可精简代码。 8 fortran77中只能用单引号。(还有疑问,因为fixed format能用双引号) 9 逻辑运算符 == /= > >= < <= !Fortran90用法 .EQ. .NE. .GT. GE. .LT. .LE. !Fortran77用法 9 PAUSE,CONTINUE,STOP pause 暂停程序执行,按enter可继续执行 continue 貌似没什么用处,可用作封装程序的标志 STOP 命令用来结束程序,要谨慎使用 10 数组元素之间要用逗号分隔,而不能像matlab一样既可以用逗号也可以用空格,fortran 的数组元素之间不能用空格。 11 数组的声明: Fortran 77中数组的声明,必须使用DIMENSION命令 Integer a; !先声明a是整型 Dimension a(10) !再声明a是大小为10的数组 Fortran 95中可以用简单的方法: Integer a(10) !最简单的方法 Integer,dimension(10):: a !另一种方法 12 数组的赋值: Fortran 77中数组的声明,可以使用DATA命令或隐含式循环来赋初值; Fortran 95中可以直接设置初值;如:integer ::a(5)=(/1,2,3,4,5/);此时,括号和除号之间不能有空格;

(完整版)《MATLAB语言及其应用》教案

MATLAB语言及其应用 教 案 任课教师:罗靖宇 任课班级:09通信(1)(2) 教材:MATLAB程序设计与应用(第二版) 作者:刘卫国主编出版社:高等教育出版社

内容: 书籍简介:本书以MATLAB 7.0版为蓝本介绍MATLAB功能与应用强调理论和实践相结合贴近读者需要注重讲清有关数学方法和算法原理前提下介绍MATLAB功能;注重和有关学科领域结合,突出应用书中有许多应用实例些实例既是对MATLAB重点和难点诠释又可以更好地帮助读者应用MATLAB来解决实际问题具有很强代表性。 全书分为基础篇应用篇和实验篇基础篇包括MATLAB系统环境MATLAB数据及其运算MATLAB矩阵分析与处理 MATLAB程序设计MATLAB图MATLAB数值计算MATLAB符号计算应用篇包括MATLAB图形用户界面设计MATLAB Notebook使用MATLAB Simulink 仿真软件MATLAB外部程序接口技术MATLAB应用实验篇和教学内容相配合包括15实验以帮助读者更好地上机操作。本书可作为高等学校理工科各专业大学生或研究生学习教材也可供广大科技工作者参考。 第1章MATLAB系统环境 1.1 MA TLAB概貌 1.1.1 MA TLAB 发展 1.1.2 MA TLAB 主要功能 1.1.3 MA TLAB功能演示 1.2 MA TLAB环境准备 1.2.1 MA TLAB 安装 1.2.2 MA TLAB 启动与退出 1.3 MA TLAB操作界面 1.3.1 主窗口 1.3.2 命令窗口 1.3.3 工作空间窗口 1.3.4 当前目录窗口和搜索路径 1.3.5 命令历史记录窗口 1.3.6 Stalt菜单 1.4 MA TLAB帮助系统 1.4.1 帮助命令 1.4.2 帮助窗口 1.4.3 演示系统 第2章MATLAB数据及其运算 2.1 MA TLAB数据特点 2.2 变量及其操作 2.2.1 变量与赋值 2.2.2 变量管理 2.2.3 数据输出格式 2.3 MA TLAB矩阵表示 2.3.1 矩阵建立 2.3.2 冒号表达式 2.3.3 矩阵拆分 2.4 MA TLAB数据运算 2.4.1 算术运算 2.4.2 关系运算 2.4.3 逻辑运算 2.5 字符串 2.6 结构数据和单元数据 2.6.1 结构数据 2.6.2 单元数据 第3章MATLAB矩阵分析与处理 3.1 特殊矩阵 3.1.1 通用特殊矩阵 3.1.2 用专门学科特殊矩阵 3.2 矩阵结构变换 3.2.1 对角阵与三角阵 3.2.2 矩阵转置与旋转 3.3 矩阵求逆与线性方程组求解 3.3.1 矩阵逆与伪逆 3.3.2 用矩阵求逆方法求解线性方程组 3.4 矩阵求值 3.4.1 方阵行列式值 3.4.2 矩阵秩与迹 3.4.3 向量和矩阵范数 3.4.4 矩阵条件数 3.5 矩阵特征值与特征向量 3.6 矩阵超越函数 第4章MATLAB程序设计 4.1 M文件 4.1.1 M文件分类 4.1.2 M文件建立与打开 4.2 程序控制结构 顺序结构、选择结构、循环结构 4.3 函数文件 4.4 程序调试 第5章MATLAB绘图 5.1 二维图形

Fortran调用matlab作图示例

Fortran调用matlab,在这里实现,是通过系统调用了matlab程序,matlab程序运行了一个model模块。具体示例操作如下: 说明:实例用的是CVF+matlab7.1 不过相信都是一样的,因为代码跟编译器无关。 该实例来自网络,程序内容是用fortran自动生成一个随机矩阵,然后将矩阵的转置写入一个txt文件,然后用系统调用matlab程序,读取文件,求特征值,然后对特征值进行某变化后作图。更多关于matlab读取已有文件的知识可以找相关书籍参考。 1、Fortran中编写代码: program main implicit none integer,parameter :: rows=100, cols=100 real*8 :: M(rows,cols) integer :: i call random_seed() call random_number(M) open(100,file='matrix M.txt') write(100,'(E25.15)') transpose(M) close(100) call system("matlab -r test") end program main 2、Matlab建立一个test.m 文件,注意后缀,是model文件,编写为:

clear all; close all; clc; M=load('matrix M.txt'); eigvalues=eig(M); plot(real(eigvalues),imag(eigvalues),'-r*'); title('矩阵M的特征值'); xlabel('特征值实数部分'); ylabel('特征值虚数部分'); 3、注意,test.m文件要放在编译完成的Fortran文件的工程文件夹下。Matlab软件一定是安装版的,这样系统才能调用。第一次安装后,需要重启电脑一次,系统才能确认自动调用matlab程序。 代码可以完全拷贝过去运行,没有问题。祝成功!

matlab连接SQL数据库

1 首先创建数据库,就不废话了。 2 建立ODBC数据源:控制面板->管理工具->ODBC数据源->用户DNS。如图 点击“添加”

旋转“SQL Server”,“完成”。 数据源名称--编程时要用到,可任意命名。服务器选择自己指定的

选择默认数据库,下一步 下一步 旋转SQL Server验证,完成。 3 编程(来自网络)这段程序已经过我验证。

sourceName=input('Enter the source Name:','s'); %获取数据源的名称(dbtest) Timeout=logintimeout(5); %允许登录连接时间最长为5s conn=database(sourceName,'sa','123'); %获取数据库连接对象 ping(conn) %测试数据库连接状态 dbmeta=dmd(conn); %获取数据元对象 t=tables(dbmeta,'tutorial'); %获取cata为 tutorial的表名 [trow,tcolumn]=size(t); %获取返回数组的大小 index=1; for i=1:trow %由于表中既包含了系统表格 if strcmp(t{i,2},'TABLE') %又包含了用户表格,需要在其中 tablename{1,index}=t{i,1}; %找出用户表格,对t数组的每一行 index=index+1; %的第二个元素判断是 table则为用 end %户表。 end tabletosee=input('Which one would you want to use? ','s'); %获取欲查看的表格的名称 sql=['select * from ',tabletosee]; %构造查询的sql语句 curs=exec(conn,sql); %执行该sql语句 setdbprefs('DataReturnFormat','cellarray'); %设定数据返回格式 curs=fetch(curs); %获取结果集对象 numrows=rows(curs); %获取返回数据的行数 numcols=cols(curs); %获取返回数据的列

(完整版)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 定义全局变量

如何在ANSYS中调用其他程序(matlab, C, fortran)和数据交换

ANSYS虽然比较强大,但是不能象Femlab一样自定义模型方程。在某些情况下,必须用当前step的解作为条件,根据某些物理条件来改变单元的材料属性以及载荷,作为下一个step的初始条件。用ANSYS自带的APDL可用于一般的流程控制,如果要实现特定的复杂物理模型就比较困难,而且速度极慢。可行的办法就是在ANSYS运行中把每一个step的结果传给外部程序,用来计算下一步的载荷和单元属性。 A. 和外部程序交换数据,首先要处理好协同问题,一般可用一下两种方法:(1)ANSYS 和外部程序同时运行 -- 需要建立一个flag文件。通过在ANSYS 和程序中读其内容来判断对方是否在运行。在ANSYS和外部程序运行完一个step,改变flag,告诉对方自己当前运行结束,对方可以继续运行,否则必须等待。 (2)在ANSYS中调用/SYS命令执行外部程序。此时ANSYS会暂时停止运行,直到外部程序结束运行,把执行权交还给ANSYS。 (1)适用与matlab等非编译语言。(2)适用与C和Fortran等编译语言。 B. 如何在外部程序中告诉ANSYS改变单元属性和载荷变化: 在从ANSYS中导入数据后,外部程序一般可以根据具体物理模型来创建.mac文件,然后在此文件中写入MPCHG等APDL命令。例如用C创建一个"MD.mac"文本文件,用fsprintf(fp,"MPCHG %d,%d", element_num, Material_ID). 当程序结束运行,在ANSYS中用*use, MD.mac 来实现加载和单元属性的改变。 C. 如何在ANSYS和外部程序中传递数据。 一般在ANSYS中把当前结果写在数据文件中,在外部程序中读取。一般常用的命令有*MOPER。*MOPER可以把节点(node)的结果例如T(x,y,z) 自动根据插值计算映射到用户自己定义的网络上。然后可以用*MWRITE写入数据文件。例如,

matlab调用数据库

[原创]Matlab通过ODBC的方式调用数据库 Matlab数据库编程指南-Godman Matlab与数据库链接有三种方法,本文只讲述其中以ODBC的方式进行链接。 第一部分:读取数据其相关信息查看 1. 配置数据源 “控制面板”----“管理工具”——“数据源(ODBC)”——“添加”——“创建数据源名称和选择数据库文件”(具体操作见GIF图片操作)。 2. 建立链接对象——database 调用格式: conna=database(‘datasourcename’,’username’,’password’); 如conna=database('SampleDB','','');其中SampleDB为上文中创建的数据源名称,当默认情况下,数据库文件的username和password为空。 3. 建立并打开游标——exec调用格式: curs=exec(conna,'sqlquery'); 如curs=exec(conna,'select * from database') 其中conna为上文中链接对象,select * from database表示从表database中选择所有的数据. 4. 把数据库中的数据读取到Matlab中——fetch调用格式: curs=fetch(curs,RowLimit); Data=curs.Data;%把读取到的数据用变量Data保存. 如curs=fetch(curs); 把所有的数据一次全部读取到Matlab中,RowLimit为每次读取的数据参数的行数,默认为全部读取,但是全部读取会很费时间(和计算机性能很大关系)。 上述四点是matlab从数据库文件中读取数据到matlab中的基本步骤。 5. 数据返回类型 从数据库中读取数据到matlab有三种数据类型(默认为元胞类型cellarray),分别为元胞类型(cellarray),数字型(numeric),结构型(structure)。可以在链接数据库之前通过setdbprefs 函数来进行设置。如果数据库文件中全部是数值型数据时最好采用numeric型的数据,这样可以使得读取速度大幅提高,特别是在大型数据读取时非常明显。我曾经从数据库中读取过100万个数据,用cellarray时用了16s,但是用numeric时却只用了8s,速度提高很大啊,对电脑配置不好的来说,很有帮助的。(还有我的电脑很烂,1.3GHz,384M内存,可能让大家见笑了…….) 调用格式: setdbprefs(‘datareturnformat’,’numric’) 6. 养成良好习惯,随手关闭链接对象和游标——close 当不再使用数据库的链接对象时要及时关闭,这样才能及时的释放出内存,而且每次链接后所需要的内存量是非常大的,要是不及时关闭的话对后续计算的影响将非常非常的大。( 针对烂机子而言,要是你的电脑超强也无所谓的…..) 调用格式: close(curs) close(conna) 7. 查看数据相关信息 Rows-查看数据行数 调用格式:numrows=rows(curs)

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 —

相关文档
最新文档