Matlab中的勾股三元组

  • 本文关键字:三元组 Matlab matlab
  • 更新时间 :
  • 英文 :


我被要求根据这个系列获得前15个三元组,这个代码应该可以工作。然而,它只产生了一个充满零的表(15*3(,而不是毕达哥拉斯的15个三元组?欢迎任何帮助。

A = zeros(15, 3);
ii = 1;
for c = 5:120
c2=c^2;
for a=1:c-1
a2=a^2;
for b=a:c-1
if c2-(a2+b^2) == 0
A(ii,1) = a;
A(ii,2) = b;
A(ii,3) = c;
ii=ii+1;
if A(15, 1) ~= 0
flag = 1;
break
end
end
end
if flag == 1
break
end
end
if flag == 1
break
end
end
T1 = array2table(A); 
disp(T1)

因此,在所有后续尝试失败之前,代码在应用程序重新启动时生成了一个正确的表。而且,现在我注意到,每次重新启动应用程序后,代码仅第一次成功运行。(解决了,谢谢Dan Pollard。(

此外,感兴趣的是知道是否有任何方法不将上限(120(写入代码。

我认为您的if语句永远不会得到满足。例如,对于c=5,您希望a=3, b=4是一个三元组。但你只让ab上升到floor(sqrt(c-1)),也就是2

你的意思是让ab上升到floor(sqrt(c2-1))吗?

编辑因为问题已更改。

当你运行代码时,Matlab会创建你分配的所有变量,并将它们存储在工作空间中。这可能很有用,但在这里它会伤害你,因为你有一个存储为1的变量flag。这意味着,当代码运行时,它会在第一次运行b之后检查flag==1,因此代码结束。通过将clear;放在脚本的开头来解决此问题。

没有一种实用的方法可以去除c的上限。Matlab有内置的变量Inf,但充其量Matlab不会让你在这种情况下使用它。实际上,您可以用一个非常大的数字来替换120,但随着数字的增大,这将需要更多的时间和内存。不过,计算机有有限的RAM来存储matlab数组,而且有无限多的勾股三元组,所以在没有上限的情况下进行计算在某种程度上会失败。

相关内容

  • 没有找到相关文章

最新更新