【发布时间】:2023-03-20 13:21:02
【问题描述】:
如何使用模函数对奇数求和?
我能够查看奇数,但无法将它们相加。
【问题讨论】:
-
您可以只使用索引来获取奇数,然后使用
sum。不要理解mod的过度复杂化。 -
@Divakar:你读懂了我的想法:P
-
@rayryeng 我对人们这样做:D
如何使用模函数对奇数求和?
我能够查看奇数,但无法将它们相加。
【问题讨论】:
sum。不要理解mod 的过度复杂化。
如果我正确解释了您的问题,您不想使用模函数对奇数求和,但您想使用模函数帮助您确定什么是一个奇数,并且仅将数据集中那些奇数的数字相加。如果您乍一看,这会令人困惑,因为听起来您想使用模函数和仅模函数来求和值。
假设您在名为data 的向量中有整数。您可以做的是,如果您想检查一个整数是否为奇数,您可以检查除以 2 后的余数是否为 1(即num mod 2 == 1)。回忆一下奇数的定义。这意味着您可以取任何整数,并将其表示为可以找到整数k,其中的数字可以表示为2k + 1。因此,如果你以 2 为底取这个数的模数,你会得到 1 作为答案。请记住,这不适用于负数。
因此,我建议您执行以下步骤:
这是我要使用的代码:
function sumOdd = sumOddNumbers(data)
%// Step #1
ind = mod(data, 2) == 1;
%// Step #2
sumOdd = sum(data(ind));
在这里,我们正在创建一个函数来帮助我们做到这一点。您将 data 指定为函数的输入,输出 (sumOdd) 将包含奇数的总和。因此,获取此代码并将其保存到新的.m 文件中。另外,请确保将其命名为sumOddNumbers.m。接下来,确保将工作目录设置为放置此文件的位置。
让我们做一个简单的例子:
data = 1 : 10; %// Create an array going from 1 to 10
sumOdd = sumOddNumbers(data); %// Answer should be 25... why?
现在让我们一步一步来看看这个函数,为什么答案是 25。
ind = mod(data, 2) == 1; %// Should give us an array s.t. [1 0 1 0 1 0 1 0 1 0]
sumOdd = sum(data(ind)); %// Should sum over the following array [1 3 5 7 9]
%// Answer is 25
【讨论】: