(window.webpackJsonp=window.webpackJsonp||[]).push([[2672],{3080:function(t,a,s){"use strict";s.r(a);var n=s(31),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"complex-math"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#complex-math"}},[t._v("#")]),t._v(" Complex math")]),t._v(" "),s("h2",{attrs:{id:"advanced-complex-arithmetic"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#advanced-complex-arithmetic"}},[t._v("#")]),t._v(" Advanced complex arithmetic")]),t._v(" "),s("p",[t._v("The module "),s("code",[t._v("cmath")]),t._v(" includes additional functions to use complex numbers.")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" cmath\n\n")])])]),s("p",[t._v("This module can calculate the phase of a complex number, in radians:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("z "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3j")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# A complex number")]),t._v("\ncmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 0.982793723247329")]),t._v("\n\n")])])]),s("p",[t._v("It allows the conversion between the cartesian (rectangular) and polar representations of complex numbers:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("polar"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (3.605551275463989, 0.982793723247329)")]),t._v("\ncmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("rect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pi"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (0+2j)")]),t._v("\n\n")])])]),s("p",[t._v("The module contains the complex version of")]),t._v(" "),s("li",[t._v("\nExponential and logarithmic functions (as usual, `log` is the natural logarithm and `log10` the decimal logarithm):\n"),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-7.315110094901103+1.0427436562359045j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1.2824746787307684+0.982793723247329j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("log10"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (2+1.3643763538418412j)")]),t._v("\n\n")])])])]),t._v(" "),s("li",[t._v("\nSquare roots:\n"),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sqrt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1.6741492280355401+0.8959774761298381j)")]),t._v("\n\n")])])])]),t._v(" "),s("li",[t._v("\nTrigonometric functions and their inverses:\n"),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (9.15449914691143-4.168906959966565j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-4.189625690968807-9.109227893755337j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-0.003764025641504249+1.00323862735361j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (0.5706527843210994+1.9833870299165355j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("acos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1.0001435424737972-1.9833870299165355j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("atan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1.4099210495965755+0.22907268296853878j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1+0j)")]),t._v("\n\n")])])])]),t._v(" "),s("li",[t._v("\nHyperbolic functions and their inverses:\n"),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sinh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-3.59056458998578+0.5309210862485197j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cosh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-3.7245455049153224+0.5118225699873846j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tanh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (0.965385879022133-0.009884375038322495j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asinh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (0.5706527843210994+1.9833870299165355j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("acosh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1.9833870299165355+1.0001435424737972j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("atanh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (0.14694666622552977+1.3389725222944935j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cosh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1+0j)")]),t._v("\n cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cosh"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1j")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" cmath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cos"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 0j")]),t._v("\n\n")])])])]),t._v(" "),s("h2",{attrs:{id:"basic-complex-arithmetic"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#basic-complex-arithmetic"}},[t._v("#")]),t._v(" Basic complex arithmetic")]),t._v(" "),s("p",[t._v("Python has built-in support for complex arithmetic. The imaginary unit is denoted by "),s("a",{attrs:{href:"http://stackoverflow.com/questions/24812444/why-are-complex-numbers-in-python-denoted-with-j-instead-of-i#24812657",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("j")]),s("OutboundLink")],1),t._v(":")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("z "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3j")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# A complex number")]),t._v("\nw "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7j")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Another complex number")]),t._v("\n\n")])])]),s("p",[t._v("Complex numbers can be summed, subtracted, multiplied, divided and exponentiated:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("z "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" w "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (3-4j) ")]),t._v("\nz "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" w "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (1+10j)")]),t._v("\nz "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" w "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (23-11j) ")]),t._v("\nz "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" w "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-0.38+0.34j)")]),t._v("\nz"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (-46+9j)")]),t._v("\n\n")])])]),s("p",[t._v("Python can also extract the real and imaginary parts of complex numbers, and calculate their absolute value and conjugate:")]),t._v(" "),s("div",{staticClass:"language-py extra-class"},[s("pre",{pre:!0,attrs:{class:"language-py"}},[s("code",[t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("real "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 2.0")]),t._v("\nz"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("imag "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3.0")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("abs")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("z"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 3.605551275463989")]),t._v("\nz"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("conjugate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# (2-3j)")]),t._v("\n\n")])])]),s("h4",{attrs:{id:"syntax"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#syntax"}},[t._v("#")]),t._v(" Syntax")]),t._v(" "),s("ul",[s("li",[t._v("cmath.rect(AbsoluteValue, Phase)")])])])}),[],!1,null,null,null);a.default=e.exports}}]);