求论文!!!关于MATLAB的数值运算问题的研究

供稿:hz-xin.com     日期:2025-01-21
MATLAB图像处理论文

我有一篇写着玩的,前几天送给一个小朋友发表了,但继续做下去应该会有一些有意思的结果,如果你有兴趣可以发站内信件给我。

用zscore,标准化的目的是:使得平均值为0,标准差为1,这样可以使不同量纲的数据放在一个矩阵.

>> A=magic(4)

A =

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1


>> [Z,MU,SIGMA] = zscore(A)

Z =

1.3770 -1.2509 -1.0585 0.8262
-0.6426 0.4811 0.2887 -0.0918
0.0918 -0.2887 -0.4811 0.6426
-0.8262 1.0585 1.2509 -1.3770


MU =

8.5000 8.5000 8.5000 8.5000


SIGMA =

5.4467 5.1962 5.1962 5.4467

>> mean(Z)

ans =

1.0e-016 *

-0.2776 0 0 0.5551

>> std(Z)

ans =

1.0000 1.0000 1.0000 1.0000

  基于Matlab和VC联合编程的数据处理系统

  摘 要 文章探讨了Visual C++ 6.0数据库技术和 MATLAB 6.5 强大的数值计算和图形显示功能。利用Matlab 和VC编制软件对数据进行处理,提高了数据处理的效率。

  关键词 Matlab;数据处理系统;数据库

  1 引言
  Visual C++ 是目前综合性最高、最强大的软件开发工具之一。Matlab是一种高性能的数值计算和可视化软件,在数值分析、信号处理、系统辨识、特殊函数和图形等方面具有广泛的应用。由于测试结果有上百万个数据量,且数据存储在数据库中,为了便于研究处理数据的方法,获得可靠的测试结果,本文探讨利用Microsoft Visual C++ 6.0数据库技术 和 MATLAB 6.5 强大的数值计算和图形显示并联合编制软件对数据进行处理。我们把 Matlab与Visual C++结合起来,简化复杂的数据处理方法研究,体验数据处理的工作效率和即时性。此系统在某次数据处理系统中得到广泛的应用。
  2 数据处理系统的关键技术
  数据处理系统是利用Microsoft Visual C++ 6.0数据库技术 和 MATLAB 6.5 强大的数值计算和图形显示并联合处理测量数据的系统,数据处理系统涉及到Microsoft Visual C++ 6.0数据库技术和Microsoft Visual C++ 6.0与MATLAB的接口技术,为了能够使系统具有可移植性和即时性,系统使用的数据库技术是ADO数据库访问技术,Microsoft Visual C++ 6.0与MATLAB的接口技术是引擎技术。
  2.1 ADO数据库访问技术
  ADO(ActiveX Data Object)是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。这要比ODBC API、DAO、RDO都要简单易用、灵活。
  ADO数据库开发的基本流程如下:
  (1)初始化COM库,引入ADO库定义文件。
  (2)用Connection对象连接数据库。
  (3)利用建立好的连接,通过三个智能指针执行查询、处理结果记录集和SQL命令,使用完毕后关闭连接释放对象。
  2.1.1 初始化COM库
  在MFC中采用一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示:AfxOleInit()。
  2.1.2 引入ADO库定义文件
  用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它即可。可以直接在Stdafx.h文件中加入下面语句来实现:
  #import "c:\program files\common files\system\ado\ msado15.dll" \ no_namespace \rename ("EOF", "adoEOF")
  2.1.3 三个智能指针
  数据处理系统使用前面用#import语句引用类型库时,生成的包装类.tlh中声明的智能指针中有这三个_ConnectionPtr、_RecordsetPtr和_CommandPtr指针,数据处理系统通过这三个智能指针使用ADO的连接数据库、SQL命令、记录集的遍历、更新操作。
  2.2 MATLAB与Visual C++的接口技术
  MATLAB系统提供一个非常重要的组件—MATLAB应用程序接口,它可以向MSATLAB环境传送数据也可从MATLAB环境接收数据;Visual C++可以调用MATLAB编写的程序,在这里数据处理系统采用MATLAB引擎库,MATLAB引擎库包含了若干个控制MATLAB引擎的函数,如表1所示。
  表1 MATLAB引擎的函数表
  函数名 函数功能
  engOpen 启动MATLAB引擎
  engClose 关闭MATLAB引擎
  engGetArray 从MATLAB引擎中获取一个MATLAB矩阵
  engPutArray 向MATLAB引擎发送一个MATLAB矩阵
  engEvalString 执行于一个MATLAB命令或自编的MATLAB函数
  engOutputBuffer 创建一个存储MATLAB文本输出的缓冲区

  数据处理系统主要应用的引擎函数是engEvalString、engOpen、engClose等函数。下面通过简单的例子说明:
  #include "stdafx.h"
  #include "engine.h"
  int MatlabDraw()
  {
  Engine *ep;
  if (!(ep = engOpen(NULL)))
  {
  MessageBox ((HWND)NULL,"Can't start MATLAB engine","Matlab Draw",MB_OK);
  return 0;
  } /*启动MATLAB引擎*/
  engEvalString(ep, "x=0:0.01:2*pi;y=sin(x);plot(x,y);"); /*执行MATLAB命令:绘图*/
  engClose(ep); /*关闭MATLAB引擎*/
  return 1;
  }

  2.3 MATLAB与Visual C++的数据传输
  MATLAB与Visual C++的数据传输需要三个步骤,第一完成Visual C++读取ACCESS数据库的大量数据;第二把Visual C++读取到的数据传输到MATLAB中,并在利用MATLAB中自编的函数进行处理;第三把处理结果传输到Visual C++中。下面通过例子说明MATLAB与Visual C++的数据传输。
  double dataplot[2000];
  mxArray *T=NULL;
  int x=0;
  while(!m_pRecordset->adoEOF)
  {
  var = m_pRecordset->GetCollect("场强");
  // 读出库中字段数据
  dataplot[x]=var;
  if(x== Jshuqi -1) //判断是否数据读完,数据传输到MATLAB
  {
  T = mxCreateDoubleMatrix(1, Jshuqi, mxREAL); /*创建一个矩阵*/
  mxSetName(T, "T");
  /*设置矩阵的名字为“T”*/
  memcpy((char *)mxGetPr(T), (char *)dataplot, Jshuqi* sizeof(double)); //向矩阵“T”赋值
  engPutArray(ep, T);
  /*向MATLAB引擎发送一个MATLAB矩阵*/
  mxArray *result=engGetArray(ep,"T"); //VC++读取Matlab的矩阵T中的数据
  double *p=mxGetPr(result);
  mxDestroyArray(T); /*从内存中撤销矩阵“T”*/
  }
  x++;
  m_pRecordset->MoveNext();
  }
  3 数据处理系统功能
  数据处理系统主要对测试数据进行处理,并提供与测试数据相关的处理结果,数据的处理方法根据测试方法和科学理论计算方法来确定,本系统的主要功能在于能够方便及时地存储原始测试数据,并能够方便数据处理方法的研究,为获得可靠科学的测试数据处理结果提供了极为方便的途径。其功能主要包括:存储测试数据到MATLAB环境中、合并我们所需一起处理的多次测试数据、采用数据处理方法统计测试数据得到的结果。

  3.1 存储测试数据
  在数据处理系统中,选择所要处理的测试代号或者在测试代号编辑框中输入所需的测试代号,左击 “保存数据” 按钮,就可以把对应测试代号的数据读入MATLAB环境中。
  3.2 合并测试数据
  在数据处理系统中,处理的测试数据往往对几次测试的数据需要一起处理,系统可以把几次测试代号所对应数据按一定的顺序进行合并。
  系统的操作为:对2个和多个测试数据进行合并,只需选中“2个测试代号”或“多个测试代号”,在保存名中输入保存名,然后进行读取测试数据操作,这样会在“数据表名”中显示读取数据的测试代号名和在“存储数据表名”中显示刚才在保存名中输入的名字;到读取完所有的所需数据后只需左击“合并数据”按钮,就可以完成合并测试数据的操作。
  3.3 采用数据处理方法统计测试数据
  统计测试数据是实现数据处理方法,虽不同测试的数据处理方法不同,但只需少量的工作就可以完成所对应的数据处理,而且在处理过程中能够根据数据结果来即时的修改数据处理方法。系统只需我们实现在MATLAB环境中测试数据处理方法的程序,这样为研究人员提供了极大的方便。
  系统只需把数据处理方法的程序放入系统的处理函数里,就可以实现对测试数据的统计处理,本系统在数据存储好后只需按“作图求值”按钮,就可以获得我们所需的测试数据结果和统计图。
  4 结论
  本系统很好地结合了Visual C++和MATLAB的高性能的数值计算优点,此系统在某次测试中处理了上百万个数据量的数据库,为研究科学合理的数据处理方法提供了方便和节约了时间,并在最后提供可靠科学的测试结果,提高了测试数据处理的工作效率和即时性,具有较高的社会效益。

  参考文献
  [1]刘志俭等. MATLAB应用程序接口用户指南[M]. 北京:科学出版社,2000.
  [2]陶红,袁金荣. Matlab与C/Visual C++混合编程的实现[J].计算机工程与应用,2000(10)
  [3]MichaeI J. Young著,邱仲潘等译. Visual C++6从入门到精通[M]. 北京:中国电子工业出版社,1999.

  相关资料:
  http://www.lwlm.com/html/2008-06/84302.htm

  仅供参考,请自借鉴

  希望对您有帮助

找一本 matlab 数值计算的书!看看!

Matlab论文插图绘制模板第6期—堆叠图
这次分享的模板内容主要集中在绘制Matlab中的堆叠图。此模板旨在降低科研工作者使用Matlab进行科研绘图的门槛。用户只需按照模板格式添加相应内容,即可得到满足大部分期刊以及学位论文格式要求的数据插图。模板主要包含五部分:数据准备、颜色定义、图片尺寸设置、堆叠图绘制、细节优化。在数据准备部分,需要关注...

Matlab论文插图绘制模板第128期—函数三维折线图(fplot3)
Matlab论文插图绘制模板第128期—函数三维折线图(fplot3)在之前的系列中,我们已经探讨了Matlab中函数折线图的绘制方法。今天,我们将深入探讨如何制作三维折线图,以增强视觉表现力。首先,让我们欣赏一下最终的精美作品:值得注意的是,本期的所有数据和代码示例已上传至资源群中,群内的朋友们可以直接下载...

Matlab论文插图绘制模板第18期—散点图(气泡矩阵\/相关系数矩阵)_百度...
关键步骤解析如下:数据准备阶段,首先读取并生成矩阵坐标数据。利用Matlab的`meshgrid`命令生成矩阵坐标,同时需注意到在竖直方向上,矩阵索引与坐标轴正方向相反,因此采用`flipud`命令进行上下翻转,确保坐标数据正确对应。此外,矩阵数据`data`在绘图前通常应进行归一化处理。颜色定义阶段,依据特征数值大小...

Matlab 绘图中坐标值如何在千位空格?如2048,用2 048表示?小论文中竟然...
画完图后,点击编辑 在“编辑”下拉菜单里选择“图形属性”,然后生成下图:点击那个右下角的“刻度”按钮,得到下图 在标签处写上你想要显示的格式就行了,比如例子中,我们输入“1 000”,最后应用,确定,退出图像属性,获得的结果如下:可以看见,纵坐标的1000,已经有空格了 ...

Matlab论文插图绘制模板第32期—等高线图(contour)
首先,来看一下最终呈现出的精致效果:Matlab论文插图绘制模板系列,旨在帮助大家轻松上手,只需将数据以特定格式输入,就能得到符合大多数期刊和学位论文标准的插图。如果你觉得这个系列有帮助,不妨分享给你的同行。构建等高线图的关键步骤包括:数据准备:首要任务是读取数据,定义X、Y和Z坐标。 颜色设计...

用Matlab来实现数据拟合
为了防止梯度变化过大导致的梯度爆炸问题,我们引入了一个学习率参数α,用于控制k和b的更新步长。通过多次迭代,我们最终得到使均方误差最小的k和b值。以下是具体实现的Matlab代码,运行结果展示了拟合直线与样本点的相对位置,以及最终的均方误差。在将运行结果用于论文时,可以使用Matlab的导出功能去除...

Matlab论文插图绘制模板第42期—气泡矩阵图(相关系数矩阵图)
本文将引导您在Matlab中绘制气泡矩阵图(相关系数矩阵图),该图不仅展现了表格或矩阵的可视化表达,同时通过气泡的大小和颜色直观地反映每个元素的数值。在开始之前,确保您已熟悉Matlab基础操作。首先,准备数据是关键步骤。使用Matlab的内置函数`meshgrid`生成矩阵坐标数据。值得注意的是,矩阵的索引编号顺序在...

Matlab论文插图绘制模板第7期—面积图(area)
在得到基础面积图后,我们进一步添加细节,如调整轴标签、图例、标题等,以满足论文插图的规范和要求。最后,按照所需的分辨率保存图像文件,完成整个绘图过程。从数据准备到细节完善,再到最终的保存,整个流程简洁明了,易于上手。总结而言,绘制面积图在MATLAB中并非复杂任务,只需遵循上述步骤,结合适当的...

Matlab论文插图绘制模板第76期—半对数刻度折线图(Semilogx和Semilogy...
Matlab论文插图绘制模板系列旨在简化科研绘图流程,提供易于操作的模板供用户快速生成符合期刊或学位论文要求的数据插图。本期我们将深入探讨如何绘制半对数刻度折线图,包括从数据准备到细节优化的全过程。首先,呈现最终的成品效果以供参考。接着,我们从关键步骤出发,详细解释如何使用Matlab进行操作。在绘制半...

[VBA or Matlab?] 小弟写论文要用到一些,但是小弟对excel 不是很熟悉...
Sub 宏1()'' 宏1 宏 'k = 2 For i = 2 To 65536 rg0 = "A" & i + 1 rg = "A" & i If Range(rg).Text <> "" Then If Mid(Range(rg).Text, 18, 2) > Mid(Range(rg0).Text, 18, 2) Then Rows(i & ":" & i).Select Selection.Copy Windows("表格2.xlsx")....