迭代 Julia 的动态多项式中的项

Iterate over terms in Julia's dynamic polynomials

在 Julia 中,我使用 DynamicPolynomials 定义了一个多项式,例如:

using DynamicPolynomials
@polyvar x y
p = x + y + x^2 + x*y + y^2
cx = rand(10)
cy = rand(10)

现在我想迭代多项式的项并计算 x=cx[i]y=cy[i] 处的项。我怎样才能做到这一点?最后,我想创建一个矩阵 M[i, j] = t[j]([cx[i], cy[i]]),其中 t[j] 是多项式 p.

的第 j 项

我想你可以直接做。这是一个例子:

using DynamicPolynomials
@polyvar x y
p = x + y + x^2 + x*y + y^2
cx = 1:10
cy = 11:20

现在

julia> res = [t(x=>vx,y=>vy) for (vx, vy) in zip(cx,cy), t in p]
10×5 Array{Int64,2}:
   1   11  121   1  11
   4   24  144   2  12
   9   39  169   3  13
  16   56  196   4  14
  25   75  225   5  15
  36   96  256   6  16
  49  119  289   7  17
  64  144  324   8  18
  81  171  361   9  19
 100  200  400  10  20

您可以通过以下方式对行和列进行注释,以更轻松地检查您是否获得了所需内容:

julia> using NamedArrays

julia> NamedArray(res, (collect(zip(cx,cy)), collect(p)), ("point", "term"))
10×5 Named Array{Int64,2}
point ╲ term │ x^2   xy  y^2    x    y
─────────────┼────────────────────────
(1, 11)      │   1   11  121    1   11
(2, 12)      │   4   24  144    2   12
(3, 13)      │   9   39  169    3   13
(4, 14)      │  16   56  196    4   14
(5, 15)      │  25   75  225    5   15
(6, 16)      │  36   96  256    6   16
(7, 17)      │  49  119  289    7   17
(8, 18)      │  64  144  324    8   18
(9, 19)      │  81  171  361    9   19
(10, 20)     │ 100  200  400   10   20