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 に答える