【经验交流】matlab自定义回调函数语法规则 - MATLAB中文论坛 - Powered by Discuz!

【经验交流】matlab自定义回调函数语法规则 - MATLAB中文论坛 - Powered by Discuz!
【经验交流】matlab自定义回调函数语法规则 - MATLAB中文论坛 - Powered by Discuz!

MATLAB : matlab : liuhuanjinliu : 2009-10-10 22:57: matlab GUI set matlab 12event matlab 3(): wnsgtc : 2009-10-10 23:09: wnsgtc : 2009-10-10 23:281set(h, 'StartFcn', @myfile)function [varargout] = XIE_bwmorphfig(Size, varargin)h = figure('name', 'test', 'numbertitle', 'off', 'menubar','none', ... 'units', 'normalized', 'position', [0.14 0.18 0.720.64]);Matrix = [0.5 0.5 0.5];中文论坛标题【经验交流】自定义回调函数语法规则作者时间标题【经验交流】自定义回调函数语法规则大家在进行编程时,是不是经常遇到需要自己定义针对某一对象的回调函数的问题?首先用设置回调函数的名称和输入参数,然后定义回调函数,实现想要的功能。针对回调函数的定义有如下语法规则需要遵守:如何设置回调函数如何定义回调函数、第一种情况:不需要向回调函数传递任何参数。、第二种情况:向回调函数传入调用回调函数的对象的句柄以及(留待以后使用)的值。、第三、四种情况:向回调函数传入调用回调函数的对象的句柄以及用户想要传递的参数多个。因此,在设置和定义对象的回调函数时,要遵循以上的对应规则。作者时间急时雨啊!作者时间给出我今天学到的两个例子来说明两种用法:()型set(h, 'StartFcn','myfile')function myfile set(h, 'StartFcn',@myfile)function myfile(obj,event)set(h, 'StartFcn',{'myfile', var1, var2,...})function myfile(obj,event, arg1, arg2, ...)set(h, 'StartFcn',{@myfile, var1,var2, ...})function myfile(obj,event, arg1, arg2, ...)

uipanel('position', [0 Matrix], 'backgroundcolor', [0.8 0.8 0.8]);

axes1 = subplot('position', [0 Matrix]);

set(axes1, 'visible', 'on');

uipanel('position', [0.5 Matrix], 'backgroundcolor', [0.8 0.8 0.8]);

axes2 = subplot('position', [0.5 Matrix]);

set(axes2, 'visible', 'on');

radio1 = uicontrol('style', 'radio', 'Tag', 'radio1', ...

'units', 'normalized', 'position', [0.1 0.3875 0.2 0.1], ...

'backgroundcolor', [0.8 0.8 0.8], ...

'string', 'doit', 'FontSize', 16, ...

'callback', {@doit,axes1});

global im;

im = imread('I.jpg');

imshow(im);

function doit(src,eventdata,arg1)

global im ;

axes(arg1);

im = rgb2gray(im);

imshow(im);

2set(h, 'StartFcn', 'myfile')

()型

function [] = XIE_bwmorphfig(varargin)

figure('name', 'test', 'numbertitle', 'off', 'menubar',

'none', ...

'units', 'normalized', 'position', [0.14 0.18 0.72 0.64]); Matrix = [0.5 0.5 0.5];

uipanel('position', [0 Matrix], 'backgroundcolor', [0.8 0.8 0.8]);

axes1 = subplot('position', [0 Matrix]);

set(axes1, 'visible', 'on');

global axes2 ;

uipanel('position', [0.5 Matrix], 'backgroundcolor', [0.8 0.8 0.8]);

axes2 = subplot('position', [0.5 Matrix]);

set(axes2, 'visible', 'on');

handles.radio1 = uicontrol('style', 'radio', 'Tag', 'radio1', ...

'units', 'normalized', 'position', [0.1 0.3875 0.2 0.1], ...

'backgroundcolor', [0.8 0.8 0.8], ...'string', 'doit', 'FontSize', 16, ...'callback', 'doit');global im;axes(axes1);im = imread('01.jpg');imshow(im);function doit()global im axes2 ;axes(axes2);im = rgb2gray(im);imshow(im);hotboy zhenghui : beretf : 2009-10-17 17:57: 1# liuhuanjinliu liuhuanjinliu matlab 2009a callback callback function hiton(obj,event,num).........event set(h, 'StartFcn', {@myfile, var1, var2, ...})var1,var2,...gui callback handles handles : liuhuanjinliu : 2009-10-17 18:16image ButtonDownFcn set(h,'ButtonDownFcn',{@mycallback,5});%callback num=5function mycallback(obj,event,num)% num 5%handles set(h,'ButtonDownFcn',{@mycallback,5,handles});%callback num=5这用需要把回调函数和主程序分别存储。这两个例子由和提供,希望能遇到同样问题的朋友一点启发!作者时间标题回复的帖子不知兄说的这些规则是哪个版本的,我在下,想自定义,其实就是图像的,按照你给的规则总是出错。例如:我的自定义回调函数为但我调用的时候,实参怎么输入啊,等于多少啊,实际上就是说你的这个里面的到底如何和自定义的形参对应啊。还有一个疑问,就是自己生成的中都有这个输入,用户自定义的难道不需要么,否则如何知道呢??谢谢。作者时间首先,你得看看图像,也就是的属性,它里面有一个属性,这个就是在图像中点击鼠标时的响应函数,需要用户自己定义:定义,并传入数据回调函数的定义为:这里就是了对图像的其它处理另外,如果你在回调函数里用结构,也可以传递过去:定义,并传入数据回调函数的定义为:

function mycallback(obj,event,num,h)% num 5,h handles ............................%: beretf : 2009-10-17 18:35: 4# beretf liuhuanjinliu obj event : liuhuanjinliu : 2009-10-17 20:18: 6# beretf :victory:: : 2010-1-17 00:07: M M M function abc()StdUnit = 'point';StdColor = get(0,'DefaultUIcontrolBackgroundColor');get(0,'ScreenPixelsPerInch');PointsPerPixel = 96/get(0,'ScreenPixelsPerInch');%-----Open a new figure a = figure('Color',[0.8 0.8 0.8], ... 'Position',[455 60 560 440], ... 'IntegerHandle','off', ... 'Number','off',... 'Name','Dynamances',... 'Tag','AspectDemo');b=uicontrol('Parent',a, ... 'Unit',StdUnit, ... 'BackgroundColor',StdColor, ... 'HorizontalAlignment','left', ... 'Position',PointsPerPixel*[370 41 40 25], ... 'Units','Normalized',... 'String','',... 'FontSize' ,[16],... 'ForegroundColor',[0 0 0],... 'HorizontalAlignment' , 'center',... 'Style','Pushbutton',... 'Tag','help');set(findobj(gcf,'Tag','help'),'callback',... 'helpf()');end function helpf()HelpStr={''}; helpwin(HelpStr,'heavy HELP')end 这里就是就是结构了对图像的其它处理作者时间标题回复的帖子又实验了多次,终于正确了。感谢兄。格式如你的帖子所示,实参不用写和。哈哈,太好了。作者时间标题回复的帖子问题解决就好,作者广陵散绝时间标题手工代码的回调函数问题手工代码回调函数能够与主函数写在同一个文件里面吗?我把回调函数单独用一个文件可以运行但是放到同一个文件里面就不行了是说未定义帮助帮助文件

谢谢啦作者时间原帖由广陵散绝于发表手工代码回调函数能够与主函数写在同一个文件里面吗?我把回调函数单独用一个文件可以运行但是放到同一个文件里面就不行了是说未定义回调函数定义错误。你没仔细看我写的东东!改成如下形式就可以了:帮助文件作者广陵散绝时间标题谢谢了搞定啦谢谢刘哥貌似必须有这个形参呵呵没注意‘这个形式调用单独的文件子函数作者时间原帖由广陵散绝于发表搞定啦谢谢刘哥貌似必须有这个形参呵呵没注意‘这个形式调用单独的文件子函数是的,格式的回调函数,必须要带两个形参。作者时间标题刘哥帮忙啊刘哥您好我的回调函数怎么也不管用啊能不能帮我看看^_^: liuhuanjinliu : 2010-1-17 12:31 2010-1-17 12:07 AM M M M function abc()StdUnit = 'point';StdColor = get(0,'DefaultUIcontrolBack ...~~~set(findobj(gcf,'Tag','help'),'callback',... @helpf);function helpf(h,event)HelpStr={''}; helpwin(HelpStr,'heavy HELP'): : 2010-1-18 12:34: function help(obj, event)set(findobj(gcf,'Tag','help'),'callback',... helpf()');m : liuhuanjinliu : 2010-1-18 13:39 2010-1-18 12:34 PM function help(obj, event)set(findobj(gcf,'Tag','help'),'callback',... helpf()');m ...@: optimuslw : 2010-3-23 17:11:

作者时间标题就是在GUI中选择图形知道鼠标位置作者时间标题回复的帖子已经在另一个帖子里回复你了作者时间看看遇到了类似问题作者时间您好!请问回调函数,是否可以把回调函数中的参数传递给主函数使用,谢谢。作者时间就比如串口功能的回调函数,当串口有指定字节数的时候自动调到回调函数接收数据,问题是串口接收的数据能否返回主函数,非常感谢!作者白菜头时间多谢楼主的开的这个帖子,我的回调函数中的参数传递问题解决了!欢迎光临中文论坛: optimuslw : 2010-3-23 17:14: set(h,'ButtonDownFcn',{@Callback,handles});function Callback(hObject,eventdata,h )pct=get(gca,'CurrentPoint');: liuhuanjinliu : 2010-3-24 20:50: 13# optimuslw ~~: caoyong625 : 2010-5-22 19:52 : fenghan505789 : 2012-5-14 16:08matlab : fenghan505789 : 2012-5-14 16:10: : 2012-10-27 20:22 MATLAB (https://www.360docs.net/doc/dc720141.html,/)Powered by Discuz! X2.5

Matlab 概率论与数理统计

Matlab 概率论与数理统计一、matlab基本操作 1.画图 【例01.01】简单画图 hold off; x=0:0.1:2*pi; y=sin(x); plot(x,y,'-r'); x1=0:0.1:pi/2; y1=sin(x1); hold on; fill([x1, pi/2],[y1,1/2],'b'); 【例01.02】填充,二维均匀随机数 hold off; x=[0,60];y0=[0,0];y60=[60,60]; x1=[0,30];y1=x1+30; x2=[30,60];y2=x2-30; xv=[0 0 30 60 60 30 0];yv=[0 30 60 60 30 0 0]; fill(xv,yv,'b'); hold on; plot(x,y0,'r',y0,x,'r',x,y60,'r',y60,x,'r'); plot(x1,y1,'r',x2,y2,'r'); yr=unifrnd (0,60,2,100); plot(yr(1,:),yr(2,:),'m.') axis('on'); axis('square'); axis([-20 80 -20 80 ]);

2. 排列组合 C=nchoosek(n,k):k n C C =,例nchoosek(5,2)=10, nchoosek(6,3)=20. prod(n1:n2):从n1到n2的连乘 【例01.03】至少有两个人生日相同的概率 公式计算n n n n N N n N N N N n N N N C n p )1()1(1)! (! 1!1+--?-=--=- = 365364 (3651)365364 3651 11365365365365 rs rs rs ?-+-+=- =-? rs=[20,25,30,35,40,45,50]; %每班的人数 p1=ones(1,length(rs)); p2=ones(1,length(rs)); % 用连乘公式计算 for i=1:length(rs) p1(i)=prod(365-rs(i)+1:365)/365^rs(i); end % 用公式计算(改进) for i=1:length(rs) for k=365-rs(i)+1:365 p2(i)=p2(i)*(k/365); end ; end % 用公式计算(取对数) for i=1:length(rs)

Matlab基本语法.word

实验序号 1 Matlab基本语法 一、实验目的 通过本实验,使学生初步了解Matlab的基本语法规则,学习并进一步掌握Matlab矩阵运算和数组运算的基本规则,以及基本绘图方法。 二、实验器材 PC电脑一台 MATLAB软件 三、实验内容与基本要求 a) 通过MATLAB语言,给矩阵赋值:显示一行数组,显示一列数组。 b) 基本基本矩阵的显示方式:ones,zeros,eye。 c) 在同一张图上绘出:y=3sin(x+pi/3),y=cos(3x+pi/6),并用不同的线型和点型区分。 d) 基本二维与三维绘图命令的训练。 四、实验报告要求 要求给出编程思路及程序清单,并呈现出最终结果 1)显示一行: a=[1 2 3 3 4 5 6] 回车结果: a = 1 2 3 3 4 5 6 显示一列; a=[1 ,2 ,3 ,4 ,5] 回车显示: a= 1 2 3 4 5

2)输入ones(2,5): 输出结果: ans= 1 1 1 1 1 1 1 1 1 1 输入zeros(2,3): 输出结果: ans= 00 0 00 0 输入eye(4,4): 输出结果: ans= 10 0 0 0 1 0 0 00 1 0 00 0 1 3)在matlab中输入: x=0:0.01:10; y=3*sin(x+pi/3); plot(x,y,’:r’) hold on y=cos(3*x+pi/6) plot(x,y,’b’) 得到图形:

4) 输入程序: y=5*(rand(1,10)-.5); plot(y) title('my first plot') xlabel('x'); ylabel('y'); grid on 得到二维图形: 012345678910 -3-2 -1 1 2 3

Matlab概率统计工具箱(3)

Matlab概率统计工具箱(3) 4.8 假设检验 4.8.1 已知,单个正态总体的均值μ的假设检验(U检验法) 函数ztest 格式h = ztest(x,m,sigma) % x为正态总体的样本,m为均值μ0,sigma为标准差,显著性水平为0.05(默认值) h = ztest(x,m,sigma,alpha) %显著性水平为alpha [h,sig,ci,zval] = ztest(x,m,sigma,alpha,tail) %sig为观察值的概率,当sig为小概率时则对原假设提出质疑,ci为真正均值μ的1-alpha置信区间,zval为统计量的值. 说明若h=0,表示在显著性水平alpha下,不能拒绝原假设; 若h=1,表示在显著性水平alpha下,可以拒绝原假设. 原假设:, 若tail=0,表示备择假设:(默认,双边检验); tail=1,表示备择假设:(单边检验); tail=-1,表示备择假设:(单边检验). 例4-74 某车间用一台包装机包装葡萄糖,包得的袋装糖重是一个随机变量,它服从正态分布.当机器正常时,其均值为0.5公斤,标准差为0.015.某日开工后检验包装机是否正常,随机地抽取所包装的糖9袋,称得净重为(公斤)

0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.52, 0.515, 0.512 问机器是否正常 解:总体μ和σ已知,该问题是当为已知时,在水平下,根据样本值判断μ=0.5还是.为此提出假设: 原假设: 备择假设: >> X=[0.497,0.506,0.518,0.524,0.498,0.511,0.52,0.515,0.512 ]; >> [h,sig,ci,zval]=ztest(X,0.5,0.015,0.05,0) 结果显示为 h = 1 sig = 0.0248 %样本观察值的概率 ci = 0.5014 0.5210 %置信区间,均值0.5在此区间之外 zval = 2.2444 %统计量的值 结果表明:h=1,说明在水平下,可拒绝原假设,即认为包装机工作不正常.

hook的使用实例

在网上找了好久都没有找到消息hook的实例,下面是我的例子给大家分享一下 下面是dll中的代码: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //我的经验,编译的时候会提示DllMain,已在DllMain.cpp中定义,把DllMain.cpp从源文件里删掉就好了 #include "stdafx.h" #include HHOOK hkey=NULL; HINSTANCE h_dll; #pragma data_seg(".MySec") //定义字段,段名.MySec HWND h_wnd=NULL; #pragma data_seg() #pragma comment(linker,"/section:.MySec,RWS") BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { h_dll=hinstDLL; // MessageBox(0,"运行dllman","",MB_OK); return TRUE; } LRESULT CALLBACK my_test(int nCode,WPARAM wParam,LPARAM iParam)// { /* if(nCode==HC_ACTION) { MessageBox(0,"成功!!","标题",MB_OK); } else { MessageBox(0,"失败!!","标题",MB_OK); } */ MessageBox(0,"被截取","",MB_OK); UnhookWindowsHookEx(hkey); return 1; } void SetHook(HWND hwnd) { h_wnd = hwnd; // MessageBox(0,"运行sethook","",MB_OK); hkey=SetWindowsHookEx(WH_KEYBOARD,my_test,h_dll,0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 下面是EXE的代码:有很多头文件是没用上的,我个人习惯都带着- -,虽然这不是好习惯

回调函数与回调机制

回调函数与回调机制 1. 什么是回调函数 回调函数(callback Function),顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: ?属于工作流的一个部分; ?必须按照工作流指定的调用约定来申明(定义); ?他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能; 2. 回调机制 回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。 如上图所示,工作流提供了两个对外接口(获取参数、显示结果),以回调函数的形式实现。 ?“获取参数”回调函数,需要工作流使用者设定工作流计算需要的参数。 ?“显示结果”回调函数,提供计算结果给工作流使用者。

再以Windows的枚举顶级窗体为例。函数EnumWindows用于枚举当前系统中的所有顶级窗口,其函数原型为: BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // callback function LPARAM lParam // application-defined value ); 其中lpEnumFunc是一个回调函数,他用于返回枚举过程中的获得的窗口的句柄。其定义约定为: BOOL CALLBACK EnumWindowsProc( HWND hwnd, // handle to parent window LPARAM lParam // application-defined value ); 在这个例子中,EnumWindows 是一个工作流,这个工作流用于遍历windows的所有窗口并获得其句柄。用户使用EnumWindows工作流的目的是想通过工作流来来获取窗口的句柄以便针对特定的一个或多个窗口进行相关处理。于是EnumWindows就扩展出接口lpEnumFunc,用于返回遍历的窗口句柄。 EnumWindows工作流的结束有两个方式:1,用户在回调函数中返回FALSE;2,再也找不到顶级窗口。我们可以推测EnumWindows的实现机制如下: 注:下列代码中的FindFirstTopWindows(), FindNextTopWindow()为假设的,Windows API 没有此函数,只是为了表明Enumwindows的内部流程。 BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // callback function LPARAM lParam // application-defined value ) { BOOL bRet = TRUE; HWND hWnd = ::FindFirstTopWindows(); // 此函数是假设的,查找第一个顶级窗口 // 当hWnd为0时表示再也找不到顶级窗口 while( hWnd ) { bRet = (*lpEnumFunc)( hWnd, value ); if( !bRet) break; // 终止EnumWindows工作流; hWnd = ::FindNextWindow(); // 此函数是假设的,查找下一个顶级窗口 } } 在EnumWindows(...)函数中,实现了窗口枚举的工作流,他通过回调机制把用户关心(顶级窗口句柄)的和枚举工作流分开,用户不需要知道EnumWindows的具体实现,用户只要知道,设定了lpEnumFunc函数,然后把函数指针传给EnumWindwos就可以获得想要的窗口句柄。

第9章概率论与数理统计的MATLAB实现讲稿汇总

第9章 概率论与数理统计的MATLAB 实现 MATLAB 总包提供了一些进行数据统计分析的函数,但不完整。利用MATLAB 统计工具箱,可以进行概率和数理统计分析,以及进行比较复杂的多元统计分析。 9.1 随机变量及其分布 利用统计工具箱提供的函数,可以比较方便地计算随机变量的分布列(或密度函数)和分布函数。 9.1.1 常见离散型随机变量的分布列的计算 如果随机变量全部可能取到的不相同的值是有限个或可列无限多个,则称为离散型随机变量。 MATLAB 提供的计算常见离散型随机变量分布列的函数及调用格式: 函数调用格式(对应的分布) 分布列 y=binopdf(x,n,p)(二项分布) )() 1(),|(),,1,0(x I p p C p n x f n x n x x n --= y=geopdf(x,p)(几何分布) x p p p x f )1()|(-= ),1,0( =x y=hygepdf(x,M,K,n)(超几何分布) n M x n k M x K C C C n K M x f --=),,|( y=poisspdf(x,lambda)(泊松分布) λ λλ-=e x x f x ! )|(),1,0( =x y=unidpdf(x,n)(离散均匀分布) N N x f 1)|(= 9.1.2 常见连续型随机变量的密度函数计算 对于随机变量X 的分布函数)(x F ,如果存在非负函数)(x f ,使对于任意实数x 有 ? ∞ -=x dt t f x F )()( 则称X 为连续型随机变量,其中函数)(x f 称为X 的密度函数。 MA TLAB 提供的计算常见连续型随机变量分布密度函数的函数及调用格

MATLAB计算概率

一、实验名称 已知随机向量(X ,Y )独立同服从标准正态分布,D={(x,y)|a0&&e<6 if e==1

p=erchong(a,b,c,d) end if e==2 p=wangge(a,b,c,d); end if e==3 p=fenbu(a,b,c,d); end if e==4 p=mente(a,b,c,d); end if e==5 [X,Y]=meshgrid(-3:0.2:3); Z=1/(2*pi)*exp(-1/2*(X.^2+Y.^2)); meshz(X,Y,Z); end e=input('请选择: \n'); end % ===============================用二重积分计算function p=erchong(a,b,c,d) syms x y; f0=1/(2*pi)*exp(-1/2*(x^2+y^2)); f1=int(f0,x,a,b); %对x积分 f1=int(f1,y,c,d); %对y积分 p=vpa(f1,9); % ================================等距网格法function p=wangge(a,b,c,d) syms x y ; n=100; r1=(b-a)/n; %求步长 r2=(d-c)/n; za(1)=a;for i=1:n,za(i+1)=za(i)+r1;end %分块 zc(1)=c;for j=1:n,zc(j+1)=zc(j)+r2;end for i=1:n x(i)=unifrnd(za(i),za(i+1));end %随机取点 for i=1:n y(i)=unifrnd(zc(i),zc(i+1));end s=0; for i=1:n for j=1:n s=1/(2*pi)*exp(-1/2*(x(i)^2+y(j)^2))+s;%求和end end p=s*r1*r2;

OpenGL一个简单的例子

先编译运行一个简单的例子,这样我们可以有一个直观的印象。从这个例子我们可以看到OpenGL可以做什么,当然这个例子只做了很简单的一件事--绘制一个彩色的三角形。除此以外,我们还可以看到典型的OpenGL程序结构及openGL的运行顺序。 例1:本例在黑色的背景下绘制一个彩色的三角形,如图一所示。

图一:一个彩色的三角形首先创建工程,其步骤如下:

1)创建一个Win32 Console Application。 2)链接OpenGL libraries。在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上OpenGL32.lib GLu32.lib GLaux.lib 3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。 现在你可以把下面的例子拷贝到工程中去,编译运行。你可以看到一个彩色的三角形。 我们先看看main函数。函数中以glut开头的函数都包含在glut.h中。GLUT库的函数主要执行如处理多窗口绘制、处理回调驱动事件、生成层叠式弹出菜单、绘制位图字体和笔画字体,以及各种窗口管理等任务。 ·glutInit用来初始化GLUT库并同窗口系统对话协商。 ·glutInitDisplayMode用来确定所创建窗口的显示模式。本例中的参数GLUT_SINGLE 指定单缓存窗口,这也是缺省模式,对应的模式为GLUT_DOUBLE 双缓存窗口。参数GLUT_RGB指定颜色RGBA模式,这也是缺省模式,对应的模式为GLUT_INDEX 颜色索引模式窗口。 ·glutInitWindowSize初始化窗口的大小,第一个参数为窗口的宽度,第二个参数为窗口的高度,以像素为单位。 ·glutInitWindowPosition设置初始窗口的位置,第一个参数为窗口左上角x的坐标,第二个参数为窗口左上角y的坐标,以像素为单位。屏幕的左上角的坐标为(0,0),横坐标向右逐渐增加,纵坐标向下逐渐增加。 ·glutCreateWindow创建顶层窗口,窗口的名字为扩号中的参数。 ·background() 这是自己写的函数,设置背景。其实这个函数中的语句可以写在display 函数中,但为了使功能块更加清晰,所以把背景这一部分单独提出来。 ·glutReshapeFunc注册当前窗口的形状变化回调函数。当改变窗口大小时,该窗口的形状改变回调函数将被调用。在此例中就是myReshape指定形状变化函数。 ·glutDisplayFunc注册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的的显示回调函数。在此例中的mydisplay就是显示回调函数,显示回调函数不带任何参数,它负责整个图像层的绘制。我们的大部分工作将集中在这个函数中。 ·glutMainLoop进入GLUT事件处理循环。glutMainLoop函数在GLUT程序中最多只能调用一次,它一旦被调用就不再返回,并且调用注册过的回调函数。所以这个函数必须放在注册回调函数的后面,此例中为glutReshapeFunc,glutDisplayFunc。

(完整版)Matlab基本语法教案

第二章基本语法 2.1 MATLAB的矩阵、变量与表达式 在MATLAB系统中,只管理着一种对象---矩阵(包括复数矩阵),任何数量在MATLAB 中是作为1x1的矩阵来处理的。 一、矩阵的创建: 1. 在MATLAB中创建矩阵的原则: (1) 矩阵元素必须写在“[]”内; (2) 矩阵的同一行之间用空格或“,”分隔; (3) 矩阵的行与行之间用分号或回车符分隔; (4) 矩阵的尺寸不必预先定义; (5) 矩阵元素可以是数值、变量、表达式或函数。 2. 创建矩阵的四种方法。 (1) 在命令窗口直接输入: 如输入:A=[1,2,3;4,5,6;7,8,9] 则显示:A= 1 2 3 4 5 6 7 8 9 也可用空格代替逗号,用回车代替分号: 如上例:A=[1 2 3 4 5 6 7 8 9] 则显示:A= 1 2 3 4 5 6 7 8 9 (2) 由M文件创建矩阵: 有时编程需要用M文件创建矩阵。或者当矩阵尺寸较大时,可以按矩阵的输入方式编辑一个M 文件(可用循环程序来做),在命令窗口直接执行该文件,即可将矩阵调入工作空间。 (3) 由函数创建矩阵: 对于一些特殊的矩阵,可以利用MATLAB的内部函数或用户自定义函数创建矩阵。 如diag()函数可生成对角阵。ones(m,n) ; zeros(m,n) (4) 通过数据文件创建矩阵: save 文件名(其中,文件名是*.mat文件) load 文件名例:工作目录下有temp.mat文件,可以执行load temp

3. 复数矩阵表示 (1) 复数表示 复数的虚根单位用i,j表示,即:z=3+4i或z=3+4j. 例如输入z=3+4i 输入z=3+4j 得到:得到: z = z = 3.0000 + 4.0000i 3.0000 + 4.0000i (2) 复数矩阵 A=[1 2;3 4]+i*[5 6;7 8] 或者A=[1+5i 2+6i;3+7i 4+8i],都得到: A = 1.0000 + 5.0000i 2.0000 + 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i 二、MATLAB的变量和表达式 1.变量名命名规则 ?可以是字母、数字或下划线,但第一个字符必须是字母。 ?长度<=31 ?分辨大小写的,M和m是两个变量。 ?无须对变量的类型进行说明,当需要使用一个新变量时,只须直接对其赋值即可。 2.表达式则是由运算符、函数调用、变量名以及特殊字符组成的式子。 3.MATLAB中基本的赋值语句为: (1) 形式一:变量名=表达式 将表达式的结果赋给变量名(表达式的运算结果都是一个矩阵)。 (2) 形式二:表达式 计算表达式的值,将其值赋给MATLAB的永久变量ans。 上面两种形式,当表达式由分号“;”结束时,变量结果不显示。当表达式由逗号“,”或换行号结束,则将结果显示出来。 注: 1)MATLAB中有几个变量不能被clear清除,称永久变量。(其他变量名最好不要与此同)。即ans:当不指明某一语句的计算结果赋给哪个变量时,系统自动将该计算结果赋给ans; eps:计算机能产生的绝对值最小的浮点数;

关于回调函数的几个例子(c)

以下是一个简单的例子。实现了一个repeat_three_times函数,可以把调用者传来的任何回调函数连续执行三次。 例 1. 回调函数 /* para_callback.h */ #ifndef PARA_CALLBACK_H #define PARA_CALLBACK_H typedef void (*callback_t)(void *); extern void repeat_three_times(callback_t, void *); #endif /* para_callback.c */ #include "para_callback.h" void repeat_three_times(callback_t f, void *para) { f(para); f(para); f(para); } /* main.c */ #include #include "para_callback.h" void say_hello(void *str) { printf("Hello %s\n", (const char *)str); } void count_numbers(void *num) { int i; for(i=1; i<=(int)num; i++) printf("%d ", i); putchar('\n');

} int main(void) { repeat_three_times(say_hello, "Guys"); repeat_three_times(count_numbers, (void *)4); return 0; } 回顾一下前面几节的例子,参数类型都是由实现者规定的。而本例中回调函数的参数按什么类型解释由调用者规定,对于实现者来说就是一个void *指针,实现者只负责将这个指针转交给回调函数,而不关心它到底指向什么数据类型。调用者知道自己传的参数是char *型的,那么在自己提供的回调函数中就应该知道参数要转换成char *型来解释。 回调函数的一个典型应用就是实现类似C++的泛型算法(Generics Algorithm)。下面实现的max函数可以在任意一组对象中找出最大值,可以是一组int、一组char或者一组结构体,但是实现者并不知道怎样去比较两个对象的大小,调用者需要提供一个做比较操作的回调函数。 例 2. 泛型算法 /* generics.h */ #ifndef GENERICS_H #define GENERICS_H typedef int (*cmp_t)(void *, void *); extern void *max(void *data[], int num, cmp_t cmp); #endif /* generics.c */ #include "generics.h" void *max(void *data[], int num, cmp_t cmp) { int i; void *temp = data[0];

实验二 MATLAB基本语法(1)

实验二 MATLAB基本语法(1) (变量及其赋值,运算符与数学表达式) 1、实验目的 1)掌握MATLAB的变量及其赋值方法; 2)掌握MATLAB的运算符与数学表达式的基本用法; 2、实验内容 2.1 矩阵及其元素的赋值 2.1.1 变量(即矩阵,下同)的赋值 x1=[1 2 3 4] % 空格作为元素间分隔符 x2=[5,6,7,8] % 逗号作为元素间分隔符 x3=[1,2;3,4;5,6] % 分号作为矩阵行分界符 x4=[2*3,4-5,3^2] % 表达式为矩阵元素赋值 2.1.2 变量名 A=[1,2,3,4,5] a=[1 2 3 4 5] B=a+A % a和A不是同一个变量 2.1.3 元素的标注 w=[1 2 3 4;4 5 6 7;7 8 9 10] w(2,3) % 查看第2行、第3列的结果,注意下标从1开始 2.1.4 矩阵的扩充 w(5,6)=1.2345 % 为原矩阵不存在的元素赋值,矩阵扩充到能容纳该元素

2.1.5 整行(列)赋值 w(4,:)=[1,2,3,4,5,6] % (4,:)表示第4行的所有元素 w(:,6)=[5;6;7;8;9] % (:,6)表示第6列的所有元素 2.1.6 整行清除: w([4,5],:)= [] % 第4,5行变为空矩阵 2.1.7 矩阵的拼接 X1=[1,1,1; 2,2,2];X2=[3,3; 4,4];X3=[5;5];X4=[6,6,6,6; 7,7,7,7] XX=[X1,X2;X3,X4] % 矩阵拼接。注意按行对齐进行拼接 2.1.8 抽取部分 X =[1,2,3,4,5;6,7,8,9,0;3,3,3,3,3;4,4,4,4,4;5,5,5,5,5] Y1=X([1,2,5],[2,4]) Y2=X([2,4],[1,2,3]) 2.1.9 等间隔赋值 ii=0:1:10 % 格式为初值:步长:终值 2.1.10 特殊矩阵和数组 a=eye(3,4) % 单位矩阵 b=eye(size(a)) % 单位矩阵 c=size(a) % 测矩阵的大小 d=zeros(3) % 零矩阵 e=zeros(2,4) % 零矩阵 f=ones(4) % 全1矩阵 h=ones(3,4) % 全1矩阵 C=rand(3) % 均匀分布随机矩阵 C=rand(3,5) % 均匀分布随机矩阵 D=randn(3) % 正态分布随机矩阵(均值=0,方差=1) D=randn(3,6) % 正态分布随机矩阵(均值=0,方差=1)

一种使类成员函数成为 Windows 回调函数的方法

问题:一种使类成员函数成为Windows 回调函数的方法( 积分:100, 回复:62, 阅读:3393 ) 分类:Object Pascal ( 版主:menxin, cAkk ) 来自:savetime, 时间:2004-6-20 2:41:00, ID:2672562 [显示:小字体| 大字体] 一种使类成员函数成为Windows 回调函数的方法 https://www.360docs.net/doc/dc720141.html, savetime2k@https://www.360docs.net/doc/dc720141.html, 2004.6.20 本文排版格式为: 正文由窗口自动换行;所有代码以80 字符为边界;中英文字符以空格符分隔。 未经作者同意请勿在在任何公共媒体转载 大富翁satanmonkey 提出一个问题:HOOK 的时候,那个回调函数怎么弄才能做成类的成员?现在回调函数不能是类成员函数,访问不了类的成员变量。 https://www.360docs.net/doc/dc720141.html,/delphibbs/dispq.asp?lid=2624773 后来又在另一篇贴子上也看到类似的问题,看来解决这个问题还有点用(我现在还不知道这有什么用处),所以趁着今天周末思考一下。 (太想睡了,下面只好草率地说明,如有不清楚请提问,或者日后有空再详作解释) 一开始我的想法是在类成员的回调函数内部复制参数的值,差不多理顺了,后来发现如果回调函数有返回值时,这种方法不行... 只好重新开工,用手工编制机器码的方法完成,其中查询JMP $00001111 这样的立即数跳转机器指令花了一个小时,结果是没有找到,只好以JMP [$00001111] 这个代码代替。如果有谁知道前一种跳转指令的机

matlab在概率统计中的应用实例

关于全国受旱灾土地总面积的数理分析 提出问题:下表是从1990年至2010年全国因干旱而受灾的土地总面积(单位:千公顷)数。(数据来源于全国统计局官网) 试解决一下问题: (1)计算所给样本的均值与标准差; (2)检验在显著水平为0.05的情况下,全国每年因干旱而受灾的土地总面积是否服从正态分布? (3)如果服从正态分布,用极大似然估计法对未知参数μ和σ作出估计; (4)若年受旱灾总面积大于35000千公顷即为重灾年,根据估计出的μ值和σ值,计算当年为重灾年的概率。 分析问题:这是一个样本均值和标准差的计算以及正态性检验和计算的一系列问题。对于此类问题可以应用数学软件MATLAB进行处理,应用MATLAB可以很容易的计算出均值及标准差,此外,采用Jarque-Beran检验即可知道其是否服从正态分布,并估计出总体的均值μ和标准差σ。 解决问题:下面计算样本的均值和标准差 MATLAB程序代码如下 clear

X=[18175 24917 32981 21097 30423 23455 20152 33516 14236 30156 40541 38472 22124 24852 17253 16028 20738 29386 12137 29259 13259]; [h,stats]=cdfplot(X) 运行程序后,输出如下 h =152.0022 stats = min: 12137 max: 40541 mean: 2.4436e+004 median: 23455 std: 8.1234e+003 从输出结果可看出,样本的最小值为12137,最大值为40541,

(完整版)Matlab概率论与数理统计

Matlab 概率论与数理统计 、matlab 基本操作 1. 画图 【例01.01】简单画图 hold off; x=0:0.1:2*pi; y=sin (x); plot(x,y, '-r'); x1=0:0.1:pi/2; y1=s in( x1); hold on; fill([x1, pi/2],[y1,1/2], 'b'); 【例01.02】填充,二维均匀随机数 hold off ; x=[0,60];y0=[0,0];y60=[60,60]; x1=[0,30];y1=x1+30; x2=[30,60];y2=x2-30; plot(x,y0, 'r' ,y0,x, plot(x1,y1, 'r' ,x2,y2, yr=u nifrnd (0,60,2,100); plot(yr(1,:),yr(2,:), axis( 'on'); axis( 'square' ); axis([-20 80 -20 80 ]); xv=[0 0 30 60 60 30 0];yv=[0 30 60 60 30 0 0]; fill(xv,yv, 'b'); hold on ; 'r' ,x,y60, 'r' ,y60,x, 'r') 'r'); 'm.')

2. 排列组合 k C=nchoosek(n,k) : C C n ,例 nchoosek(5,2)=10, nchoosek(6,3)=20. prod(n1:n2):从 n1 至U n2 的连乘 【例01.03】至少有两个人生日相同的概率 365 364|||(365 rs 1) rs 365 365 364 365 rs 1 365 365 365 rs=[20,25,30,35,40,45,50]; %每班的人数 p1= on es(1,le ngth(rs)); p2=on es(1,le ngth(rs)); %用连乘公式计算 for i=1:le ngth(rs) p1(i)=prod(365-rs(i)+1:365)/365A rs(i); end %用公式计算(改进) for i=1:le ngth(rs) for k=365-rs(i)+1:365 p2(i)=p2(i)*(k/365); end ; end %用公式计算(取对数) for i=1:le ngth(rs) p1(i)=exp(sum(log(365-rs(i)+1:365))-rs(i)*log(365)); end 公式计算P 1 n!C N N n N! 1 (N n)! 1 N n N (N 1) (N n 1)

回调函数的概念及其使用

回调函数的概念及其使用

回调函数的概念及其使用 1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。 对于不同类型的语言(如结构化语言和对象语言)、平台(Win32、JDK)或构架(CORBA、DCOM、WebService),客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方(或接口提供方)在某些情况下能够主动通知客户,而回调是实现异步的一个最简捷的途径。 对于一般的结构化语言,可以通过回调函数来实现回调。回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。

在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类成为回调类,回调类的对象成为回调对象。对于象C++或Object Pascal 这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也能兼容过程语言的回调函数机制。 Windows平台的消息机制也可以看作是回调的一种应用,我们通过系统提供的接口注册消息处理函数(即回调函数),从而实现接收、处理消息的目的。由于Windows平台的API是用C语言来构建的,我们可以认为它也是回调函数的一个特例。 对于分布式组件代理体系CORBA,异步处理有多种方式,如回调、事件服务、通知服务等。事件服务和通知服务是CORBA用来处理异步消息的标准服务,他们主要负责消息的处理、派发、维护等工作。对一些简单的异步处理过程,我们可以通过回调机制来实现。 下面我们集中比较具有代表性的语言(C、Object Pascal)和架构(CORBA)来分析回调的实现方式、具体作用等。 2 过程语言中的回调(C) 2.1 函数指针 回调在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针,请看下面的例子: void Func(char *s);// 函数原型 void (*pFunc) (char *);//函数指针 可以看出,函数的定义和函数指针的定义非常类似。 一般的化,为了简化函数指针类型的变量定义,提高程序的可读性,我们需要把函数指针类型自定义一下。 typedef void(*pcb)(char *); 回调函数可以象普通函数一样被程序调用,但是只有它被当作参数传递给被调函数时才能称作回调函数。 被调函数的例子:

直调、回调、异调

1. 什么是回调函数 回调函数(callback Function),顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: 1、属于工作流的一个部分; 2、必须按照工作流指定的调用约定来申明(定义); 3、他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能; 2. 回调机制 回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。 ======================================================= java回调机制: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。 同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用; 回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口; 异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。 回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。 ======================================================== 用Java里的例子: package callbackexample; public interface ICallBack { //需要回调的方法public void postExec(); } 另外的一个类: package callbackexample; public class FooBar { //组合聚合原则 private ICallBack callBack; public void setCallBack(ICallBack callBack) { this.callBack = callBack; doSth(); } public void doSth() { callBack.postExec(); } } 第二个类在测试类里面,是一个匿名类: package callbackexample; public class Test { public static void main(String[] args) { FooBar foo = new FooBar(); foo.setCallBack(new

MATLAB 概率分布函数

统计工具箱函数 Ⅰ-1 概率密度函数 函数名对应分布的概率密度函数 betapdf贝塔分布的概率密度函数 binopdf二项分布的概率密度函数 chi2pdf 卡方分布的概率密度函数exppdf指数分布的概率密度函数 fpdf f分布的概率密度函数 gampdf伽玛分布的概率密度函数 geopdf几何分布的概率密度函数 hygepdf超几何分布的概率密度函数 normpdf正态(高斯)分布的概率密度函数lognpdf对数正态分布的概率密度函数 nbinpdf负二项分布的概率密度函数 ncfpdf非中心f分布的概率密度函数 nctpdf非中心t分布的概率密度函数 ncx2pdf 非中心卡方分布的概率密度函数poisspdf泊松分布的概率密度函数 raylpdf雷利分布的概率密度函数 tpdf学生氏t分布的概率密度函数 unidpdf离散均匀分布的概率密度函数 unifpdf连续均匀分布的概率密度函数 weibpdf威布尔分布的概率密度函数 Ⅰ-2 累加分布函数 函数名对应分布的累加函数 betacdf贝塔分布的累加函数 binocdf二项分布的累加函数 chi2cdf 卡方分布的累加函数 expcdf指数分布的累加函数 fcdf f分布的累加函数 gamcdf伽玛分布的累加函数 geocdf几何分布的累加函数 hygecdf超几何分布的累加函数 logncdf对数正态分布的累加函数 nbincdf负二项分布的累加函数 ncfcdf非中心f分布的累加函数 nctcdf非中心t分布的累加函数 ncx2cdf 非中心卡方分布的累加函数normcdf正态(高斯)分布的累加函数poisscdf泊松分布的累加函数 raylcdf雷利分布的累加函数 tcdf学生氏t分布的累加函数 unidcdf离散均匀分布的累加函数 unifcdf连续均匀分布的累加函数

相关文档
最新文档