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

我试图在两个用户输入的数字(例如从 1 到 40)之间绘制 n 和 count 的值(n 序列的长度)。我的图表显示为一条线 y = x 而不是预期的解决方案。

谢谢您的帮助

菜鸟代码

4

1 回答 1

1

1)您正在绘制错误的值系列。n:count 给你一个从 n 到 count 的双精度数组,在我们的例子中 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 plots 这样的图。

输出:

在此处输入图像描述

于 2015-05-03T04:54:41.203 回答