全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要:本文简要地介绍了Matrix库档,描述了在VC+中设置调用Matrx的操作过程,详细讲述了在VC+工程档中调用Matrx的方法。另外,对矩阵变数的几种读写操作以及可变输入多输出变数函数的调用问题进行了讨论。1Matrix简介 Matrix是Mathtools公司利用Matcom技术开发的一个面向转业从事工程技术和科学计算人员的矩阵数学库(对於Matcom4.4来说库档案名为mdv4400v.lib)。这个C+库提供了一个双精度matrix类型M,它可以是复数矩阵、实数矩阵、稀疏矩阵甚至n维矩阵。这个库有500多个很好的函数供我们使用。库中所提供的函数涉及线性代数、多项式数学、信号处理、档输入输出、图像处理、绘图等方面。下面我们就在VC+中调用这一库档中的函数的操作作详细的说明。2Matrix函数调用方法 Matrix是一个C+的库。为了成功地将这一库档集成到C+的工程档中,简要地说需要做如下的操作: (1) 将库档加到C+的工程中 (2) 使用库的头档matlib.h (3) 初始化库 (4) 创建矩阵变数 (5) 访问矩阵单元 (6) 调用Matrix的函数 为了更好地理解如何在VC+中调用Matrix的函数,我们在这里描述一下从创建工程到最後调用Matrix的函数的全过程。 ?创建一个新的C+工程 在VC中选择功能表 File / New / Win32 Console Application ?将库档加到C+的工程中 Matrix必须加入到C+的工程档中,以便C+编译器能够将它链结到最後的执行档中去。在VC中利用功能表命令 Project/Add to Project / Files 将mdv4400v.lib 加入到C+工程中。 ?创建新的原始档案 利用功能表命令Project / Add to Project / New / C+ Source File. 命名为Demo.cpp ?将matlib.h加入到工程中我们还要将描述Matrix.中用到的资料类型,函数原型以及常量的matlib.h 加入到工程中。在demo.cpp的第一行加入 #include matlib.h 同时告诉编译器档matlib.h所在的路径,即用功能表项Project / Settings / C, C+ / Preprocessor / Additional include subdirectories.来完成此项工作。 ?初始化类库 在调用Matrix.之前要用“initM(MATCOM_VERSION);”函数来初始化类库调用,并用“exitM();”函数来结束类库调用。故在demo.cpp 中加入下列代码: int main() initM(MATCOM_VERSION); exitM(); return 0; 由於initM 是通过一个静态变数而受保护的,所以它可以多次调用。MATCOM_VERSION是一个在matlib.h中定义了的常量,它保证了动态连结程式库与matlib.h 相匹配。 ?创建矩阵变数 在Matrix中矩阵类型被称作Mm,我们就是用这一关键字来创建新的矩阵变数,如 Mm a ; Mm b ; Mm v; 这VC+三条VC+语句在VC+当前工程档中创建了a、b、v三个矩阵变数。 ?访问矩阵单元 矩阵单元的访问包括赋值和取回值。在C+中读写矩阵单元是用两个函数来完成的,即通过a.r()来访问矩阵的实部,而通过a.i()来访问矩阵的虚部,其中a为矩阵变数,如 a=rand(3); b=zeros(3,1); b.r(1,1)=1; b.r(2,1)=2; b.r(3,1)=3; 可以利用函数display(var)来显示变数的值,如display(a);display(b); 由於矩阵单元数目可变性大,有时矩阵很大,单纯用这两个函数来赋值就显得比较麻烦。为此,还有更灵活的方式给矩阵单元赋值。BR()函数使得我们可以通过资料列表给矩阵赋值,如 a=(BR(1),0,-1,semi,i,pi,5,semi,0.3,-4,0); 这里semi也是Matrix中的一个函数,它代表Matlab中的一个分号。 我们还可以通过M_VECTOR宏将已有的定长的double类型的矩阵的值赋给矩阵变数,如 double a_v6=1,-3.9,6.7,-5.8,2.8,-0.5; Mm a; M_VECTOR(a,a_v)当我们有很多的矩阵单元要进行读写操作时,如果还是利用a.r()来逐一逐一地拷贝值的话,其性能不好。C+提供了直接访问矩阵记忆体的方法,即通过a.addr() 返回矩阵变数的实部的指标,通过 .addi()返回矩阵变数的虚部的指标,如Mm X; X=zeros(100,100);X.addr()指向矩阵变数的 (1, 1)处,X.addr(n)指向矩阵变数第n个单元所在的位置,X.addr(m, n)指向矩阵变数的(m, n)处。Mm x; double a,b,c; x=magic(3); /生成一个3阶幻方矩阵x / x= 8 1 6 ; 3 5 7 ; 4 9 2 a=*x.addr();/ a=8 b=*x.addr(2); / b=1 c=*x.addr(2,3); / c=7 *x.addr(3,1)=-999;/ x= 8 1 6 ; 3 5 7 ; -999 9 2 *x.addr()=-*x.addr(); / x= -8 1 6 ; 3 5 7 ; -999 9 2 我们利用.addr() 可以将矩阵中的所有元素一次读入到一个double型的指标: double* a_v=(double*)malloc(512*sizeof(double); Mm a=some_function(); / 假设 a 是 512x1 的矩阵 memcpy(a_v,a.addr(),512*sizeof(double); ?函数调用Matrix为我们提供了500多个很实用的函数,对於这些函数的调用说明的详细资料可以参看 Matcom4.4以上版本的用户参考手册。这里我们要介绍的是这类函数的多变数输入输出的问题返回值的问题。对於返回多个值时这样处理:.m code functiona, b=matlabfun(c)/ C+ header fileMm matlabfun(Mm c,i_o, Mm& a, Mm& b); / C+ 调用 matlabfun(c,i_o,a,b); i_o起着位置分隔作用,它将输入和输出分成两部分,见实例:Mm x,v,d; x=wilkinson(7); eig(x,i_o,v,d); display(v); display(d); 当函数接受可变数目的输入参量时需要用CL来包装,如: Mm t; t=linspace(0,2*pi); plot(CL(t),sin(t),TM(*) 3完整的实例程式 #include matlib.h int main() initM(MATCOM_VERSION); Mm a ; Mm b ; Mm v; a=rand(3); b=zeros(3,1); b.r(1,1)=1; b.r(2,1)=2; b.r(3,1)=3; display(a); display(b); a=(BR(1),0,-1,semi,i,pi,5,semi,0.3,-4,0); display(a); double a_v6=1,-3.9,6.7,-5.8,2.8,-0.5; Mm c; M_VECTOR(c,a_v) display(c); Mm x; int a0,b0,c0; x=magic(3); /生成一个3阶幻方矩阵x display(x); a0=int(*x.addr();/ a0=8 b0=int(*x.addr(2); / b0=1 c0=int(*x.addr(2,3); / c0=7 printf(a0=itb0=itc0=itn,a0,b0,c0); *x.addr(3,1)=-999;/ x= 8 1 6 ; 3 5 7 ; -999 9 2 *x.addr()=-*x.addr(); / x= -8 1 6 ; 3 5 7 ; -999 9 2 display(x); double* a_vv=(double*)malloc(512*sizeof(double); Mm aa=rand(512,1); / 假设 a 是 512x1 的矩阵 memcpy(a_vv,aa.addr(),512*sizeof(double); Mm xx,vv,dd; xx=wilkinson(3); eig(xx,i_o,vv,dd); display(vv); display(dd); Mm t; t=linspace(0,2*pi); plot(CL(t),sin(t),TM(*); exitM(); return 0; 从实例可以看出,Matrix实际上是将一些很有用的Matlab函数封装成C+的库档,使得我们在C+工程环境中调用这些Matlab函数方便。文中我们就只是对VC+工程环境中如何灵活运用Matrix中的函数的操作步骤作了详细描述。其中,运行这些程式要求系统安装有VC+5.0或更高版本,安装Matcom4.4。如果系统不安装Matcom4.4,只需将Matcom4.4的ago4400.dll、mdv4400v.dll、mdc4400v.dll三个动态连结程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西柳州市柳江区财政局招聘编外聘用人员2人参考题库参考答案详解
- 2025广东广州市海珠区新港街道市容环境卫生监督检查所招聘环卫工人5人参考题库及答案详解(全优)
- 2025年齐齐哈尔市文化广电和旅游局所属事业单位公开招聘工作人员9人参考题库附答案详解(研优卷)
- 2025广西来宾合山市文化广电和旅游局招聘1人参考题库附答案详解(研优卷)
- 2025年湖南衡阳南岳区文化旅游广电体育局招聘讲解员参考题库及答案详解参考
- 2025年湖南娄底涟源市民兵武器装备仓库事务中心(市民兵训练基地事务中心)招聘5人参考题库及参考答案详解
- 2025年甘肃省庆阳市宁县委组织部下属事业单位选调参考题库附答案详解(能力提升)
- 2025广西柳州市柳江区财政局招聘编外聘用人员2人参考题库及完整答案详解一套
- 2025年服装纺织行业环保材料在纺织品设计中的应用研究报告及未来发展趋势预测
- 知识产权维护长期承诺书6篇
- 国家体质健康测试课件
- 现场提升管理活动方案
- 心理健康服务行业深度报告-压力时代的心理突围-科技赋能破局疗愈赛道-中邮证券
- DB11∕T 510-2024 公共建筑节能工程施工质量验收规程
- 肿瘤患者疼痛的护理指南
- 电厂设备部门管理制度
- 诊所信息安全管理制度
- 新生儿戒断综合征评分标准
- 鼻出血的课件
- 汽车行业发展概况及趋势
- 五年级家长会方案
评论
0/150
提交评论