Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 如何使用Mathematica查找模模式_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 如何使用Mathematica查找模模式

Wolfram mathematica 如何使用Mathematica查找模模式,wolfram-mathematica,Wolfram Mathematica,有没有办法找到整数列表的最低模?我不知道如何正确地说,所以我将用一个例子来说明 我想输入一个列表(mod x)并输出“相同”列表,模数y(

有没有办法找到整数列表的最低模?我不知道如何正确地说,所以我将用一个例子来说明

我想输入一个列表(mod x)并输出“相同”列表,模数y({0,4,6,10,12,16,18,22}(mod 24)基本上与
{0,4}(mod 6)
相同


感谢您的帮助。

Mod
可列出,您可以通过
删除重复项来删除重复的元素。所以

DeleteDuplicates[Mod[{0, 4, 6, 10, 12, 16, 18, 22}, 6]]
(*
-> {0,4}
*)

您正在寻找一组算术序列。我们将考虑你的例子

ee = {0, 4, 6, 10, 12, 16, 18, 22};
它有两个这样的序列,还有一个例子,其中有四个

ff = {0, 3, 7, 11, 17, 20, 24, 28, 34, 37, 41, 45};
在第二个例子中,我们从{0,3,7,11}开始,然后增加17。那么,从第n项到第n+1项的一般方法是什么呢?如果集合有k个序列(k=2表示ee,4表示ff),则将模数添加到n-k+1项中。模量是多少?这是第n项和第n-kth项之间的差异

把这些放在一起,假设我们知道k(我们一般不知道,但我们会知道),我们有一个形式f(n+1)=f(n-k+1)+(f(n)-f(n-k))的循环。因此,我们需要找到一个循环(如果存在),检查它的形式是否正确,如果是,则进行后期处理

下面是执行所有这些操作的代码。注意,它实际上解决了k

findArithmeticSequences[ll : {_Integer ..}] := With[
  {rec = FindLinearRecurrence[ll]},
  {Take[ll, Length[rec] - 1], ll[[Length[rec]]]} /;
   ListQ[rec] &&
    (rec === {1, 1, -1} || MatchQ[rec, {1, 0 .., 1, -1}])
  ]
(纯函数的Afficionados可能更喜欢下面的变体。失败案例的处理略有不同,没有令人信服的原因。)

测试:

In[115]:= findArithmeticSequences[ee]

Out[115]= {{0, 4}, 6}

In[116]:= findArithmeticSequences[ff]

Out[116]= {{0, 3, 7, 11}, 17}
请注意,可以通过多项式分解“几乎”解决此类问题(如果输入端没有部分序列)。例如,多项式

In[117]:= poly = Plus @@ (x^ee)

Out[117]= 1 + x^4 + x^6 + x^10 + x^12 + x^16 + x^18 + x^22
影响

(1+x^4)*(1+x^6+x^12+x^18)
以易于查看的方式包含所需信息。不幸的是,出于这一特殊目的,Factor将超出这一点,并在这样做时模糊信息

我一直想知道是否有一种信号处理方法可以处理这类事情,例如通过DFT。但我什么都没想到


丹尼尔·利奇特布拉

哇,谢谢你,丹尼尔!它几乎按照我想要的方式工作。你的方法有点“太严格”。如果“FindLinearRecurrence”没有发现任何重复,则不会返回任何有用的内容。我对你的方法做了一些修改,所以它更适合我的需要。我希望你不介意。这是我的密码

findArithmeticSequences[ll_List]:=Module[{rec=FindLinearRecurrence[ll]},
如果[!MatchQ[rec,{1,0…,1,-1}],则返回[ll],
返回[{ll[[Length[rec]],取[ll,Length[rec]-1]}];
];
];


我有一种感觉,它必须涉及重复性,我只是没有足够的经验来实现它。再次感谢您抽出时间

我有点困惑。取模数时,信息会丢失。因此,在取了列表模x之后,通常不能恢复列表模y,例如,当x和y互为素数时。你能澄清我的困惑吗?@Ziga整数列表中的“最低模”是什么?很难说,但听起来很混乱:)我试图在下面的评论中澄清。你真的必须定义你的“相等”。在什么意义上{0,4,6,10,12,16,18,22}和{0,4}是相等的?是否存在一个列表O,其关系如下?O mod 24={0,4,6,10,12,16,18,22}和O mod 6={0,4},删除所有重复项,并且您正在寻找最小的O吗?您的意思是写:
deleteplicates[mod[mod[{0,4,6,10,12,16,18,22},24]
?@David我知道输入已经被mod 24接受,所以不需要再次输入。但我想,从这个问题(和这个例子)来看,这有点不清楚。我明白了。但我仍然对Ziga在寻找什么感到困惑。谢谢你的回答。为了进一步澄清,我试图找到最低的“y”,以便得到的列表(mod“y”)与原始列表(mod x)“相等”。从上面的例子来看,“y=6”是一个选项,但是“y=3”更好,因为它会导致“{0,1}(mod 3)”y=2',即{0}(mod 2)'不好,因为在原始列表中缺少一些偶数。哇,谢谢你!它几乎按照我想要的方式工作。你的方法有点“太严格”。如果“FindLinearRecurrence”没有发现任何重复,则不会返回任何有用的内容。我对你的方法做了一些修改,所以它更适合我的需要。我希望你不介意。这是我的密码。我有一种感觉,它必须涉及重复性,我只是没有足够的经验来实现它。再次感谢您抽出时间!
(1+x^4)*(1+x^6+x^12+x^18)