2011-10-14 2 views
3

Mathematica에서 조건부로 RecurrenceTable을 만들고 싶습니다. 재귀 적 요소가 올바르게 작동하지만 완전히 평가하지는 않습니다.Mathematica가이 RecurrenceTable을 수치로 평가하지 않는 이유는 무엇입니까?

In:= RecurrenceTable[{x[n] == If[Mod[n, 2] == 0, x[n - 1], y[n - 1]], 
     y[n] == If[Mod[n, 2] == 0, R x[n - 1] (1 - x[n - 1]), y[n - 1]], 
     x[1] == x0, y[1] == 0}, {x, y}, {n, 1, 10}] 

Out:= {{0.25, 0.}, {x[1], 3 (1 - x[1]) x[1]}, {y[2], y[2]}, {x[3], 
     3 (1 - x[3]) x[3]}, {y[4], y[4]}, {x[5], 3 (1 - x[5]) x[5]}, {y[6], 
     y[6]}, {x[7], 3 (1 - x[7]) x[7]}, {y[8], y[8]}, {x[9], 
     3 (1 - x[9]) x[9]}} 

할 수있는 방법은 {{0.25, 0.}, {0.25, 0.5625} ...

있는가 즉,이 올바른 결과가 있지만, 나는 그것이 숫자 형태로 할 필요가? 감사! 편집 R = 3x0 = .25

답변

8

일반적으로 수학 함수에는 Piecewise을 사용하고 프로그래밍 흐름에는 If을 예약해야합니다.

당신은 PiecewiseExpand를 사용하여 많은 If 문을 변환 할 수 있습니다

If[Mod[n, 2] == 0, x[n - 1], y[n - 1]] // PiecewiseExpand 
If[Mod[n, 2] == 0, r*x[n - 1] (1 - x[n - 1]), y[n - 1]] // PiecewiseExpand 

마지막 코드는 다음과 같이 보일 수 있습니다 :

r = 3; 
x0 = 0.25; 
RecurrenceTable[ 
{x[n] == Piecewise[{{x[n - 1], Mod[n, 2] == 0}}, y[n - 1]], 
    y[n] == Piecewise[{{r*x[n - 1] (1 - x[n - 1]), Mod[n, 2] == 0}}, y[n - 1]], 
    x[1] == x0, 
    y[1] == 0}, 
{x, y}, 
{n, 10} 
] 
{{0.25, 0.}, {0.25, 0.5625}, {0.5625, 0.5625}, {0.5625, 
    0.738281}, {0.738281, 0.738281}, {0.738281, 0.579666}, {0.579666, 
    0.579666}, {0.579666, 0.73096}, {0.73096, 0.73096}, {0.73096, 0.589973}}

관련 포인트의 몇 :

  1. 기호 이름에 대문자를 사용하지 않는 것이 좋습니다. 내장 기호와 충돌 할 수 있기 때문입니다.

  2. 원하는 경우 Mod[n, 2] == 0 대신 Divisible[n, 2]을 고려할 수 있습니다.

+0

+1 나는 'Divisible'을 알지 못했습니다. – rcollyer

+0

@rcollyer 이전에 두 버전을 소개했는지 모르겠 으면 새 버전을 실행하면 어떻습니까? 농담, 물론 : 심지어 Leonid는 모든 기능을 알지 못한다. 나는 여전히 v7을 실행하는 것에 대해 기분 좋게 생각할 필요가있다. (나는 아직도 그 중 절반을 모른다). :-) –

+0

내 노트북에서 v7을 실행 중이며 고대 데스크톱에서 v5.2를 실행 중입니다. 그래서, 기분 나쁘게 생각하지 마십시오. 개인적으로, 나는 모든 기능을 알기를 기대하지 않습니다. 특히 내가 스스로 구축 한 것 (그리고 더 유연함)이있는 것이 있다면. 'Divisible'을 사용하면'Mod' 형식보다 더 쉽게 결정할 수 있을지 궁금합니다. 근본적으로 존재 v와 실제로 값을 계산하는 문제입니다. – rcollyer

3
RecurrenceTable[{ 
x[n] == Boole[ Mod[n,2] == 0 ] x[n-1] + 
     Boole[ Mod[n,2] != 0 ] y[n-1], 
y[n] == Boole[ Mod[n,2] == 0 ] 3 x[n-1] (1-x[n-1]) + 
     Boole[ Mod[n,2] != 0 ] y[n-1], 
x[1] == .25, y[1] == 0}, 
{x, y}, {n, 1, 10}] 

가 예상 출력을 제공합니다.

관련 문제