2017-03-03 13 views
1

나는 다음과 같은 식 통합 해요 :Matlab은 왜 임의의 상수를 제공합니까?

죄를 (2 * X)/4 - 8은 * 죄 (x)는 매트랩

, 내가

syms x 
int(sin(2*x)/4 - 8*sin(x)) 

에 넣고는

을 반환 Wolfram에서
17*cos(x/2)^2 - cos(x/2)^4 

, I 입력

int(sin(2*x)/4 - 8*sin(x)) 

하고 두 솔루션을 비교를 위해서

8 cos(x) - 1/8 cos(2 x) + constant 

를 반환, 나는 Wolfram

int(sin(2*x)/4 - 8*sin(x)) == 17*cos(x/2)^2 - cos(x/2)^4 

에 다음과 같은 내용을 추가하고 그것을 matlab에의 솔루션은 볼프람 잎 반면, 통합 65/8의 일정을 제공합니다 보여줍니다 통합의 상수는 임의적이다. 나는 그것이 최종 솔루션이지만, 상수 임에도 불구하고 큰 차이를 만들기 때문에 이것을 잡아서 기쁘다. 내 질문은, 왜 Matlab은 궁극적으로 통합의 상수를 제공 할 필요성을 느끼는가? 다소 위험한 것 같습니다.

+2

fwiw mathematica는 '8 Cos [x] - 1/8 Cos [2 x]'를 제공합니다. (명시 적 상수는 없습니다. 문서를 읽어야하는 경우 matlab와 유사하므로 antiderivative를 부여합니다. 임의의 상수 내에서 고유하지 않음). – agentp

답변

1

int documentation에 따르면 "int가 반환하는 결과에는 통합 상수가 포함되지 않습니다." 그러나 분명히, 일부는 솔루션을 통해 도입되었습니다. 그래서 저는 더 나은 진술이 될 것입니다 : MATLAB은 WolframAlpha와는 달리 Mathematica처럼 새로운 상징 상수가 발견되면이를 솔루션에 추가하지 않습니다.

그러나 명백히 솔루션에 도입되거나 가능하면 숨겨진 명확한 임의의 상수가 솔루션 알고리즘에 의해 도입 될 수 있습니다. 이는 무한 적분이 무한 수의 유효한 해를 초기 값 또는 터미널 데이터로 산출하기 때문에 완벽하게 유효합니다.

MuPAD documentation of int (MATLAB의 기호 엔진)에 따르면, 불명확 한 적분은 "테이블 조회 또는 Risch 통합"을 통해 해결되며, 부팅하기 전에 프론트 엔드 구문 분석 및 단순화를 수행해야합니다. 따라서 상징적 인 엔진이 내려지는 의사 결정 나무의 어느 지점이든지 결국 감소시 상수의 도입을 나타내는 삼각 함수의 힘을 생산하게되었습니다. 나는 이것이 표준 관행인지는 모르겠다. 그러나 알고리즘을 그러한 상수를 도입하기위한 여유를 어떻게 제공하면 상징적 인 불명확 한 통합이 매우 어려운 작업이므로 견고한 솔루션 방법에 도움이 될 수 있음을 알 수 있습니다.

그래서 "Matlab은 왜 결국 무언가의 통합을 제공해야 할 필요성을 느낍니까?"라는 질문에 대답하려고합니다. 그것은 할 수 있기 때문에 그것을하고, 근본적인 알고리즘은 그것이 어떤 이유로 든 올바른 행동 과정이라고 결정했습니다. 또한 솔루션은 임의적이므로 완벽하게 유효합니다.

"다소 위험합니다." 나는 동의하지 않을 것이다. 완전히 이상적인 것은 아니지만 적절한 데이터가 도입되고 솔루션과 함께 사용되면 통합 결과가 정확합니다. 그러한 적절한 데이터가 없으면 문제는 미달이며 모든 해는 임의의 상수에 유효합니다.

+0

당신이 당신 물건을 알고있는 것처럼 들립니다. "차단"할 방법이없는 것처럼 들리니? – ThatsRightJack

+0

어떻게 MATLAB을 17 * cos (x/2)^2 - cos (x/2) ^와 반대로 8 * cos (x) - 1/8 * cos (2 * x) + 65/8로 출력 할 수 있습니까? 4? 나는 그것이 추가하고있는 통합의 상수를보고 싶다. – ThatsRightJack

+0

@ThatsRightJack 지연을 드려 죄송합니다. 주말에 이것에 대해 잊어 버렸습니다. 상징적으로 불명확 한 통합의 명백한 복잡성과 문서에 옵션이 없기 때문에 나는 그것이 해제 될 수있는 것이 아닌가 의심 스럽다. 그것이 바로 그 것이다. 단순화에 관해서는, 통합 이후에 약간의 마사지가 필요할 수 있지만,'I = int (sin (2 * x)/4-8 * sin (x));'및'rewrite (expand (simplify rewrite (I, 'exp'))), 'cos')'원하는 결과를줍니다. – TroyHaskin