关于函数的一些常见问题

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

以下是几种定义应该被称为“函数”的东西的方法:

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'>
  • 或与 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) 返回错误。