我想生成一个由任意值组成的向量,其长度取决于变量。
我所拥有的有效方法:
var('x')
n = 5
A = [var('a{}'.format(i)) for i in range(n)]
for i in range(n):
assume(0 <= A[i])
assume(x <= max(A))
product_fn = prod(A)
integral = integrate(product_fn, x)
print(integral)
我想要的(不起作用):
var('x')
var('g')
A = [var('a{}'.format(i)) for i in range(g)]
for i in range(len(A)):
assume(0 <= A[i])
assume(x <= max(A))
product_fn = prod(A)
integral = integrate(product_fn, x)
print(integral)
TypeError: unable to convert g to an integer
我知道这是由于
var
与 python 变量不同,但我是 Sage 新手,不知道如何解决这个问题。
这是一个有趣的问题。也就是说,可以创建一系列符号变量,其长度取决于另一个符号变量的值吗?
但是,如果你想使用直接基于 Python 的任何东西(你的列表理解和
range
)来做到这一点,那么它注定会失败。 Python 想知道你创建的列表有多长。您的错误出现是因为 range
函数需要整数才能工作,而 g
这里是一个符号变量,其值可以是给定表达式中的任何其他符号或数字。 (range(2.11001)
会返回什么?)
从实际角度来看,是否可以延迟创建这些变量,直到您真正知道
g
应该是什么,然后使用您的第一个解决方案? (也许在一个函数中?)