当前位置:文档之家› MATLAB GUI数据传递总结

MATLAB GUI数据传递总结

MATLAB GUI数据传递总结
MATLAB GUI数据传递总结

Matlab的GUI参数传递方式总结

其实Matlab提供了很多种直接或间接方法实现多fig中的数据共享,只是大家没有注意

罢了:

1、全局变量

2、作为函数的参数传递

3、利用控件的userdata数据

4、为handles结构体添加新字段

5、setappdata函数为句柄添加数据

6、跨空间计算evalin和赋值assignin

7、将数据保存到文件,需要时读取

8、带参数调用GUI的M文件

9、嵌套函数(不适用于GUIDE中,只适用纯命令是的GUI)

一、全局变量

运用global定义全局变量传递参数,适用于gui内控件间以及不同gui间。这种方式恐怕是最简单的方式,是很省心!但是,简单的问题就在于有时你会很头疼!因为在每一个要到该全局变量的地方,你都要添一句gloal x,还有就是如果你在一个地方修改了x的值,那么所有x的值就都变了!有的时候恐怕会出现紊乱。另一个更重要的问题在于,套用C++的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽量少用。

以下创造一个简单的GUI给大家说明一下,建一个GUI,包含两个按钮,一个坐标系,一个用来画y=sin(x),一个用来画y=cos(x);

eg:在GUI的OpeningFcn函数中写:

global x y1 y2

x=0:.1:2*pi;y1=sin(x);y2=cos(x);

在pushbutton1_Callback函数中写

Global x y1

Plot(x,y1)

在pushbutton1_Callback函数中写

Global x y2

Plot(x,y2)

全局变量是比较方便的,但全局变量会破坏封闭性,如果不是有大量数据要传递,建议不要使用。

二、运用gui本身的varain{}、varaout{}传递参数

这种方式仅适用于gui间传递数据,且只适合与主子结构,及从主gui调用子gui,然后关掉子gui,而不适合递进结构,即一步一步实现的方式。

输入参数传递(主要在子gui中设置):

比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2)在subGUI的m文件中(由GUIDE自动产生):

1.第一行的形式为:function varargout = subGUI(varargin)

该行不用做任何修改;varargin 和varargout 分别是一个可变长度的cell型数组。输入参数in1和in2保存在varargin中,输出参数out1,out2包含在varargout中;

2.在subGUI的OpeningFcn中,读入参数,并用guidata保存,即:

handles.in1 = varargin{1};

handles.in2 = varargin{2};

guidata(hObject, handles);

返回参数的设置:

1. 在主GUI的OpeningFcn函数中加上[out1, out2] = subGUI(in1, in2),用于调用子gui,并在结尾加上uiwait(handles.figure1); figure1是subGUI的Tag,主要是等待调用子gui的过程,从而获得子gui的输出参数out1、out2;

2. subGUI中控制程序结束(如"OK”和"Cancel"按钮)的callback末尾加上uiresume(handles.figure1),注意是主gui的窗口handles.figure1,不要将delete命令放在这些callback中;

3. 在子GUI的OutputFcn中设置要传递出去的参数,如varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加 delete(handles.figure1); 结束程序。

在GUI的OpenFcn中,如果不加uiwait,程序会直接运行到下面,执行OutputFcn。也就是说程序一运行,返回值就确定了,再在其它部分对handles.output作更改也没有效果了。

加上uiwait后,只有执行了uiresume后,才会继续执行到OutputFcn,在此之前用户有充分的时间设置返回值。

通过以上设置以后,就可以通过 [out1, out2] = subGUI(in1, in2) 的形式调用该子程序。

在一个GUI中调用另一个GUI时,主GUI不需要特别的设置,同调用普通的函数一样。在打开子GUI界

面的同时,主程序还可以响应其它的控件。不需要担心子GUI的返回值被传错了地方。

三、userdata数据

直接通过对象的userdata属性进行各个callback之间的数据存取操作,主要适用于gui内。首先必须将数据存储到一个特定的对象中,假设对象的句柄值为ui_handle,需要存储的值为value,则输入以下程序

即可:

set('ui_handle','UserData',Value);

此时,value数据就存在句柄值为ui_handle的对象内,在执行的过程中若要取回变量可以通过以下方

式在任意callback中获取该数据值:

value=get(''ui_handle,'UserData');

虽然使用这种方法简单,但是每个对象仅能存取一个变量值,因此当同一对象存储两次变量时,先前的变量值就会被覆盖掉,因此都用UserData存储简单与单一的数据。如下面有两个gui函数,myloadfn加载mydata.mat文件,该文件内存储XYData变量,其值为m*2的绘图矩阵,加载后将该变量值存储到当前的窗口的UserData属性中。另一个myplotfcn函数则是用以获取该UserData属性中存取的绘图数据,然后绘图。代码如下:

function myloadfcn

load mydata;

set(gcbf,'UserData',XYdata)

function myplotfcn

XYdata=get(gcbf,'UserData');

x=XYData(:,1);

y=XYData(:,2);

plot(x,y);

userdata的缺点就是一个句柄只能放一个Userdata。

四、GUI数据(handles)

结合handles和guidata函数,适用于gui内,如果你在pushbutton1中得到一个变量X,相传出去,那么在pushbutton1的callback中,在得到X后添加如下代码:

handles.X=X;

guidata(hObject,handles)(注意,一定是两行连写)

在pushbutton2中要用到X是,在其callback先添加X=handles.X;即可得到X的值。

注:

1.guidata(object_handle,data);如果object_handle不是figure型句柄,那么会将data保

存在object_handle的父figure对象中。这样不必担心在一个pushbutton的callback中存储的变量在其他对象中无法提取。

2. data = guidata(object_handle);获取当前object_handle的handles数据,最后一次

guidata(object_handle,data)保存的数据。

一个简单的GUI给大家说明一下,建一个GUI,包含两个按钮,一个坐标系,一个用来画y=sin(x),一个用来画y=cos(x);

eg:在GUI的OpeningFcn函数中写:

x=0:.1:2*pi;

y1=sin(x);

y2=cos(x);

handles.x=x;

handles.y1=y1;

handles.y2=y2;

guidata(hObject, handles);%注意,在OpeningFcn函数中这句是本身存在的,若在其它函数中,务必加上这句

在pushbutton1_Callback函数中写

x=handles.x;

y1=handles.y1;

plot(x,y1)

在pushbutton2_Callback函数中写

x=handles.x;

y2=handles.y2;

plot(x,y2)

五、Application数据

应用setappdata\getappdata与rmappdata函数,适用于gui间和gui内。使用上面三个函数最有弹性处理数据的传送问题,与UserData的方式相类似,但是克服UserData的缺点,使一个对象能存取多个变量值。

(1)getappdata函数

value=getappdata(h,name)

(2)setappdata函数

setappdata(h,name,value)

(3)rmappdata函数

rmappdata(h,name)

首先在matlab命令窗口输入magic(3)数据,因此当前的工作空间就存储了magic(3)这组数据了,然后建立一个按钮来获取并显示magic(3)数据。

A=magic(3);

setappdata(gcf,'A',A);%save

uicontrol('String','显示矩阵

A','callback','A=getappdata(gcf,''A'')');

A =

8 1 6

3 5 7

4 9 2

当在主、子gui内调用时,可以如下设置

fig1调用fig2时,使用fig2指令来打开fig2,

在fig2的m文件中,在回调函数中用setappdata(fig1,'A',A);实现返回fig1,并将参数A传递给fig1

然后在fig1的使用A的地方添加A=getappdata(fig1,‘A’)。

但这种方式的一个问题就是每调用一次,fig1的数据就得初始化一次,这是因为

setappdata(fig1,'A',A)中出现了fig1,调用一次setappdata就得运行一次fig1的缘故,解决方案就是把setappdata(fig1,'A',A)改为setappdata(0,'A',A),这样把A读入matlab workspace,相当于一个全局变量了,但当然比直接用global定义全局变量好!

同样的例子:

eg:在GUI的OpeningFcn函数中写:

x=0:.1:2*pi;

y1=sin(x);

y2=cos(x);

setappdata(handles.figure1,'x',x) %在figure1下创建’x’,包含数据x,也可以放在其它句柄下,如setappdata(handles. pushbutton1,'x',x),不过一般放在figure1下,记起来方便……

setappdata(handles.figure1,'y1',y1)

setappdata(handles.figure1,'y2',y2)

在pushbutton1_Callback函数中写

x=getappdata(handles.figure1,'x');%提取,当然用get了……

y1=getappdata(handles.figure1,'y1');

plot(x,y1)

在pushbutton1_Callback函数中写

x=getappdata(handles.figure1,'x');

y2=getappdata(handles.figure1,'y2');

plot(x,y2)

六、跨空间计算evalin和赋值assignin

适用于gui间和gui内

Assignin函数基本语法

assignin(ws, 'var', val)

其中'base' or 'caller',分别表示基本工作空间和调用函数(caller function)工作空间,

Assinin函数将值val指定给工作空间ws中的变量var,若变量var不存在,则创建一个变量var。

从一个函数function向MATLAB工作空间中输入数据;

在一个函数function内部,需要改变一个在caller function函数工作空间中定义的变量,例如函数形参列表中的变量。

例子:

%向基本工作空间中传输数据变量

Function assignin_test1

prompt = {'Enter image name:','Enter colormap name:'};

title = 'Image display - assignin example';

lines = 1;

def = {'my_image','hsv'};

answer = inputdlg(prompt,title,lines,def);

assignin('base','imfile',answer{1});

assignin('base','cmap',answer{2});

evalin函数基本语法

evalin(ws, expression)

[a1, a2, a3, ...] = evalin(ws, expression)

在特定的工作空间执行MATLAB语句,expression的形式如

expression = [string1, int2str(var), string2,...]

[a1, a2, a3, ...] = evalin(ws, expression),将返回值赋予变量a1,a2,a3,...

evalin(ws,'[a1, a2, a3, ...] = function(var)')

注:

evalin('caller', expression),只能指定callerfunction函数中的变量为expression的语句,而不能是subfunction

该函数不可嵌套使用,evalin('caller', 'evalin(''caller'', ''x'')')是错误的

例子:

如果在figure1中有个变量a1

则传入时assignin('base','a1',data) %data是workplace中的变量

在figure2传出时a2=evalin('base','data'); %a2是figure2中的变量

七、将数据保存到文件,需要时读取

运用save和load(importdata)传递参数,适用于gui间和gui内。将某变量x的值先存到磁盘,用的时候在调用。格式如下:save('*.mat','x');用的时候就用load('*.mat'),但这样只是把x读到了matlab workspace,不会用显示,你还要再去查看这个变量名, 然后才能用,建议使用p=importdata('*.mat'),p是一个结构体,可以随意使用了。当然,这种方式涉及到磁盘读写,速度当然会有影响的,一般情况不用,通常用在保存以及导入某个变量时!

八、带参数调用GUI的M文件

这个相信大家都很熟悉了,适用于gui间和gui内。

总结几点:

①如果变量数据量很大,需要占用大量内存,不要将变量存储为handles的变量,因为每个控件每次调用

callback function都会使用handles,增加不必要的内存开销。若改变量存取不频繁,可以考虑UserData数据或者Application数据;若存取比较频繁,建议使用Global变量和Application结构体,这里的Application 要定义为setappdata(0,'var',val)以及getappdata(0,'var',val)。

②对于GUI界面之间的数据传递,可以考虑以下几种方法:

方法1:采用global函数。

可以采用这种方法共享数据;

方法2:采用findobj和findall函数查找对象句柄

findall(0, 'Type', 'figure', 'Tag', 'figure1')

查找标签为figure1的窗口,无论该窗口是否隐藏。

方法3:采用handles结构。

假设我们在窗口1的Opening函数中,采用函数创建了一个子窗口2:

h_fig = figure('Visible', 'off', ...);

h_btn1 = uicontrol('Parent', h_fig, ‘Tag', 'btn1', ...);

h_btn2 = uicontrol('Parent', h_fig, ‘Tag', 'btn2', ...);

h_btn3 = uicontrol('Parent', h_fig, ‘Tag', 'btn3', ...);

如果我们要在窗口1的任何回调函数中,直接访问子窗口2的任意控件,可以在上述语句后紧跟着写下如下语句:

handles.btn1 = h_btn1;

handles.btn2 = h_btn2;

handles.btn3 = h_btn3;

最后,需要一个guidata语句。当然,Opening函数最后有guidata语句,所以不用自己添加。

方法4:将要共享的数据使用save函数存入mat文件;或者使用文件I/O函数,存入文本文件中。

集合与简易逻辑知识点整理

集合与简易逻辑 知识点整理 班级: 姓名: 1.集合中元素的性质(三要素): ; ; 。 2.常见数集:自然数集 ;自然数集 ;正整数集 ; 整数集 ;有理数集 ;实数集 。 3.子集:A B ?? ; 真子集:A B ≠ ?? ; 补(余)集:A C B ? ; 【注意】空集是任意集合的子集,是任意非空集合的真子集。 4.交集:A B ?? ; 并集:A B ?? 。 笛摩根定律:()U C A B ?= ;()U C A B ?= 。 性质:A B A ?=? ;A B A ?=? 。 5.用下列符号填空: "","","","","",""≠ ∈???=≠ 0 N ;{}0 R ;φ {}0;{}1,2 {}(1,2);{}0x x ≥ {} 0y y ≥ 6.含绝对值的不等式的解法:【注意】含等号时端点要取到。 x a < (0)a >的解集是 ;x a > (0)a >的解集是 。 (0)ax b c c +<>? a x b <+< ;(0)ax b c c +<

一元二次不等式2 0ax bx c ++>(0)a ≠恒成立? 。 一元二次不等式2 0ax bx c ++≥(0)a ≠恒成立? 。 9.简单分式不等式的解法: () 0()f x g x > ?()()0f x g x ?>?()0()0f x g x >??>?或()0()0f x g x ;则p q 是的 条件; 若,p q q p ≠>?;则p q 是的 条件; 若p q ?;则p q 是的 条件; 若,p q q p ≠>≠>;则p q 是的 条件。

VB和Matlab传递数据

VB和Matlab传递数据 lb107 VB和Matlab传递数据 请问: 我想将m函数文件编译成dll文件,在VB里面输入数据然后调用这个dll进行计算,这样能够实现吗? 有兄弟有相关的例子没?网上VC调用Matlab的例子挺多的,但没有VB调用Matlab的例子。 谢谢指点。 2006-3-5 20:19 taohe Re:VB和Matlab传递数据 VB调用DLL会不会很复杂?总感觉VB属于高级编程语言,在调用DLL方面不会比VC更难才对。根据网上你发现的VC调用MATLAB产生的DLL的例子,大概了解MATLAB产生的DLL,然后在VB中调用,貌似应该顺理成章。 使用VB的话,一个好的方案可能是使用MATLAB产生的COM组件,而不是普通的DLL。在VB中可以很方便地使用这些COM组件。MATLAB的在线帮助有较详细的例子,不妨看看。 2006-3-5 23:01 bainhome Re:VB和Matlab传递数据 前一段儿看了看书,做过两个简单的,下面这个是其中之一(曾发在别的论坛上,转一下),因最近实在是太忙,没有时间研究,所以比较基础,没有更加复杂的Trick 比如将VBtext中的数组作为COM的input、图形绘制等等,VB代码:[code] Private addn As addn.Add Private Sub Command1_Click() Dim x As Double Dim y As Variant x = CDbl(Text1.Text) Call addn.numadd(1, y, x) Text2.Text = y End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Set addn = New addn.Add Form1.Caption = "VB调用MATLAB示例" Text1.Text = 2 End Sub [/code] [code] function y=numadd(x) y=2*x; [/code] COM组件调用格式: [code]call h.func(numout,arg1,arg2,...)[/code] MATLAB中的函数书写格式: [code][out1,out2,out3]=myfunc(arg1,arg2)[/code] 则VB的调用应该为: [code]call object.myfunc(3,out1inVB,out2inVB,out3inVB,arg1inVB,arg2inVB)[/code] “3”指的是输出变量的数目 另外当多个版本的MATLAB在同一PC上时,VB只认其中一个版本产生的COM,不知道是不是环境变量设置的问题。 2006-3-6 09:41 lb107 Re:VB和Matlab传递数据 谢谢楼上二位的指点!! 我的想法也是利用comtool直接将m文件编译成COM组件,然后在VB中调用实现应该是没有问题,但是在交换数据方面肯呢感有点难度,我只想找几个具体的例子看看其调用的根据体过程 谢谢!! 2006-3-6 19:53 taohe Re:VB和Matlab传递数据 [quote][b]lb107 wrote:[/b] 谢谢楼上二位的指点!! 我的想法也是利用comtool直接将m文件编译成COM组件,然后在VB中调用实现应该是没有问题,但是在交换数据方面肯呢感有点难度,我只想找几个具体的例子看看其调用的根据体过程 谢谢!! [/quote] 如果用comtool也就是使用COM组件的话,事情就更好办了。因为进入COM世界后,所有的数据都是VARIANT,而VB和COM是非常亲近的关系,在VB中使用COM比起其他语言比如C++来说显得更为轻松。还得重复一下,matlab的在线帮助上关于COM组件的应用几乎全部是VB作为应用程序例子,不妨看看。2006-3-6 20:05 lb107Re:VB和Matlab传递数据 我的英语不太好 taohe 老师能给一个具体的链接地址吗?? 谢谢 2006-3-6 20:46 taohe Re:VB和Matlab传递数据 你指什么连接地址?我刚才说的在线帮助是matlab安装文档。 本来matlab的公司MathWorks的网站上有每次最新版的matlab的帮助文档连接。不过现在MathWorks网站上的连接好像已经变成新版matlab R2006a的文档了。所以只好看matlab安装后的在线帮助了。 matlab不知你用那个版本的matlab,不管那个版本,在matlab环境中运行doc,然后在出来的帮助文档中寻找相关的话题。如果是matlab6.5.x的话,应该在matlab com builder,如果是matlab7.x的话应该是matlab builder for com。 里面有例子程序,如果VB好的话,应该没有问题的。别怕英文。 可惜我是VB盲,无法给出具体的帮助。 Good luck! 2006-3-6 22:40 lb107 Re:VB和Matlab传递数据 再次谢谢 2006-3-12 21:35 godzilla2000cn Re:VB和Matlab传递数据 如果matlab中生成的图片怎么传到VB里,也就是在VB中用什么控件来接收matlab的fig??? 2006-11-1 19:46 tian7tian 大家好啊! 我现在是将m文件组成com组件,还没搞定呢,总出现错误! 2006-11-8 19:46 jimin 看了bainhome版主的一个例子后,做了个vb调用matlab时隐藏matlab figure 的例子 Private Sub Command1_Click() Dim objMATLAB As Object Set objMATLAB = CreateObject("matlab.application") Dim strEnter As String Dim strCommand As String strEnter = Chr(13) & Chr(10) strCommand = "figure('visible', 'off', 'Units','points','PaperUnits', 'points');" strCommand = strCommand & strEnter strCommand = strCommand & "surf(peaks(25));" strCommand = strCommand & strEnter strCommand = strCommand & "print -dmeta" strCommand = strCommand & strEnter strCommand = strCommand & "close(gcf)" strCommand = strCommand & strEnter objMATLAB.execute (strCommand) imgDraw.Picture = Clipboard.GetData() imgDraw.Refresh Set objMATLAB = Nothing End Sub 2006-11-12 10:42 WaitingForMe Matlab的代码或者窗口, 用combuilder编译以后, 可以直接在VB里面引用. 如果需要移植到其他计算机上, 需要在目标计算机上安装一个虚拟机, 大概8M大小. 2006-11-12 13:59 bainhome [quote]Matlab的代码或者窗口, 用combuilder编译以后, 可以直接在VB里面引用. 如果需要移植到其他计算机上, 需要在目标计算机上安装一个虚拟机, 大概8M大小.[/quote] 前一句话已经基本实现,后一句话不太明白...什么虚拟机?还是java虚拟机吗(自己感觉不像)?请教一下^_^ 2006-11-29 19:23 tian7tian 关于bainhome写的程序,我问个问题,关于 function y=numadd(x) 其中y定义为variant,x定义为double类型;是不是类型是固定的呢? x可以定义为string类型么? 2006-12-11 14:43 tian7tian 有哪位了解的话,有时间的话,给答复一下,谢谢了!! 2006-12-31 01:24 WaitingForMe [quote]原帖由[i]bainhome[/i] 于2006-11-12 13:59 发表 前一句话已经基本实现,后一句话不太明白...什么虚拟机?还是java虚拟机吗(自己感觉不像)?请教一下^_^ [/quote] Combuilder创建的程序,移植到没有安装Matlab的电脑上的时候,需要安装一个什么包,都忘了,这个是Matlab的帮助,自己看帮助吧 MATLAB COM Builder: Overview: Packaging and Distributing the Component 2007-7-20 15:53 shiwenyaboa

集合与简易逻辑知识点归纳(1)

{}9B =,;B A =B B = )()(); U U B A B =? )()()U U B A B =? ()()card A B card A =+ ()()card B card A B - ()U A =e()U A =e13设全集,2,3,4A = {3,4,5} B = {4,7,8}, 求:(C U A )∩ B), (C U A)(A ∪B), C U B). 有两相)(,2121x x x x <有两相等a b x x 221- ==无实根 有意义的

①一个命题的否命题为真,它的逆 命题一定为真. (否命题?逆命 题.)②一个命题为真,则它的逆 否命题一定为真.(原命题?逆 否命题.) 4.反证法是中学数学的重要方法。 会用反证法证明一些代数命题。 充分条件与必要条件 答案见下一页

数学基础知识与典型例题(第一章集合与简易逻辑)答案 例1选A; 例2填{(2,1)} 注:方程组解的集合应是点集. 例3解:∵{}9A B =,∴9A ∈.⑴若219a -=,则5a =,此时{}{}4,9,25,9,0,4A B =-=-, {}9,4A B =-,与已知矛盾,舍去.⑵若29a =,则3a =±①当3 a =时,{}{}4,5,9,2,2,9A B =-=--.B 中有两个元素均为2-,与集合中元素的互异性矛盾,应舍去.②当3a =-时,{}{}4,7,9,9,8,4A B =--=-,符合题意.综上所述,3a =-. [点评]本题考查集合元素基本特征──确定性、互异性、无序性,切入点是分类讨论思想,由于集 合中元素用字母表示,检验必不可少。 例4C 例5C 例6①?,②ü,③ü,④ 例7填2 例8C 例9? 例10解:∵M={y|y =x 2+1,x ∈R}={y |y ≥1},N={y|y =x +1,x ∈R}={y|y ∈R}∴ M∩N=M={y|y ≥1} 注:在集合运算之前,首先要识别集合,即认清集合中元素的特征。M 、N 均为数集,不能误认为是点集,从而解方程组。其次要化简集合。实际上,从函数角度看,本题中的M ,N 分别是二次函数和一次函数的值域。一般地,集合{y |y =f (x ),x ∈A}应看成是函数y =f (x )的值域,通过求函数值域化简集合。此集合与集合{(x ,y )|y=x 2+1,x ∈R}是有本质差异的,后者是点集,表示抛物线y =x 2+1上的所有点,属于图形范畴。集合中元素特征与代表元素的字母无关,例如{y|y ≥1}={x |x ≥1}。 例11填?注:点集与数集的交集是φ. 例12埴?,R 例13解:∵C U A = {1,2,6,7,8} ,C U B = {1,2,3,5,6}, ∴(C U A)∩(C U B) = {1,2,6} ,(C U A)∪(C U B) = {1,2,3,5,6,7,8}, A ∪ B = {3,4,5,7,8},A∩B = {4},∴ C U (A ∪B) = {1,2,6} ,C U (A∩B) = {1,2,3,5,6,7,8} 例145,6a b ==-; 例15原不等式的解集是{}37|<<-x x 例16 53|332 2x R x x ??∈-<-+-->+?? ≥或,即3344123x x x x ? 2或x <31,∴原不等式的解集为{x | x >2或x <31}.方法2:(整体换元转化法)分析:把右边看成常数c ,就同)0(>>+c c b ax 一样∵|4x -3|>2x +1?4x -3>2x +1或4x -3<-(2x +1) ? x >2 或x < 31,∴原不等式的解集为{x | x >2或x <3 1}. 例18分析:关键是去掉绝对值. 方法1:零点分段讨论法(利用绝对值的代数定义) ①当1-x ,∴}32 1 |{<2 1}. 方法2:数形结合:从形的方面考虑,不等式|x -3|-|x +1|<1表示数轴上到3和-1两点的距离之差小于1的点 ∴原不等式的解集为{x |x > 2 1 }. 例19答:{x |x ≤0或1??????????-<>-<>≤≤--≠????? ? ? ???>+-<+-≤-+≠+13 21 0121 0)1(2230)1(24020 12k k k k k k k k k k k k k 或或. 1 3 212<<-<<-?k k 或∴实数k 的取值范围是{k|-2?=+-R 的解集为函数在上恒大于 22,2, |2||2|2. 2,2,1|2|121.,,2 11 0.,, 1.(0,][1,). 22 x c x c x x c y x x c c c x c x x c R c c P c P c c -?+-=∴=+-??>?> <≥?+∞R ≥函数在上的最小值为不等式的解集为如果正确且Q 不正确则≤如果不正确且Q 正确则所以的取值范围为 例26答:552x x x >?><或. 例27答既不充分也不必要 解:∵“若 x + y =3,则x = 1或y = 2”是假命题,其逆命题也不成立. ∴逆否命题: “若12x y ≠≠或,则3x y +≠”是假命题, 否命题也不成立. 故3≠+y x 是12x y ≠≠或的既不充分也不必要条件. 例28选B 例29选A

遗传算法的VB程序【精品毕业设计】(完整版)

遗传算法的VB程序 最近看了下遗传算法,刚看了一点,就觉得手痒,非要把程序编制出来看看效果(我现在总认为那些理论再高深,无法用计算机实现就是空话,呵呵)。下面是我调试了好久的代码,无赖没有学过数据结构&算法,程序写的很差,单效果还是出来了,高兴,和大家共同分享下成果吧。 还是一样,不想说原理,因为这里想搞个公式上去N麻烦。直接给点实际的东西。具体步骤是参考《MATLAB遗传算法工具箱及应用》(西安电子科技大学出版社)16~22页的相关说明编制的,有兴趣的同学可以去看看这本书。 在程序调试成功的同时,郁闷的是工作的事情,现在好多企业久是指名不要研究生,而我又是一个四不象,本专业是热能工程,可我本专业基本上还是本科水平,大部分时间都去自学一些杂七杂八的东西去了,比如人工智能,PLC,自动控制方面,图像处理啊,可又只是懂个皮毛,现在找工作也不知道怎么给自己定位了。有相关经历的同学可要指点我一二哦。 Option Explicit '程序实现功能:用遗传算法求函数的最大值 '作者: laviewpbt '联系方式: 'QQ:33184777 '版本:Version 1.4.0 '说明:复制请保留源作者信息,转载请说明,欢迎大家提出意见和建议 Dim N2(30) As Long '用来保存2的N次方的数据 Dim Script As Object '调用其Eval函数 Public Enum CrossOver OnePointCrossOver '单点交叉 TwoPointCrossOver '两点交叉 UniformCrossOver '平均交叉 End Enum Public Enum Selection RouletteWheelSelection '轮盘赌选择 StochasticTourament '随机竞争选择 RandomLeagueMatches '随机联赛选择 StochasticUniversalSampleing '随机遍历取样 End Enum Public Enum EnCoding Binary '标准二进制编码

数学简易逻辑 知识点+题型

原命题若p 则q 否命题若┐p 则┐q 逆命题若q 则p 逆否命题若┐q 则┐p 互为逆否互逆否互为逆 否 互 互逆 否 互文科数学选修1-1 第一章 简易逻辑 一.四种命题及关系 1.命题:__________的语句; 2.分类:①简单命题:不含有逻辑联结词的命题; ②复合命题:由_________和逻辑联结词“___”、“___”、“____”构成的命题; 构成复合命题的形式:p 或q 记作______;p 且q 记作____;非p 记作_____. 3.命题的四种形式与相互关系 原命题:若p 则q ; 逆命题:________; 否命题:________; 逆否命题:________. 注: ①互为_____关系的两个命题同真假. 1、下列说法:①若一个命题的否命题是真命题,则这个命题不一定是真命题;②若一个命 题的逆否命题是真命题,则这个命题是真命题;③若一个命题的逆命题是真命题,则这个命题不一定是真命题;④若一个命题的逆命题和否命题都是真命题,则这个命题一定是真命题;其中正确的说法是 ( ) A.①② B.①③④ C.②③④ D.①②③ 2、已知m,n 是两条不同的直线,α,β是两个不同的平面,则下列命题正确的是( ) A 、若α,β垂直于同一个平面,则α//β B 、若m,n 平行于同一个平面,则m//n C 、若α,β不平行,则α内不存在与β平行的直线 D 、若m,n 不平行,则m 与n 不可能垂直于同一个平面 3.原命题:“设a ,b ,c ∈R ,若a >b ,则ac 2>bc 2 ”,在原命题以及它的逆命题、否命题、逆否命题中,真命题的个数为( ) 4.有四个命题:①“若0x y +=,则x 、y 互为相反数”的逆命题; ②“全等三角形的面积相等”的否命题; ③“若1q ≤,则关于x 的方程220x x q ++=有实根”的逆命题;

vb调用matlab的四种方法

一、借助ActiveX部件 Microsoft把所有以COM为基础的技术统称为ActiveX技术。自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。Matlab实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用。 Matlab ActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述: ● BSTR Execute([in] BSTR Command); BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。 ● void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi); 该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray,其实部和虚部被分别存放到两个单独的Double型数组中。 ● void PutFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in] SAFEARRAY(double) pr,[in] SAFEARRAY(double) pi); 该方法将一个mxArray放入指定的工作空间。各参数的含义及调用方法与GetFullMatrix方法类似。 示例代码如下: 1Dim Matlab As Object ’声明对象 2Dim MReal1(5,5) As Double ’声明存放实部的Double型数组 3Dim MImag() As Double ’声明存放虚部的Double型数组 4Set Matlab=CreateObject(“Matlab.Application”) '初始化对象 5Matlab.Execute(“a=hilb(5)”) '执行Matlab命令 6Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag) '将结果分别存入实部、虚部数组 复制代码 二、借助DDE技术 DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(Client),对Client端作出响应的应用程序称为服务器(Server)。图1描述了Matlab 作为服务器时与其他应用程序的通信机制。

集合与简易逻辑知识点

集合、简易逻辑 知识梳理: 1、 集合:某些指定的对象集在一起就构成一个集合。集合中的每一个对象称为该集合的元素。 元素与集合的关系:A a ∈或A a ? 集合的常用表示法: 列举法 、 描述法 。集合元素的特征: 确定性 、 互异性 、 无序性 。 常用一些数集及其代号:非负整数集或自然数集N ;正整数集*N ,整数集Z ;有理数集Q ;实数集R 2、子集:如果集合A 的任意一个元素都是集合B 的元素,那么集合A 称为集合B 的子集,记为A ?B 3、真子集:如果A ?B ,并且B A ≠,那么集合A 成为集合B 的真子集,记为A ?B ,读作“A 真包含于B 或B 真包含A ”,如:}{}{b a a ,?。 注:空集是任何集合的子集。是非空集合的真子集 结论:设集合A 中有n 个元素,则A 的子集个数为n 2个,真子集个数为12-n 个 4、补集:设A ?S ,由S 中不属于A 的所有元素组成的集合称为S 的子集A 的补集,记为A C s ,读作“A 在S 中的补集”,即A C s =}{A x S x x ?∈且,|。 5、全集:如果集合S 包含我们所要研究的各个集合,这时S 可以看作一个全集。通常全集记作U 。 6、交集:一般地,由所有属于集合A 且属于B 的元素构成的集合,称为A 与B 的交集,记作B A ?即:B A ?=}{B x A x x ∈∈且,|。 7、并集:一般地,由所有属于集合A 或属于B 的元素构成的集合,称为A 与B 的并集,记作B A ?即:B A ?=}{B x A x x ∈∈或,|。 记住两个常见的结论:B A A B A ??=?;A B A B A ??=?;

MATLAB与VB混合编程方式简易教程

3.1 MATLAB与Visual Basic 语言的混合编程方式 MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。 1.通过ActiveX方式 一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。 二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。 2.通过动态链接库方式 该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。这种方法可以脱离具体的MA TLAB环境,运行效率较高。 3.通过嵌入VB的矩阵函数库MatrixVB的方法 MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。MatrixVB函数库的功能大致可分为8大类(矩阵运算、运算符重载、图形图像处理、最优化运算、多项式、信号处理、随机与统计分析、控制系统)。 除以上3种方式外,我们还可以通过DDE的方式实现VB与MATLAB的数据通信。 3.2 MatrixVB 环境设置 3.2.1 在VB应用中引入MatrixVB

浅谈VB与MATLAB相结合的三种方法

浅谈VB与M AT LAB相结合的三种方法 樊金荣① 黎洪生② 摘 要 本文分别介绍了在VB中调用M atlab的三种方法:利用动态链接库DLL、利用动态数据交换D EE以及利用A ctivex自动化技术。并以具体的例子给出通过这些方法实现了VB的可视化界面与M atlab强大的数值计算和图形显示能力的结合。 关键词 客户 服务器 M atlab DLL DD E A ctivex 技术 一、前言 V isual Basic是由M icro s oft公司开发的在W indow s95 98平台上的一种十分强大和有生命W indow s编程语言之一,具有易学易用、编程简单、程序集成化程度高及界面可视化又能实现大多数W indow s编程目的,因而一经推出就风靡全球然而,VB提供的数学函数及其有限,因而使之在数值计算和图形显得力不人心。M atlab是M ath W o rk s公司开发的一种工程计算语言。用这个交互系统可以解决很多工程计算问题,特别当涉及到矩阵和矢量形式的问题时,M atlab提供了强大的矩阵处理的和绘图功能。显然,将二者结合起来,能实现VB 可视化界面下运用M A TLAB强大的数值计算和图形显示,使VB编更加灵活快洁。 二、采用动态链接库DLL方法 M atcom是一个从M A TLAB到C++的编译器,它可以节省用户的运算时间和内存要求。M ath too ls公司利用M atcom4技术编写了M ideva工具软件,它可以借用C++编译器将M atlab下的M-文件转换为可被VB调用的DLL或独立瓣可执行文件。VB中要使用DLL,必须在VB工程中包含DLL的声明文件(即模块文件),同时还要将DLL放在工程文件所在的目录下。 如下操作可以一个M-文件编译成DLL:启动M atcom4的M ideva,点菜单F ile Comp ile,选要转换的M-文件应该是能作为函数被其他集城环境调用的M-文件,设文件名为m yfile)。编译完成后,在对应的D ebug或R elease目录下,可以找到一些编译生成的文件。VB需要用到的文件有两个。m yfile.dll(DLL文件)m yfile.bas(在VB中声明DLL的模块文件)。事实上,m yfile.dll中的函数并不能直接与VB进行数据交换,它只能通过矩阵数据进行操作。M ah tToo ls提供了一个单独的C++库文件m atlib42.dll(相当VB集成环境与DLL之间的代理,它包含有20多个矩阵句柄操作函数和800多个从M atlab中转换来的矩阵函数)以及相应的模块文件m atlib42.bas。为了在VB中能调用这类DLL,必须将m yfile. bas和m atlib42.bas加入工程中,并将m yfil.dll和m atlib42. dll拷贝到工程所在的目录下。编译后,在VB中的函数名为m yfile-in-out,其中,in和out分别为函数的输入输出参数的个数。注意,在编程时,必须调用m t In it M来初始化库文件,即请求允许使用转换的DLL,并调用m tEx it M来结束这种请求。另外,还要使用其它的矩阵句柄函数来分配、访问和释放矩阵句柄。 这种方式最简单的例子是直接调用m atlib42.dll中提供的inv-2-1来计算矩阵的逆。 二、采用动态数据交换D EE方法 该方法是利用M A TLAB提供的客户 服务器(C lien t Server)功能,VB应用程序作为系统主控,用M atlab作为后台应用程序完成复杂计算任务与绘画功能,M atlab与VB应用程序间通过DD E协议进行数据交换,DD E(D ynam ic D ata Exchange)是一种开放的、与语言无关的、基于消息的协议,它是应用程序通过共享内存进行进程通信的一种形式。 VB应用程序首先通过确定服务器名和主题(top ic)建立与M A TLAB的DD E会话,服务器名和主题唯一地确定作为客户端,M atlab作为服务端,客户端与服务端可以就确定的项目(Ite m)交换数据。关于VB的DD E功能可以参文献。VB应用程序中需指明的M A TLAB的服务器为M atlab,, M A TLAB有Syste m和Engine两个主题,在Syste m主题下可以列出M A TLAB所提供的详细的DD E功能,在Engine主题下可以充分实现M A TLAB的服务功能。利用VB具有的DD E客户端功能,使用M A TLAB的Engine主题支持的三种操作,VB应用程序主河以向M A TLAB传送可执行的命令,从M A TLAB中读取数据以及向M A TLAB中传送数据。 VB为用户提供的支持DD E通信的控件有:窗体(Fo r m)、多文档窗体(M D I Fo r m)、标签(L abel)、文本框(T ex t Box)和图片框(P icture Box)。相应于DD E协议,这些控件提供了完成一次DD E链接需要的属性和事件,以及设置 ① ②黎洪生 武汉理工大学自动化学院 教授 博士生导师 武汉 430070 樊金荣 武汉理工大学自动化学院 硕士 武汉 430070

集合与简易逻辑知识点汇编

第一章知识点 、知识结构: 本章知识主要分为集合、简单不等式的解法(集合化简)、简易 二、知识回顾: (一)集合 1. 基本概念:集合、元素;有限集、无限集;空集、全集;符号的 使用. 2. 集合的表示法:列举法、描述法、图形表示法 3. 集合元素的特征:确定性、互异性、无序性 4. 集合运算:交、并、补. 交:A PIB U {X |X 亡 A ,且X 亡 B} 并: A UB U {X |X 忘 A 或 X 忘 B} 补:GAu {x^U ,且X 芒 A 5. 主要性质和运算律 (1)包含关系: A 匸A,①匸A, A 匸U,GA 匸U, A J B, A 匸 C; A R B 匸 A, A Cl B 匸 B; A U B 二 A,A U B 二 B. 逻辑三部分:

(2) 等价关系:A C B U AnB=A= AUB=B= GAUB = U (3)集合的运算律: 交换律:A n B =B n A; A U B = B U A. 结合律:(A P I B )n c = A n (B n c );(A U B )U C = A U (B U C ) 分配 律:.A n (B U c )=(A n B )u (A n c );A U (B n c )=(A U B )n (A U c ) ① RA 二①,① UA = A,U nA = A,U U A=U An ^u A=? A U 5u A=U 3U L=? S U ? =U S U U^^U A)=A NA n B )=(右LA ) U (B U D 齢(A u B )=( S U A> n ^U B) 6. 有限集的元素个数 定义:有限集A 的元素的个数叫做集合 A 的基数,记为card ( A )规 定 card( ? ) =0. 基本公式: (1)card(AUB) =card(A) +card(B)-card(AnB) ⑵ card (A U B U C) = card (A) + card (B) + card(C) -card(A^B) -card (B RC) -card(cn A) + card(AnBnc) ⑶ card ( 3L A)= card(U)- card(A) (4) 设有限集合A, card(A)=n, 2n -2. 0-1 律: 等幕律: A " A =A,AU A = A. 求补律: 反演律: (i )A 的子集个数为2n ; (ii )A 的真子集个数为2n -1 ; (iii )A 的非空子集个数为2 -1 ; (iv )A 的非空真子集个数为

VB调用Matlab生成的dll完全攻略(混合编程必备)

用VB调用Matlab生成的dll MATLAB 具有强大的运算功能,VB 具有开发界面友好的特点,可以将二者结合,可以开发出脱离MATLAB 环境的VB程序,即利用VB调用Matlab生成的dll。 工具/原料 Microsft Visual Basic 6 Matlab 7.0 步骤/方法 在MA TLAB 系统中的命令输入comtool命令或点击左下角“Start- > MATLAB - > MA TLAB COMBuilder - > MATLAB COM Builder”,启动MATLAB COM Builder。 建立工程,选择菜单“File - > New Project”,设置工程参数。设置的工程名为COM 组件编译后的文件名称,也可以输入新类,点击“Add”建立新类。

点击菜单“Project - > Add File. . . ”,向工程中加入M或MEX文件。 点击菜单“Build - >COM Object. . . ”,状态窗口出现“Standalone DLL build complete.”说明生成dll成功。

注册生成的myfunc_1_0.dll,在VB中引用MWComUtil.dll和myfunc_1_0.dll,就可以像调用里边的函数了!

插入完成后,Visual Basic中的具体调用方法和命令 此时Matlab中定义的函数: function daoju_gonge(z,x,m,ha,c,b) (函数名daoju_gonge) VB调用 1.先对所有的参数进行定义(关键) Private z As Double Private x As Double Private m As Double Private ha As Double Private c As Double Private b As Double Private theDaoju As myDaoju.Daoju (theDaoju 是自己设定的一个VB中的变量,myDaoju 则是由.m文件编译而成的.dll文件文件名,同时也是其中定义的组件名Component name,daoju则是其类名Class name) 2.调用命令 Call theDaoju.Daoju_gonge(z, x, m, ha, c, b) 3.对VB进行初始化 Private Sub Form_Load() Set theDaoju = New myDaoju.Daoju End Sub 注意事项以及相应问题解决 1.在编译dll时,需要机器安装有C或C++编译器,比如安装VC++6.0 2.Matlab启动Comtool工具之前,还需要利用mbuild –setup 命令对compiler(转换器) 设 置,将转换器设置成C++/C语言对应的compiler,而不是Matlab自带的compiler。 Ps:前两条如果没有做到的话,在comtool生成界面往往出错,无法生成dll等相应的文件。 3.如果出现有其他一些小问题,尝试重启Visual Basic或Matlab,再或者重启电脑。 疑难点: 如果对文件进行处理,使其能够在其他电脑上同样实现设定的功能。 可选方案一:文件打包。 Visual Basic打包程序或是Matlab打包程序。

集合与简易逻辑知识点归纳(1)

{}9B =,;B A = )()();U U B A B =? ()()A B card A =+ ()U A =e()U A =e13设全集,2,3,4A = {3,4,5} B = {4,7,8}, 求:(C U A )∩ B), (C U A)(A ∪B), C U B). 有意义的q 同为假时为假,其他情况时为真即当当为真;③“非

数学基础知识与典型例题(第一章集合与简易逻 辑)答案 例1选A; 例2填{(2,1)} 注:方程组解的集合应是点集. 例3解:∵{}9A B =,∴9A ∈.⑴若219a -=, 则5a =,此时{}{}4,9,25,9,0,4A B =-=-, {}9,4A B =-,与已知矛盾,舍去.⑵若29a =,则3 a =±①当3a =时,{}{}4,5,9,2,2,9A B =-=--.B 中有两个元素均为2-,与集合中元素的互异性矛盾,应舍去.②当3a =-时,{}{}4,7,9,9,8,4A B =--=-,符合题意.综上所述,3a =-. [点评]本题考查集合元素基本特征──确定性、互异性、无序性,切入点是分类讨论思想,由于集合中元素用字母表示,检验必不可少。 例 例y |y ≥1},≥,N 分别是二集合{y |y =f (x ),|y=x 2+1,x ∈R} y =x 2+1 x |x ≥1}。 φ. 8} ,C U B = {1, A)∪(C U B) = ,∴ C U (A ∪B) }3< 3x ?+,即123x x ??>2或x < 3 1 }.方法2:(整体换元转化法)分析:把右边看成常数c ,就同)0(>>+c c b ax 一样∵|4x -3|>2x +1?4x -3>2x +1或4x -3<-(2x +1) ? x >2 或x <3 1 ,∴原不等式的解集为{x | x >2或x <3 1}. 例18分析:关键是去掉绝对值. 方法1:零点分段讨论法(利用绝对值的代数定义) ①当1 -

相关主题
文本预览
相关文档 最新文档