-4

我正在尝试解决 R 中以下函数的逆问题。

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

我目前可以进入C1并获取d2,但需要进入d2并获取C1。变量x,yz都是已知的并且永远不会改变。

我已经有一些已知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

您可以使用 R 中的函数求解二次方程(实际上是任何多项式方程)polyroot()

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

d <- 0

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

(如您所料,这提供了两种解决方案)

要解决一系列输入值,您需要将其放入您喜欢的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 回答