정수 목록의 최소 계수를 찾는 방법이 있습니까? 어떻게 올바르게 말 할 지 모르겠다. 그래서 나는 예제를 명확히 할 것이다.Mathematica를 사용하여 계수 패턴을 찾는 방법
목록 (mod x)을 입력하고 "같은"목록, 모듈 y (< x)를 출력하고 싶습니다. 예를 들어, 목록 {0, 4, 6, 10, 12, 16, 18, 22} (mod 24)
은 기본적으로 {0, 4} (mod 6)
과 같습니다.
도움 주셔서 감사합니다.
정수 목록의 최소 계수를 찾는 방법이 있습니까? 어떻게 올바르게 말 할 지 모르겠다. 그래서 나는 예제를 명확히 할 것이다.Mathematica를 사용하여 계수 패턴을 찾는 방법
목록 (mod x)을 입력하고 "같은"목록, 모듈 y (< x)를 출력하고 싶습니다. 예를 들어, 목록 {0, 4, 6, 10, 12, 16, 18, 22} (mod 24)
은 기본적으로 {0, 4} (mod 6)
과 같습니다.
도움 주셔서 감사합니다.
일련의 산술 시퀀스를 찾고 있습니다. 우리는 당신의 예를 들어이 같은 시퀀스, 그 중 넷과 예제가
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} 다음 그래서 N + 1 번째에 n 번째 임기에서 얻을 수있는 일반적인 방법은 무엇입니까 (17)에 의해 증가? 집합에 k 개의 시퀀스 (ee의 경우 k = 2, ff의 경우 4)가있는 경우 n-k + 1 번째 항에 모듈러스를 추가합니다. 계수는 무엇입니까? 그것은 n 번째와 n-kth의 차이입니다.
이것을 종합하면 k (일반적으로는 아니지만이를 알 수있다)를 가정하면 다음과 같은 f (n + 1) = f (n-k + 1) + (f (n) -f (nk))이다. 따라서 우리는 재발 (존재하는 경우)을 찾아 올바른 형태인지 확인하고 필요한 경우 후 처리해야합니다.
다음은이 모든 것을 수행하는 코드입니다. 사실상 그것은 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 아래의 변형을 선호 할 수도 실패 사례가 더 매력적인 이유, 약간 다르게 처리됩니다.).
findArithmeticSequences2[ll : {_Integer ..}] :=
If[ListQ[#] &&
(# === {1, 1, -1} || MatchQ[#, {1, 0 .., 1, -1}]), {Take[ll,
Length[#] - 1], ll[[Length[#]]]}, $Failed] &[
FindLinearRecurrence[ll]]
테스트 :
In[115]:= findArithmeticSequences[ee]
Out[115]= {{0, 4}, 6}
In[116]:= findArithmeticSequences[ff]
Out[116]= {{0, 3, 7, 11}, 17}
주를이 입력이 다차원 인수 분해 (마지막에 부분 시퀀스가없는 경우)를 통해 "거의"그러한 문제를 수행 할 수 있습니다. 쉽게 볼 수있는 방법으로 필요한 정보를 포함
(1+x^4)*(1+x^6+x^12+x^18)
에 예를 들어, 다항식
In[117]:= poly = Plus @@ (x^ee)
Out[117]= 1 + x^4 + x^6 + x^10 + x^12 + x^16 + x^18 + x^22
요인. 유감스럽게도이 특별한 목적을 위해 Factor는이 시점을 넘어서는 요인으로 작용하여 정보를 흐리게 만듭니다.
이런 종류의 문제에 대해 신호 처리 방법이 있을지 궁금합니다. DFTs를 통해. 하지만 나는 아무것도 얻지 못했습니다.
다니엘 Lichtblau
와우, 고맙습니다! 그것은 내가 원하는 방식으로 거의 작동합니다. 당신의 방법은 조금 "너무 제한적"입니다. 'FindLinearRecurrence'가 재발을 발견하지 못하면 아무 것도 반환하지 않습니다. 나는 당신의 방법을 약간 수정 했으므로 그것은 나의 필요에 더 잘 맞는다. 네가 괜찮 았으면 좋겠다. 여기 내 코드가있다. 재발이 필요하다는 생각이 들었습니다. Mathematica를 구현할 충분한 경험이 없습니다. 시간 내 주셔서 다시 한 번 감사드립니다! – Ziga
Mod
을 나열 할 수 있으며 중복 요소를 DeleteDuplicates
까지 제거 할 수 있습니다. 따라서
DeleteDuplicates[Mod[{0, 4, 6, 10, 12, 16, 18, 22}, 6]]
(*
-> {0,4}
*)
와우,이 당신에게 다니엘 감사합니다! 그것은 내가 원하는 방식으로 거의 작동합니다. 당신의 방법은 조금 "너무 제한적"입니다. 'FindLinearRecurrence'가 재발을 발견하지 못하면 아무 것도 반환하지 않습니다.나는 당신의 방법을 약간 수정 했으므로 그것은 나의 필요에 더 잘 맞는다. 네가 괜찮 았으면 좋겠다. 여기 내 코드가있다.
findArithmeticSequences[ll_List] := Module[{rec = FindLinearRecurrence[ll]}, If[! MatchQ[rec, {1, 0 ..., 1, -1}], Return[ll], Return[{ll[[Length[rec]]], Take[ll, Length[rec] - 1]}]; ];
];
재발이 필요하다는 생각이 들었습니다. Mathematica를 구현할 충분한 경험이 없습니다. 시간 내 주셔서 다시 한 번 감사드립니다!
조금 혼란 스럽네요. 계수를 취하면 정보가 손실됩니다. 따라서리스트 x를 취한 후에리스트 mod y를 복구 할 수 없습니다. x와 y가 서로 소인 일 때. 내 혼란을 치울 수 있니? –
@Ziga 정수 목록의 "최저 계수"란 무엇입니까? – DavidC
너무 혼란스럽지 않고 말하기 힘들다 :) 나는 아래의 설명에서 명확히하려고 노력했다. – Ziga