6

我想在另一个函数中使用定义为函数的最大化解决方案。这是一个例子:

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

这个定义很好,例如如果我给f1[4],我得到答案-((3 \[Pi])/8)

问题是当我想在另一个函数中使用它时出现错误。例如:

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

给我以下错误:

ReplaceAll::reps: {x} 既不是替换规则列表也不是有效的调度表,因此不能用于替换。>>

FindRoot::nlnum:函数值 {-0.785398+(x/.x)} 不是在 {y} = {1.} 处具有维度 {1} 的数字列表。>>

我已经为此苦苦挣扎了好几天了!任何评论、想法、帮助……都非常感谢!非常感谢!

4

1 回答 1

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} *)
于 2013-03-01T03:46:17.457 回答