函数的一些常见问题

定义函数的某些方面(例如用于微分或绘图)可能会令人困惑。在本节中,我们试图解决一些相关问题。

以下是几种定义可能值得称为“函数”的方法:

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'>
  • 或与 fg 按照最初的定义,指定要替换的变量。

sage: f = x
sage: g = f.derivative()
sage: g
1
sage: g(x=3)    # instead of 'g(3)'
1

最后,这里还有一种方法来区分 f = xf(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) 返回错误。