平方完成は,入試問題を解くときなど,条件設定の場面でたいへん重宝する技法だ。ちょっと手計算が面倒な式がでてきたので,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 件のコメント:
コメントを投稿