Matlab编程学习记录

2020年的五一假期只能宅在家里,无所事事看看代码。在这里做一个记录,免的忘记了。matlab作为界面编程的工具十分简单,而且也超级实用。快速的方法是用GUIDE或者APP Design来做,至于拖动几个按键加几个坐标,则没有必要写下来。主要的是要理解编程的框架,理解一些常用的函数,那么才能做出有个性的软件。

  从编程框架上来说,非常类似于MFC的编程,各种窗体和对象都是基于类来实现,每一个对象都有一个句柄。Uicontrol,uitab,uipanel,uiaxes可以通过查看help帮助文档,实现各种对象,可以在坐标轴上面画各种图案,这些控件的参数可以指定父类,可以指定是按键还是文本编辑框,可以指定窗体的颜色,可以指定消息响应函数。

  1. isfield函数,从下面的例子里面可以看到,他的作用就是判断某个数据元组是否在给定的变量里面,真值为1,假值为0。可以在函数内部判断函数参数名称或者类型使用。

          S.x = linspace(0,2*pi);

          S.y = sin(S.x);

          S.title = 'y = sin(x)'

          field = {'x','y','z','title','error'};

          TF = isfield(S,field)

          TF = 1x5 logical array

                1   1   0   1   0

  1. feval函数,从下面的例子可以看到,他接受变量形式的执行函数,特别适合于多个控件的消息响应函数,把函数名称通过变量形式传递给唯一的处理模块,这样就实现了批量处理函数的功能,不用每个函数都写一大堆的代码。

            fun = 'round';

            x1 = pi;

           y = feval(fun,x1)

           y = 3

         Round the value of pi to two digits to the right of the decimal point.

         x2 = 2;

         y = feval(fun,x1,x2)

          y = 3.1400

 

  1. setappdata和getappdata函数,他们两者是成对使用,大致的作用就是把函数体里面的变量存入系统,当调用的时候再从系统里面调出来,省去了把所有参数设置成全局变量的麻烦。如果全局变量满天飞,那么代码很不好管理。

         Create a figure window. Then, get the current time using the date function.

         f = figure;

         val = date

        val =

                         23-Dec-2014

         Store the contents of val using the setappdata function. In this case, val is stored in the figure object using the name                    identifier, 'todaysdate'.

                         setappdata(f,'todaysdate',val);

              Retrieve the data and display it.

                        getappdata(f,'todaysdate')

                  ans =  Dec-2014

  1. isa函数,他主要是判断数据类型,放在函数体里面判断输入的参数是否合法,可以增加健壮性。

                A = 3.1416;

                tf = isa(A,'double')

                tf = logical

                               1

                         'single' 单精度数

                         'double' 双精度数

                         'int8' 有符号 8 位整数

                          'int16' 有符号 16 位整数

                           'int32' 有符号 32 位整数

                           'int64' 有符号 64 位整数

                           'uint8' 无符号 8 位整数

                           'uint16' 无符号 16 位整数

                           'uint32' 无符号 32 位整数

                           'uint64' 无符号 64 位整数

                            'logical' 逻辑值 1 (true) 或 0 (false)

                           'char' 字符

                            'string' 字符串数组

                            'struct' 结构体数组

                            'cell' 元胞数组

                             'table'

                             'function_handle' 函数句

 

  1. cla清除坐标区,若指定了句柄,则只对那个句柄的坐标区起作用。clf清除图窗里面的变量。

                     clf deletes all children of the current figure with visible handles

                    cla deletes all children of the current axes with visible handles and resets the current axes ColorOrder and LineStyleOrder

  1. gca和gcf分别是获取当前的坐标区和图窗的句柄,只要得到了句柄,那么剩下的动作该怎么做都可以了。相当于拿到了房间的钥匙。
  2. mlock和munlock是锁定变量和解锁变量,这样可以在执行clear命令的时候免遭伤害。就像提前吃解药,这样防毒只能杀死敌人,而自己不受影响。
  3. ancestor - 图形对象的父级此 MATLAB 函数 返回 h 的最近父级的句柄。type 可以是:

             p = ancestor(h,type)

               p = ancestor(h,type,'toplevel')

  1. @函数   At.  The at symbol is used to create a function_handle         他的作用是获取函数的句柄,方法就是把函数名称放在@的后面。

             h=@sin

              h =

                   @sin

              >> h(pi/4)

                    ans =

                  0.7071

            第二种用法:函数句柄 = @(输入参数列表)运算表达式。显然这也是函数句柄的一种形式,只是这个函数没有名称,但             是他有详细的函数体定义。得到的也是函数的句柄。之后可以执行句柄就是执行这个函数本身一样。原本这样定义并没有            什么实际意义,就像金属货币换成纸币一样,方便里流通和管理。

                      % In-line correction functions to dpt due to range violations

                      xminc = @(dpt) [range(1) - initial_extent(1) dpt(2)];

                      xmaxc = @(dpt) [range(2) - (initial_extent(1) + initial_extent(3)) dpt(2)];

                      yminc = @(dpt) [dpt(1) range(3) - initial_extent(2)];

                      ymaxc = @(dpt) [dpt(1) range(4) - (initial_extent(2) + initial_extent(4))];

 

  1. set和get,他们可以执行一堆的操作,至于执行什么功能,是由他的句柄决定定,如果句柄是一个坐标,那么传递坐标轴的信息,可以进行相关的操作,如果句柄是按键,那么可以设置按键的各种参数,不一而足。
  2. Linspace和meshgrid分别生成二维和三维的数据组。这在初始化的时候应该能够用的上。

            [X,Y] = meshgrid(-8:.5:8);

              R = sqrt(X.^2 + Y.^2) + eps;

              Z = sin(R)./R;

              mesh(X,Y,Z)

 

               y1 = linspace(-5,5,7)

               y1 = 1×7

                 -5.0000   -3.3333   -1.6667         0    1.6667    3.3333    5.0000

 

  1. patch和surf可以用来绘制多边形,如果把多边形的大小无限小,那么类似于微积分的定义,可以绘制任意的图案,然后我们把每一个多边形填充不同的颜色,那么理论上可以绘制各种图案。
  2. guidata函数,可以存储APP信息,也可以获取APP信息;
  3.    guidata Store or retrieve application data.

    guidata(H, DATA) stores the specified data in the figure's
        application data.
     
        H is a handle that identifies the figure - it can be the figure
        itself, or any object contained in the figure.
     
        DATA can be anything an application wishes to store for later
        retrieval.
     
        DATA = guidata(H) returns previously stored data, or an empty
        matrix if nothing was previously stored.

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值