0

私は最近、MatLab の学習を開始し、ベクトルを生成する方法を確認するための練習の一環として、今日次のスクリプトを作成しました。

x = [];
n = 4;
for i = i:n
    x = [x,i^2];
end
x

このスクリプトを実行すると、期待どおりの結果が得られます。つまり、次のベクトルが得られます。

x = 0 1 4 9 16

ただし、その直後にスクリプトをもう一度実行すると、次の出力しか得られません。

x = 16

これの理由は何ですか?スクリプトを 2 回目に実行したときに、ベクトル全体ではなく、最後のベクトル エントリのみを出力として取得するのはなぜですか? 誰かが私にこれを説明できるなら、私はそれを大いに感謝します.

4

3 に答える 3

4

新しいワークスペースから始めて、i単純に複素数 1iになります(のようにx^2=-1)。私はあなたが最初の実行でこの警告を受けたと想像します:

Warning: Colon operands must be real scalars. 

したがって、forステートメントは基本的にループオーバーしfor i = real(1i):4ます。に注意してくださいreal(1i)=0

変数がすでに初期化されている状態でスクリプトを再実行すると(clearワークスペースを作成しなかった場合)、iは、の最後の値を含む変数を参照し、同じ名前4の組み込み関数iをシャドウイングし、forループを実行します。

x=[];
for i=4:4
    x = [x, i^2]
end

これは1回だけ繰り返されるため、最終的にはx=16

于 2012-07-28T23:32:56.517 に答える
3

初期化するのを忘れていますi
最初の実行後iは 4 であり、4 のままです。その後、空のベクトルとして
初期化しますが、 4 であるため、ループは 1 回だけ実行されます。xi

ワークスペースをクリアして、最初の実行の前後に検査します。

于 2012-07-28T21:38:08.030 に答える
2

それはおそらく単純なタイプミスですか?

i = i:n の場合

と実際に意味する必要があります

for i = 1:n

i は (おそらく) 最初の実行では初期化されていないため、0 であるため、問題なく動作します。2 回目は、i は n (=4) のままで、1 回だけ実行されます。

また、パフォーマンスのヒントとして、ループのすべての反復でベクトルのサイズを大きくします。より効率的な (そしてよりマトラボイドな) 方法は、最初にベース値を使用してベクトルを作成することです。

x = 1:n

次に、各値を次のように 2 乗します。

x = x^2

Matlab では、最適化された操作を実行する機会が得られるため、反復ループ アプローチよりもベクトル操作 (または高次元の行列操作) を使用することをお勧めします。また、多くの場合、その方が読みやすいです。

于 2012-07-28T22:07:56.383 に答える