0

MatlabでCollat​​z問題を解こうとしています。結果をプロットするのに問題があります。

a = input( 'Please enter a value for a:'); 
b = input( 'Please enter a value for b:'); 
for n = (a:b), 
    count = 0;
    while n > 1
        count= count+ 1;
        if mod(n,2) == 0 
            n = n/2;
       else
            n = (3*n+1); 
        end
      plot (n:count); 
    end
end

ユーザーが入力した 2 つの数値 (1 から 40 など) の間の n とカウント (n のシーケンスの長さ) の値をプロットしようとしています。私のグラフは、意図した解ではなく、直線 y = x として出力されます。

助けてくれてありがとう

noobcodes

4

1 に答える 1

1

1) 間違った一連の値をプロットしています。n:count は、n から count までの double の配列を u に与えます。この場合、n の最終値は 1 で、count の最終値は 8 です。n:count = [ 1 2 3 4 5 6 7 8 9 ] 、これは x=y 関数のようなものです。n の値を別の Array に格納し、その配列をプロットすることをお勧めします。コードは次のようになります。

a = input( 'Please enter a value for a:'); 
b = input( 'Please enter a value for b:'); 
for n = (a:b), 
    count = 0;
    while n > 1
        count= count+ 1;
        if mod(n,2) == 0 
            n= n/2;
       else
            n = (3*n+1); 
        end
        U(count) =n;
      plot (U); 
    end
end

a=1 および b=40 の上記の例を実行した後、通常は Collat​​z プロットのようなプロットが得られました。

出力:

ここに画像の説明を入力

于 2015-05-03T04:54:41.203 に答える