我试图在R中解决以下函数的逆问题.
x + 2 (C1 * y) + C1 * C1 * z = d2
Run Code Online (Sandbox Code Playgroud)
我现在可以进入C1并获得d2但需要进入d2并获得C1.变量x,y并且z是所有已知的和永远不会改变.
我已经有一些已知C1和d2值使用.
C1 d2
5 0.000316
0 0.000193
-5 0.000123
Run Code Online (Sandbox Code Playgroud)
是否有一个R函数可以让我输入函数,先前的结果和一个d2值,并返回C1系数?
你有一个形式的二次方程:
(x - d2)*C1^0 + (2*y)*C1^1 + (z)*C1^2 = 0
Run Code Online (Sandbox Code Playgroud)
您可以使用polyroot()R中的函数求解二次方(实际上是任何多项式方程):
x <- 1
y <- 2
z <- 3
d <- 0
polyroot(c(x-d, 2*y, z))
[1] -0.3333333+0i -1.0000000+0i
Run Code Online (Sandbox Code Playgroud)
(正如您所料,这给出了两种解决方案)
要解决一系列输入值,您需要将其放入您喜欢的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
Run Code Online (Sandbox Code Playgroud)