如何在没有循环的情况下创建表示正弦曲线总和的图?

时间:2015-10-08 19:14:03

标签: matlab plot vectorization

如何在不使用任何循环的情况下制作函数y = sin(x) + sin(3x) + ... + sin(100x)的简单图?

2 个答案:

答案 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行或列向量,代码仍然有效。

这是我得到的情节:

enter image description here

答案 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