【持续更新】matlab的一些奇门异术

1、查找所有引用的文件

     当你需要给别人拷贝脚本,而脚本中引用了许多自己写的或者自己找的文件时,要确定哪些文件是必须的,是一个令人头疼的问题,那么有了这个方法,就可以轻松解决了

[fList,pList] = matlab.codetools.requiredFilesAndProducts('demo.m');

2、Matlab结构体

     Matlab的结构体实际上就是一个大大的字典,试试以下代码

dic = [];
dic.('f1') = 10;
dic.('f2') = 'joker';
disp(dic);
%    f1: 10
%    f2: 'joker'

    那么,我们对结构体的操作空间又上升了,配合fieldnames,我们可以遍历整个结构体(字典)

 

3、查看 Matlab 脚本名

    mfilename

    不加入参数,获取当前函数的文件名(不带后缀.m),参数 'fullpath' 获取完整路径(仍然不带后缀)

    mfilename('fullpath')

 

【20180730更新】

4、varargin / nargin && varargout / nargout

      先说 nargin / nargout,分别对应为函数的输入输出个数,写一个函数如下

function [a, b, c, d] = test_io( e, f, g, h)
fprintf('nargin  = %d\n', nargin)
fprintf('nargout = %d\n', nargout)
a = 1;
b = 2;
c = 3;
d = 4;

    不同调用会得到不同的值,例如

     然而当输入输出个数超过定义个数范围时,就会报错

    那么这个时候可以使用 nargin / nargout 配合判断,完成输入输出,定义函数如下

function varargout = test_io_var( varargin )
fprintf('nargin  = %d\n', nargin)
fprintf('nargout = %d\n', nargout)
varargout(1:nargout) = {1};

    那么可以尝试任意多个输入输出,都没问题了

    varargin 和 varargout 为两个特定关键字,在其前面还可以增加一定数量的固定参数,比如

function [a, b, varargout] = test_io_var_append( c, d, varargin )
fprintf('nargin  = %d\n', nargin)
fprintf('nargout = %d\n', nargout)
a = 1;
b = 1;
varargout(1:nargout) = {1};

    varargin 和 varargout 均为元胞数组。对于输入参数的获取、输出参数的赋值,只要按照顺序操作即可。


5、guidata 函数完成 GUI 的参数传递

    注意这个函数主要在 GUI 中使用(guide创建),这个函数有两个形式:

    5.1 获取 handles

handles = guidata( hObject );

          这个函数获取保存在 hObject 这个组件上的所有句柄,包含这个 figure 的所有句柄,这些句柄组成一个结构体,结构体的各个 filedname 即为 guide 属性编辑器中所配置的 tag 值,对应 field 为该 tag 标记的组件句柄。

    5.2 更新 handles

guidata(hObject, handles)

          这个操作最开始是困扰我的,因为 MATLAB 函数与C++和JAVA不同,输入输出接口是可变的。guidata通过 nargin /  nargout 这种方式来调整函数的行为,当接口为 “没有输出+两个输入” 时,就会完成句柄的更新;而接口是“一个输出+一个输入”时,则完成句柄的获取。

 

6、解包 /打包( 函数传参)

      解包这个概念是学习python的时候看到的,用在这里,也是因为行为特性一致。

      如下写法,可以将 top 函数中的所有输入参数,按照顺序赋值给 level1 函数。(类似于解包)

function top(varargin)
level1(varargin{:})

function level1(varargin)

      而如下写法,则可以将 level1 函数中的所有输出,按照顺序赋值给 top 函数。(类似于打包)

function varargout = top()
[varargout{:}] = level1()


function varargout = level1()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值