函数的一些常见问题¶
定义函数的某些方面(例如用于微分或绘图)可能会令人困惑。在本节中,我们试图解决一些相关问题。
以下是几种定义可能值得称为“函数”的方法:
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
在最后一行,注意语法。使用 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)
<type '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))
<type 'sage.symbolic.expression.Expression'>
sage: g(x).derivative()
2*x
sage: plot(g(x), 0, 2)
Graphics object consisting of 1 graphics primitive
三。使用预定义的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))
<type '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: ...
使用 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)
<type 'sage.symbolic.expression.Expression'>
sage: type(g)
<type '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)
<type '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)
<type '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)
返回错误。