2022年2月24日木曜日

平方完成

 平方完成は,入試問題を解くときなど,条件設定の場面でたいへん重宝する技法だ。ちょっと手計算が面倒な式がでてきたので,Mathematicaに任せようと思った。

ところが,探してみてもMathematicaで平方完成する関数が組み込まれていないようなのだ。もしかしたら調べ方が足りないのかもしれないが,普通に考えるとイの一番に出てきても良さそうな機能なのだが。

それらしいユーザ定義関数がいくつか見つかったけれど,2変数の整式を代入しても思ったような変形ができず,望みのものではなかった。しかたがないので,自分で関数パーツを考えることにした。これを一般化するには,Mathematicaプログラミングにおける文法の知識が足りなさすぎる。

ここで考えたのは,ある変数の二次式を与えたときに,平方完成された部分と残余部分のリストを返すユーザ定義関数 sq[式, 変数]だ。変数がn個ある場合は,n回繰り返して使う必要があるという残念なコード素片だ。

sq[f_, v_] :=
 Module[{a, b},
  a = Coefficient[f, v^2];
  b = Coefficient[f, v];
  {a (v + b /(2 a))^2,
  c = f - a (v + b /(2 a))^2}] // Simplify
これを使って次のような計算ができる。
In[1]:= sq[2 x^2 - 4 x y + 2 y^2 + 24 x - 24 y + 288 + 3 x y, x] 
Out[1]= {1/8 (-24 - 4 x + y)^2, 216 - 18 y + (15 y^2)/8}
In[2]:= sq[%[[2]], y] 
Out[2]= {3/40 (24 - 5 y)^2, 864/5}

0 件のコメント: