2016-11-18 7 views
1

MATLAB 2012b를 사용하고 있습니다.syms 및 diff를 사용하여 MATLAB에서 혼합 파생물 계산

f(x,y) = (x-1)² + 2y² 

문서 상태 내가 syms 다음과 같은 예에서와 같이 diff 사용할 수 있습니다 : 나는 간단한 함수의 d²/dxdy 싶어

> syms x y 
> diff(x*sin(x*y), x, y) 
ans = 
    2*x*cos(x*y) - x^2*y*sin(x*y) 

을하지만 같은 일을 내가 가지고 잘못 대답은 :이 같은 diff를 사용하는 경우

> syms x y 
> f = (x-1)^2 + 2*y^2; 
> diff(f,x,y) 
ans = 
    4*y 

대답은 맞다 :

diff(diff(f,x),y) 

글쎄,이 방법으로 사용하는 것은 문제가되지 않지만 그럼에도 불구하고 왜 첫 번째 변형이 작동하지 않는 이유가 무엇입니까? 버전 문제입니까?

답변

1

실제 문서 :

DIFF (EXPR)은 대한 EXPR 상징적 인 표현을 차별화 symvar에 의해 결정된대로 자유 변수로 이동합니다.

DIFF (EXPR, V)와 DIFF (EXPR, SYM (V '가')). (V)에 대하여 EXPR 차별화

은 DIFF (EXPR, N)을 구분 expr에 n 번. n은 양의 정수입니다.

diff (expr, v, n) 및 diff (expr, n, v)는 vn 번에 대해 expr을 구별합니다.

따라서, diff(f,x,y) 명령이 마지막 경우입니다. 이는 f w.r.t를 차별화하는 것과 같습니다. x, y 번 또는 w.r.t y, x 번.

어떤 이유로 든 경고 또는 오류가 표시되지 않지만 syms 변수 중 하나가 n = 1으로 해석되고 차별화가 수행됩니다. 이 경우 diff이하는 것은 기본적으로 diff(f, y, 1)입니다.어떤 경우

, 추가적인 경우가 행동 때문에 당신이 (R2016b)에 링크 문서에서, 버전으로 변경된 것 같습니다 :

DIFF (F, var1에 .. ., varN)은 변수 var1, ..., varN에 대해 F를 차별화합니다.

그래서 버전 문제가 의심됩니다.

diff(diff(f,x), y) 

또는 동등

diff(diff(f,y), x) 

NB :

두 번 차별화하려는 경우, WRT xy 모두, 두 번째 시도는 실제로 그렇게 할 수있는 정확하고 대부분의 휴대용 방법입니다 에 대한 R2010a 코드를 확인했으며 실제로 n은 기본값이 1이고 입력 변수 중 하나가 double이고 구분할 변수가 인수 목록의 변수 syms과 같게 설정된 경우에만 변경됩니다. 복수 호출 syms은 지원되지 않으며 탐지되지 않고 오류가 있습니다.

+0

나는 그것을 얻는다, 고마워. – Eugene

0

Syms는 기호 변수 만 작성합니다.

실행하는 첫 번째 코드는 하나의 파생물입니다. 두 번째 코드는 두 번 구별됩니다. 따라서 여러분이 제공 한 첫 번째 코드에서 두 번째로 차별화하는 것을 잊어 버린 것 같습니다.

나는 또한 당신이 무엇을 기대하는지 궁금합니다. 두 번째 유도체 나 제로주고있다 수행

diff(f,y) 

하지

diff(f,x,y) 

를 사용하는 것보다 당신이 답변으로 4 * y를 원한다면?

diff(diff(f,x),y) 

당신이 다음을 수행하는 것보다 당신이 답변으로 4 원하는 경우 : R2010a에서

diff(diff(f,y),y) 
+0

예, 올바른 대답입니다. 그리고 그것은 두 번째 혼합 파생물입니다. 문제는 diff (x * sin (x * y), x, y)와 같은 구문은 matlab 문서 (https://www.mathworks.com/help/symbolic/diff.html)에서도 두 번째 혼합 파생 ,하지만 내 컴퓨터에서는 그렇지 않습니다. – Eugene