多項式の展開
(expanding literal polynomials)
【課題集】
下の各テキストエリアをクリックするだけで、「query」にセットされます。
----- second order -----
----- third order -----
----- fourth order (Heron's formula) -----
----- eighth order (Heron's formula; やや時間がかかるかも...) -----
----- other -----
----- error cases -----
多項式の展開ができます。加減乗と、非負整数による指数の計算ができます。割算は実装していません。
式の連立が可能ですが、同一変数が左右両辺に来る場合を禁止しているため、消去法はほぼ無理で、代入のみ可能です。
使い方:
'+-^' の記号が使える。掛算は '*' でも良いが、必要ではない。
アルファベット('_' も許容)で始まる文字列が変数名になり、2文字目からは数字も可能。一つ以上の空白が積の意味に。
数字は、小数も可能だが、指数の肩の数値は非負整数限定。
'(' の前や ')' の後に '+' や '-' がなければ、空白がなくても積の意味に。数字の直後に変数名があるときも、空白不要。
和、差よりも積が、また、それよりも指数 '^' が、当然のことながら優先。括弧は当然、最優先。
'query' に課題を書き、その右端の '↓' ボタンを押すことで、実行。
代入を意図した式を複数書くことができ、改行か ';' で区切る。両方あっても良く、重複しても、余分な空白同様、無視。
式には次のような3タイプが。
a=b+1
a==b+1
b+1
この1と2が代入式で、計算上の機能は変わらないが、2の形式では式の値を表示せず、1と3だけ表示。
1や2の式の左辺は単独の変数であることが必要で、この変数が同じ式の右辺に登場するのは禁止。
式を配置する順序は計算には関係せず、結果表示の順序にのみ反映('order of settlement' のチェックを入れない場合)。
'order of settlement' のチェックを入れると、結果が得られる順序で表示される。
次のような巡回定義も禁止で、評価以前のチェックで撥ねられる。これは、どの変数を残し消去するか、主体的に決めよというポリシーによるので、式定義上矛盾がなくてもダメ。
a=b-1
b=a+1
ひたすら展開して括弧のない式を目指す。項は一律に定義された順序で表示されるので比較し易く、差の式を作って展開し、ゼロになれば同一と確認できる。
因数分解はできないが、見込み、仮説の検証は逆向きにできる。
基本、数式処理だが、変数値を指定すれば数値も得られる。
3領域("query"、"log"、"results")の上下のサイズは右下のツマミで変更でき、左右のサイズはブラウザに依る。
解説:
数値計算している「式の評価」 、因数分解の「一変数多項式の因数分解(実係数)」
や「二変数多項式の因数分解(実係数)」 、一般の連立方程式数値解を(これから)目指す「Tiles」
などと姉妹関係にあると言えるかも。
このページが目指すような数式処理の手段が絶対に必要かと言うと、そうでもなく、これの必要性はどちらかと言うと検証であり、それについては数値計算でもそこそこできます。
私の経験で申すと、三点の座標で定義される三角形の外心と垂心を求める式は私が発見。これが「初」発見かということには確証はないが、多分そうだと思う。
根拠は、Wikipedia の英語版にアップしたときに、
「こんな式は見たことがない。お前が考えただろう。Wikipedia は独自研究のアップを禁止している。」として、一年間位、アップを取り下げさせられていた経緯が。
実際そういう規則は Wikipedia にあった。
しかし、それを守ると分野に最も詳しい人がアップできないという矛盾を生じることになり、最近は緩和されているようだが、そんなことで他人のアップを阻止するのはやはり大人げないと思う。
私自身が数学者というわけでないだけに、たまたま変な人が数学者だと数学者全体が変と思ってしまいかねない。
これは国民性とか県民性とかの評価の際にもあるのだろう。異質な(そうかも知れない)人と接する時は特に、紳士、淑女であることを心がけなければならない。
これは余談だったが、外心の式を導くのに、目標を定めてから2週間位かかり、これにはコンピュータも利用したが、それはこのページのような数式処理を使ったわけでは「ない」。
そうでなく、数値計算によって、式展開が間違っていないことを確認しながら進んだ。
間違った展開に気づかないまま進むことが最も時間の浪費であり、それを避けることは数値計算でもできた。
数値計算によるやり方は、正当性の事実上の確認にはなるが、数学上の「証明」でない。
しかし、数式処理は証明と言えると思う。万全を期すなら、計算機のステップをなぞって記録すれば良い話だ。
プログラムがデフォでするのは数値計算だ。へえ、と思う人も居るかも知れないが、昔はコンピュータを「電子計算機」と言った。文字通り計算する目的のものだったのだ。
数式の(数値)計算方法としては、「逆ポーランド」に変換するというやり方を聞いたことがある。
「式の評価」 のやり方は、普通の式の最初からきちんと変換しているように見えるが、
実はスタック構造のデータを仮置き利用しているので、機能上は「逆ポーランド」と同じだ。
こうした方法の特徴は、例えば括弧は、その最も内側から計算するということだ。
今回の数式処理はこれとは全く違う。変換の順序は括弧の内外に必ずしも拘らない。効能が限られた色々なワクチンを、次々、繰り返して投与している感じだ。
考えてみれば無駄なことをしていると思う。
どの変数が数値として与えられ、どの変数がそうでないかは、計算の最初から明らかで、それをバッチ処理するわけだから、やはり内側からの処理が効率良かった。
しかし、無駄なことをしたおかげで、例えば、 q=(a^2-2a)*2^(b+1); a==2; のようなものでも計算できてしまう。この辺が本プログラムの愛嬌だ。
ただ、これを含む色々な理由で、現状、あらゆる問題に最適化しているとは言えない。
例えば、二項展開の (x+1)^13 は計算できるが、14乗になるとキビシイみたい。工夫の余地は多々あるかも。
改定(2023/6/8):結果表示は、定義と同じ順番(デフォ)に加え、確定順('order of settlement')を選べるようにしました。