求大神给解释一下这个matlab程序

Expression={'zeros','ones','rand','magic'};
Num=2;
Output=[];
for i=1:length(Expression)
Output=[Output eval([Expression{i},'(',num2str(Num),')'])];
end
Output

尤其是这个循环体部分,

循环体被执行四次,重点看循环体语句“Output=[Output eval([Expression{i},'(',num2str(Num),')'])];”


这里有两部分:

1、Output = [Output XXX],这里的中括号表示做行方向上的拼接

(省略了逗号,实际可以写成 [Output, XXX])。

举例自己体会一下:

a = [];
b = [1 2; 3 4];
a = [a b]
c = [5 6; 7 8];
a = [a c]

输出:

a =
     1     2
     3     4
a =
     1     2     5     6
     3     4     7     8

所以这一部分代码表示不断将XXX拼接到Output的后面。

备注:

[Output, XXX]表示行方向上的拼接(可省略逗号,用空格隔开)

[Output; XXX]表示列方向上的拼接(分号不能省略)

注意逗号和分号的区别。


2、eval([Expression{i},'(',num2str(Num),')'])

eval函数的功能是将一个字符串等价转换为一个对应可执行的matlab语句,举例:

a = 3
eval('b=4')

输出:

a =
     3
b =
     4

可以发现第二句实际上就是执行一句MATLAB语句,即b=4。


回头来看看表达式[Expression{i},'(',num2str(Num),')'],只看i为1的时候,这句相当于是

['zeros','(',num2str(Num),')']

上面提到中括号内用逗号隔开是做行方向上的拼接,故中括号里面都是字符串时,实际上就是做字符串的拼接。所以i为1时,这个字符串是“zeros(2)”。


因此,可以看到这里随着i的变化,产生了四个字符串,即:

'zeros(2)'
'ones(2)'
'rand(2)'
'magic(2)'

然后调用eval

eval('zeros(2)')  -->等价于MATLAB语句zeros(2)
eval('ones(2)')   -->等价于MATLAB语句ones(2)
eval('rand(2)')   -->等价于MATLAB语句rand(2)
eval('magic(2)')  -->等价于MATLAB语句magic(2)

这下可以理解了吧,这个循环体实际上使用MATLAB自带的矩阵函数,生成了4个特殊矩阵,每个矩阵都是2x2的,最后把这4个2x2的矩阵在行方向上拼接到一起。

故最后结果是一个 2x8 的矩阵。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答