使用以下代码,我可以通过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。但我的似乎有所不同。
答案 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);