在 MATLAB 上绘制 "saw-tooth like" 函数
Plotting "saw-tooth like" functions on MATLAB
我正在尝试在单个图上绘制分段函数(形式为 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 迭代器,它似乎没有意识到 spacing(j) 的变化
任何关于我应该如何处理这个问题的建议或帮助将不胜感激!
您应该首先遍历 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开始。
我正在尝试在单个图上绘制分段函数(形式为 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 迭代器,它似乎没有意识到 spacing(j) 的变化
任何关于我应该如何处理这个问题的建议或帮助将不胜感激!
您应该首先遍历 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开始。