SageMath-预先构成向量值函数

问题描述

给定一个从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(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))

一些相关资源。

查询:

问题:

门票: