2013-08-08 6 views
3

에 포흐 하머 기호를 사용하여 내가 matlab에에서 Pochhammer symbol (상승 요인)을 평가하는 스크립트를 사용하려했지만, 그것은 x는 표현식이 유효한 경우에도 음수 때마다 x이 음수 인 경우 pochhammer(x,n)을 평가하는 데 실패 (Wolfram Alpha와 Mathematica는 Pochhammer(-3,2)에 대한 답을 제공합니다).matlab에

부정적인 주장에 대해 pochhammer이 Matlab에서 작동하도록 도움을 줄 수 있습니까?

+2

코드 수정에 도움이 필요하면 작동하지 않는 코드를 표시해야합니다. 누군가가 당신에게 작업 코드를 건네기를 원한다면, 당신은 틀린 장소에 있습니다. –

답변

8

this Pochhammer function을 말하는 것으로 가정합니다. pochhammer (대문자로 변환하지 않음)은 의 일부이며, Matlab의 Symbolic Math Toolbox에서 사용할 수있는 별도의 환경입니다. Matlab 명령 창에 mupad을 입력하면 MuPAD에 액세스 할 수 있습니다.

그러나 일반적인 Matlab 사용자와 마찬가지로 Matlab 자체에서 pochhammer 함수를 사용하여 프로그램을 사용하려면 발견 한대로 일반적인 명령 창이나 편집기에서 일반 명령 창이나 편집기에서 실행할 수 없습니다. 대신

evalin(symengine,'pochhammer(-3,2)') 

또는

feval(symengine,'pochhammer',-3,2) 

more here을 참조하십시오 더 많은 유연성을 사용해야합니다. 이것들은 모두 결과로 기호 숫자를 반환하며 스칼라 입력에 대해서만 작동합니다. 사용 배정도 출력을 필요로하고 (만 두 번째 작동 n를) 벡터 입력이있는 경우도 쓸 수 있도록

mfun('pochhammer',-3,-3:3) 

이, MuPAD의 map 기능을 사용하는 것과 같습니다 :

feval(symengine,'map',sym(-3:3),'n->pochhammer(-3,n)') 


그러나 상징적 인 수학으로 작업하지 않는 경우에는 완전히 배정도 솔루션 대신이 함수를 사용할 이유가 없습니다. Pochhammer symbolgamma 함수의 비율로 간단하게 정의되며, 동일한 크기 또는 스칼라이어야 (xn 효율적으로 구현 될 수있다 - 또한 둘 xx-n 제로 어디 gamma function 정수 이하일 수 없다) 단수 : 정수이다

poch = @(x,n)gamma(x+n)./gamma(x); 

n 경우와 x 당신은 출력이 정확히 정수인지 확인 round를 사용해야합니다. 유일한 단점은 x 및/또는 n의 충분히 큰 값에 대해이 순진 구현이 Inf (또는 NaN)으로 오버플로된다는 것입니다. 이 경우 기호 버전을 사용하는 것과 같은 다른 작업을 수행해야합니다 (다시 캐스팅 할 때 Inf을 반환하거나 반환하지 않을 수도 있음). n (스칼라 n>=0)의 정수 값를 들어, 다음과 같이도 정수이이 gamma 버전보다 최대 20 배 느린 될 수 있음을

poch = @(x,n)prod(bsxfun(@plus,x(:),0:n-1),2); 

주를 사용할 수 있습니다.

+1

감마 함수는 x = 0, -1, -2, ...에서 단수이므로 감마 함수의 비율 (수학적 관점에서 완전히 맞음)은 수학 함수의 수치 계산을위한 속기로 권장되지 않습니다. Pochhammer 심볼, x> 0이 아닌 한. –

+1

@StefanoM : 아주 좋은 지적입니다. 나는이 문제를 다루었다고 생각했지만 나는 그렇지 않았다. 내 대답을 업데이트했습니다. – horchler

1

Matlab (MuPAD 아님)에 대한 수치 명령 pochhammer이 matlab 버전 R2014b에 도입되었습니다.