【问题标题】:MATLAB: Limiting range of plotted valuesMATLAB:限制绘制值的范围
【发布时间】:2013-02-16 23:51:46
【问题描述】:

我根本不是 Matlab 用户,但我现在只是想使用它创建一个快速而肮脏的 2D 图来说明相对 O 表示法的复杂性,以避免手工绘制它。我使用的是 Matlab 版本 R2010b,我没有额外的工具包。我的问题包括两部分。我想在同一个情节上绘制以下案例:

O(1)
O(lg2 n)
O(n)
O(n lg2 n)
O(n * n)
O(2 ^ n)
O(n!)

我的代码在这篇文章的末尾。

问题 1:虽然我已经指定了 n 的值范围和我想要的轴限制,但显然 n-squared 和 n-factorial 的值将大大超出所需的 y 轴范围。发生这种情况时,它会大大压缩 y 轴图以适应该范围的输出。如何指定不应将 y 的值绘制在 y 轴本身所需范围的所需范围之外?

问题 2:在我下面的表达式 n * log2(n) 的代码中,会导致错误说明“内部矩阵尺寸必须一致”。当我尝试通过简单地执行 n * n 来计算 n 平方时,我遇到了同样的错误,但我能够通过将其更改为 n.^2 来解决这个问题。 n * log2(n) 的正确表达方式是什么?

谢谢, 雷

grid on
axis([0,40,0,200]);
n = 0:1:40;

O_1 = 0;
O_log2_n = log2(n);
O_n = n;
O_n_log2_n = n * log2(n);    % Doesn't work this way
O_log2_nSq = n.^2;
O_log2_nFact = factorial(n);

plot(n, O_1, n, O_log2_n, n, O_n, n, O_n_log2_n, n, O_log2_nSq, n, O_log2_nFact);

text(37, 37, '   O(n)', 'HorizontalAlignment','left','FontSize',12);
set(gca, 'XTick', [0, 10, 20, 30, 40]);
set(gca, 'YTick', [0, 50, 100, 150, 200]);
xlabel('n','FontSize',16);
ylabel('T(n)','FontSize',16);
title('\it{Comparative algorithm growth rates}','FontSize',16);

【问题讨论】:

    标签: matlab


    【解决方案1】:
    1. 查看ylim

    2. 使用.*进行逐个元素的乘法。

    【讨论】:

      【解决方案2】:

      Matlab 中的* 运算符是一个矩阵乘法器。因此,它仅在第一个矩阵的第二维与第二个矩阵的第一维相同时才有效(如果矩阵不是二维的,则根本不工作)。

      .* 运算符在“每个元素”的基础上工作:所以在表达式 C=A.*B 中,你得到

      C(1,1) = A(1,1) * B(1,1);
      C(1,2) = A(1,2) * B(1,2);
      

      等等

      注意 - 对于.*,矩阵必须具有相同的维度:A(N, M) 和 B(N, M)。对于* 操作,您必须具有 A(M, N) 和 B(N, P)。另请注意 - Matlab 中的任何“向量”实际上都是 1xN(行)或 Nx1(列)矩阵...

      要回答您的问题“表达n*log2(n) 的正确方式是什么” - 使用n.*log2(n);

      至于以不同的比例绘制事物:您可以使用 semilogy 以对数 Y 比例绘制(如果 Y 值中有零则无用)或使用 ylim([lower upper]) 作为 plot 之后的单独语句命令获取范围内的输出。

      如果您想在 Y 值为零的情况下变得聪明并使用符号学,您可以执行以下操作:

      notZero = find(Y>0);
      semilogy(X(notZero),Y(notZero);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多