.. _section-functions-issues: РаÑпÑоÑÑÑанÑннÑе пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑÑнкÑиÑми ===================================== ÐекоÑоÑÑе аÑпекÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑнкÑий (напÑимеÑ, Ð´Ð»Ñ Ð´Ð¸ÑÑеÑенÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ поÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð³ÑаÑика) могÑÑ Ð±ÑÑÑ Ð½Ðµ ÑÑнÑ. Ð ÑÑом Ñазделе Ð¼Ñ Ð¾Ð±ÑаÑаем внимание на некоÑоÑÑе наиболее ÑаÑпÑоÑÑÑаненнÑе пÑоблемÑ. Ðалее Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð½ÐµÑколÑко ÑпоÑобов опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого, ÑÑо можно назваÑÑ "ÑÑнкÑией": 1. ÐпÑеделиÑе ÑÑнкÑÐ¸Ñ Python, как опиÑано в Ñазделе :ref:`section-functions`. ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ ÑÑнкÑий можно поÑÑÑоиÑÑ Ð³ÑаÑики, но пÑодиÑÑеÑенÑиÑоваÑÑ Ð¸Ð»Ð¸ пÑоинÑегÑиÑоваÑÑ Ð¸Ñ Ð½ÐµÐ»ÑзÑ. :: sage: def f(z): return z^2 sage: type(f) <type 'function'> sage: f(3) 9 sage: plot(f, 0, 2) ÐбÑаÑиÑе внимание на ÑинÑакÑÐ¸Ñ Ð² поÑледней ÑÑÑоÑке. ``plot(f(z), 0, 2)`` вÑдаÑÑ Ð¾ÑибкÑ, Ñак как ``z`` - ÑÑо пеÑеменнаÑ-болванка в опÑеделении ``f``, коÑоÑÐ°Ñ Ð½Ðµ опÑеделена внÑÑÑи данной конÑÑÑÑкÑии. ÐÑоÑÑо ``f(z)`` возвÑаÑÐ¸Ñ Ð¾ÑибкÑ. СледÑÑÑее бÑÐ´ÐµÑ ÑабоÑаÑÑ Ð² данном конÑекÑÑе, однако, в обÑем, возникнÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе заÑÑÑднениÑ, но они могÑÑ Ð±ÑÑÑ Ð¿ÑоигноÑиÑÐ¾Ð²Ð°Ð½Ñ (Ñм. пÑÐ½ÐºÑ 4). .. link :: sage: var('z') # опÑеделение пеÑеменной z Ð´Ð»Ñ ÑимволÑнÑÑ Ð²ÑÑиÑлений z sage: f(z) z^2 sage: plot(f(z), 0, 2) Ð ÑÑом ÑлÑÑае ``f(z)`` - ÑÑо ÑимволÑное вÑÑажение. 2. ÐпÑеделим "вÑзÑваемое ÑимволÑное вÑÑажение". Ðно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑодиÑÑеÑенÑиÑовано, пÑоинÑегÑиÑовано, а Ñакже можно поÑÑÑоиÑÑ ÐµÐ³Ð¾ гÑаÑик. :: sage: g(x) = x^2 sage: g # g оÑобÑÐ°Ð¶Ð°ÐµÑ x в x^2 x |--> x^2 sage: g(3) 9 sage: Dg = g.derivative(); Dg x |--> 2*x sage: Dg(3) 6 sage: type(g) <type 'sage.symbolic.expression.Expression'> sage: plot(g, 0, 2) ÐÑли ``g`` â ÑÑо вÑзÑваемое ÑимволÑное вÑÑажение, ``g(x)`` â ÑÑо ÑвÑзÑннÑй Ñ Ð½Ð¸Ð¼ обÑекÑ, но дÑÑгого вида, Ð´Ð»Ñ ÐºÐ¾ÑоÑого можно поÑÑÑоиÑÑ Ð³ÑаÑик и коÑоÑÑй можно диÑÑеÑенÑииÑоваÑÑ Ð¸ Ñ.д. .. link :: sage: g(x) x^2 sage: type(g(x)) <type 'sage.symbolic.expression.Expression'> sage: g(x).derivative() 2*x sage: plot(g(x), 0, 2) 3. Ðожно иÑполÑзоваÑÑ Ñже опÑеделеннÑÑ ÑÑнкÑÐ¸Ñ Sage â 'ÑÑнкÑÐ¸Ñ Ð¸ÑÑиÑлениÑ'. ÐÐ»Ñ Ð½ÐµÐµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾ÑÑÑоен гÑаÑик, она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑодиÑÑеÑенÑиÑована и пÑоинÑегÑиÑована. :: sage: type(sin) <class 'sage.functions.trig.Function_sin'> sage: plot(sin, 0, 2) sage: type(sin(x)) <type 'sage.symbolic.expression.Expression'> sage: plot(sin(x), 0, 2) Сама по Ñебе ÑÑнкÑÐ¸Ñ ``sin`` не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑодиÑÑеÑенÑиÑована, по кÑайней меÑе, не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизвеÑÑи ``cos``. :: sage: f = sin sage: f.derivative() Traceback (most recent call last): ... AttributeError: ... ÐÑполÑзование ``f = sin(x)`` вмеÑÑо ``sin`` ÑабоÑаеÑ, но лÑÑÑе иÑполÑзоваÑÑ ``f(x) = sin(x)`` Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð²ÑзÑваемое ÑимволÑное вÑÑажение. :: sage: S(x) = sin(x) sage: S.derivative() x |--> cos(x) Ðалее ÑледÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе обÑие пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð¾Ð±ÑÑÑнением: \4. СлÑÑÐ°Ð¹Ð½Ð°Ñ Ð¾Ñенка. :: sage: def h(x): ... if x<2: ... return 0 ... else: ... return x-2 ÐÑоблема: ``plot(h(x), 0, 4)`` поÑÑÑÐ¾Ð¸Ñ ÐºÑивÑÑ `y=x-2`. ÐÑиÑина: Ркоманде ``plot(h(x), 0, 4)`` ÑнаÑала оÑениваеÑÑÑ ``h(x)``, ÑÑо ознаÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÐ°Ð²ÐºÑ ``x`` в ÑÑнкÑÐ¸Ñ ``h`` и оÑÐµÐ½ÐºÑ ``x<2``. .. link :: sage: type(x<2) <type 'sage.symbolic.expression.Expression'> РеÑение: Ðе иÑполÑзÑйÑе ``plot(h(x), 0, 4)``; иÑполÑзÑйÑе: .. link :: sage: plot(h, 0, 4) \5. ÐÑибоÑное Ñоздание конÑÑанÑÑ Ð²Ð¼ÐµÑÑо ÑÑнкÑии. :: sage: f = x sage: g = f.derivative() sage: g 1 ÐÑоблема: ``g(3)``, напÑимеÑ, возвÑаÑÐ¸Ñ Ð¾ÑÐ¸Ð±ÐºÑ Ñ ÑообÑением "ValueError: the number of arguments must be less than or equal to 0." .. link :: sage: type(f) <type 'sage.symbolic.expression.Expression'> sage: type(g) <type 'sage.symbolic.expression.Expression'> ``g`` не ÑвлÑеÑÑÑ ÑÑнкÑией, ÑÑо конÑÑанÑа, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° не Ð¸Ð¼ÐµÐµÑ Ð¿ÐµÑеменнÑÑ , и Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑÑавлÑÑÑ ÑÑо Ñгодно в нее. РеÑение: еÑÑÑ Ð½ÐµÑколÑко возможнÑÑ Ð¿ÑÑей. - ÐпÑеделиÑÑ ``f`` изнаÑалÑно как ÑимволÑное вÑÑажение. :: sage: f(x) = x # вмеÑÑо 'f = x' sage: g = f.derivative() sage: g x |--> 1 sage: g(3) 1 sage: type(g) <type 'sage.symbolic.expression.Expression'> - Ðибо вмеÑÑе Ñ ``f``, опÑеделенной вÑÑе, опÑеделиÑÑ ``g`` как ÑимволÑное вÑÑажение. :: sage: f = x sage: g(x) = f.derivative() # вмеÑÑо 'g = f.derivative()' sage: g x |--> 1 sage: g(3) 1 sage: type(g) <type 'sage.symbolic.expression.Expression'> - Ðибо Ñ ``f`` и ``g``, заданнÑми, как показано вÑÑе, ÑоздаÑÑ Ð¿ÐµÑеменнÑÑ, под коÑоÑÑÑ Ð¿Ð¾Ð´ÑÑавлÑÑÑÑÑ Ð·Ð½Ð°ÑениÑ. :: sage: f = x sage: g = f.derivative() sage: g 1 sage: g(x=3) # вмеÑÑо 'g(3)' 1 ÐÑÑÑ ÐµÑе один ÑпоÑоб, как опÑеделиÑÑ ÑазлиÑие Ð¼ÐµÐ¶Ð´Ñ Ð¿ÑоизводнÑми ``f = x`` и ``f(x) = x`` :: sage: f(x) = x sage: g = f.derivative() sage: g.variables() # пеÑеменнÑе, коÑоÑÑе пÑиÑÑÑÑÑвÑÑÑ Ð² g () sage: g.arguments() # аÑгÑменÑÑ, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð´ÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² g (x,) sage: f = x sage: h = f.derivative() sage: h.variables() () sage: h.arguments() () Ðак показÑÐ²Ð°ÐµÑ Ð´Ð°Ð½Ð½Ñй пÑимеÑ, ``h`` не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°ÑгÑменÑов, поÑÑÐ¾Ð¼Ñ ``h(3)`` веÑÐ½ÐµÑ Ð¾ÑибкÑ.