4

I am a beginner in LaTeX, but I am learning as I go. I want to plot the following linear programing problem:

(plot: to make a graphic)

f(x,y) = 2x - 3y -> max

x + y <= 12

x,y >=0

Here is what I have so far, but I can't find any good answers on how to draw it in LaTeX:

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{hyperref}
\usepackage[latin1]{inputenc}


\title{Linear Programming}
\date{12/27/18}

\begin{document}
\maketitle

   \bigbreak
   a) \begin{cases} f(x,y) = 2x - 3y  \rightarrow max \\x + y   \leq 12 \\ x , y \geq 0 \end{cases}

\bigbreak
\bigbreak

\begin{tikzpicture}
\begin{axis}
  [
    xmin=-20,xmax=20, 
    ymin=-20,ymax=20,
    grid=both,
    grid style={line width=.1pt, draw=darkgray!10},
    major grid style={line width=.2pt,draw=darkgray!50},
    axis lines=middle,
    minor tick num=4,
    enlargelimits={abs=0.5},
    axis line style={latex-latex},
    samples=100,
    domain = -20:20,
  ]
  \addplot[red] {x + y <= 12}; 

\end{axis}
\end{tikzpicture}


\end{document}

Now the problem is I am only drawing lines when I should be drawing semi-planes ( x + y <= 12 with x and y > 0, should actually be a filled triangle)

What I want:

drawing

Can you help me out?

  • 1
    I'm sure I've answered something like this before..... – cmhughes Dec 27 '18 at 19:53
  • so all the answers bellow helped me a lot , how can I accept more than one? Thank you guys for the quick and helpful replies. – random_numbers Dec 28 '18 at 7:54
  • 1
    Great! It's only possible to accept 1. As the OP, it's your within your gift to choose the answer that helped you the most :) – cmhughes Dec 28 '18 at 7:56
7

You could use filldraw from vanilla tikz to draw + fill the region. Here's an example

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{hyperref}
\usepackage[latin1]{inputenc}

\pgfplotsset{compat=1.12}
\usetikzlibrary{patterns}


\title{Linear Programming}
\author{Random Numbers}
\date{12/27/18}

\begin{document}
\maketitle

\[
\begin{cases} f(x,y) = 2x - 3y  \rightarrow max \\x + y   \leq 12 \\ x , y \geq 0 \end{cases}
\]
\bigbreak
\bigbreak

\begin{tikzpicture}
\begin{axis}
  [
    xmin=-5,xmax=15,
    ymin=-5,ymax=15,
    grid=both,
    grid style={line width=.1pt, draw=darkgray!10},
    major grid style={line width=.2pt,draw=darkgray!50},
    axis lines=middle,
    minor tick num=4,
    enlargelimits={abs=0.5},
    axis line style={latex-latex},
    samples=100,
    domain = -20:20,
  ]
  %\addplot[red] {x + y  12};
  \filldraw[blue, pattern=north west lines, pattern color=blue] (0, 0) -- (0, 12) -- (12, 0) -- cycle;
\end{axis}
\end{tikzpicture}

enter image description here

7

A PSTricks solution only for fun purposes.

\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-plot}
\begin{document}
\pspicture(-1,-1)(13,13)
\psaxes[Dx=2,Dy=2]{->}(0,0)(-1,-1)(12.5,12.5)[$x$,0][$y$,90]
\pspolygon[fillstyle=vlines,hatchsep=3pt,hatchangle=30](0,0)(12,0)(0,12)
\pcline[nodesep=-1](12,0)(0,12)
\endpspicture
\end{document}

enter image description here

Miscellaneous

\documentclass[pstricks,border=12pt]{standalone}
\def\RightPart
{
    \psline(0.5,2.7)(!6.5 3.5 82 PtoCab)
    \psbezier(1.2,1.3)(1.3,1.0)(2.0,1.0)
    \psbezier(3.0,1.0)(3.0,2.2)(!6.5 3.5 73 PtoCab)
    \psellipticarcn(6.5,3.5){(!6.5 3.5 73 PtoCab)}{(!6.5 3.5 73 neg PtoCab)}
    \psbezier(4,-2)(4,0)(2.2,-1.8)
    \psbezier(1.5,-1)(1,-1)(!6.5 3.5 -90 PtoCab)
}

\begin{document}
\begin{pspicture}(-7,-4)(7,4)
\pscustom[dimen=m,linejoin=0,fillstyle=vlines]
{
    \RightPart
    \reversepath
    \scale{-1 1}
    \RightPart
    \closepath
}
\end{pspicture}
\end{document}

enter image description here

6

Very similar to caverac's nice answer except that this really uses a function, i.e. also works when the constraint is more complex.

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{hyperref}
\usepackage[latin1]{inputenc}


\title{Linear Programming}
\date{12/27/18}

\begin{document}
\maketitle

   a) $\begin{cases} f(x,y) = 2x - 3y  \rightarrow \text{max} \\x + y   \leq 12 \\ x ,
   y \geq 0 \end{cases}$


\begin{tikzpicture}
\begin{axis}
  [
    xmin=-20,xmax=20, 
    ymin=-20,ymax=20,
    grid=both,
    grid style={line width=.1pt, draw=darkgray!10},
    major grid style={line width=.2pt,draw=darkgray!50},
    axis lines=middle,
    minor tick num=4,
    enlargelimits={abs=0.5},
    axis line style={latex-latex},
    samples=100,
    domain = -20:20,
  ]
  \addplot[red,pattern=north east lines,pattern color=red] {12-x} -- (-20,-8) \closedcycle; 

\end{axis}
\end{tikzpicture}
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.