迭代Julia动态多项式中的项

时间:2018-08-01 11:29:06

标签: julia 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个项。

1 个答案:

答案 0 :(得分:1)

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

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