.. _section-plot: ÐоÑÑÑоение гÑаÑиков =================== Sage Ð¼Ð¾Ð¶ÐµÑ ÑÑÑоиÑÑ Ð´Ð²ÑмеÑнÑе и ÑÑÐµÑ Ð¼ÐµÑнÑе гÑаÑики. ÐвÑмеÑнÑе гÑаÑики ----------------- РдвÑмеÑном пÑоÑÑÑанÑÑве Sage Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑиÑовÑваÑÑ ÐºÑÑги, линии и многоÑголÑники; гÑаÑики ÑÑнкÑий в декаÑÑовÑÑ ÐºÐ¾Ð¾ÑдинаÑÐ°Ñ ; Ñакже гÑаÑики в полÑÑнÑÑ ÐºÐ¾Ð¾ÑдинаÑÐ°Ñ , конÑÑÑнÑе гÑаÑики и изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐµÐºÑоÑнÑÑ Ð¿Ð¾Ð»ÐµÐ¹. ÐекоÑоÑÑе пÑимеÑÑ Ð±ÑдÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð½Ð¸Ð¶Ðµ. ÐÐ»Ñ Ð±Ð¾Ð»ÐµÐµ иÑÑеÑпÑваÑÑей инÑоÑмаÑии по поÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð³ÑаÑиков Ñм. :ref:`section-systems` и :ref:`section-maxima`, а Ñакже докÑменÑаÑÐ¸Ñ `Sage Constructions <http://www.sagemath.org/doc/constructions/>`_. ÐÐ°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° поÑÑÑÐ¾Ð¸Ñ Ð¶ÐµÐ»ÑÑÑ Ð¾ÐºÑÑжноÑÑÑ ÑадиÑÑа 1 Ñ ÑенÑÑом в наÑале: :: sage: circle((0,0), 1, rgbcolor=(1,1,0)) Также можно поÑÑÑоиÑÑ ÐºÑÑг: :: sage: circle((0,0), 1, rgbcolor=(1,1,0), fill=True) Ðожно ÑоздаваÑÑ Ð¾ÐºÑÑжноÑÑÑ Ð¸ задаваÑÑ ÐµÐµ какой-либо пеÑеменной. ÐаннÑй пÑÐ¸Ð¼ÐµÑ Ð½Ðµ бÑÐ´ÐµÑ ÑÑÑоиÑÑ Ð¾ÐºÑÑжноÑÑÑ: :: sage: c = circle((0,0), 1, rgbcolor=(1,1,0)) ЧÑÐ¾Ð±Ñ Ð¿Ð¾ÑÑÑоиÑÑ ÐµÐµ, иÑполÑзÑйÑе ``c.show()`` или ``show(c)``: .. link :: sage: c.show() ``c.save('filename.png')`` ÑÐ¾Ñ ÑÐ°Ð½Ð¸Ñ Ð³ÑаÑик в Ñайл. ТепеÑÑ ÑÑи 'окÑÑжноÑÑи' болÑÑе Ð¿Ð¾Ñ Ð¾Ð¶Ð¸ на ÑллипÑÑ, Ñак как оÑи имеÑÑ ÑазнÑй маÑÑÑаб. ÐÑо можно иÑпÑавиÑÑ ÑледÑÑÑим обÑазом: .. link :: sage: c.show(aspect_ratio=1) Ðоманда ``show(c, aspect_ratio=1)`` вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ Ñо же Ñамое. Ð¡Ð¾Ñ ÑаниÑÑ ÐºÐ°ÑÑÐ¸Ð½ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``c.save('filename.png', aspect_ratio=1)``. СÑÑоиÑÑ Ð³ÑаÑики базовÑÑ ÑÑнкÑий легко: :: sage: plot(cos, (-5,5)) Ðак ÑолÑко Ð¸Ð¼Ñ Ð¿ÐµÑеменной опÑеделено, можно ÑоздаÑÑ Ð¿Ð°ÑамеÑÑиÑеÑкий гÑаÑик: :: sage: x = var('x') sage: parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),rgbcolor=hue(0.6)) Ðажно оÑмеÑиÑÑ, ÑÑо оÑи гÑаÑика бÑдÑÑ Ð¿ÐµÑеÑекаÑÑÑÑ Ð»Ð¸ÑÑ Ð² Ñом ÑлÑÑае, когда наÑало кооÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² поле зÑÐµÐ½Ð¸Ñ Ð³ÑаÑика, и ÑÑо к доÑÑаÑоÑно болÑÑим знаÑениÑм можно пÑимениÑÑ Ð½Ð°ÑÑное обознаÑение: :: sage: plot(x^2,(x,300,500)) Ðожно обÑединÑÑÑ Ð¿Ð¾ÑÑÑоениÑ, добавлÑÑ Ð¸Ñ Ð´ÑÑг дÑÑгÑ: :: sage: x = var('x') sage: p1 = parametric_plot((cos(x),sin(x)),(x,0,2*pi),rgbcolor=hue(0.2)) sage: p2 = parametric_plot((cos(x),sin(x)^2),(x,0,2*pi),rgbcolor=hue(0.4)) sage: p3 = parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),rgbcolor=hue(0.6)) sage: show(p1+p2+p3, axes=false) ХоÑоÑий ÑпоÑоб ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð½ÑÑ ÑигÑÑ â Ñоздание ÑпиÑка ÑоÑек (``L`` в ÑледÑÑÑем пÑимеÑе), а заÑем иÑполÑзование ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ``polygon`` Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ ÑигÑÑÑ Ñ Ð³ÑаниÑами, обÑазованнÑми заданнÑми ÑоÑками. РпÑимеÑÑ, Ñоздадим зеленÑй делÑÑоид: :: sage: L = [[-1+cos(pi*i/100)*(1+cos(pi*i/100)),\ ... 2*sin(pi*i/100)*(1-cos(pi*i/100))] for i in range(200)] sage: p = polygon(L, rgbcolor=(1/8,3/4,1/2)) sage: p ÐапеÑаÑайÑе ``show(p, axes=false)``, ÑÑÐ¾Ð±Ñ Ð½Ðµ показÑваÑÑ Ð¾Ñей на гÑаÑике. Ðожно добавиÑÑ ÑекÑÑ Ð½Ð° гÑаÑик: :: sage: L = [[6*cos(pi*i/100)+5*cos((6/2)*pi*i/100),\ ... 6*sin(pi*i/100)-5*sin((6/2)*pi*i/100)] for i in range(200)] sage: p = polygon(L, rgbcolor=(1/8,1/4,1/2)) sage: t = text("hypotrochoid", (5,4), rgbcolor=(1,0,0)) sage: show(p+t) УÑиÑÐµÐ»Ñ Ð¼Ð°ÑемаÑики ÑаÑÑо ÑиÑÑÑÑ ÑледÑÑÑий гÑаÑик на доÑке: не Ð¾Ð´Ð½Ñ Ð²ÐµÑÐ²Ñ arcsin, а неÑколÑко, Ñ.е. гÑаÑик ÑÑнкÑии :math:`y=\sin(x)` Ð´Ð»Ñ :math:`x` Ð¼ÐµÐ¶Ð´Ñ :math:`-2\pi` и :math:`2\pi`, пеÑевеÑнÑÑÑй по оÑноÑÐµÐ½Ð¸Ñ Ðº линии в 45 гÑадÑÑов. СледÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Sage поÑÑÑÐ¾Ð¸Ñ Ð²ÑÑеÑказанное: :: sage: v = [(sin(x),x) for x in srange(-2*float(pi),2*float(pi),0.1)] sage: line(v) Так как ÑÑнкÑÐ¸Ñ ÑангенÑа Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÑÑий инÑеÑвал, Ñем ÑинÑÑ, пÑи иÑполÑзовании Ñой же ÑÐµÑ Ð½Ð¸ÐºÐ¸ Ð´Ð»Ñ Ð¿ÐµÑевеÑÑÑÐ²Ð°Ð½Ð¸Ñ ÑангенÑа ÑÑебÑеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñное и макÑималÑное знаÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ð´Ð»Ñ Ð¾Ñи *x*: :: sage: v = [(tan(x),x) for x in srange(-2*float(pi),2*float(pi),0.01)] sage: show(line(v), xmin=-20, xmax=20) Sage Ñакже Ð¼Ð¾Ð¶ÐµÑ ÑÑÑоиÑÑ Ð³ÑаÑики в полÑÑнÑÑ ÐºÐ¾Ð¾ÑдинаÑÐ°Ñ , конÑÑÑнÑе поÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¸ изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐµÐºÑоÑнÑÑ Ð¿Ð¾Ð»ÐµÐ¹ (Ð´Ð»Ñ ÑпеÑиалÑнÑÑ Ð²Ð¸Ð´Ð¾Ð² ÑÑнкÑий). Ðалее ÑледÑÐµÑ Ð¿ÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð½ÑÑÑного ÑеÑÑежа: :: sage: f = lambda x,y: cos(x*y) sage: contour_plot(f, (-4, 4), (-4, 4)) ТÑÐµÑ Ð¼ÐµÑнÑе гÑаÑики ------------------ Sage Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑÐµÑ Ð¼ÐµÑнÑÑ Ð³ÑаÑиков. ÐÑи гÑаÑики ÑÑÑоÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÐºÐµÑа [Jmol]_, коÑоÑÑй поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð²Ð¾ÑÐ¾Ñ Ð¸ пÑиближение каÑÑинки Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÑÑи. ÐÑполÑзÑйÑе ``plot3d``, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÑÑÑоиÑÑ Ð³ÑаÑик ÑÑнкÑии ÑоÑÐ¼Ñ `f(x, y) = z`: :: sage: x, y = var('x,y') sage: plot3d(x^2 + y^2, (x,-2,2), (y,-2,2)) ÐÑе можно иÑполÑзоваÑÑ ``parametric_plot3d`` Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð³ÑаÑиков паÑамеÑÑиÑеÑÐºÐ¸Ñ Ð¿Ð¾Ð²ÐµÑÑ Ð½Ð¾ÑÑей, где каждÑй из `x, y, z` опÑеделÑеÑÑÑ ÑÑнкÑией одной или двÑÑ Ð¿ÐµÑеменнÑÑ (паÑамеÑÑÑ; обÑÑно `u` и `v`). ÐÑедÑдÑÑий гÑаÑик Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²ÑÑажен паÑамеÑÑиÑеÑки в ÑледÑÑÑем виде: :: sage: u, v = var('u, v') sage: f_x(u, v) = u sage: f_y(u, v) = v sage: f_z(u, v) = u^2 + v^2 sage: parametric_plot3d([f_x, f_y, f_z], (u, -2, 2), (v, -2, 2)) ТÑеÑий ÑпоÑоб поÑÑÑоиÑÑ ÑÑÐµÑ Ð¼ÐµÑнÑÑ Ð¿Ð¾Ð²ÐµÑÑ Ð½Ð¾ÑÑÑ Ð² Sage - иÑполÑзование ``implicit_plot3d``, коÑоÑÑй ÑÑÑÐ¾Ð¸Ñ ÐºÐ¾Ð½ÑÑÑÑ Ð³ÑаÑиков ÑÑнкÑий, как `f(x, y, z) = 0`. ЧÑÐ¾Ð±Ñ Ð¿Ð¾ÑÑÑоиÑÑ ÑÑеÑÑ, возполÑзÑемÑÑ ÐºÐ»Ð°ÑÑиÑеÑкой ÑоÑмÑлой: :: sage: x, y, z = var('x, y, z') sage: implicit_plot3d(x^2 + y^2 + z^2 - 4, (x,-2, 2), (y,-2, 2), (z,-2, 2)) Ðиже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð½ÐµÑколÑко пÑимеÑов: `СкÑеÑеннÑй колпак <http://en.wikipedia.org/wiki/Cross-cap>`__ (близкий ÑодÑÑвенник ÑиÑоко извеÑÑного `лиÑÑа ÐÑбиÑÑа <http://en.wikipedia.org/wiki/Cross-cap>`__): :: sage: u, v = var('u,v') sage: fx = (1+cos(v))*cos(u) sage: fy = (1+cos(v))*sin(u) sage: fz = -tanh((2/3)*(u-pi))*sin(v) sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi), ... frame=False, color="red") ÐÑÑÑенÑй ÑоÑоид: :: sage: u, v = var('u,v') sage: fx = (3+sin(v)+cos(u))*cos(2*v) sage: fy = (3+sin(v)+cos(u))*sin(2*v) sage: fz = sin(u)+2*cos(v) sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi), ... frame=False, color="red") ÐемниÑкаÑа: :: sage: x, y, z = var('x,y,z') sage: f(x, y, z) = 4*x^2 * (x^2 + y^2 + z^2 + z) + y^2 * (y^2 + z^2 - 1) sage: implicit_plot3d(f, (x, -0.5, 0.5), (y, -1, 1), (z, -1, 1))