Используя R, чтобы найти границу решения двух нелинейных уравнений с четырьмя неизвестными - PullRequest
2 голосов
/ 23 января 2020

Рассмотрим два уравнения: (1-b1) * (. 4 * Y1-5) и (1-b2) * (. 4 * Y2-5), где b1 и b2 - вероятности от 0 до 1, а b2 должно всегда будет больше, чем b1, а Y1 и Y2 могут быть любым числом от 50 до 100, но Y2 всегда должен быть больше, чем Y2. Я пытаюсь найти границу решения, где эти уравнения равны друг другу в заданных ограничениях b2 и Y2, используя R.

Я попытался UNI root и решить, однако, кажется, что UNI root можно использовать только тогда, когда есть одно неизвестное, а для решения требуется система линейных уравнений.

Существует ли какая-либо функция, которая может установить два уравнения с четырьмя неизвестными, равными друг другу, чтобы определить, где находится граница решения.

1 Ответ

1 голос
/ 24 января 2020

Поскольку необходимо решить несколько переменных, вы можете использовать optim вместо uniroot:

optim(c(0.5, 0.6, 75, 80),
    function(x) {
        b1 <- x[1L]
        b2 <- x[2L]
        Y1 <- x[3L]
        Y2 <- x[4L]

        if (b1 < 0 | b1 > 1 | b2 < 0 | b2 > 1 | b1 > b2)
            return(Inf)

        if (Y1 < 50 | Y1 > 100 | Y2 < 50 | Y2 > 100 | Y1 > Y2)
            return(Inf)

        abs((1-b1)*(.4*Y1-5) - (1-b2)*(.4*Y2-5))
    })

output:

$par
[1]  0.5098563  0.5917020 75.1616219 87.7225153

$value
[1] 3.52709e-08

$counts
function gradient 
     205       NA 

$convergence
[1] 0

$message
NULL
...