matlab中cell数组问题
发布网友
发布时间:2022-04-21 08:37
我来回答
共2个回答
热心网友
时间:2023-08-05 06:04
这其实不是你对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
热心网友
时间:2023-08-05 06:04
a{k}(1) = a{mod(10,size(a,1))+1, (k-mod(10,size(a,1)))/size(a,1)}(1)