作业帮 > 综合 > 作业

matlab中cell数组的疑惑

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/27 23:25:52
matlab中cell数组的疑惑
function testvar(varargin)
for k=1:length(varargin)
x(k)=varargin{k}(1); % 这两句到底是怎么赋值的?
y(k)=varargin{k}(2); % 为什么赋值后x y的类型是 cell
end
xmin=min(0,min(x)); % 这句提示有错误,说min函数对cell没有定义
ymin=min(0,min(y));
figure
axis([xmin fix(max(x))+3 ymin fix(max(y))+3]) % fix round toward zero
plot(x,y)
以上是我的程序,我自己定义了一组数据来测试这个函数 a=[1 2 3];b=[3,4];c={a,b;a,b} ;testvar(c) ;然后运行错误,提示说 “Undefined function 'min' for input arguments of type 'cell ” .然后我把x y 输出后发现x y是 cell 类型的.我就不懂 x(k)=varargin{k}(1);
y(k)=varargin{k}(2) ; 这两句是怎么赋值的?我的理解是比如k=1时 ,varargin{1}(1) 为数组a的第一个元素,也就是1啊?这样到最后循环结束 x y应该是普通数组啊,为什么成 cell 型的了呢?
我对 varargin 的使用不太熟悉,小弟目前没有分,只能给这么多了,
这其实不是你对cell数组的理解问题
而是你对varargin使用方法理解的问题
varargin是可以接受一串参数列表的变量
你不需要在调用函数之前将输入参数放到cell矩阵
你只要像一般的函数调用那样,用逗号分开多个输入参数
系统会自动地将参数列表按行向量cell矩阵的方式传递给varargin
也就是说你只要定义function out=fun(varargin)
你可以fun(a,b,c,d,e)这样调用fun函数
然后在fun函数内部varargin={a,b,c,d,e};
这样的设置,是使一些输入参数个数不确定的函数能够正确调用输入参数
例如plot函数
plot(x,y);
plot(x,y,'linewidth',1,'colro','r');
甚至还可以设置线型,符号形状,符号大小,符号边框颜色,符号填充颜色等参数
还有很多matlab系统定义的函数,有很多可以设置的属性,
但很多时候我们不需要全部都设置,有时候需要设置多一点,有时候设置少一点
实际上这些函数后面的输入都是以varargin传递到函数里面的
在函数里面再根据varargin的长度,取出这些参数来进行设置
你把a,b打包成为c一个cell矩阵
然后掉用testvar(c),实际上varargin={c},是一个长度只有1的cell数组
你可以输出x,y,你也可以输出length(varargin)看看是不是1
那么varargin{k}(1)实际上就是c(1),所以也还就是cell数组
之所以出现这样的错误,是你还没有搞清楚varargin的用法
实际varargin会对整个输入参数列表用{}也就是cell数组包装起来
就因为多包装了一层,所以你认为应该是数值的值其实还有一层cell每解包,还是cell