SageMath - 预合成向量值函数

SageMath - Precomposing a vector-valued function

给定一个从R到R^n的函数,我想通过预合成定义一个新函数,例如如下

alpha(x) = [e^x,e^(-x)]
beta(x) = alpha(-x+2)

但是尝试以这种方式这样做会引发错误 “无法将 (e^(-x + 2), e^(x - 2)) 转换为符号表达式”

现在是类似但更简单的代码版本

alpha(x) = e^x
beta(x) = alpha(-x+2)

工作完美,所以问题是由于 alpha 是多值的。

原始代码的以下变体完全符合我的要求

alpha(x) = [e^x,e^(-x)]
beta(x) = [alpha[0](-x+2),alpha[1](-x+2)]

但要求我假设 alpha 的长度,这是不可取的。以及该问题的明显解决方案

alpha(x) = [e^x,e^(-x)]
for i in range(0,len(alpha)):
  beta[i](x) = alpha[i](x)

或任何变体随即抛出错误“无法分配给函数调用”

我的问题如下: 有没有办法做这个预合成?特别是不假设 alpha 的长度。我控制函数 alpha 和 beta 的定义方式,因此如果有另一种定义它们的方法(例如使用 lambda 符号或类似的方法)让我这样做,那也是可以接受的。但请注意,我想在我的代码中的某个时刻做一些等效于以下的事情 ... + beta.derivative(x).dot_product( ...

如题中定义,alpha不是符号函数 返回向量,而是可调用函数的向量。

下面我们描述另外两种定义 alpha 和 beta 的方法, 将 alpha 定义为符号环上的向量, 并通过替换定义 beta,或定义 alpha 和 beta 作为 Python 函数。

原题中的做法:

sage: alpha(x) = [e^x, e^-x]

sage: alpha
x |--> (e^x, e^(-x))
sage: alpha.parent()
Vector space of dimension 2 over Callable function ring with argument x

在符号环上使用向量

sage: alpha = vector([e^x, e^-x])

sage: alpha
(e^x, e^(-x))
sage: alpha.parent()
Vector space of dimension 2 over Symbolic Ring

sage: beta = alpha.subs({x: -x + 2})
sage: beta
(e^(-x + 2), e^(x - 2))

使用 Python 函数

sage: def alpha(x):
....:     return vector([e^x, e^-x])
....:
sage: def beta(x):
....:     return alpha(-x + 2)
....:
sage: beta(x)
(e^(-x + 2), e^(x - 2))

一些相关资源。

查询:

问题:

门票: