MATLAB Collatz 图
MATLAB Collatz plot
我正在尝试在 Matlab 上解决 Collatz 问题。我在绘制结果时遇到问题。
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 值和计数(n 序列的长度)。我的图表显示为一条线 y = x 而不是预期的解决方案。
感谢帮助
菜鸟代码
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 之后,我得到了一个像 Collatz 图通常那样的图。
输出:
您覆盖了 FOR 循环中的 U,它没有显示正确的 Collatz 序列。试试下面的代码:
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
clear U;
hold on;
end
hold off;
在我 运行 上面的例子中 a=1 和 b=20 之后,我得到了 20 个不同的 Collatz 序列图。
enter image description here
我正在尝试在 Matlab 上解决 Collatz 问题。我在绘制结果时遇到问题。
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 值和计数(n 序列的长度)。我的图表显示为一条线 y = x 而不是预期的解决方案。
感谢帮助
菜鸟代码
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 之后,我得到了一个像 Collatz 图通常那样的图。
输出:
您覆盖了 FOR 循环中的 U,它没有显示正确的 Collatz 序列。试试下面的代码:
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
clear U;
hold on;
end
hold off;
在我 运行 上面的例子中 a=1 和 b=20 之后,我得到了 20 个不同的 Collatz 序列图。
enter image description here