在Octave

时间:2015-09-09 09:42:25

标签: octave

我写了一个简短的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 的二维矩阵?

2 个答案:

答案 0 :(得分:8)

与Octave中的许多其他函数一样,

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

看看是否有效。