j를 정의 할 수있는 방법이 있는지 묻는다면 최종 결과가 단순히 1이되었거나 알고있는 것을 사용하는 방법을 알고 싶다면 (j는 음수가 아니며 N보다 크거나 같음).
전 어떻게해야할지 모르겠지만 후자는 할 수 있습니다. 당신은 조건이 참 알고 있다면 당신은 당신의 결과에 그것을 사용할 수 있습니다
>>> ans = expr.doit()
순진 방법은 당신이 그것을 볼로 교체 할 시도하는 것입니다, _j
이 DUMM ('J'는) 표현하는 방법을 그냥 것을 기억 :
>>> ans.subs(And(0 <= j, j <= N), True)
Piecewise((1, (0 <= _j) & (_j <= N)), (0, True))
0
는 파이썬 정수 및 0 < j
를 입력하는 j > 0
로 바뀌고 교체가 인식되지 않기 때문에 아무것도하지 않습니다.
>>> 0 < j
_j > 0
또한
>>> ans.subs(j,0)
Piecewise((1, 0 <= N), (0, True))
사실 확인해야 J의 값으로 대체하려고 할 수도 있습니다 그러나 N은 양 또는 음이 될 수 있기 때문에이 실패합니다. 당신이 N은 음이 아닌 것을 알고 있다면, 당신은 시작에 그 가정에 그것을 만든 수 :
>>> N = var('N', nonnegative=True)
>>> expr = Sum(KroneckerDelta(i, j), (i, 0, N))
>>> ans = expr.doit()
>>> ans.subs(j, 0)
1
또는, 당신은 당신이 알고있는 원자를 통해 True입니다 정확한 표현에 액세스 할 수 있습니다. 네가 아는 조건은 사실이다. 우리는 ANS
>>> ans.atoms(Ans)
set([(0 <= _j) & (_j <= N)])
에만이 하나 있습니다에 나타나는 모든 ANDS 세트를 얻을 수 있습니다, 그래서 우리는 단순히 설정에서 팝업과 ANS에 참으로 교체 :
>>> ans.subs(_.pop(), True)
1
(1 개 이상의 원자가 있다면, 그 세트를 목록으로 변환하고 색인을 사용하여 관심이있는 것을 선택해야합니다.)
나는 그 자리에서 실제로 무엇을 대답했는지 물어 보았습니다. 고마워요! –