让我们考虑以下表格
它来自维基百科源代码,我试图在matlab中实现
function x_square=square_wave(f);
%f-given frequency
% let time interval be too big
x_square=0;
t=0:0.001:10;
k=1:length(t);
x_square=(sin(2*pi*f*t)+sum(sin(2*pi*(2*k-1)*f*t)./(2*k-1)))*4/pi;
end
第一次似乎完全按照公式给出,但它给了我错误
>> f=1;
>> y=square_wave(f);
Error using *
Inner matrix dimensions must agree.
Error in square_wave (line 7)
x_square=(sin(2*pi*f*t)+sum(sin(2*pi*(2*k-1)*f*t)./(2*k-1)))*4/pi;
它应该是什么错误?我可能需要。*乘法,但任何方式都是正确的形式?提前谢谢
已编辑:
我已将代码更改为此
function x_square=square_wave(f);
%f-given frequency
% let time interval be too big
x_square=0;
t=0:0.001:10;
k=1:length(t);
x_square=(sin(2*pi*f*t)+sum(sin(2*pi*(2*k-1)*f.*t)./(2*k-1)))*4/pi;
end
获取图片
答案 0 :(得分:2)
基本上,你的问题减少到忽略矩阵乘法的基本规则(例如:A:1xM * B:Mx1 = C:1x1,即标量,而B:Mx1 * A:1xN = C:MxN,即a尺寸为MxN的完整矩阵,与A:1xM元素乘以B:1xM为C:1xM)。
您生成的图片由一个正弦函数(来自第一个sin()
- 项)和一个常量偏移量组成,该偏移量是向量的sum()
的结果。您使用元素乘法.*
但应使用矩阵乘法:
sum(sin(2*pi*(2*k'-1)*f*t)./((2*k'-1)*ones(1,length(t))))
所以,正确的程序是:
x_square=0;
t=0:0.001:10;
k=1:length(t);
x_square=sum(sin(2*pi*(2*k'-1)*f*t)./((2*k'-1)*ones(1,length(t))))*4/pi
其中关键是k'
将向量k
从1xM转换为Mx1。
第二个小错误是第一个sin()
- 术语已经包含在公式中,因为(2 * k-1)对于k = 1是1,所以第一个正弦曲线成分在写入时会加两次它下来了两次。