私はMatlabのユーザーではありませんが、手動で描画するのを避けるために、相対的なO表記の複雑さを説明するために、すばやく汚い2Dプロットを作成しようとしているだけです。Matlab バージョン R2010b を使用していますが、追加のツールキットはありません。私の質問は 2 つの部分で構成されています。同じプロットで次のケースのプロットを希望します。
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-squared を計算しようとしたときに同じエラーが発生しましたが、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);