我有数据文件F_j,每个文件都包含一个数字列表,其中有一个未知的小数位数。每个文件都包含一些连续变量的离散度量,我想为F_j文件找到离散化步骤F_j。
我可以想出一个解决方案:对于每一个F_j,
我正在寻找一种优雅的方法来找到n_j与Matlab。
另外,要找到一长串整数的gcd似乎很难--你有什么更好的想法吗?
发布于 2012-07-24 13:18:18
要找到一长串数字的gcd并不难。您可以按照列表的大小线性地执行。如果你幸运的话,你可以在时间上做得比线性更少。这主要是因为:
gcd(a,b,c) = gcd(gcd(a,b),c)如果是a=1还是b=1,那么不管其他数字的大小如何,gcd(a,b)=1。
所以,如果你有一个数字列表,xs,你可以做
g = xs(1);
for i = 2:length(xs)
g = gcd(x(i),g);
if g == 1
break
end
end变量g现在将存储列表的gcd。
发布于 2012-07-24 13:20:29
这里是一些示例代码,我相信它将帮助您获得GCD,一旦您有了您想要查看的数字。
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。
享受吧!
https://stackoverflow.com/questions/11631139
复制相似问题