我写了一个简短的Octave脚本,它为sum(sin(2k-1)/(2k-1))
术语绘制函数k = 1..n
。 (我试图模拟连续项如何使输出收敛到方波。
% Program to model square-wave using sum of sines
terms=3
theta=linspace(0, 6*pi, 1000);
k=[1:terms]';
n=2*k-1;
q=sin(n*theta)./n;
y=sum(q);
plot(theta, y);
对于术语>它工作正常(即sum()
函数返回包含每列总和的向量)。但是当术语== 1(即它应该只绘制一个正弦波)时,sum()
函数计算行的总和并返回一个标量。
即使只有一行,我如何得到sum()
函数来计算每列的总和,或者如何重塑或切片或任何行向量,而不是维度的一维向量< em> n 它有效地成为维度 1xn 的二维矩阵?
答案 0 :(得分:8)
sum()
默认情况下将作用于第一个非单一维度。因此,您需要做的就是具体了解维度。来自sum()
帮助文字:
如果省略DIM,则默认为第一个非单一维度。
因此,您需要做的就是维度具体,即使用sum (q, 1)
:
terms = 1
theta = linspace (0, 6*pi, 1000);
k = [1:terms]';
n = 2*k-1;
q = sin (n*theta) ./ n;
y = sum (q, 1);
plot (theta, y);
答案 1 :(得分:-1)
q=sin(n*theta)./n;
if (terms == 1)
y = q;
else
y=sum(q);
end
plot(theta, y);
看看是否有效。