如何在不使用任何循环的情况下制作函数y = sin(x) + sin(3x) + ... + sin(100x)
的简单图?
答案 0 :(得分:3)
是的,可以通过调用bsxfun
来生成每个正弦曲线应用的正确点,然后使用sum
调用对每个点的所有正弦曲线求和。然后你会正常地绘制它。
想到这样的事情:
x = -5:0.01:5; %// Define x points here
pts = bsxfun(@times, 1:2:101, x(:)); %// Generate a grid of points
y = sum(sin(pts), 2); %// Compute the y values for each x value
plot(x(:),y); %// Plot the result
第一行代码生成一组您希望绘制的x
值。下一行代码生成一个2D网格点。每行对x, 3*x, 5*x, ..., 101*x
中的一个特定点应用x
。每列代表一个唯一的x
点。因此,当我们使用sum
(下一行)时,我们还将sin
运算符应用于网格上的每个单独点,然后继续并对每一行求和以生成每个点的输出唯一的x
点。然后我们绘制结果。
请注意,我使用x(:)
展开x
向量,使其成为列向量。这是代码工作所必需的。这也允许您使x
行或列向量,代码仍然有效。
这是我得到的情节:
答案 1 :(得分:0)
使用cumsum
。
octave:1> x = 1;
octave:2> sin(x)
ans = 0.841470984807897
octave:3> sin(x*1)
ans = 0.841470984807897
octave:4> sin(x*1) + sin(x*2)
ans = 1.75076841163358
octave:5> sin(x*1) + sin(x*2) + sin(x*3)
ans = 1.89188841969345
octave:6> cumsum(sin(x * (1:3)))
ans =
0.841470984807897 1.75076841163358 1.89188841969345