matlab 元胞调用方法你真的理解了么?
Posted 流浪若相惜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 元胞调用方法你真的理解了么?相关的知识,希望对你有一定的参考价值。
元胞在引用时,和()到底有什么区别?
注意:大括号用于表示元胞的内容,小括号表示指定的元胞对象。
举例说明这句话的意思
r=1,2,3
r =
1×2 cell 数组
[1] 1×2 cell
>> r1 %输出的是元胞内容
ans =
1
>> r2
ans =
1×2 cell 数组 % 输出的是元胞数组,且每个元素都是元胞
[2] [3]
>> r2(1)
ans =
1×1 cell 数组
[2]
>> s=r2(1)
s =
1×1 cell 数组 %仍旧是元胞对象 s是cell类型
[2]
>> m=r(1,2)
m =
1×1 cell 数组 %元胞对象
1×2 cell
>> n=r21 %元胞内容 n是double类型
n =
2
>> q=n*2
q =
4
>> o=s*2
未定义与 'cell' 类型的输入参数相对应的运算符 '*'。
>>
当我们保存函数句柄的时候,调用函数时仍旧是***调用的函数内容,而非对象***:
r=@objfun,@dee,@nsgaopt
r =
1×2 cell 数组
1×2 cell 1×1 cell
K>> r(1)
ans =
1×1 cell 数组 % 表示@objfun,@dee这个元胞对象
1×2 cell %有两个要素
K>> r1
ans =
1×2 cell 数组 %第一个元胞元素中的内容
@objfun @dee
K>> r1(1)
ans =
1×1 cell 数组 %第一个元胞中第一个元素对象
@objfun
当函数调用时仍旧同理:
>> r=@objfun,@dee,@nsgaopt
r =
1×2 cell 数组
1×2 cell 1×1 cell
>> r11
ans =
包含以下值的 function_handle:
@objfun
>> r1(1)
ans =
1×1 cell 数组
@objfun
但是如何函数有参数,怎么办呢?
r=struct('initfun', @der,@dd,@rr);
uu=r.initfun1(1,2,3); %调用der ,并假设三个函数均有有三个参数
uu=r.initfun3(1,2,3); %调用rr
% ②
r=struct('initfun', @der,@dd,@rr); %错误写法
%③
r=struct('initfun', @der,@dd,@rr); %错误写法
后边两种写法为什么不对呢?
第二种写法的意思时initfun对应着一个元胞@der,@dd,@rr,但结构体中name和value是一一对应的,initfun对应了三个值,显然是不合理的;但是r是1*3的结构体数组,有三个值,每个值都是一个inifun的属性对象,选择其中的任一个与inifun对应就好了,因此可以写成
r(1).initfun(1,2,3)
但这样的写法是不是很怪,相当于initfun属性有三个对象,分别是r(1),r(2),r(3)
第三种写法同第二种方法,相当于@der,@dd和@rr是两个initfun对象,若调用则需写成
r(1).initfun1 %内容是@der
总结:第二种和第三种写法,相当于生成了多个属性对象,这与struct中name与value一一对应关系有点相悖,因此,不建议第二种和第三种写法。
推荐写法:
r=struct('initfun', @der,@dd,@rr);
r.initfun1(1,2,3) % 调用
以上是关于matlab 元胞调用方法你真的理解了么?的主要内容,如果未能解决你的问题,请参考以下文章