Возможно, вы могли бы использовать uniroot
. Вот примерное решение:
# Original function
eq <- function(x){(4E-11*x^4)-(2E-8*x^3)-(1E-5*x^2)+(0.0132*x)+0.1801}
# Find x value corresponding to y value
find_y <- function(y, lb = 0, ub = 1e6, acc = 1e-3){
uniroot(function(x)eq(x)-y, c(lb, ub), tol = acc)
}
Находит, где eq(x)-y
равен нулю. Вам нужно указать интервал для просмотра (определяется lb
& ub
), а также точность (acc
), хотя для простоты я добавил значения по умолчанию.
# Test the y finding function
find_y(0.3)
# $`root`
# [1] 9.147868
#
# $f.root
# [1] -1.330955e-09
#
# $iter
# [1] 26
#
# $init.it
# [1] NA
#
# $estim.prec
# [1] 5e-04
В этом выводе root
- это значение x, соответствующее y=0.3
. Давайте проверим результат в вашем исходном уравнении:
# > eq(9.147868)
# [1] 0.3
Неявное предположение состоит в том, что существует только одно значение y, соответствующее вашему значению x в данном интервале.