MATLAB简单计算

时间:2017-07-26 17:28:49

标签: matlab integer-arithmetic binary-operators

我正在自己研究MATLAB,并在Project Euler上做了第9个问题 它声明

“毕达哥拉斯三元组是一组三个自然数,a< b< c,为此,

a2 + b2 = c2 例如,32 + 42 = 9 + 16 = 25 = 52。

恰好存在一个毕达哥拉斯三重态,其中a + b + c = 1000。 找到产品abc。“

以下是我写的代码;然而,它编译,但不产生和输出。我希望得到一些关于错误的反馈,所以我可以解决它。

谢谢,

syms a;
syms b;
syms c; 
d= 1000;
d=  a + b + c ; 
ab= a.^2 + b.^2; 
ab= c.^2; 
c

1 个答案:

答案 0 :(得分:3)

我提出了一种矢量化方式(即不使用循环)来解决问题。它可能看起来相对复杂,特别是如果你来自其他编程语言;但是对于Matlab,你应该习惯这种接近问题的方式。

成分:

如果您不熟悉这些概念,请阅读这些概念,然后尝试自己解决问题(当然这是Project Euler的重点)。作为提示,下面的代码按以下方式进行:

  1. 生成包含ab的所有可能值的1×1000向量。
  2. 计算1000×1000矩阵,其值c对应每对ab
  3. 从中计算一个新矩阵,使每个条目包含a+b+c
  4. 查找矩阵等于1000的行和列索引。那些指数是期望的ab(为什么?)。
  5. 您将获得多个解决方案(为什么?)。选一个。
  6. 计算获得的ab以及相应的c的产品。
  7. 一旦你尝试过自己,你可能想检查代码(将鼠标移到它上面):

      

    ab = 1:1000; % step 1
     cc = hypot(ab,ab.'); % step 2
     sum_abc = ab+ab.'+cc; % step 3
     [a, b] = find(sum_abc==1000); % step 4
     a = a(1); b = b(1); % step 5
     prod_abc = a*b*cc(a,b); % step 6