首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找离散化步骤

寻找离散化步骤
EN

Stack Overflow用户
提问于 2012-07-24 12:42:24
回答 2查看 270关注 0票数 0

我有数据文件F_j,每个文件都包含一个数字列表,其中有一个未知的小数位数。每个文件都包含一些连续变量的离散度量,我想为F_j文件找到离散化步骤F_j。

我可以想出一个解决方案:对于每一个F_j,

  • 查找小数位数(n_j);
  • 将F_j中的每个数乘以10^{n_j}以获得整数;
  • 查找整个列表中最大的公共因子。

我正在寻找一种优雅的方法来找到n_j与Matlab。

另外,要找到一长串整数的gcd似乎很难--你有什么更好的想法吗?

EN

回答 2

Stack Overflow用户

发布于 2012-07-24 13:18:18

要找到一长串数字的gcd并不难。您可以按照列表的大小线性地执行。如果你幸运的话,你可以在时间上做得比线性更少。这主要是因为:

代码语言:javascript
复制
gcd(a,b,c) = gcd(gcd(a,b),c)

如果是a=1还是b=1,那么不管其他数字的大小如何,gcd(a,b)=1

所以,如果你有一个数字列表,xs,你可以做

代码语言:javascript
复制
g = xs(1);

for i = 2:length(xs)
  g = gcd(x(i),g);
  if g == 1
    break
  end
end

变量g现在将存储列表的gcd。

票数 0
EN

Stack Overflow用户

发布于 2012-07-24 13:20:29

这里是一些示例代码,我相信它将帮助您获得GCD,一旦您有了您想要查看的数字。

代码语言:javascript
复制
A = [15 30 20];
A_min = min(A);
GCD = 1;
for n = A_min:-1:1
    temp = A / n;
    if (max(mod(temp,1))==0)
        % yay GCD found
        GCD = n;
        break;
    end
end

这里的基本概念是,默认的GCD总是1,因为每个数字都可以被自身和1 (当然=)整除。GCD也不能大于列表中最小的数,所以我从最小数开始,然后下移1,这是假设你已经把数字转换成整数了。小数会把它扔掉的!

通过使用1的模数,您正在测试这个数字是否是一个整数,如果不是,您将有一个大于0的十进制余数。如果您预期必须处理阴性,您将不得不调整这个测试!

除此之外,当你第一次找到一个数列的模数(mod 1)是零的时候,你已经找到了GCD。

享受吧!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11631139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档