每个定义为函数的多项式向量

A vector of polynomials each defined as a function

我正在尝试获取多项式向量,但向量中的每个多项式都由 Pari 中的函数定义。

例如,我希望能够输出这种形式的向量: [f(x) = x-1 , f(x) = x^2 - 1, f(x) = x^3 - 1, f(x) = x^4 - 1, f(x) = x^5 - 1]

vector( 5, n, f(x) = x^n-1) 的简单向量构造不起作用,输出 [(x)->my(i=1);x^i-1, (x)->my(i=2);x^i-1, (x)->my(i=3);x^i-1, (x)->my(i=4);x^i-1, (x)->my(i=5);x^i-1]

有没有办法非常巧妙地做到这一点?


更新:

我有一个函数,它接受两个变量(比如 x 和 y)的多项式,用 exp(I*t) 替换其中一个变量(比如 y),然后在 t=0 和 t 之间积分=1, 给出 x 中的单变量多项式:int(T)=intnum(t=0,1,T(x,exp(I*t)))

因为这个定义的方式,我必须显式定义一个多项式T(x,y)=...,然后计算int(T)。简单地输入一个多项式,比如 int(x*y)-1、returns:

*** at top-level: int(x*y-1) *** ^---------- *** in function int: intnum(t=0,1,T(x,exp(I*t))) *** ^-------------- *** not a function in function call *** Break loop: type 'break' to go back to GP prompt

我希望能够对许多多项式执行此操作,而不必为每个多项式手动键入 T(x,y)=...。我的计划是尝试使用 apply 功能来做到这一点(因此,将所有多项式放在一个向量中——举个简单的例子,vector(5, n, x^n*y-1))。但是,由于我定义 int 的方式,我需要将向量中的每个条目定义为 T(x,y)=...,这是我最初的问题产生的地方。

定义 T(x,y)=vector(5, n, x^n*y-1) 似乎对我要计算的内容没有帮助。由于 int 的定义方式,我想不出任何其他方法来尝试解决这个问题。

有什么想法吗?

PARI 内置的 intnum 函数将表达式而不是函数作为其第三个参数。该表达式可以使用变量 t。 (几个内置函数的行为是这样的 - 它们不是真正的函数)。

你的int函数可以定义如下:

int(p)=intnum(t=0, 1, subst(p, y, exp(I*t)))

它以多项式 p 作为参数,然后在需要时用 y 代替。

然后您可以使用 int(x*y) which returns (0.84147098480789650665250232163029899962 + 0.45969769413186028259906339255702339627*I)*x'.

同样,您可以将 apply 与多项式向量一起使用。例如:

apply(int, vector(5, n, x^n*y-1))

回到您最初的提议 - 这在技术上并没有错,而且会奏效。我只是不推荐它超过 subst 方法,但也许如果你想对 class 不能表示为多项式的函数执行数值积分。假设 int 定义为:

int(T)=intnum(t=0,1,T(x,exp(I*t)))

您可以使用语法 int((x,y) -> x*y) 调用它。箭头是用于创建匿名函数的 PARI 语法。 (这是表达式和​​函数之间的区别 - 您不能创建自己的函数,像 PARI 内置函数一样工作)

您甚至可以将它与函数向量一起使用:

apply(int, vector(5, n, (x,y)->x^n*y-1))

我在这里使用的语法 (x,y)->x^n*y-1 比您在问题中使用的 f(x,y)=x^n*y-1 更可取,但它们本质上是相同的。 (后一种形式还将 f 定义为不需要的副作用,因此最好使用匿名函数。