关于函数的一些常见问题¶
定义函数的某些方面(例如,用于区分或绘制)可能会令人困惑。在本节中,我们将尝试解决一些相关问题。
以下是几种定义应该被称为“函数”的东西的方法:
1.定义一个Python函数,如中所述 函数、缩进和计数 。这些功能可以绘制,但不能区分或集成。
sage: def f(z): return z^2
sage: type(f)
<... 'function'>
sage: f(3)
9
sage: plot(f, 0, 2)
Graphics object consisting of 1 graphics primitive
在最后一行中,请注意语法。vbl.使用 plot(f(z), 0, 2)
取而代之的是给一个 NameError
,因为 z
的定义中是一个伪变量 f
并且没有在该定义之外进行定义。为了能够使用 f(z)
在PLOT命令中, z
(或任何所需的)需要定义为变量。我们可以使用下面的语法,或者在列表中的下一项中使用。
sage: var('z') # define z to be a variable
z
sage: f(z)
z^2
sage: plot(f(z), 0, 2)
Graphics object consisting of 1 graphics primitive
在这点上, f(z)
是一个符号表达式,是我们列表中的下一项。
2.定义一个可调用的符号表达式。这些都可以绘制、区分和集成。
sage: g(x) = x^2
sage: g # g sends x to x^2
x |--> x^2
sage: g(3)
9
sage: Dg = g.derivative(); Dg
x |--> 2*x
sage: Dg(3)
6
sage: type(g)
<class 'sage.symbolic.expression.Expression'>
sage: plot(g, 0, 2)
Graphics object consisting of 1 graphics primitive
请注意,虽然 g
是一个可调用的符号表达式, g(x)
是一种相关但不同的对象,也可以绘制、区分等,尽管有一些问题:请参阅下面的第5项以获得插图。
sage: g(x)
x^2
sage: type(g(x))
<class 'sage.symbolic.expression.Expression'>
sage: g(x).derivative()
2*x
sage: plot(g(x), 0, 2)
Graphics object consisting of 1 graphics primitive
3.使用预定义的Sage‘演算函数’。这些都可以绘制出来,只需一点帮助,就可以区分和整合。
sage: type(sin)
<class 'sage.functions.trig.Function_sin'>
sage: plot(sin, 0, 2)
Graphics object consisting of 1 graphics primitive
sage: type(sin(x))
<class 'sage.symbolic.expression.Expression'>
sage: plot(sin(x), 0, 2)
Graphics object consisting of 1 graphics primitive
就其本身而言, sin
不能区分,至少不能生产 cos
。
sage: f = sin
sage: f.derivative()
Traceback (most recent call last):
...
AttributeError: ...
vbl.使用 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 ,而不是由 h
。原因呢?在命令中 plot(h(x), 0, 4)
,首先 h(x)
是求值的:这意味着插入符号变量 x
插入到函数中 h
。所以,不平等 x < 2
计算结果为 False
首先,也因此 h(x)
计算结果为 x - 2
。这可以从以下几个方面看出
sage: bool(x < 2)
False
sage: h(x)
x - 2
请注意,这里有两个不同的 x
:用于定义函数的Python变量 h
(它是其定义的本地变量)和符号变量 x
它在Sage中启动时可用。
解决方案:不要使用 plot(h(x), 0, 4)
;相反,使用
sage: plot(h, 0, 4)
Graphics object consisting of 1 graphics primitive
5.意外地产生常量而不是函数。
sage: f = x
sage: g = f.derivative()
sage: g
1
问题是: g(3)
例如,返回错误“ValueError:参数数量必须小于或等于0”。
sage: type(f)
<class 'sage.symbolic.expression.Expression'>
sage: type(g)
<class 'sage.symbolic.expression.Expression'>
g
不是一个函数,它是一个常量,所以它没有与之相关的变量,所以你不能向它插入任何东西。
解决方案:有几个选择。
定义
f
最初是一种象征性的表达。
sage: f(x) = x # instead of 'f = x'
sage: g = f.derivative()
sage: g
x |--> 1
sage: g(3)
1
sage: type(g)
<class 'sage.symbolic.expression.Expression'>
或与
f
按照最初的定义,定义g
成为一种象征性的表达。
sage: f = x
sage: g(x) = f.derivative() # instead of 'g = f.derivative()'
sage: g
x |--> 1
sage: g(3)
1
sage: type(g)
<class 'sage.symbolic.expression.Expression'>
或与
f
和g
按照最初的定义,指定要替换的变量。
sage: f = x
sage: g = f.derivative()
sage: g
1
sage: g(x=3) # instead of 'g(3)'
1
最后,这里还有一种方法来区分 f = x
和 f(x) = x
sage: f(x) = x
sage: g = f.derivative()
sage: g.variables() # the variables present in g
()
sage: g.arguments() # the arguments which can be plugged into g
(x,)
sage: f = x
sage: h = f.derivative()
sage: h.variables()
()
sage: h.arguments()
()
正如这个例子一直试图说明的那样, h
不接受任何争论,这就是为什么 h(3)
返回错误。