use*_*036 6 wolfram-mathematica
我想在另一个函数中使用最大化的解决方案,定义为函数.这是一个例子:
f1[y_] := x /. Last[Maximize[{Sin[x y], Abs[x] <= y}, x]] (* or any other function *)
Run Code Online (Sandbox Code Playgroud)
这个定义很好,例如,如果我给f1[4],我得到答案-((3 \[Pi])/8).
问题是,当我想在另一个函数中使用它时,我得到错误.例如:
FindRoot[f1[y] == Pi/4, {y, 1}]
给我以下错误:
ReplaceAll :: reps:{x}既不是替换规则列表也不是有效的调度表,因此不能用于替换.>>
FindRoot :: nlnum:函数值{-0.785398+(x/.x)}不是{y} = {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} *)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |