-4

Rで次の関数の逆問題を解こうとしています。

x + 2 (C1 * y) + C1 * C1 * z = d2

現在、入力C1して取得できますd2が、入力して取得する必要がd2ありますC1。変数xyおよびzはすべて既知であり、変更されることはありません。

私はすでにいくつかの既知C1d2値と使用する値を持っています。

 C1     d2 
 5   0.000316
 0   0.000193
-5   0.000123

R関数、以前の結果、値を入力して係数d2を返すことができる関数はありますか?C1

4

2 に答える 2

6

次の形式の二次方程式があります。

(x - d2)*C1^0 + (2*y)*C1^1 + (z)*C1^2 = 0

polyroot()Rの関数を使用して、二次方程式 (および実際には任意の多項式) を解くことができます。

x <- 1
y <- 2
z <- 3

d <- 0

polyroot(c(x-d, 2*y, z))
[1] -0.3333333+0i -1.0000000+0i

(ご想像のとおり、これにより 2 つの解決策が得られます)

apply入力値の範囲を解くには、これをお気に入りの関数に入れる必要があります。この場合は次のようになりsapply()ます。

d <- seq(0, 1, 0.2)

sapply(d, function(dd)polyroot(c(x-dd, 2*y, z)))

              [,1]          [,2]          [,3]          [,4]           [,5]         [,6]
[1,] -0.3333333+0i -0.2450296+0i -0.1722534-0i -0.1088933-0i -0.05203037+0i  0.000000+0i
[2,] -1.0000000+0i -1.0883037+0i -1.1610799+0i -1.2244400+0i -1.28130296+0i -1.333333+0i
于 2012-07-16T16:03:43.173 に答える
2

あなたが持っている

d2 = x + 2 C1 y + C1^2 z

あなたが得るために再配置することができます

z C1^2 + 2 y C1 + x - d2 = 0

これはC1の二次方程式であり、二次方程式を使用するか、Wolfram Alphaにプラグインして取得するだけで解くことができます

C1 = (-sqrt( d2 * z - x * z + y^2 ) - y) / z
于 2012-07-16T15:50:44.950 に答える