Matlab报binary operator '*' not implemented for 'cs-list'错误求助
报错原因分析
error: binary operator '*' not implemented for 'cs-list' by 'scalar' operations
该报错的核心触发原因有两点:
x为长度大于1的结构体数组:MATLAB/Octave中直接调用结构体数组的字段(如代码中的x.datarate_acquired),返回结果是逗号分隔列表(cs-list),而非字段值组成的数值数组,这种类型无法直接和标量simTime.step执行乘法运算,直接运算就会触发上述报错。propa_step字段赋值存在逻辑缺陷:你在给x(n).datarate_acquired赋值后,直接执行x.propa_step = Inf,仅会给第一个元素x(1).propa_step赋值,x(2)到x(n)的propa_step字段均未定义,后续计算simTime.step时拼接[x(:).propa_step]会包含空值,可能引发次生错误。
解决方案
根据你的业务需求选择对应修复方案即可:
- 如果你仅需要用最新追加的第n个
x元素做计算,明确指定索引即可:
data.dataAcq_step = x(n).datarate_acquired * simTime.step;
- 如果你需要计算所有
x元素对应的数据步长,先将字段值转为数值数组再运算:
% 提取所有x元素的datarate_acquired字段转为数值数组 datarate_arr = [x(:).datarate_acquired]; data.dataAcq_step = datarate_arr * simTime.step;
- 统一修复
propa_step的赋值逻辑,避免后续其他逻辑报错:
n = n+1; x(n).datarate_acquired = 12e12/(24*60*60); % data rate of onboard acquired data [bit/s] x(n).propa_step = Inf; % propagation time step [s]
内容的提问来源于stack exchange,提问作者Sreedevi Potluri
相关产品推荐
相关产品推荐

