MATLAB教室人数统计(源码和GUI)
- 格式:doc
- 大小:282.50 KB
- 文档页数:2
matlab中gui设计计算器原理及设计方案在MATLAB中设计GUI(图形用户界面)计算器的基本原理和设计方案如下:基本原理:MATLAB的GUI设计基于事件驱动模型。
这意味着当用户与界面交互(例如,点击按钮或输入文本)时,会触发一个或多个事件。
这些事件会调用相应的回调函数,执行相应的操作。
设计方案:1. 启动MATLAB并创建GUI:打开MATLAB。
使用guide命令启动GUI设计器。
2. 添加GUI组件:在GUI设计器中,添加需要的组件,如按钮(push button)、文本框(edit text)、标签(label)等。
3. 设置组件属性:为每个组件设置必要的属性,例如位置、大小、标签文本等。
4. 编写回调函数:双击每个组件,MATLAB会自动生成一个默认的回调函数。
根据需要修改这些函数,以实现所需的功能。
例如,对于按钮,当用户点击它时,可以编写代码来执行相应的计算。
5. 测试GUI:在设计过程中,经常测试GUI以确保其正常工作。
可以使用simulink中的模拟功能,或直接在MATLAB环境中测试。
6. 保存和运行:保存GUI文件。
在MATLAB命令窗口中输入文件名(不包括扩展名),然后按Enter运行GUI。
7. 调试和优化:根据测试结果,调整回调函数和组件属性,优化GUI的行为和外观。
8. 发布:一旦GUI满足所有需求,可以发布它以供其他人使用。
这通常涉及将GUI打包为一个可执行文件或应用程序包。
9. 维护和更新:随着软件的发展,可能需要定期维护和更新GUI。
这可能涉及添加新功能、修复错误或改进性能。
在整个过程中,熟悉MATLAB的GUI设计和编程技巧是非常重要的。
此外,由于GUI设计可能需要反复的测试和调整,因此耐心和细心也是必不可少的。
基于matlabgui课程设计一、课程目标知识目标:1. 学生能理解MATLAB GUI设计的基本原理,掌握相关函数和编程技巧。
2. 学生能运用MATLAB GUI设计出符合课程要求的数据处理和分析界面。
3. 学生了解MATLAB在工程领域的应用,以及GUI在数据可视化、交互式操作等方面的优势。
技能目标:1. 学生能独立完成MATLAB GUI界面的设计和编程,实现数据处理、图像显示等功能。
2. 学生能通过MATLAB GUI设计,实现与用户的有效交互,提高数据处理和分析的效率。
3. 学生具备解决实际问题时,运用MATLAB GUI进行数据分析和处理的能力。
情感态度价值观目标:1. 培养学生主动探究、勇于创新的科学精神,激发学生对编程和工程领域的兴趣。
2. 培养学生团队协作、共同解决问题的能力,提高沟通与表达的自信心。
3. 增强学生对我国科技发展的自豪感,认识到科技对国家和社会发展的贡献。
课程性质:本课程为选修课,以实践为主,结合理论教学,培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的MATLAB基础,对编程和工程领域有一定兴趣,喜欢探索新知识。
教学要求:结合课本内容,注重实践操作,引导学生主动探究,关注学生的个体差异,提高教学效果。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容本课程教学内容主要包括以下几部分:1. MATLAB GUI设计原理:介绍MATLAB GUI设计的基本概念、组成元素和设计流程,使学生了解GUI设计的基本框架。
2. MATLAB GUI编程基础:讲解MATLAB GUI编程的相关函数和语法,包括 GUIDE 工具的使用,使学生掌握GUI编程的基本技巧。
3. 数据处理与分析界面设计:结合课本内容,教授如何使用MATLAB GUI设计数据处理和分析界面,涵盖数据输入、处理、显示和保存等功能。
4. 实践项目:安排多个实践项目,让学生动手设计和实现不同的数据处理和分析界面,提高学生的实际操作能力。
TOMLAB课表编排问题我们老师让我们做一个课表编排问题,题目见/bbs/viewthread.php?tid=1799我试图用基于MATLAB的一个软件TOMLAB做,因为他有一个例子:见/examples/tomsym_collegetimetable.html由于我对MATLAB、TOMLAB应用不熟练,我试图先写一个程序尽可能和例子相似。
我将问题简化,先安排第一类课程,有三个老师,5门课。
并且我不考虑教室问题。
由于每堂课是以两个课时为一个单位,五门课每周分别上2 2 322堂课,每个老师教任意的课,他们的每周最大课时数分别是2 2 3,每天可以上4节课(晚上不排课)(以上的“一节课”均指两小节课)优化目标:1:最好在每天的第2、3节安排课程,第一节、第四节尽可能不安排课2:尽可能满足老师们的最大课时数,使他们加班尽可能少。
程序(TOMLAB实现)teacher=[1 2 3];lesson=[1 2 3 4 5];lesson_times=[2 2 3 2 2];slots=4*5;t=tomArrayIdx('t',1:3);l=tomArrayIdx('l',1:length(lesson));s=tomArrayIdx('s',1:20);teach=tomArray('teach',[3,5,20]); %create a array of 3*5*20(teacher*lesson*slots)bnds1={0<=teach<=1}; % All variables are binarybnds2={sum(sum(teach(t,l,s),s),t)==lesson_times};%所有的课程必须全部安排进课表bnds3={sum(sum(teach(t,l,s),t),l)<=1};% Teacher constraint, one teacher per slotbnds={bnds1,bnds2,bnds3};not_so_good_slots=tomArrayIdx('l',[1,4,5,8,9,12,13,16,17,20]); objective1=sum(vec(teach(l,t,not_so_good_slots)));%the goal is to minimize teaching courses in these no so good slotsmax_work=[2 2 3];objective2=0;for i=1:3overwork=sum(sum(teach(i,l,s),s),l)-max_work(i)if overwork>0objective2=objective2+10*abs(overwork);endend但是,当我输入objective1=sum(vec(teach(l,t,not_so_good_slots)));后,提示:Error in ==> tomArray.subsref at 78checkIndexes(o);我输入for i=1:3overwork=sum(sum(teach(i,l,s),s),l)-max_work(i)if overwork>0objective2=objective2+10*abs(overwork);endend后提示Function 'gt' is not defined for values of class 'tomArray'.Error in ==> gt at 18[varargout{1:nargout}] = builtin('gt', varargin{:});。
实验内容:1.编程实验1:某谐波信号x=sin(100*pi*t)+sin(240*pi*t)受到了一个高斯白噪声的干扰y=x+2*randn(size(x)),试分别作出此信号的时域波形和频谱分布(用FFT),从受扰信号中确定并显示谐波信号的频率。
源程序;试验结果t=[-0.05:0.001:0.05];x=sin(100*pi*t)+sin(240*pi*t);subplot(3,2,1);plot(t,x)y=x+2*randn(size(x));subplot(3,2,2);plot(t,y);fft(x,101);X=fft(x,101);fx=abs(X);n=[0:1:100];subplot(3,2,3);plot(n,fx);fft(y,101);Y=fft(y,101);fY=abs(Y);n=[0:1:100];subplot(3,2,4);plot(n,fY);[b,a]=cheby2(9,20,300/1300);z=freqz(b,a,101,1000);c=abs(z'.*fY);subplot(3,2,5);plot(n,c);w=ifft(c,101)subplot(3,2,6);plot(n,w);试验结果2编程实验2利用GUI制作一简单图像处理系统,基本原理是将多幅加入高斯噪声的图象叠加求平均达到去除噪声的目的。
要求界面美观、友好,完成功能:(1)打开并显示任意路径的图像文件(uigetfile,imread)。
(2)利用可编辑文本框输入要叠加平均的加噪图象的幅数,注意随着图象幅数的增加,观察去噪的效果。
(imnoise,randn)(3)显示去噪前后的差图象。
源程序function varargout = sunbf(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @sunbf_OpeningFcn, ...'gui_OutputFcn', @sunbf_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin & isstr(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});endfunction sunbf_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;guidata(hObject, handles);function varargout = sunbf_OutputFcn(hObject, eventdata, handles)varargout{1} = handles.output;function edit1_CreateFcn(hObject, eventdata, handles)if ispcset(hObject,'BackgroundColor','white');elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); endfunction edit1_Callback(hObject, eventdata, handles)%设定叠加去噪求平均的次数global QQ=str2double(get(handles.edit1,'string'));function pushbutton1_Callback(hObject, eventdata, handles)%读入原图像并显示global BH={'*.bmp';'*.jpg';'*.gif';'*.tif';'*.tga'};[filename,pathname]=uigetfile(H,'请选择需要打开的图像');file=strcat(pathname,filename);[X,map]=imread(filename);B=X;I=imread(file);axes(handles.axes1);imshow(I),title('原图像');function pushbutton2_Callback(hObject, eventdata, handles)%将原图像加高斯噪声并显示global Bglobal JJ=imnoise(B,'gaussian',0,0.05);axes(handles.axes2);imshow(J),title('加噪声后图像');function pushbutton3_Callback(hObject, eventdata, handles)%用叠加求平均去除加入的噪声global Bglobal Qglobal Kglobal JK=zeros(size(B));for i=1:Q;J=imnoise(B,'gaussian',0.002);J1=im2double(J);K=K+J1;endK=K/Q;axes(handles.axes3);imshow(K);title('消噪声后图像');function pushbutton4_Callback(hObject, eventdata, handles) %将去噪前后图像做差并显示global Kglobal JJ1=im2double(J);XX=abs(imsubtract(J1,K));axes(handles.axes4);image(XX);title('去噪前后的差图象');试验结果(Q=10)3编程实验3微分方程的数值解法是在科学与工程计算中经常遇到的问题。
MATLAB实用教程GUIMATLAB是一种功能强大的数学软件,广泛用于科学和工程领域的数据分析、可视化、建模和仿真。
在MATLAB中,GUI(Graphical User Interface,图形用户界面)是一种用于创建交互式应用程序的工具,可以使用户通过图形化界面来操作和控制程序。
本教程将介绍如何使用MATLAB创建GUI应用程序,包括创建各种控件(按钮、文本框、下拉菜单等)、设计布局、添加回调函数等。
通过学习本教程,您将了解如何利用MATLAB的强大功能和易用的GUI设计工具来创建自己的交互式应用程序。
1.创建GUI应用程序要创建一个GUI应用程序,首先需要打开MATLAB并选择新建GUI应用程序。
在弹出的界面中,可以选择创建一个新的Figure或Panel,然后可以在面板上添加各种控件。
可以通过拖动和放置控件来设计界面布局,然后可以对控件进行自定义设置,比如修改文本内容、颜色、大小等。
2.添加控件MATLAB提供了各种控件,用于实现不同的功能。
常见的控件包括按钮、文本框、下拉菜单、滑块等。
可以通过在界面上拖动和放置这些控件来创建自己的GUI应用程序。
在添加控件时,可以设置控件的属性,比如位置、大小、颜色、文本内容等。
3.设计布局设计布局是创建GUI应用程序的重要部分。
可以通过调整控件的位置、大小和对齐方式来设计一个美观的界面布局。
MATLAB提供了多种布局管理器,比如Grid布局、Box布局、GridBag布局等,可以根据需要选择合适的布局方式来设计界面。
4.编写回调函数回调函数是GUI应用程序的关键部分,用于响应用户的操作。
可以为每个控件添加回调函数,当用户操作控件时,回调函数将被触发。
可以在回调函数中实现各种功能,比如计算结果、数据处理、图形绘制等。
通过编写回调函数,可以实现程序的交互性和实用性。
5.运行应用程序创建GUI应用程序后,可以点击“运行”按钮来运行应用程序。
在运行过程中,可以与界面上的控件进行交互,触发回调函数并实现相应功能。
MATLAB大作业班级:姓名:学号:计算器➢题目本题目通过MATLAB的gui程序设计较为简单,在gui设计中主要用到三种控件,文本编辑框(edit text),静态文本框(Static text),命令按钮(push button)。
然后在通过各个按钮的回调函数,实现简单的计算功能。
➢1、功能介绍(1)具有友好的用户图形界面。
实现十进制数的加、减、乘、除、乘方、开方等简单计算。
(2)具有科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行。
(注:三角函数计算的是弧度而不是角度)。
(3)有清除键,能清除操作。
➢2、功能实现程序由两个部分组成:MATLAB代码(.m文件)和GUI图形(.fig)。
程序使用的流程:直接利用图形界面中的按键键入所需数值、运算符等即可得出结果。
备注:软件版本:MATLAB 2011b首先用MATLAB GUI功能,在绘制一个静态文本框和一个文本编辑框,以及33个命令按钮,调整好各控件大小、颜色,整体布局如图所示:(附录中有相关属性修改介绍)然后通过双击各个按钮来改写其属性,在m文件中编写其回调函数,最后在运行调试。
2.1 各功能界面设计GUI设计界面:注:底部边框用(Panel)工具添加,有两种设计顺序。
(1、先加底部边框,再在底部边框上画功能键。
2、先画功能键,布好局,画底框,全选功能键拖动到底框上。
)2.2 各功能模块实现(可根据需要增减功能键)算法设计:1. 数字键设计:0—9以及小数点函数都一样,只是参数不同:例如:按键‘1’响应:global jjtextString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','1') ;elsetextString =strcat(textString,'1');set(handles.text1,'String',textString)endjj=0;2. 四则运算函数:‘+’功能响应:textString = get(handles.text1,'String');textString =strcat(textString,'+');set(handles.text1,'String',textString)‘-’功能响应:textString = get(handles.text1,'String');textString =strcat(textString,'-');set(handles.text1,'String',textString)‘×’功能响应:textString = get(handles.text1,'String');textString =strcat(textString,'*');set(handles.text1,'String',textString)‘÷’功能响应:textString = get(handles.text1,'String');textString =strcat(textString,'/');set(handles.text1,'String',textString)3. 科学计算函数:例如:‘sin’功能响应:textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)set(handles.text1,'String','0.') ;elsea = strread(textString, '%f');a=sin(a);set(handles.text1,'String',a)end4. 退格键(DEL):通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实现退格:global jjtextString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','0.') ;elsess=char(textString);l=length(textString);textString=ss(1:l-1);set(handles.text1,'String',textString)endjj=0;5. 清屏键函数(AC):set(handles.text1,'String','0.') ;2.3 各模块程序添加方法选中一个需添加程序的功能键,右击,View Callbacks,Callback,出现如下图所示界面。
近年来,MATLAB在科学计算和工程领域中的应用变得越来越广泛。
其中,GUI(Graphical User Interface)程序设计作为MATLAB的一个重要应用领域,对于帮助用户更直观地理解和使用MATLAB具有重要意义。
本文将以MATLAB设计GUI程序为主题,探讨其原理、实现方法和实际例题,并对其进行深入解析和探讨。
1. GUI程序设计的基本原理在MATLAB中,GUI程序设计主要通过图形用户界面工具包(GUIDE)来实现。
GUIDE工具包提供了一系列可以直观拖放的元素,包括按钮、文本框、下拉菜单等,用户可以通过拖拉这些元素的方式来设计出自己理想的界面。
MATLAB还提供了丰富的回调函数,用户可以将不同控件的回调函数与自定义函数进行绑定,实现交互式的操作。
2. GUI程序设计的实现方法为了更深入地理解GUI程序设计,我们可以以一个简单的例子来说明其实现方法。
假设我们需要设计一个简单的温度转换器,用户可以输入摄氏温度,然后通过点击按钮来实现摄氏温度到华氏温度的转换。
我们可以通过GUIDE工具包来设计界面,添加一个文本框用于输入摄氏温度,一个按钮用于触发转换操作,以及一个用于显示结果的文本框。
我们可以在回调函数中编写转换的过程,当用户点击按钮时,根据用户输入的摄氏温度进行计算,并将结果显示在结果文本框中。
3. 实际例题:温度转换器GUI程序设计现在,让我们按照上面的思路来实际设计一个温度转换器的GUI程序。
我们打开MATLAB并新建一个GUI程序,接着使用GUIDE工具包来设计界面,按照前文描述的方法添加文本框、按钮和结果文本框。
我们为按钮添加点击事件的回调函数,编写摄氏温度到华氏温度的转换算法,并将结果显示在结果文本框中。
我们保存并运行程序,测试其功能和效果。
4. 总结与思考通过上述例题的实际操作,我们更深入地理解了MATLAB的GUI程序设计原理和实现方法。
GUI程序设计能够帮助我们更直观地操作MATLAB,提高使用效率和便利性。
主题:使用MATLAB进行统计个数和求和的代码实现近年来,随着数据分析和统计在各个领域的广泛应用,MATLAB作为一种强大的科学计算工具,也被越来越多的人所熟知和应用。
在数据处理和统计分析中,统计个数和求和是常见的操作,而MATLAB提供了丰富的函数和工具来实现这些操作。
本文将介绍如何使用MATLAB 进行统计个数和求和的代码实现。
1. 统计个数在MATLAB中,可以使用`hist`函数来统计数组中各个元素出现的次数。
该函数的基本语法为:```matlab[counts, centers] = hist(data, edges)```其中,`data`为需要进行统计的数组,`edges`为用于分组的边界值,`counts`为每个组的元素个数,`centers`为每个组的中心值。
下面是一个例子,假设有一个数组`A`,需要统计其中各个元素出现的次数:```matlabA = [1 2 3 1 3 3 4 5];[counts, centers] = hist(A, unique(A));```执行以上代码后,`counts`将会显示各个元素出现的次数,`centers`将会显示不同的元素值。
2. 求和MATLAB中提供了`sum`函数来对数组中的元素进行求和。
其基本语法为:```matlabtotal = sum(data)```其中,`data`为需要进行求和的数组,`total`为数组中所有元素的和。
下面是一个例子,假设有一个数组`B`,需要计算其中所有元素的和:```matlabB = [1 2 3 4 5];total = sum(B);```执行以上代码后,`total`将会显示数组`B`中所有元素的和。
MATLAB提供了便利的工具和函数来实现统计个数和求和的操作,通过简单的代码即可实现这些常见的统计分析。
对于需要进行数据处理和统计分析的工程师和科研人员来说,MATLAB是一个强大而高效的工具,可以极大地简化数据分析的流程。
一、课题介绍
该课题为基于MATLAB的教室人数统计,带有丰富的人机交互GUI界面。
实现教室人数的计数统计,进而统计出勤率,上课认真听讲的比例。
原先预设总人数,未出勤或者书本遮住脸部、趴着玩手机等必然无法采集到人脸,从而对应数量缺失,得出出勤率或听讲率。
该课题采用肤色原理进行人脸定位和人脸分割。
本课题中,为了界面GUI的美观,刻意将分割出的人脸单独显示在GUI对应的axes里。
是个不错的毕业设计选题。
二、基本流程
读入图片(或调用笔记本自带摄像头),灰度处理,转YcbCr,二值化,人脸区域定位,计数
三、实现步骤
1、进行调用笔记本摄像头,代码如下:
vid=videoinput('winvideo',1);
set(vid,'ReturnedColorSpace','rgb');
preview(vid);
2、采集帧图像
I = getsnapshot(vid);
axes(handles.axes1);
imshow(I)
3、人脸检测
if size(img1, 3) == 1 % 灰度图像,插入白色或黑色框
if mean(img1(:)) > 128 % 图像较亮,使用黑框
shapeInserter = vision.ShapeInserter();
else % 图像较暗,使用白框
shapeInserter = vision.ShapeInserter('BorderColor','White');
end
else % 彩色图像,插入红色框
shapeInserter = vision.ShapeInserter('BorderColor','Custom','CustomBorderColor',[255 0 0]);
end;
% 绘制边框以圈出结果
img1 = step(shapeInserter, img1, int32(bboxes));
axes(handles.axes2); %用axes命令设定当前操作的坐标轴是axes_src
imshow(img1);
title('框出人脸区域')
4、人脸计数
for i = 1:size(intbbox, 1)%取列数
xs = intbbox(i, 1);
xe = xs + intbbox(3,i);
ys = intbbox(i, 2);
ye = ys + intbbox(i,4);
end
sum=mat2str(i)
最终实现结果如下所示
---------------------
四、运行截图
GUI界面设计图
运行效果图。