Wolfram mathematica Mathematica,嵌套优化

Wolfram mathematica Mathematica,嵌套优化,wolfram-mathematica,Wolfram Mathematica,我想在另一个函数中使用定义为函数的最大化解。下面是一个例子: f1[y_] := x /. Last[Maximize[{Sin[x y], Abs[x] <= y}, x]] (* or any other function *) f1[y\]:=x/。最后[最大化[{Sin[xy],Abs[x]> FindRoot::nlnum:函数值{-0.785398+(x/.x)}不是在{y}={1}处具有{1}维度的数字列表。>> 我已经为此挣扎了好几天了!非常感谢您的任何评论、想法、帮助

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

f1[y_] := x /. Last[Maximize[{Sin[x y], Abs[x] <= y}, x]]  (* or any other function *)
f1[y\]:=x/。最后[最大化[{Sin[xy],Abs[x]>

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


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

y
不是一个数字时,您的
最大化
无法解决,在这种情况下,
最后一个
元素是
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} *)
ClearAll[f1]
f1[y_?NumericQ]:=x/.Last[Maximize[{Sin[xy],Abs[x]0.785398}*)
可能会提供更多帮助。@MECU我想你是说。我们大多数人都迁移到那里去了。