当前位置:文档之家› 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函数,存入文本文件中。

Matlab GUI编程教程

Matlab GUI编程教程 介绍 什么是GUI呢 ? GUI是Graphical User Interface 图形用户界面的意思,象很多高级编程语言一样,Matlab也有图形用户界面开发环境,随着计算机技术的飞速发展,人与计算机的通信方式也发生的很大的变化,从原来的命令行通讯方式(例如很早的DOS系统)变化到了现在的图形界面下的交互方式,而现在绝大多数的应用程序都是在图形化用户界面下运行的。 记得读书的时候,大学开学不久,学校很多同学就开始报考全国计算机等级考试了,当然我也是其中的一分子,其中C语言是大多数人选择的科目,当时在学C 语言的时候,经常也会遇到人机交互的例子,譬如一个计算两个数相加的程序,运行程序后便切换到了Dos模式,然后在此模式下输入两个数,再回车,才能返回运算结果。当时就觉得很不方便,也不友好,后来才得知C语言是面向过程的语言,是非面向对象的语言(VC++,VB,Matlab等是面向对象的)。那么下面我们就来看看Matlab是如何简单、快速而友好地解决这类问题的吧。 Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:File/New/GUI 如下图所示; 选择Blank GUI(Default)

2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示; 布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。 3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。 function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB

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

集合与简易逻辑 知识点整理 班级: 姓名: 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 是的 条件。

一个简单的Matlab_GUI编程实例

Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下

图所示; 布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。 1. 2. 3.function edit1_Callback(hObject, eventdata, handles) 4.% hObject handle to edit1 (see GCBO) 5.% eventdata reserved - to be defined in a future version of MATLAB

6.% handles structure with handles and user data (see GUIDATA) 7.% Hints: get(hObject,'String') returns contents of edit1 as text 8.% str2double(get(hObject,'String')) returns contents of edit1 as a double 复制代码 然后在上面这段代码的下面插入如下代码: 1. 2.%以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字,则现实空白内容input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0if (isempty(input)) set(hObject,'String','0')endguidata(hObject, handles); 复制代码 这段代码使得输入被严格限制,我们不能试图输入一个非数字。 4.为edit2_Callback添加同样一段代码 5 现在我们为计算按钮添加代码来实现把数据1和数据2相加的目的。 用3中同样的方法在m文件中找到pushbutton1_Callback代码段 如下; 1.function pushbutton1_Callback(hObject, eventdata, handles) 2.% hObject handle to pushbutton1 (see GCBO) 3.% eventdata reserved - to be defined in a future version of MATLAB 4.% handles structure with handles and user data (see GUIDATA) 复制代码

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

Matlab gui新手入门指南

1、从最简单的开始 编程最基本的目的就是——我执行一个操作,程序做出一个反应。 “一个操作”包括:点击鼠标,拖动滑块,填写数据,选择选项…… “做出一个反应”包括:计算一些东西,然后储存在哪里,或者贴个图出来,或者显示在哪里…… -------------------------------------------------------------------------------------------------------------------编程的基本思想: 目的->当点击按钮A时,然后执行任务C, 则->进入按钮A的回调函数callback里,写下任务C的代码。 -------------------------------------------------------------------------------------------------------------------a:不知道callback在哪??右键单击按钮,view callbacks->选择callback)别的控件也一样。 a:不同的回调函数啥意思?? callBack 最常用的就是它。如果控件是按钮,那点击按钮时,则按钮下的Callback就会执行;如果是滑块,则拖动滑块时,滑块名下的callback就会执行;总之,就是对控件默认操作时,matlab后台就会自动调用它名下的的callback。正常用途,全放在callback下就够了。如果其他的,实在是想知道,了解一下也未尝不可。 ButtonDownFcn 就是鼠标在它(代指各种控件)上面点击一下,你放在这个函数名下的代码就会执行。(ps:按钮的callback也是点击,所以会覆盖掉这个buttondownfcn。) CreateFcn 顾名思义,在生成这个控件,显示之前,执行你放在这个函数名下的代码; DeleteFcn 一样。在控件要销毁,但是被毁灭之前执行这个函数名下的代码。貌似“真的要退出吗”这一类就是写在这里。 KeyPressFcn 当前控件获得焦点且有按键按下时执行。(什么是焦点?就是这个控件被鼠标点了(或者是tab轮选到了)。你打开一个记事本,然后再点这个网页,再随便按几个按键,记事本上有字不?没有对吧。因为它没获得焦点,所以你的按键它不会反应的。只有你最后再点它一下,再按几个按键,结果怎么样?有字了吧?)这里的KeyPressFcn也是一样的道理。 一般在这下面的代码还会判断下按键是什么,然后执行相应的代码。 ResizeFcn,SelectionChangeFcn不常用。也懒得去看了。附几句,控件都有Resize的属性,好像默认是不可调整,如果要用到这个函数,去把它打开先。 SelectionChangeFcn 是在群按钮组件中,改变选择时,所执行的函数。 哪些控件支持哪些回调函数?很简单,你在它上面右键就可以看到了,点进去就可以编辑了。 可以在property inspect中在需要的回调函数下设置%automatic就可以自动添加相应的回调函数框架。 2、常用控件代码框架参考 --------------------------------------------------------------------- Toggle Button的callback一般写法

遗传算法的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 ++=有实根”的逆命题;

matlab中gui教程

11 图形用户界面(GUI )制作 用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。 图形用户界面(Graphical User Interfaces ,GUI )则是由窗口、光标、按键、菜单、文字说明等对象(Objects )构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。 假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI 的制作。但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。 MATLAB 为表现其基本功能而设计的演示程序demo 是使用图形界面的最好范例。MATLAB 的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。 即便比较熟悉MATLAB 的读者,在他初次编写GUI 程序时,也会感到棘手。为使读者获得制作自己GUI 的体验,本章“入门”节提供了一个简单的示例。读者只要输入所提供的程序,就可引出相应的界面。 本章第2节叙述图形用户界面的设计原则和一般制作步骤。第3、4节分别介绍用户菜单、用户控件的制作。出于“由浅入深”的考虑,前4节制作GUI 是通过M 脚本文件实现的。利用M 函数文件制作GUI ,需要解决数据传递问题,为此专设第5节给予阐述和示例。MATLAB 5.x 版为方便用户制作图形界面,提供了一个交互式的设计工具guide 。关于该工具的使用方法,被放在第6节中,以一个综合例题为设计目标逐步展开。 在此提醒读者,假如要比较准确的理解本章程序和掌握本章内容,请先阅读第10章关于图柄的内容。 11.1 入门 【*例11.1-1】对于传递函数为1 212++=s s G ζ的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。本例演示:(A )图形界面的大致生成过程;(B )静态文本和编辑框的生成;(C )坐标方格控制键的形成;(D )如何使用该界面。 (1)产生图形窗和轴位框: clf reset H=axes('unit','normalized','position',[0,0,1,1],'visible','off'); set(gcf,'currentaxes',H); str='\fontname{隶书}归一化二阶系统的阶跃响应曲线'; text(0.12,0.93,str,'fontsize',13); h_fig=get(H,'parent'); set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.4]); h_axes=axes('parent',h_fig,... 'unit','normalized','position',[0.1,0.15,0.55,0.7],... 'xlim',[0 15],'ylim',[0 1.8],'fontsize',8);

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

matlab gui教程

什么是GUI呢? GUI是Graphical User Interface 图形用户界面的意思,象很多高级编程语言一样,Matlab也有图形用户界面开发环境,随着计算机技术的飞速发展,人与计算机的通信方式也发生的很大的变化,从原来的命令行通讯方式(例如很早的DOS系统)变化到了现在的图形界面下的交互方式,而现在绝大多数的应用程序都是在图形化用户界面下运行的。 记得读书的时候,大学开学不久,学校很多同学就开始报考全国计算机等级考试了,当然我也是其中的一分子,其中C语言是大多数人选择的科目,当时在学C语言的时候,经常也会遇到人机交互的例子,譬如一个计算两个数相加的程序,运行程序后便切换到了Dos模式,然后在此模式下输入两个数,再回车,才能返回运算结果。当时就觉得很不方便,也不友好,后来才得知C语言是面向过程的语言,是非面向对象的语言(VC++,VB,Matlab等是面向对象的)。那么下面我们就来看看Matlab是如何简单、快速而友好地解决这类问题的吧。 Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:File/New/GUI 如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示;

布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double 然后在上面这段代码的下面插入如下代码: %以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字, 则现实空白内容 input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0 if(isempty(input)) set(hObject,'String','0')

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