在MATLAB上绘制“锯齿状”功能

时间:2017-03-20 23:27:15

标签: matlab plot piecewise

我试图在单个图上绘制一个分段函数(形式为y =αx+β),这样对于x轴上的不同区域,我有不同的α和β值。功能

我想让这些步骤的位置(在x轴上)可以随意修改,而不是具有预定数量的这种片段功能。在绘制时,理想情况下应该看起来像不同斜率和截距的线组,每个线以间距分隔。因此,如果我的间距向量有10个元素,我编写了我的代码,以便相应地为x轴上的不同区域提供10个不同的片段函数。

这是我写的代码。

x = linspace(0,100,10000);
y = zeros(1,10000);
spacing = 0:10:100;

alpha = linspace(1,3,length(spacing)); %setting arbitrary upper lim
beta = linspace(1,5,length(spacing));




for j = 1:length(spacing)
    for i=1:10000
        if x(i) <= spacing(j)
            y(i) = alpha(j)*x(i) + beta(j);
            i = i + 1;
        else
            j = j + 1;


        end  
    end



end

plot(x,y)

然而,当我绘制这个时,我会得到一个斜率。由于else语句中的j = j + 1迭代器,它似乎没有认识到间距(j)的变化

enter image description here

非常感谢任何有关我应如何处理此事的建议或帮助!

1 个答案:

答案 0 :(得分:1)

您应首先迭代x,然后再遍历spacing。因为对于x中的每个元素,您都试图找到正确的间隔。然后,一旦找到该间隔,您应该移动到x的下一个元素并停止迭代spacing。您可以使用brake执行此操作。如果您不这样做,那么它将始终选择最后一个间隔since x(i) <= spacing(end)。请参阅以下代码:

x = linspace(0,100,10000);
y = zeros(1,10000);
spacing = 0:10:100;

alpha = linspace(1,3,length(spacing)); %setting arbitrary upper lim
beta = linspace(1,5,length(spacing));

for i=1:10000
    for j = 1:length(spacing)
        if x(i) <= spacing(j)
            y(i) = alpha(j)*x(i) + beta(j);
            break
        end  
    end    
end

plot(x,y)
ylim([0 max(y)])

最后一行是将y设置为从0开始。