我想在另一个函数中使用最大化的解决方案,定义为函数。这是一个例子:
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}既不是替换规则列表也不是有效的调度表,因此不能用于替换。 &GT;&GT;
FindRoot :: nlnum:函数值{-0.785398+(x / .x)}不是{y} = {1.}处维度为{1}的数字列表。 &GT;&GT;
我几天来一直在努力奋斗!任何评论,想法,帮助,...深表感谢!非常感谢你!
答案 0 :(得分: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} *)