在 Octave 中按列对单​​行向量求和

Summing a single row vector by column in Octave

我写了一个简短的 Octave 脚本,它为 k = 1..n 项绘制函数 sum(sin(2k-1)/(2k-1))。 (我正在尝试模拟连续项如何使输出收敛为方波。

% 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);

对于项 > 1,它工作正常(即 sum() 函数 returns 一个包含每列总和的向量)。但是当项 == 1 时(即它应该只画一个正弦wave) sum() 函数计算行的总和,只是 returns 一个标量。

即使只有一行,我如何使用 sum() 函数对每一列进行总计,或者我如何重塑或切片或任何行向量,而不是一维向量维度 n 它实际上变成了维度 1xn?

的二维矩阵
q=sin(n*theta)./n;
if (terms == 1)
    y = q;
else
    y=sum(q);
end
plot(theta, y);

看看是否可行。

sum(),和Octave中的很多其他函数一样,默认会作用于第一个非单例维度。因此,您需要做的就是具体说明维度。来自 sum() 帮助文本:

If DIM is omitted, it defaults to the first non-singleton dimension.

因此,您需要做的就是具体说明维度,即使用 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);