Capital for STEM majors (works in progress)
Resources linked in this doc:
- Worksheet: Extracting surplus value from workers (code for applet at bottom of page)
- Applet (requires Mathematica): Formation of a general rate of profit
- PDF: Notes on Marx’s mathematical model in Capital
- Slideshows—super unfinished:
1. Extracting surplus value from workers (2021)
I use this applet when teaching the x and y axis to adults. Here’s the handout we work through together in class.

Source: Capital, Vol. 1, Ch. 11
2. Distributions of market prices and the formation of a general rate of profit (2022)

The applet pictured above illustrates the mathematical model Marx presents in Capital Vol. 3, Ch. 9 (“Formation of a general rate of profit”).
Market prices are generated randomly and the distributions of prices in each branch of production are shown. (Here 7 branches are pictured.)
The Mathematica code (zipped NB file) for the applet is unfinished, but functional.
3. Mathematical modeling in Marx’s Capital for STEM majors (2022)
Interest in classical Marxian economics has grown in recent years among young people.
The best source is the primary text, Capital.
But it’s easy for STEM types to get frustrated with it. It doesn’t use modern mathematical notation. It doesn’t give tidy definitions of all the key concepts.
And if you’re just seeing this stuff for the first time, you’re probably not going to start by consulting research-level secondary sources where all the details are rigorously laid out. Those sources tend to assume you already understand Capital, anyway.
The linked document (PDF) is an incomplete first attempt to state mathematical models of certain ideas in Capital in a way that’s accessible to math educators and advanced undergrad STEM majors with no background in economics.
It’s not done—let alone peer-reviewed! There’s more work that’s not in the document (e.g. the model behind the applet pictured above). Without it, some of my formal choices (like calling “commodity” a random variable) may seem odd. Also, I’m not sure yet how to incorporate the stuff in Theories of Surplus Value about market value.
I’ve spotted some errors, too. Not big conceptual errors, but there might be some of those too.
4. Marx’s critique of the classical labor theory of value (2023)
Work in progress: notes and slides on Marx’s critique of the classical labor theory of value.
These are all super unfinished.
5. Notes on the genealogy of Marxian political economy (2023)
Mathematica Code for (1) Surplus value 3D graphs:
plot2DSize = 320;
plot3DSize = 350; MoneyForm[y_] := Row[{ "$", If[IntegerPart[y] == y, NumberForm[IntegerPart[y], DigitBlock -> 3], NumberForm[y, {10, 2}, DigitBlock -> 3] ] }]; HundredthForm[y_] := If[IntegerPart[y] == y, NumberForm[IntegerPart[y], DigitBlock -> 3], NumberForm[y, {10, 2}, DigitBlock -> 3] ]; profitModel[P_, eMax_, ymax_] := Plot3D[ S[ee, P, n], {ee, .1, eMax}, {n, 1, 250}, AxesLabel -> (Style[#, TextAlignment -> Right, 12] & /@ { "\!\(\*
StyleBox[\"E\",\nFontSlant->\"Italic\"]\) = degree of \nexploitation ", "\!\(\*
StyleBox[\"n\",\nFontSlant->\"Italic\"]\) = # of workers in shop", "\n\n\n\n\!\(\*
StyleBox[\"S\",\nFontSlant->\"Italic\"]\) = bosses' daily \n\
take-home " } ), Ticks -> { Table[{k, PercentForm[k]}, {k, 0, eMax, 2}], Automatic, Table[{k, MoneyForm[k]}, {k, 0, ymax, .25 ymax}] }, Mesh -> None, PlotStyle -> Opacity[0.5], (*ViewPoint\[Rule]{1,1,1},*) ImageSize -> plot3DSize ]; S[ee_, PP_, nn_] := ee PP nn; applet1 = With[ {eMax = 9, nMax = 250}, Manipulate[ Smax1 = S[eMax, P, nMax]; Row[{ ymax = Ceiling[Smax1, 10^(Last[MantissaExponent[Smax1]] - 1)]; Plot[ S[e, P, n], {e, .1, eMax}, AxesLabel -> (Style[#, 12] & /@ {"\n\!\(\*
StyleBox[\"E\",\nFontSlant->\"Italic\"]\) = degree of\nexploitation", Row[{"bosses' daily\ntake-home\n\!\(\*
StyleBox[\"S\",\nFontSlant->\"Italic\"]\) = ", P n, "\!\(\*
StyleBox[\"E\",\nFontSlant->\"Italic\"]\)"}]} ), GridLines -> Automatic, PlotRange -> {Automatic, {0, Smax1}}, ImageSize -> plot2DSize, Ticks -> {Table[{k, PercentForm[k]}, {k, 0, eMax, 2}], Table[{k, MoneyForm[k]}, {k, 0, ymax, .25 ymax}]} ], " ", Show[{ profitModel[P, eMax, ymax] // Quiet, ParametricPlot3D[ {u, n, v}, {u, 0, eMax}, {v, 0, Smax1}, Mesh -> None, PlotStyle -> {Blue, Opacity[0.5]}] }, Frame -> True] } ], {{n, 200, Style["\!\(\*
StyleBox[\"n\",\nFontSlant->\"Italic\"]\) = # of workers in shop", 12]}, 1, nMax, 1, Appearance -> "Open"}, {{P, 120, Style["\!\(\*
StyleBox[\"P\",\nFontSlant->\"Italic\"]\) = hourly \"living wage\" \
\[Cross] 8 hours", 12]}, 8, 200, Appearance -> "Open"} ] ]; applet2 = With[ {eMax = 10, nMax = 250}, Manipulate[ Smax2 = S[eMax, PP, nMax]; ymax = Ceiling[Smax2, 10^(Last[MantissaExponent[Smax2]] - 1)]; Row[{ Plot[ S[e, PP, nn], {nn, 1, 250}, AxesLabel -> (Style[#, 12] & /@ {"\n\!\(\*
StyleBox[\"n\",\nFontSlant->\"Italic\"]\) = # of workers\nin shop", Row[{"bosses' daily\ntake-home\n\!\(\*
StyleBox[\"S\",\nFontSlant->\"Italic\"]\) = ", HundredthForm[e PP], "\!\(\*
StyleBox[\"n\",\nFontSlant->\"Italic\"]\)"}]} ), GridLines -> Automatic, PlotRange -> {Automatic, {0, Smax2}}, ImageSize -> plot2DSize, Ticks -> {Automatic, Table[{k, MoneyForm[k]}, {k, 0, ymax, .25 ymax}]} ], " ", Show[{ profitModel[PP, eMax, ymax] // Quiet, ParametricPlot3D[ {e, u, v}, {u, 0, nMax}, {v, 0, Smax2}, Mesh -> None, PlotStyle -> {Blue, Opacity[0.5]}] }] } ], {{e, 2, Style["\!\(\*
StyleBox[\"E\",\nFontSlant->\"Italic\"]\) = degree of exploitation \
", 12]}, .1, eMax}, {{PP, 120, Style["\!\(\*
StyleBox[\"P\",\nFontSlant->\"Italic\"]\) = hourly \"living wage\" \
\[Cross] 8 hours", 12]}, 8, 200, Appearance -> "Open"} ] ]; Column[Quiet /@ {applet1, applet2}]
Leave a Reply