2是质数,所以这个示例解决方案应该(2 + 3 + 5)/ 3 = 3.33 ....
+ 1,这个例子是错误的:
*脸红*哦!至少我们有实际的测试套件。谢谢你的笔记。固定它。
我不明白这个问题
好一个…
我不明白为什么这并不为测试工作3:出=总和(。* isprime()) /笔(isprime ())
它适用于所有其他测试,但测试需要一个答案3和3.0000的代码提供了一个答案。谁能告诉我为什么吗?
有趣的:)
好
好一个
主题的问题是难以理解。
初学者的好问题。
有什么问题
=找到(isprime ())
出=(())意味着什么?
它完美地在自己的MATLAB环境中
第三,我得到的结果是3.0000我的电脑,但是它失败了,现在我非常困惑。
' = isprime(的);
=(。* ')和/总和(');
这是由于MATLAB在浮点运算工作,而不是完全(十进制)算术。
你可以做快速检查在你的计算机MATLAB - sprintf (“% 0.18 f \ n”),计算后,你会发现不是3的值。
tf = isprime(的);
数= nnz (tf);
合计=总和(sum (tf。*));
=合计/计数;
为什么这段代码不工作
好!
这是为什么,
3
失败
x = [3 3;3 3];
y_correct = 3;
断言(isequal (meanOfPrimes (x) y_correct))
出= 3.0000
断言失败。
为什么?
非常容易
奇怪的flex,但好
gj
作弊
测试3我也有问题,但如果已经通过了所有的测试这段代码:
函数= meanOfPrimes(在)意味着=总和(。* isprime()) /笔(isprime ());=圆(意思是,1);结束
在= [3 3;3 3]
在=
3个3
3个3
> >总和(。* isprime()) /笔(isprime ())
ans =
3.0000
错在两个方面:
(1)分子和分母为测试3将向量,不是标量,因为这就是sum()的工作原理;
(2)MATLAB矩阵算法部门因此被雇用,并引入了截断误差。代码产生一个传说的回答3 - (4.4409 e-16)为测试3。当然,如果只有几位小数显示,这是显示为“3.0000”。
为了避免这个问题,重塑输入矩阵向量。这可以用重塑命令,但一个更简单的方法就是索引作为“(:)”。
这样做是在https://au.mathworks.com/matlabcentral/cody/problems/14-find-the-numeric-mean-of-the-prime-numbers-in-a-matrix/solutions/1金宝搏官方网站142672
另一个有效的(但不太优雅)避免这个问题的方法是巢你合计:总和(sum (sum (…)))。(但你必须使用至少尽可能多的“总和”命令你的矩阵维度。)
对于调试,试着用谁的命令。
@David Verrelli
谢谢!它的工作原理。
令人惊异的是,您的解决方案的大小只是10。它包含我的客人只有一行代码。
你介意分享吗?
谢谢你!
为什么第三次测试失败?在Matlab。
*慢拍*
你先生,是一个c程序员……
我尝试使用这种方法是成功的。但. .:(
这应该工作,但是不能第三次测试,因为它产生一个值为4.409 e-16 ans由于舍入误差。