next up previous
Next: この文書について... Up: B. プログラム例 Previous: B..1 2次元のNewton法

B..2 二変数関数の極値問題 kyokuchi.m


(* 二変数関数 f の停留点を求める (よう努力する) *)
kyokuchiten[f_]:=
Module[
  {fx,fy},
  fx=Simplify[D[f[x,y],x]];
  fy=Simplify[D[f[x,y],y]];
  Solve[{fx==0,fy==0},{x,y}]
]

(* 二変数関数 f とその停留点のリスト s を分析し、極値の判定をする *)
bunseki[s_,f_]:=
Module[
  {ff,HesseXY,aSolution,restSolutions,valf,l1,l2},
  ff=f[x,y];
  HesseXY = {{D[ff,x,x],D[ff,x,y]},
             {D[ff,y,x],D[ff,y,y]}};
  restSolutions = s;
  While [(restSolutions != {}),
         aSolution = First[restSolutions];
         restSolutions = Rest[restSolutions];
         valf = ff /. aSolution;
         {l1,l2} = Eigenvalues[HesseXY /. aSolution];
         If [l1 > 0 && l2 > 0,
            Print[aSolution, ", 極小 f(x,y)=", valf]];
         If [l1 < 0 && l2 < 0,
            Print[aSolution, ", 極大 f(x,y)=", valf]];
         If [(l1 l2 < 0), 
            Print[aSolution, ", 極値でない"]];
         If [(l1 l2 == 0),
            Print[aSolution, ", 極値であるかどうか分からない。"]];
      ]
]


next up previous
Next: この文書について... Up: B. プログラム例 Previous: B..1 2次元のNewton法
Masashi Katsurada
平成16年2月9日