検索
カテゴリ
その他のジャンル
|
■FindRoot[hogehoge,{x,xmin,xmax}]は,数値探索時に勾配方向を必ず調べるようだ。詳細不明だけど。
Newton法ではなくてBrent法のような一次元の数値囲い込みをMethodとして選んでも,どうしてもJacobianを「記号的に」評価しないと気が済まないらしい。なので,hogehogeの中身が別の繰り返し計算を含むような,つまり記号評価不能な表現になってたりすると,hogehogeの評価に無理矢理文字変数を代入しようとするのでなんだかヘンなエラーメッセージがhogehogeの評価の方で出まくって計算してくれない。 例えば, hogehoge[具体的な数値] は計算できてちゃんと数値を返す。のに, FindRoot[hogehoge,{x,xmin,xmax}] にすると,hogehogeの中身の計算が「数値じゃないので計算不能」とか云う。 Optionで, Jacobian -> "FiniteDifference" とやっておけば,Jacobianの評価は数値的になるハズなのだが,それでもやっぱりどうしても一度はhogehogeを文字評価しようとしてしまうらしく,なんかちゃんとやってくれない。 で,今日のメモ:FindRoot[]にhogehoge[x]を「数値評価しかできない」ことを「教える」オマジナイ。は,以下: hogehoge[x]を定義する時に,予め, hogehoge[x_?NumberQ]:=mogemoge... として,xが数値じゃないと「数値じゃないとダメ」と云う情報がFindRoot[]側へ戻るようにする。 【注釈】
by electrostatics
| 2006-01-17 21:47
|
ファン申請 |
||