【问题标题】:MATLAB Simple CalculationMATLAB 简单计算
【发布时间】:2018-01-02 04:17:35
【问题描述】:

我自己在 MATLAB 上工作,并且在 Project Euler 上做问题 9 它指出

" 毕达哥拉斯三元组是三个自然数的集合,a

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

【问题讨论】:

  • 它应该执行一个搜索。此外,您的代码没有 natural 数字的概念。
  • 您需要遍历所有可能的整数并查看它们是否有效。符号数学包不会做你想做的事。
  • 如果您想以更类似于 Matlab 的方式(矢量化而不是循环)来执行此操作,请生成矩阵 1:1000 通过 ndgrid 沿行和列重复。或者更好的是使用bsxfun / 隐式单例扩展。 hypot 可能很方便

标签: matlab integer-arithmetic binary-operators


【解决方案1】:

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

成分:

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

  1. 生成一个 1×1000 的向量,其中包含 ab 的所有可能值。
  2. 计算一个 1000×1000 的矩阵,其中 c 的值对应于每对 ab
  3. 从中计算一个新矩阵,使得每个条目都包含a+b+c
  4. 找到该矩阵等于1000 的行和列索引。这些索引是所需的ab(为什么?)。
  5. 您将获得不止一种解决方案(为什么?)。选择一个。
  6. 计算得到的ab与对应的c的乘积。

一旦您自己尝试过,您可能需要检查代码(将鼠标移到它上面):

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

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多