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
答
我提出了一个量化的方式(即,不使用循环)来解决这个问题。这看起来可能相对复杂,特别是如果你来自其他编程语言;但对于Matlab来说,你应该习惯这种接近问题的方式。
成份:
如果您不熟悉这些概念,然后尝试自己解决问题(这当然是Project Euler的全部观点),请阅读这些概念。作为提示,下面的代码沿着这些路线前进:
- 生成包含
a
和b
所有可能值的1×1000载体中。 - 计算一个1000×1000矩阵的
c
对应于每对a
值,b
- 从这个计算一个新的矩阵,使得每个条目包含
a+b+c
- 查找行和列索引,其中该矩阵等于
1000
。这些指数是所需的a
和b
(为什么?)。 - 你会得到多个解决方案(为什么?)。选一个。
- 计算获得的
a
和b
的产品以及相应的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
它应该执行*搜索*。你的代码也没有*自然*数字的概念。 –
你需要遍历所有可能的整数,看看它们是否工作。符号数学包不会做你想做的。 – rlbond
如果你想以类似Matlab的方式(矢量化而不是循环)生成矩阵,可以通过'ndgrid'生成沿着行和沿着列重复的'1:1000'矩阵。或者更好的使用'bsxfun' /隐式单例扩展。 “低压”可能会得心应手 –