27. 多項式: 由係數求根(Kerner法)
Newton法僅適用一次算一個根且需要好的起始點。 Kerner法較一般化,得到所有的根,起始點由一數列 a
, f a 餘數每一原子除以其在對應根處的導函數。它僅適用於最高次項係數為
1 的多項式,故我們先除以末項來標準化係數。此法只有至少一初值為複數才會收斂到複數根。我們採用指數 函數的泰勒展式,因為相對應的多項式有複數根:
]d=: ^ t. i.6
1 1 0.5 0.166667 0.0416667 0.00833333
]c=: (norm=: % {:) d
120 120 60 20 5 1
+. a=: (init=: r.@}.@i.@#) c |a
0.540302 0.841471 1 1 1 1 1
_0.416147 0.909297
_0.989992 0.14112
_0.653644 _0.756802
0.283662 _0.958924
deriv=: [: */ 0&=@{.}@(-/~ ,: 1:)
kerner=: 1 : 0
] - x.&p. % deriv@]
)
r=: c kerner ^:_ a
+.(/:|) r 依據magnitude排序的各根的實與虛數部分
_2.18061 4.57601e_31
_1.6495 1.69393
_1.6495 _1.69393
0.239806 3.12834
0.239806 _3.12834
>./|c p. r
1.04488e_13
這些結果可以拿來比較使用基本單字 p.
於非標準化係數 d 。故:
p. 2 4 2
+-+-----+
|2|_1 _1|
+-+-----+
,.;}.p. d
0.2398064j3.12834
0.2398064j_3.12834
_1.6495j1.69393
_1.6495j_1.69393
_2.18061
Newton法也可以用在複數根:
+. d NEWTON ^:0 1 2 3 _ a=: 1j1
1 1
0.0166065 0.99639
_0.990523 0.992532
_1.95338 1.10685
_1.6495 1.6939
下個 前個
字彙
索引
主選單