2013-03-01 4 views
6

다른 함수에서 함수로 정의 된 최대화 솔루션을 사용하고 싶습니다. 다음은 그 예이다 : 나는 f1[4]을 주면Mathematica, 중첩 된 최적화

f1[y_] := x /. Last[Maximize[{Sin[x y], Abs[x] <= y}, x]] (* or any other function *) 

이 정의는 예를 들어, 괜찮습니다, 내가 대답 -((3 \[Pi])/8)를 얻을.

문제는 다른 기능에서 사용하려고 할 때 오류가 발생한다는 것입니다. 예를 들어 :

ReplaceAll::reps: {x} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing. >>

FindRoot::nlnum: The function value {-0.785398+(x/.x)} is not a list of numbers with dimensions {1} at {y} = {1.}. >>

내가 지금 몇 일 동안 고민했습니다 :

FindRoot[f1[y] == Pi/4, {y, 1}]

는 나에게 다음과 같은 오류를 제공합니다! 모든 의견, 아이디어, 도움, ... 깊이 감사드립니다! 고마워요!

+0

이 http://math.stackexchange.com/ 더 많은 도움을 제공 할 수 있습니다. – MECU

+0

@MECU 나는 [mathematica.se]를 의미한다고 생각합니다. 우리 대부분은 저쪽으로 이주해 왔습니다. – rcollyer

답변

3

y가 숫자가 아닌, 당신의 Maximize는 해결 될 수없는 경우에 그것의 Last 요소는 이상한 오류 메시지가 있음을 얻는 이유입니다, x이다. 당신은 f1의 잘못된 정의를 삭제하고 숫자 만 인수가 평가됩니다 보장하는 새로운 하나를 만들어이 문제를 해결할 수 있습니다

ClearAll[f1] 
f1[y_?NumericQ] := x /. Last[Maximize[{Sin[x y], Abs[x] <= y}, x]] 

FindRoot[f1[y] == \[Pi]/4, {y, 1}] 
(* {y -> 0.785398} *) 
+0

감사합니다 sooooooo 많이! 그것은 작동합니다! – user2122036