7

次のような方程式のすべての複雑な解を返す関数を見つけようとしています。

16^(1/4) = 2+i0,  -2+i0,  0+i2,  0-i2

現状では、コンソールに入る16^(1/4)と 2 しか返されません。このための関数を書くことはできますが、R でこれを行う簡単な方法があるかどうか疑問に思っていました。

4

1 に答える 1

12

必要なものpolyroot():

polyroot(z = c(-16,0,0,0,1))
# [1]  0+2i -2-0i  0-2i  2+0i

z「昇順の多項式係数のベクトル」はどこにありますか。

上記の例で渡したベクトルzは、この方程式をコンパクトに表現したものです。

-16x^0 + 0x^1 + 0x^2 + 0x^3 + 1x^4 = 0

                          x^4 - 16 = 0

                               x^4 = 16

                                 x = 16^(1/4)

編集:

の構文が気になる場合polyrootは、より優れた (汎用性が低い場合) インターフェースを提供するラッパー関数を作成できます。

nRoot <- function(x, root) {
    polyroot(c(-x, rep(0, root-1), 1))
}
nRoot(16, 4)
# [1]  0+2i -2-0i  0-2i  2+0i
nRoot(16, 8)
# [1]  1.000000+1.000000i -1.000000+1.000000i -1.000000-1.000000i
# [4]  1.000000-1.000000i  0.000000+1.414214i -1.414214-0.000000i
# [7]  0.000000-1.414214i  1.414214+0.000000i
于 2013-02-19T20:44:35.860 に答える