我试图在单个图上绘制一个分段函数(形式为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)的变化
非常感谢任何有关我应如何处理此事的建议或帮助!
答案 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开始。