【问题标题】:Multiple function plots with hold on多个函数图与保持
【发布时间】:2018-01-17 21:12:59
【问题描述】:

使用以下代码,我可以通过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。但我的好像不一样。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    你很亲密。有两种方法可以做你想做的事。第一种方法是使用循环并遍历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); 
    

    【讨论】:

    • 非常感谢。第一个很简单。关于图例,plot( x, y, 'DisplayName', r ); legend ('show'); 不正确,因为我使用了变量r。如何在每次迭代时显示r的值?
    • @mahmood 在循环末尾添加一个图例。因此,只需使用 plot(x, y) 然后在代码的最后,执行以下操作:legend(sprintfc('r=%.2f', r));
    • 但它只打印最后一个r,即2.0
    • @mahmood 哦,对不起。 r 在您的情况下不是向量。请这样做:legend(sprintfc('r=%.2f', 1:0.5:2)); 如果您使用 for 循环,则必须这样做。如果你使用第二种方法,那么你可以这样做:legend(sprintfc('r=%.2f', r));.
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2020-11-17
    相关资源
    最近更新 更多