文档库 最新最全的文档下载
当前位置:文档库 › C语言与Matlab集成应用

C语言与Matlab集成应用

C语言与Matlab集成应用
C语言与Matlab集成应用

doi:10.3969/j.issn.1001-358X.2010.02.016

C#与M a tl ab混合编程技术在矿山沉降预测中的应用

罗诗佳1,陈 超1,郭文学2,张伟航1

(1.河北理工大学,河北唐山 063000;2.河北邯邢矿冶设计院有限公司,河北邯郸 056001)

摘要:讨论了Matlab与C#混合编程在矿山沉降预测中的应用方法。把Matlab的程序加入到C#及其它语言编制的程序中,将大大减少编程的工作量、保证程序的准确性,并且继承C#良好的用户界面。

关键词:Matlab;C#;矿山变形监测;混合编程

中图分类号:TD327 文献标识码:B 文章编号:1001-358X(2010)02-0049-02

Matlab是当今世界上使用最为广泛的数值计算

软件之一,具有强大的矩阵计算能力,可实现数值分

析、优化、统计、偏微分方程数值解、自动控制、信号

处理等若干个领域的数学计算。而C#是微软.NET

战略中核心的开发工具,它综合了V isual Basic的高

效率和C++功能的强大性,具有良好的界面设计功

能,可很方便地建立应用程序的可视化界面。

要实现Matlab与C#的混合编程,必须解决两者

间的接口问题,即在C#中如何对已编译的Matlab函

数进行调用以及接口间的数据交换。笔者通过将

Matlab的M-File函数文件编译COM组件,然后在

C#中进行调用以实现混合编程[1]。

1 预测模型的选择

在矿山的沉降变形预测中有许多可供选择的模

型如:灰色理论模型、小波预测模型、神经网络模型

和概率积分模型等。每个模型都有自己的优缺点,

在本论文中笔者选择概率积分模型。下面将倾向达

到充分采动、走向半无限开采时走向主断面的地表

变形概率积分模型汇总如下。

W O=m q cosα(1)

i O=W O

r

(2)

K O=±1.52W O

r2

(3)

W(x)=W O

2

[erf(

π

r

x)+1](4)

i(x)=W O

2

e-πx

2

r2(5)

K(x)=-2πW O

r3

xe-πx

2

r2(6)

式中:W

O 为最大下沉值;i

O

为最大倾斜值;K

O

为最大曲率;W(x)为任意点下沉值;i(x)为任意点

倾斜值;K(x)为任意点曲率。

2 具体实例实现

首先我们把模型写在Matlab的M-File文件

中,这文件不能直接被C#所用。因此先需要将M-

File文件换为C#可以识别的对象模式。具体实现方

法是用Matlab的com t ool工具可以方便地将M-File

文件转化为COM组件,生成的COM组件只要在客

户上注册后即可像使用Activ X控件一样方便地被调

用,其它编程语言也可以通过传参数的方式其加以

复用[2]。下面以在河北省迁安市大庄户矿山的应用

具列说明。

2.1 M-File文件编写

在Matlab的Edit or功能框里编译模型函数,下

面是公式(4)的M-File文件原代码。

functi on y=quxianp l ot p l ot(r,w)

x=-r:0.1:r;

f1=w.3(erf(x.3p i^(1/2)/r)+1)/2;

xlabel(′x(m)′);

ylabel(′w(x)(mm)′)

text(-75,-300,′\fontsize{14}\iti(x)′);

hold on;

y=p l ot(x,f2);

2.2 生成COM组件

编写好M-File文件后,在Matlab命令窗口中

输入命令com t ool,打开COM Builder窗口。点击File

下的Ne w Pr oject,建立新工程,在Component na me里

设置好组件的名称quxianp l ot,Classes里自动生成

quxianp l ot的Class na me。建立好后,然后点击Pr o2

ject|Add files,将把上面编好的M-File文件导入新

94

第2期2010年4月

矿 山 测 量

M I N E S URVEYI N G

No12

Ap r12010

工程。添加完m文件后,点击Build中的COM O ject 命令,就可以生成COM组件。

2.3 注册COM组件

在Matlab安装目录下work\quxianp l ot\distrib中把quxianp l ot_1_0.dll和quxian_p l ot.ctf两个文件拷贝到C#工程目录下bin\Debug中,为可以在C#编译器中调用,还需注册COM组件,打开电脑桌面左下角开始|运行,然后在输入框里输入mwregsvr C#工程路径\bin\Debug\quxianp l ot_1_0.dll,确定后就完成了COM组件的注册。

2.4 在C#程序中调用COM组件

在C#中打开或者新建一个项目,打开右边的资源管理器,选择引用后点击右键,选添加引用(也可以在“项目”中选择“添加引用”),在弹出的窗口中选COM,然后也找到quxianp l ot_1_0.dll,双击就可以选定。这时,该COM组件就添加到C#工程里面去了,下面是程序中调用COM组件部分源代码: using quxianp l ot;

p rivate void xiachenbtn_Click(object sender, Event A rgs e)

 {

chenjianclass Class obj1=ne w chenjian2 class Class();

object obj_y=(object)0;

obj1.chenjianp l ot(1,ref obj_y,r,w);

 }

由于用的模型是带参数的,在设计COM组件中的函数时也用了两个参数程,如程序中obj1.chen2 jianp l ot(1,ref obj_y,r,w),obj1是把COM组件中函数实例化,由于函数是带输出参数的,必须把输出参数强制转化为ref object型,r,w就是模型需用到影响距r和最大下沉值W,这两个参数可以由大庄户的现场资料通过简单编程计算得到。在程序中设定了参数的输入框,如图1。

预计曲线如图2,图2中的曲线就是式(4)中模型的可视化,横轴表示在矿山走向方向各点与地面中心点的距离,纵轴表示走向主断面地表任意点下沉值。

3 结 语

利用C#与Matlab的优势混合编程实现矿山沉降变形分析预测,能做到界面友好,

程序中涉及的矿

图1 

参数输入框

图2 预计曲线

山预测模型运算和模型可视化都可以借助本文所讨论的编程接口。用C#中基于CO M组件的对Matlab 函数的调用方法,使矿山沉降变形预测系统的开发变得简单。利用Matlab数学库和工具箱中自带的各函数,将复杂的数值分析交给Matlab完成,可降低编程难度,同时能缩短软件开发周期和提高软件性能。基于C O M的Matlab与C#混合编程的实现提高了软件的开发效率,将广泛应用于科学研究和工程技术中。

参考文献:

[1] 陈红玲,周立平.C#与Matlab混合编程技术在金融行

业中的应用[J].华南电脑报,2008(6):31.

[2] 罗述全.基于C OM的M atlab与C#混合编程应用[J].

湖北工业大学学报,2007,22(3):23.

作者简介:罗诗佳(1983-),男,四川达州人,河北理工大学交通与测绘学院在读硕士,主要从事矿山变形监测研究。

(收稿日期:2009-12-08)

05

第2期 矿 山 测 量 2010年4月

《MATLAB语言与应用》实验测验高成。.doc

《MATLAB语言与应用》实验测验1 专业学号姓名成绩 自动化200909150151 高成 要求:随机生成一个4×4矩阵A,生成一个4×4的魔术矩阵B,计算C=A.*B,D=A*B,E=A/B,F=A\B,G=A.^2,H=A^2。 矩阵C、D、E、F、G和H的实验结果分别为: >> A=rand(4) A = 0.2769 0.6948 0.4387 0.1869 0.0462 0.3171 0.3816 0.4898 0.0971 0.9502 0.7655 0.4456 0.8235 0.0344 0.7952 0.6463 >> B=magic(4) B = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 1 5 1 >> C=A.*B C = 4.4308 1.3897 1.3162 2.4293 0.2309 3.4881 3.8156 3.9181 0.8742 6.6516 4.5931 5.3470 3.2938 0.4822 11.9280 0.6463 >> D=A*B D = 12.6011 13.8844 13.2146 14.6104 7.7173 13.1080 12.9453 8.2055 14.9772 22.2435 21.0705 18.4963 23.0896 16.6406 17.2807 21.1692

>> E=A/B Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.306145e-017. E = 1.0e+014 * 0.8053 2.4159 -2.4159 -0.8053 -0.5976 -1.7929 1.7929 0.5976 0.1930 0.5789 -0.5789 -0.1930 -1.9751 -5.9254 5.9254 1.9751 >> F=A\B F = 32.4732 0.3697 5.9411 15.7588 34.5598 -1.5535 0.4005 28.6980 -48.3016 -4.7808 -8.8210 -36.1811 22.4018 27.1553 26.4707 24.4556 >> G=A.^2 G = 0.0767 0.4828 0.1925 0.0349 0.0021 0.1006 0.1456 0.2399 0.0094 0.9029 0.5860 0.1985 0.6781 0.0012 0.6323 0.4177 >> H=A^2 H = 0.3053 0.8361 0.8711 0.7083 0.4678 0.5121 0.8228 0.6505 0.5120 1.1116 1.3455 1.1126 0.8391 1.3610 1.4971 0.9428

matlab调用c语言编程

matlab与C语言混合编程 用C编写mex程序 大家都知道,matlab是一种解释型的编程环境,也就是说,跟以前的basic一样,是读 一句执行一句的。这样做可以很方便的实现编程过程中的交互,也免去了麻烦又耗时的 编译过程。但凡事有一利必有一弊,matlab在执行时速度慢也就根源于此。在matlab里 tic for i=1:10000 b(i)=a(10001-i); end 怎么样,是不是很慢? 你的程序里如果再多几个这样的循环,运行速度就可想而知了。 上面程序的功能是将向量a里的数据逆序赋给向量b。下面的程序可以实现相同的功能 tic b=a(10000:-1:1); 为什么这个程序运行速度就这么快呢?这是因为matlab里的基础矩阵运算函数,像转置,复制等等,都是以二进制程序的形式存在的,运行起来速度当然比解释执行10000次所以编matlab程序时,应该尽量避免用循环语句,而使用等效的矩阵运算。虽然这样 但总是有的时候没法找到对应的矩阵运算来等效,或编出来的程序复杂得让人没法修 简单地说,mex程序就是根据一定的接口规范(matlab提出的)编写的一个dll,matla 比如我编了一个mex函数,名字叫max2.dll,那么只要把这个dll所在的目录加到matlab 的搜索路径里(用addpath),就可以像调用普通matlab函数一样来调用它了。因为把 循环体放到了二进制程序中,执行速度快得多。 Mex文件既可以用c,也可以用fortran来编。因为我用的是c语言,所以下面的介绍都 用c语言编写mex文件的方法。如果你用的是fortran,请你自己去看Apiguide.pdf,里 面有详细说明。 前面说到通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度。这是 Matlab5.1本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或Wat com C中的一种。如果你在安装Matlab时已经设置过编译器,那么现在你应该就可以使用mex命令来编译c语言的程序了。如果当时没有选,只要在Matlab里键入mex -setup ,就会出现一个DOS方式窗口,下面只要根据提示一步步设置就可以了。由于我用的是w 听说Matlab5.2已经内置了C语言的编译器,那么下面的这些可能就用不着了。可惜现 需要注意的是,在设置编译器路径时,只能使用路径名称的8字符形式。比如我用的V C5装在路径C:\PROGRAM FILES\DEVSTUDIO下,那在设置路径时就要写成:C:\PROGRA~1 示例程序一、 这样设置完之后,mex就可以执行了。为了测试你的路径设置正确与否,把下面的程序 存为hello.c。 #include "mex.h"

MATLAB与C语言的异同

MATLAB与C语言的异同 MATLAB是一种科学计算软件,也是当今最优秀的科技应用软件之一,专门以矩阵的形式处理数据。它以强大的科学计算和可视化功能,简单易用、开放式可扩展环境,特别是所附带的三十多种面向不同领域的工具箱支持,使得它在许多科学领域成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。它作为一种计算工具和科技资源,可以扩大科学研究的范围,提高工程生产的效率,缩短开发周期,加快探索步伐,激发创作灵感。 作为一种计算机语言,一种用于科学工程计算的高效率的高级语言,MATLAB具有其他高级语言难以比拟的一些优点:编写简单、编程效率高、易学易懂。与其他语言相比,MATLAB 的语法更简单,更贴近人的思维模式。因此,MA TLAB语言也被通俗地称为“演算纸式”的科学计算语言。在控制、通信、信号处理及科学计算等领域中,MA TLAB都被广泛地应用,已经被认可为能够有效提高工作效率、改善设计手段的工具软件。 而C语言是一种面向问题的程序设计语言,也是目前国际上流行的一种结构化的程序设计语言,语言处理程序采用的是编译程序。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,深受广大程序设计者的欢迎。 在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。同时,它也是是数值计算的高级语言。 C语言具有如下特点: 1. 简洁紧凑、灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来, C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 2. 运算符丰富 C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理,从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 3. 数据结构丰富 C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 4. C语言是结构式语言 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以

C语言环境中调用Matlab程序指南

C语言环境中调用Matlab程序指南 甄梓宁 znzhen@https://www.wendangku.net/doc/054010003.html, Matlab在计算方面功能强大、编写简单,但是要运行Matlab程序必须装有Matlab并且用户界面也不够完善,因此除了计算的其他部分采用C等更规范完备的语言进行编写是较好的选择。本文就对如何在C程序中调用Matlab程序作说明。 在C程序中调用Matlab程序有两大类方法。第一种是调用Matlab引擎,第二种是将m文件打包成dll文件在C语言环境下调用。前者虽然易于实现,可以实时监控程序的运行,但是独立性差,需要安装完整版Matlab,且每次调用都会启动MATLAB.exe进程;后者则实现复杂,调试麻烦,但只需安装MCR(Matlab Component Runtime),耗费资源较少。关于MCR,请见第四章的说明。至于两种方法需要在C环境中如何配置请见第五章。 而反过来若要在Matlab下调用C程序则一般使用Matlab自带的mex工具,在此不作介绍。 一、调用Matlab引擎 调用Matlab引擎可以在WIN32、MFC中使用,它的原理实际上相当于打开一个精简版的Matlab然后往里面输命令。下面是调用Matlab中的加法程序add.m的例子。 先在Matlab的work目录下创建add.m文件并编写程序如下: function s = add (a, b) s = a+b; 在C程序中,首先打开精简版的Matlab:(所需头文件,引用库等见第五章) Engine *ep = engOpen (NULL); 编译运行后,会自动打开一个命令行监控窗口,输入pwd就可以看到当前的工作目录,于是需要先将工作目录转换至存放add.m的目录: engEvalString (ep, ”cd ..\\..\\work”); engEvalString是往Matlab里输命令的函数,显然我们的目标是成功运行: engEvalString (ep, ”s=add(a,b)”); 当然,目前Matlab中并没有a和b两个变量,因此需要在C中初始化这两个变量并转换成Matlab基本变量类型mxArray,才能将它们输入到Matlab中。关于mxArray,在第三章会有详细说明。下面是对a=1,b=2的转换过程:

哈工大_Matlab__2013年春季学期《MATLAB语言及应用》试题答案

2013年春季学期 《MATLAB语言及应用》课程试卷 姓名: 学号: 学院: 专业: 必答题 1.常用的matlab界面由哪些窗口组成,各有什么主要作用?(4分) (1)菜单和工具栏功能:【File】菜单主要用于对文件的处理。【Edit】菜单主 要用于复制、粘贴等操作,与一般Windows程序的类似,在此不作详细介绍。【Debug】菜单用于调试程序。【Desktop】菜单用于设置主窗口中需要打开的窗口。【Window】菜单列出当前所有打开的窗口。【Help】菜单用于选择打开不同的帮助系统。 (2)命令窗口功能:用于输入命令并显示除图形以外的所有执行结果 (3)历史命令窗口功能:主要用于记录所有执行过的命令 (4)当前工作目录窗口功能:对文件和目录进行操作 (5)工作空间窗口功能:查看、载入和保存变量 2.如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么 区别?(2分) 方法一:在MATLAB命令窗口中输入editpath或pathtool命令或通过【File】/|【SetPath】菜单,进入“设置搜索路径”对话框,通过该对话框编辑搜索路径。 方法二:在命令窗口执行“path(path,…D:\Study ?)”,然后通过“设置搜索路径”对话查看“D:\Study”是否在搜索路径中。 方法三:在命令窗口执行“addpath D:\Study- end”,将新的目录加到整个搜索路径的末尾。如果将end改为begin,可以将新的目录加到整个搜索路径的开始。 区别:当前文件目录是正在运行的文件的目录,显示文件及文件夹的详细信息,且只有将文件设置为当前目录才能直接调用。搜索路径中的文件可以来自多个 不同目录,在调用时不用将其都设置为当前目录,为同时调用多个文件提供 方便。 3.有几种建立矩阵的方法?各有什么优点?(4分) 1.在命令窗口中直接输入优点:适合输入不规则和较小的矩阵 2.通过语句和函数生成矩阵优点:适合输入规则且较大的矩阵 3.通过M文件来建立矩阵,从外部数据文件中导入矩阵 优点:方便创建和导入大型矩阵 4.说明break语句、continue语句和return语句的用法。(3分)

MATLAB数据输入和输出 C语言转换

数据输入和输出 一、概述 MATLAB可读和写的文件格式: 文件格式文件内容扩展名读、写文件的函数MATLAB 保存的MA TLAB工作区.mat load,save 文本Text 任意textscan,textread 限定文本任意dlmread,dlmwrite 逗号分隔的数值.csv csvread,csvwrite XML XML-格式文本t .xml xmlread,xmlwrite Audio NeXT/SUN sound .au auread,auwrite Microsoft WA VE sound .mav mavread,mavwrite Movie Audio/video .avi aviread Scientific data Data in Common Data Format .cdf cdfread,cdfwrite Flexible Image Transport system data .fits fitsread Data in Hierarchical Data Format .hdf hdfread Spreadsheet Excel worksheet .xls xlsread,xlswrite Lotus 123 worksheet .wk1 wk1read,wk1write Graphics TIFF/PNG/HDF/BMP/JPEG image GIF/PCX/XWD/Cursor/Icon image .tiff .png .hdf .bmp .jpeg .gif .pcx .xwd .cur .ico imread,imwrite 二、使用输入向导(Import Wizard) 从菜单File->Import Data打开Import Wizard;或者命令窗口输入函数uiimport。 从剪贴板开始Import Wizard:Edit->Paste to workspace。 三、保存和加载MAT文件 MAT文件是双精度、二进制、MATLAB格式的文件。 输出到MA T文件:save filename [var1 var2 …] [str*];可以通过[var1 var2 …]选择性保存变量;也可以使用通配符“*”。 查看MAT文件中的变量:whos –file 文件名。 存放结构数组的某个字段:加上“-struct”选项。 在已经存在的MAT文件上添加数据:-append选项。 禁止压缩和Unicode字符编码文件,在save语句中加入“-v6”或者File->Preferences-> General->MA T-Files->MAT-File save options->Ensure backward compatibility(-v6)。save语句默认为数据压缩。 选择输出格式:“-ascii”、“-tabs”、“-double”“-v4”。 从MA T文件输入数据:load函数。 四、输入文本数据 各种输入函数的数据定界符: csvread 仅逗号dlmread 任何字符(可指定)fscanf 任何字符load 仅空格 textread 任何字符textscan 任何字符详见:doc 函数名。 textscan和textread性能比较:前者有更好的性能,特别是读大文件时;使用前者首先要

MATLAB语言及应用课程教学大纲

《MATLAB语言及应用》课程教学大纲 课程编号:21311105 总学时数:32 总学分数:2 课程性质:专业必修课 适用专业:电气工程及其自动化 一、课程的任务和基本要求: 控制算法是集中现代控制系统CAD 技术的本质反映,对于控制算法系统深入地学习,在扩展计算机技术在控制理论中的应用和发展,同时培养学生运用计算机技术进行思维和开发的能力。控制系统理论、计算方法与计算机技术的结合是当代控制理论发展的标志,因此在以MATLAB 为代表的软件平台上,对控制系统进行分析、设计与仿真将成为控制工程领域工程师必须熟练掌握的重要知识和技能。因此,深入透彻地分析和理解控制算法的思想和构造就必须系统学习典型控制系统应用软件的基本原理和控制算法,将成为本课程的目的和任务。 通过本课程的学习,要求学生掌握对于控制系统的分析和综合设计的方法和基本技巧,而控制算法在控制系统CAD 技术中占有相当大的比重,本课程要求较熟练掌握控制算法的基本思想;MATLAB 是一种解释性编程语言,因此,要求熟练掌握MATLAB 的基本编程手段和模块化编程方法,消化和理解控制语言描述的图形界面的设计过程。 二、基本内容和要求: 1.自动控制系统与仿真基础知识 (1)自动控制系统基本概念 (2)自动控制系统分类 (3)控制系统仿真基本概念 (4)MA TLAB与控制系统仿真 (5)MA TLAB 7中控制相关的工具箱 要求:了解自动控制系统与仿真的基础知识,包括自动控制系统的基本概念、分类,以及控制系统仿真的基本概念和Matlab工具。 2.MA TLAB计算及仿真基础 (1)MA TLAB概述 (2)MA TLAB桌面操作环境 (3)MA TLAB数值计算 (4)关系运算和逻辑运算 (5)符号运算 (6)复数和复变函数运算 (7)MA TLAB常用绘图命令 (8)MA TLAB程序设计 要求:了解MA TLAB计算及仿真基础,包括MATLAB的安装、界面及其数值计算、函数运算、程序设计及其绘图命令。 3. Simulink仿真基础 (1)Simulink仿真概述

Matlab以MEX方式“调用”C源代码

Matlab以MEX方式“调用”C源代码 阅读() 评论() 发表时间:2008年09月26日 00:46 本文地址:https://www.wendangku.net/doc/054010003.html,/blog/3311493-1222361217 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比如输入: >> a = add(1.1, 2.2) 3.3000 要得出以上的结果,那应该怎样做呢? 解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matlab的内置函数一样方便。MEX文件是由原C代码加上MEX文件专用的接口函数后编译而成的。可以这样理解,MEX文件实现了一种接口,它把在Matlab中调用函数时输入的自变量通过特定的接口调入了C函数,得出的结果再通过该接口调回Matlab。该特定接口的操作,包含在mexFunction这个函数中,由使用者具体设定。 所以现在我们要写一个包含add和mexFunction的C文件,Matlab调用函数,把函数中的自变量(如上例中的1.1和2.2)传给 mexFunction的一个参数,mexFunction把该值传给add,把得出的结果传回给mexFunction的另一个参数,Matlab通过该参数来给出在Matlab 语句中调用函数时的输出值(如上例中的a)。 值得注意的是,mex文件是与平台有关的,以我的理解,mex文件就是另类的动态链接库。在matlab6.5中使用mex -v 选项,你可以看到最后mex阶段有类似如下的信息: --> "del _lib94902.obj" --> "del "test.exp"" --> "del "test.lib"" 也就是说,虽然在matlab6.5生成的是dll文件,但是中间确实有过lib文件生成。 比如该C文件已写好,名为add.c。那么在Matlab中,输入: >> mex add.c 就能把add.c编译为MEX文件(编译器的设置使用指令mex-setup),在Windows中,MEX 文件类型为mexw32,即现在我们得出add.mexw32文件。现在,我们就可以像调用M函数那样调用MEX文件,如上面说到的例子。所以,通过MEX文件,使用C函数就和使用M函数

matlab特点及应用领域

MATLAB就是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模与仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB与Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数与数据、实现算法、创建用户界面、连 matlab开发工作界面 接其她编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位就是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。

在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,就是由于它有着不同于其她语言的特点。正如同FORTRAN与C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB的最突出的特点就就是简洁。MATLAB用更直观的、符合人们思维习惯的代码,代替了C与FORTRAN语言的冗长代码。MATLAB给用户带来的就是最直观、最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点。 ①语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用其丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发就是站在专家的肩膀上。 具有FORTRAN与C等高级计算机语言知识的读者可能已经注意到,如果用FORTRAN或C语言去编写程序,尤其当涉及矩阵运算与画图时,编程会很麻烦。例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来求解方程,最后再输出计算结果。在求解过程中,

在matlab中调用c程序

1.Maltab 编译Mex文件(不可调试) 1.1hello word 在matlab命令行中输入:mex -setup选择合适编译器,完成设置。 新建一个文件,输入: #include void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[]) { mexPrintf("Hello word!"); } 把上面程序保存为一个C文件,如 hello.c 在command window下运行 >> mex hello.c >> 结束之后在current folder 窗口里会有一个hello.mexw32文件。 在command window下运行 >> hello() Hello word! 1.2如果是多维数组并不能用Arr[i][j]的格式寻址,在参数在C里只是一维数组, 一维数组按列排列,C语言是按行排列的, 如[a b c d;e f g h]C语言在内存中是按a b c d e f g h排列,而matlab是按 a e b f c g d h排列的。如果要变成C语言可Arr[i][j]索引的格式,可用for循环转化 打印函数: mexPrintf()相当于matlab的disp函数, mexPrintf函数里需要打印的部分必须用""而不能用'' 子函数的问题: 子函数有两种方式,一种采用return值得方式返回值 另一种方式为利用参数返回值,把需要return的值直接赋给形参。 多个.c文件的编译: 多个.c文件中只能存在一个mexFunction函数 可用mex ('a.c','b.c','d.c')的格式编译 在VS中调试mex 在vs中建立dll工程,建立project.cpp文件,输入 #include "project.h" #include void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[]) { mexPrintf("Hello word!"); } 建立.h文件,输入 #include "matrix.h"

Matlab语言及应用论文

一、MATLAB简介 MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 二、应用 MATLAB 产品族可以用来进行以下各种工作: (1)数值分析; (2)数值和符号计算; (3)工程与科学绘图; (4)控制系统的设计与仿真; (5)数字图像处理技术; (6)数字信号处理技术; (7)通讯系统设计与仿真; (8)财务与金融工程。 MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特

Matlab调用c语言程序代码

Matlab调用c程序 方法: 第一步:要先在matlab中安装c程序编译器,步骤如下: 键入命令:mex -setup; 选择c/c++编译器; 选择c/c++编译器版本; 确认。 第二步:键入:mex *.c 实例介绍:【转】 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比如输入: >> a = add(1.1, 2.2) 3.3000 要得出以上的结果,那应该怎样做呢? 解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matlab 的内置函数一样方便。MEX文件是由原C代码加上MEX文件专用的接口函数后编译而成的。 可以这样理解,MEX文件实现了一种接口,它把在Matlab中调用函数时输入的自变量通过特定的接口调入了C函数,得出的结果再通过该接口调回Matlab。该特定接口的操作,包含在mexFunction这个函数中,由使用者具体设定。 所以现在我们要写一个包含add和mexFunction的C文件,Matlab调用函数,把函数中的自变量(如上例中的1.1和2.2)传给mexFunction的一个参数,mexFunction把该值传给add,把得出的结果传回给mexFunction的另一个参数,Matlab通过该参数来给出在Matlab语句中调用函数时的输出值(如上例中的a)。比如该C文件已写好,名为add.c。那么在Matlab中,输入: >> mex add.c 就能把add.c编译为MEX文件(编译器的设置使用指令mex -setup),在Windows 中,MEX文件类型为mexw32,即现在我们得出add.mexw32文件。现在,我们就可以像调用M函数那样调用MEX文件,如上面说到的例子。所以,通过MEX文件,使用C函数就和使用M函数是一样的了。 我们现在来说mexFunction怎样写。 mexFunction的定义为: void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {

c_调用matlab函数(混合编程)

第2部分实战练习(自己做的) 2.1 c#调用matlab函数 matlab版本2009b,c#版本vs2008. 2.1.1 matlab函数编译成dll文件 (1)首先编写一个函数的m文件,如MatrixOpera表示两个矩阵相加和相减。 %-------------------------------------------------------- function [addRlt,minusRlt]=MatrixOpera(a,b) % 矩阵相加,相减 [m1,n1]=size(a); [m2,n2]=size(b); if m1~=m2 || n1~=n2 display('矩阵大小不相同') error('参数错误'); end addRlt=a+b; minusRlt=a-b; end %----------------------------------------------------------- 两个输入参数,两个输出参数,并且都是矩阵形式 (2)在matlab 命令窗口输入deploytool,弹出如下窗口 或者点击matlab的主菜单desktop→deploy tool获得如下面图所示的窗口,然后在file→new→deployment project 中点击。获得上图窗口,修改工程名称和文件后缀名(必须是,.Net Assembly格式)

修改

(3)新建了一个叫matPrj的工程(它相当于c#中的命名空间namespace);然后给它增加class或类(它就是c#中的类),点[add class]比如myMathClass;之后再给它添加方法(它就是函数了),点[add files],如下图所示。本实例中给它添加了MatrixOpera等函数。 class 方法 (4)完了之后就可以编译了。编译出来后需要一两分钟的时间。 编译 (5)找到该工程存放的文件夹,从里面拷出matPrj.dll文件。同时还要从G:\Program Files\MATLAB\R2009b\toolbox\dotnetbuilder\bin\win32\v2.0拷贝出MWArray.dll和https://www.wendangku.net/doc/054010003.html,module。第二个文件必须要哦,否则可能会

Labview调用C语言、Matlab脚本节点以及库函数节点的方法

Labview调用C语言、Matlab脚本节点以及 库函数节点的方法 Labview调用C语言的方法 CIN(Code InterfaceNode)节点是LabVIEW中用来调用C/C++代码的功能节点。它与动态链接库的不同之处在于,它能够将代码集成在VI中作为单独的一个VI发布,而不需要多余的文件。另外,它提供了函数入口,它可以根据用户提供的输入输出自动生成函数入口代码,从而使用户专心关注代码功能而不用为函数声明、定义等语句费心。因此CIN节点与DLL在不同的场合有不同的优势,但是CIN节点的使用比调用DLL要复杂得多。 由于LabVIEW中数据的存储格式遵循了C语言中数据的存储格式,并且二者完全相同,所以用户可以向CIN传递任意复合的数据结构。另外,CIN比图形化语言可获得更高的执行效率。 注意:对于完全相同的代码,CIN和DLL的执行效率是完全一样的。 如果要使用CIN节点,你必须安装了C编译器。在Windows下,CIN支持以下编译器: Microsoft Visual C++ Symantec C CIN节点必须调用.lsb文件。.lsb文件是通过外部编译器与CINTools工具结合将C代码编译生成的。 下面我们通过一个Step byStep的实例来看如何在LabVIEW中实现CIN节点调用,本例所用外部编译器为MicrosoftVisual C++6.0。 第一步:在程序框图放置一个空CIN节点; CIN节点位于FunctionsPalette的Connectivity->Libraries& Executables->Code InterfaceNode。 第二步:创建CIN节点的输入输出端口;

c语言使用matlab生成的滤波头文件

matlab的fdatool是好东西,不过很多人不知道该怎么使用它生成的C头文件。 这里有个fdatool设计的IIR高通滤波器,采样率400Hz时截止频率1Hz。 设计定型之后,要做些调整。 以下说明中的英文名词有些可能对不上fdatool界面上的原文,请大家意会吧 第一步: 点击菜单中的Edit->Convert Structure 选择Direct Form I ,SOS,(必须是Direct Form I, II 不行) 一般情况下,按照默认设置,fdatool设计都是由二阶部分串联组成的。 这种结构的滤波器稳定性比一个section的要好很多,其他方面的性能也好些。 如果不是的话,点击Convert to second order sections。 这时,滤波器的结构(structure)应该显示为Direct Form I,second order sections 第二步: 选择quantize filter,精度选择single precision floating point (单精度浮点) 之所以不用定点是因为噪声太大,也不容易稳定。 点击菜单中的Targets -> generate c header ,选择export as:single precision floating point (单精度浮点) 填写变量名称时,把NUM改成IIR_B,DEN改成IIR_A,其他不用动,保存为iir_coefs.h 保存好的文件如下: //一大堆注释 //然后: /* General type conversion for MATLAB generated C-code */ #include "tmwtypes.h" /*

(完整版)《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 二维图形

matlab程序设计与应用(第二版)第三章部分课后答案

第三章1. (1)A=eye(3) (2)A=100+100*rand(5,6) (3)A=1+sqrt(0.2)*randn(10,50) (4)B=ones(size(A)) (5)A+30*eye(size(A)) (6)B=diag(diag(A)) 2. B=rot90(A) C=rot90(A,-1) 3. B=inv(A) ;A的逆矩阵 C=det(A) ;A的行列式的值 D=A*B E=B*A D=E 因此A与A-1是互逆的。 4. A=[4 2 -1;3 -1 2;12 3 0]; b=[2;10;8]; x=inv(A)*b x = -6.0000 26.6667 27.3333 5. (1) diag(A) ;主对角线元素 ans = 1 1 5 9 triu(A) ;上三角阵

ans = 1 -1 2 3 0 1 -4 2 0 0 5 2 0 0 0 9 tril(A) ;下三角阵 ans = 1 0 0 0 5 1 0 0 3 0 5 0 11 15 0 9 rank(A) ;秩 ans = 4 norm(A) ;范数 ans = 21.3005 cond(A) ;条件数 ans = 11.1739 trace(A) ;迹 ans = 16 (2)略 6. A=[1 1 0.5;1 1 0.25;0.5 0.25 2] A = 1.0000 1.0000 0.5000 1.0000 1.0000 0.2500 0.5000 0.2500 2.0000

[V,D]=eig(A) V = 0.7212 0.4443 0.5315 -0.6863 0.5621 0.4615 -0.0937 -0.6976 0.7103 D = -0.0166 0 0 0 1.4801 0 0 0 2.5365

MATLAB-语言及其用-实验(答案)

M A T L A B-语言及其用- 实验(答案) -CAL-FENGHAI.-(YICAI)-Company One1

《MATLAB 语言及其用》 实验指导书 目录

实验一 Matlab 使用方法和程序设计........................ 实验二控制系统的模型及其转换............................. 实验三控制系统的时域、频域和根轨迹分析...........实验四动态仿真集成环境-Simulink......................... 实验一Matlab使用方法和程序设计一、实验目的 1、掌握Matlab软件使用的基本方法; 2、熟悉Matlab的数据表示、基本运算和程序控制语句 3、熟悉Matlab绘图命令及基本绘图控制 4、熟悉Matlab程序设计的基本方法 二、实验内容: 1、帮助命令 使用help命令,查找 sqrt(开方)函数的使用方法; 在 CommandWindowL里输入help,接在在search里输入sqr即可。sqrt Square root Syntax B = sqrt(X) Description

B = sqrt(X) returns the square root of each element of the array X. For the elements of X that are negative or complex, sqrt(X) produces complex results. Tips See sqrtm for the matrix square root. Examples sqrt((-2:2)') ans = 0 + 1.4142i 0 + 1.0000i 1.0000 1.4142 See Also nthroot | realsqrt | sqrtm 2、矩阵运算 (1)矩阵的乘法 已知A=[1 2;3 4]; B=[5 5;7 8]; 求A^2*B A=[1 2;3 4];B=[5 5;7 8]; C=A^2*B >> format compact C = 105 115 229 251 (2)矩阵除法 已知 A=[1 2 3;4 5 6;7 8 9]; B=[1 0 0;0 2 0;0 0 3]; A\B,A/B A=[1 2 3;4 5 6;7 8 9];

相关文档