fourier_elim может с этим справиться.
load('fourier_elim)$
metalMaxTa : 37 $
elecMaxTa : 52 $
rateAa : 24 $
rateBa : 44 $
ineq1 : 1/2 * x1 + x2 <= metalMaxTa$
ineq2 : x1 + 1/2*x2 <= elecMaxTa $
ineq3 : x1 >= 0 $
ineq4 : x2 >= 0 $
sol : fourier_elim([ineq1,ineq2,ineq3,ineq4], [x1, x2]) $
map(disp, sol) $
возвращает
[x1 = 0, x2 = 0]
[x1 = 52, x2 = 0]
[x2 = 0, 0 < x1, x1 < 52]
[x1 = 0, x2 = 37]
[x1 = 0, 0 < x2, x2 < 37]
134 44
[x1 = ---, x2 = --]
3 3
x2 - 104 44
[x1 = - --------, 0 < x2, x2 < --]
2 3
44
[x1 = 74 - 2 x2, -- < x2, x2 < 37]
3
x2
[0 < x1, x1 < min(52 - --, 74 - 2 x2), 0 < x2, x2 < 37]
2
Используются только строгие неравенства в выходных данных и в качестве особых случаев отображаются акции.Если вы используете строгие неравенства в уравнениях, результат выглядит более естественным.
0 < x1
x2
x1 < min(52 - --, 74 - 2 x2)
2
0 < x2
x2 < 37