Решение одновременных уравнений / неравенств

#r #equation #inequalities

#r #уравнение #неравенства

Вопрос:

Мне нужно решить сочетание уравнений / неравенств:

 a1   a2   a3 >= 50
b1   b2   b3 <= 40
c1   c2   c3 <= 10
a1   b1   c1  = 50
a2   b2   c2  = 35
a3   b3   c3  = 15
 

Есть девять переменных и шесть уравнений / неравенств, но я буду обнулять три переменные одновременно (мне нужно будет проверить все комбинации).

Я попробовал пару пакетов в R (limSolve, matlib), но безуспешно.

 #The matrix representation:
X1 <- c(1,1,1,0,0,0,0,0,0)
X2 <- c(0,0,0,1,1,1,0,0,0)
X3 <- c(0,0,0,0,0,0,1,1,1)
Y1 <- c(1,0,0,1,0,0,1,0,0)
Y2 <- c(0,1,0,0,1,0,0,1,0)
Y3 <- c(0,0,1,0,0,1,0,0,1)
A1 <- matrix(c(X1,X2,X3,Y1,Y2,Y3),c(9,9))
A2 <- t(A1); colnames(A2) <- c("a1","a2","a3","b1","b2","b3","c1","c2","c3")
b <- c(50,40,10,50,35,15)
 

Любая помощь будет оценена.

Комментарии:

1. Что вы подразумеваете под «безуспешным»? В чем заключалась ошибка?

2. Я не был достаточно опытным, чтобы получить какой-либо значимый ответ.

3. Итак, когда я пытаюсь решить (): <br/> решить (A2[,-c(2,3,4)], b) я получаю сообщение об ошибке: <br/>: «Ошибка в решении.default(A2[, -c(2, 3, 4)], b) : Процедура Lapack dgesv: система в точности сингулярна: U [6,6] = 0 «. Я пробовал также linp(G = A2[,-c(2,3,4)], H = b, int.vec = c (1,2,3,4,5,6)), но я не был уверен, как применять «Стоимость».

4. Это связано с тем, что у вас больше переменных, чем уравнений, следовательно, решение и другие подобные процедуры не могут быть использованы, необходимо использовать численные (итерационные) методы.

5. @user2974951 Существует девять переменных и шесть уравнений / неравенств, но я буду обнулять три переменные одновременно (мне нужно будет проверить все комбинации).

Ответ №1:

Это можно решить с помощью линейного программирования. Оптимизировать нечего, вы просто ищете приемлемое решение.

 library(lpSolve)

res=lp(
  "min",
  rep(0,ncol(A2)),
  A2,
  c(">=","<=","<=","==","==","=="),
  b
)

res$solution

[1] 50 35 15  0  0  0  0  0  0