具有保持功能的多功能图

时间:2018-01-17 21:12:59

标签: matlab plot

使用以下代码,我可以通过hold on命令绘制两个图。

x=0:0.1:10;
r1 = 1;
y1=r1 * x .^ 2;
plot( x, y1 );
hold on;
r2 = 1.5;
y2=r2 * x .^ 2;
plot( x, y2 );

但是,我正在寻找一种方法来定义r=1:0.5:2并在一个图中绘制三个图。像这样的东西

x=0:0.1:10;
r=1:0.5:2;
y=r * x .^ 2;
plot( x, y );
hold on;

但由于矩阵乘法,它不正确。

问题与内部矩阵维度有关,例如here。但我的似乎有所不同。

1 个答案:

答案 0 :(得分:4)

你非常接近。有两种方法可以做你想要的。第一种方法是在r的每个参数上使用循环和循环并绘制您的点。第二种方式(对我来说更优雅)是创建一个点矩阵并同时绘制所有这些点 - 每个r值的一个图。让我们从第一种方法开始:

使用循环

只需迭代r的每个值并绘制它:

x=0:0.1:10;
for r = 1:0.5:2 % Change
    y=r * x .^ 2;
    plot( x, y );
    hold on;
end

如您所见,您需要做的唯一更改是将r语句更改为for循环。这样,我们将在同一个图上用三种不同颜色自动绘制三幅图。

创建点矩阵

一种相当优雅的方法是执行乘法和广播。具体来说,对x的每个元素进行平方,转置它然后使用bsxfun结合times函数来执行逐元素乘法,这样就可以创建一个包含三列的矩阵 - 每列定义对x的每个值评估的r点数。您可以通过一次plot调用来绘制在此点矩阵中同时定义的所有图形。

换句话说:

x = 0:0.1:10;
r = 1:0.5:2;
y = bsxfun(@times, r, (x.^2).');
plot(x, y);

在MATLAB R2016b及更高版本中,您可以在本地执行此乘法,并在内部进行广播:

x = 0:0.1:10;
r = 1:0.5:2;
y = r * (x.^2).';
plot(x, y);