APL/J言語:多項式(ニュートン法による係数のルート)

APL/J言語:多項式(ニュートン法による係数のルート)
翻訳がやけくそになってきてますが、続けます。ニュートン法ウィキペディアに載ってました。

      • -

数値解析の分野において、ニュートン法ニュートンほう、Newton's method)またはニュートン・ラプソン法とは、方程式系を数値計算によって解くための反復法による求根アルゴリズムの1つである。対象とする方程式系に対する条件は、領域における微分可能性と2次微分に関する符号だけであり、線型性などは特に要求しない。収束の速さも2次収束なので古くから数値計算で使用されていた。名称はアイザック・ニュートンとJoseph Raphsonに由来する。

      • -

多項式である、(m;r)&PIRと(c=:CFR (m;r))&p.は同値なので、パラメーターのm;rとcは同じ関数の違う表現と呼ばれます。どちらの表現もそれぞれの有効な性質を持っています。たとえば、多項式の足し算は係数表現の方が容易でルート表現の方が難しい。ですので、それぞれの表現を変換する関数があると便利です。片側の方向にはCFRがあります。逆関数(inverse)の課題は連続する近似によってアプローチします。

微分関数fについて、rとaがとても近いところにある点とすると、(f r)-(f a)という差は近似的に、r-aの差にグラフfの点a,f aにおけるタンジェントのスロープを駆けたものに等しくなります。すなわちaにおけるfの微分係数です。逆に、r-aの差は( (f r)-(f a))%f D aによって近似され、rはa+( (f r)-(f a))%f D aによって近似されます。

もしfが多項式c&p.でrがルートの一つとすると、f rはゼロであり、aがrの近似値ならばrの表現はto a-(f a)%f D aに収束します。これによりより正確なrの近似が求まります。以下では、副詞として定義されたニュートン法に使われています。

   newton=: 1 : '] - x % x D'

   f=: (c=: 12 _10 2)&p.

   f a=: 2.4 
_0.48

   f newton a
1.2

   f 2
0

   f newton ^:0 1 2 3 4 _ a
2.4 1.2 1.75385 1.9594 1.99848 2

   ]a=: (^ - 4:) newton ^: 0 1 2 3 _ a=: 1
1 1.47152 1.38982 1.3863 1.38629

   ^ {: a
4

特殊な多項式のケースでは、一般的な係数Dのかわりに、多項式係数にかかる副詞を定義して、多項式係数pDを用いることができます。

   pD=: 1 }. ] * i.@#
   NEWTON=: 1 : '] - x&p. % (pD x)&p.'

   c NEWTON ^:0 1 2 3 4 _ a=: 2.4
2.4 1.2 1.75385 1.9594 1.99848 2