1

我正在尝试以向量形式查看二变量多项式的单项式。因此,例如,如果我输入x^2 + x^3*y + x*y + y^2 + 1,我想将其视为[[2;0], [3;1], [1;1], [0;2], [0;0]]- 由列向量组成的向量。

如果我Vec在双变量多项式上使用,它只是将第二个变量视为一个数字,给Vec( x^2 + x^3*y + x*y + y^2 + 1 ) = [ y, 1, y, y^2 + 1 ],我认为它不能被扭曲成对我有用的东西。

关于如何做到这一点的任何想法?

4

1 回答 1

2

您必须自己计算所有单项式。您的双变量多项式可以被视为具有多项式系数的单变量多项式。首先,您选择主变量(例如'x)并找到它的指数及其非零系数:

exponents(f, v=variable(f)) = {
    if(type(f) != "t_POL",
        return([[0, f]])
    );
    my(x = varhigher("#"));
    my(coeffs = Vecrev(subst(f, v, x)));
    my(indexes = select((c) -> c != 0, coeffs, 1));

    [[n-1, coeffs[n]] | n <- Vec(indexes)]
};

exponents(1)
> [[0, 1]]
exponents(x^2 + x^3*y + x*y + y^2 + 1)
> [[0, y^2 + 1], [1, y], [2, 1], [3, y]]
exponents(x^2 + x^3*y + x*y + y^2 + 1, 'y)
> [[0, x^2 + 1], [1, x^3 + x], [2, 1]]

其次,给定这样的指数和系数列表,您可以轻松获得完整的单项式列表:

monomial_list(f) = {
    concat(
        apply(
            (xs) -> [[xs[1], p[1]] | p <- exponents(xs[2])],
            exponents(f)
        )
    )
};

monomial_list(0)
> [[0, 0]]
monomial_list(x^2 + x^3*y + x*y + y^2 + 1)
> [[0, 0], [0, 2], [1, 1], [2, 0], [3, 1]]
于 2020-06-21T19:12:10.253 回答