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

问题描述 投票:1回答:2

我正在尝试获取多项式的向量,但是在向量内,每个多项式都由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)的多项式,将其中一个变量(例如y)替换为exp(I * t),然后在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,即可返回:

*** 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的定义方式,我想不出任何其他方法来尝试解决此问题。

有什么想法吗?

polynomials pari pari-gp
2个回答
0
投票

您的代码没有错。它确实输出函数向量-全部起作用。

PARI将每个函数转换成类似(x)->my(i=1);x^i-1的形式的事实只是PARI对函数的表示。 (与其他系统不同,PARI不支持符号表达式-仅支持有理函数)。

所以我真的不理解您的问题-如果实际使用这些功能,您会遇到什么问题?


0
投票

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

您的int功能可以定义如下:

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

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

然后您可以使用int(x*y)返回(0.84147098480789650665250232163029899962 + 0.45969769413186028259906339255702339627*I)*x'。

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

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

回到您的原始提案-从技术上讲这没有错,并且可以使用。我只是不建议在subst方法上使用它,但是如果您想对无法表示为多项式的一类函数进行数值积分,那么也许是不推荐的。假设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定义为不需要的副作用,因此最好使用匿名函数。

© www.soinside.com 2019 - 2024. All rights reserved.