MATLAB简单计算

问题描述:

我的工作在MATLAB我自己,并在项目欧拉在做题9 它指出MATLAB简单计算

“A勾股数是一组三个自然数a < b < C,对于其中,

A2 + B2 = C2 例如,32 + 42 = 9 + 16 = 25 = 52

存在着正好一个勾股数为其中+ 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 
+2

它应该执行*搜索*。你的代码也没有*自然*数字的概念。 –

+1

你需要遍历所有可能的整数,看看它们是否工作。符号数学包不会做你想做的。 – rlbond

+0

如果你想以类似Matlab的方式(矢量化而不是循环)生成矩阵,可以通过'ndgrid'生成沿着行和沿着列重复的'1:1000'矩阵。或者更好的使用'bsxfun' /隐式单例扩展。 “低压”可能会得心应手 –

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

成份:

如果您不熟悉这些概念,然后尝试自己解决问题(这当然是Project Euler的全部观点),请阅读这些概念。作为提示,下面的代码沿着这些路线前进:

  1. 生成包含ab所有可能值的1×1000载体中。
  2. 计算一个1000×1000矩阵的c对应于每对a值,b
  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

类=>