给出的答案
我试图解决逆问题以下功能R.给出的答案
x + 2 (C1 * y) + C1 * C1 * z = d2
我目前可以进入C1
并获得d2
但需要输入d2
并获得当查找函数的系数C1
。变量x
,y
和z
都是已知的并且永远不会改变。
我已经有一些已知的使用C1
和d2
值。
C1 d2
5 0.000316
0 0.000193
-5 0.00
是否有R
功能,这将让我进入功能,以前的结果和d2
值和它返回C1
系数?
你有一个二次方程的f ORM:
(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
+1代数技能。 – 2012-07-16 16:12:37
谢谢。 :)我想我需要刷上我的代数。 – TrueWheel 2012-07-16 16:16:00
你有
d2 = x + 2 C1 y + C1^2 z
,你可以重新排列,或者只是将其插入Wolfram Alpha得到
z C1^2 + 2 y C1 + x - d2 = 0
这是C1,它可以解决或者使用二次公式quadratic equation得到
C1 = (-sqrt(d2 * z - x * z + y^2) - y)/z
代数是1000多年前发明的,用于解决这类问题。 – Andrie 2012-07-16 15:39:30
@Andrie我确定这是。我也认为有人会创建一个R包来帮助解决这个问题。 – TrueWheel 2012-07-16 15:44:19
嗯,我想你可以尝试[聊天[(http://chat.stackoverflow.com/)这种问题。 – 2012-07-16 15:49:40