Matlab分段函数矩阵乘法维度错误问题求助
问题分析与解决方案
错误原因
你的代码存在两处关键问题:
- 未正确更新时间变量
t:t/1000;仅计算结果但未赋值回t,导致t仍是1到1000的整数序列,代入sin(2*pi*1000*t)后结果全为0(2π*1000*t是2π的整数倍,正弦值为0),完全不符合预期输入信号。 - 矩阵乘法误用:
(vi-0.72)*exp(-t)使用了矩阵乘法*,但vi-0.72和exp(-t)是同维度行向量,矩阵乘法要求第一个矩阵列数等于第二个矩阵行数,此处不满足,必须用**元素级乘法.***实现对应元素相乘。
修正后的代码
t = 1:1000; t = t / 1000; % 将时间序列修正为0.001到1的范围 vi = sin(2*pi*1000*t); VD = 0.72; % 替换为元素级乘法.* vo = piecewise(vi < VD, 0, vi > VD, (vi - VD) .* exp(-t));
兼容性替代方案
若你的MATLAB版本不支持piecewise处理数值数组,可使用逻辑索引实现分段函数,兼容性更好:
t = 1:1000; t = t / 1000; vi = sin(2*pi*1000*t); VD = 0.72; vo = zeros(size(vi)); % 初始化输出数组 idx = vi > VD; % 筛选vi大于VD的索引 vo(idx) = (vi(idx) - VD) .* exp(-t(idx));
内容的提问来源于stack exchange,提问作者A Burial At Ornans
相关产品推荐
相关产品推荐

