2014-12-15 5 views
1

다음은 MATLAB 문제입니다.기호 차별화의 수치 적 통합 - MATLAB

함수 f (x, y)를 정의한다고 가정 해 보겠습니다. 특정 y 값 (예 : y = 6)에서 평가 된 y와 관련하여 f의 편미분을 계산하려고합니다. 마지막으로, x의 범위에이 새로운 함수 (x의 함수 일뿐입니다)를 통합하려고합니다. 예를 들어

이 내가

syms x y; f = @(x, y) x.*y.^2; Df = subs(diff(f,y),y,2); Int = integral(Df , 0 , 1) ,

을 시도 것입니다 그러나 나는 다음과 같은 오류가 발생합니다.

Error using integral (line 82) First input argument must be a function handle.

사람이 코드를 작성하는 나를 도와 드릴까요?

+2

일반적으로 소프트웨어에서 오류가 발생하면 오류의 원인과 그 원인을 알려주기 때문에 소프트웨어를 읽는 것이 좋습니다. 해봐야 해. 또한, 다른 사람의 도움을 받고 싶다면 오류를 알려줌으로써 많은 도움이됩니다! –

+0

@Ander Biguri 질문이 업데이트되었습니다! –

+0

내가 얻는 것은 "diff는 함수 핸들을 지원하는 클래스가 아니다"입니다. 즉, f = @에서 diff를 사용할 수 없다는 의미입니다. 아마도 aMatlab 버전이 다를 수 있습니까? 내 것은 2013b –

답변

2

이 문제를 해결하려면 matlabFunction이 필요합니다. 이 솔루션은 다음과 같습니다

syms x y 
f = @(x, y) x.*y.^2; 
Df = matlabFunction(subs(diff(f,y),y,2)); 
Int = integral(Df , 0 , 1); 
+0

답변입니까, 아니면 질문을 명확히하려고합니까? – rayryeng

+0

@rayryeng 답변입니다. –

+2

더 좋은 방법은 아마도'matlabFunction'에서'subs' 호출을 피하고 단순히'Df'를'x'와'y'의 함수로 만들고'integral (@ (x) Df (x, 2), 0, 1)'이다. 그러나'matlabFunction'은 여기에서 사용하는 함수입니다. – David

0

sym/int를 사용하여, 모든 기호를 유지 :

syms x y; 
f = @(x, y) x.*y.^2; 
Df = diff(f,y); 
s = int(Df,x,0,1) 

y을 반환합니다. 질문에서와 마찬가지로 2을 여기 또는 이전으로 y으로 대체 할 수 있습니다. 이 경우 정수 값을 계산 한 integral과 달리 부동 소수점 오류가없는 정확한 답을 줄 수는 없습니다.

Matlab에서 함수를 검색 할 때, 도구 상자와 해당 인수를 지원하는 클래스 (데이터 유형)에주의를 기울이십시오. 어떤 경우에는 이름이 같은 오버로드 된 버전이 있지만 다른 버전에서는 다른 방법을 찾아 보거나 자신의 방식을 고안해야 할 수도 있습니다.