полиномы


  • разложение на простейшие
  • многочлены Чебышева
  • задача Ньютона
  • задача Лагранжа
  • задача Тэйлора
  • задача Эрмита
  • многочлены от нескольких переменных

  • у двух полиномов есть пять операций:

    эвклидовым кольцом называется кольцо, где есть деление с остатком. кольцо полиномов - эвклидово

    полиномы над полем

    коэффициенты полинома лежат в коммутативном кольце с единицей K (например, в ℝ), что обозначается как

        K[x₁,x₂,...,xₙ]

    любой полином может быть представлен как произведение неразложимых полиномов

    число корней полинома от одной переменной над полем ℝ (с целыми степенями) не превышает максимальной степени монома

    Th Безу: остаток от деления полинома f(x) на (x - a), где a ∈ K, равен f(a)

    Th Безу дает возможность, найдя один корень полинома, искать дальше корни у полинома, степень которого уже на 1 меньше. (иногда) таким методом - называется "понижением степени" - находят все корни данного полинома

    базис полиномов над полем K - счетный, поскольку занумерован натуральными числами и нулем:

          1, x, x^2, x^3, ... , x^n, ...
          dim K[x] = ℵ₀ 

    элементы такого базиса называются "мономами"

    базис дробей полиномов над полем K

    существуют и другие базисы кольца полиномов над полем K, например такие:

    формула Лагранжа разложения полиномиальной дроби без кратных корней знаменателя

                f/g  = Σ [ f(c) / g'(c) ] * 1 / (x - c)
                    c:g(c)=0 

    пример:

        (x + 2) / (x^2 - 1)
    
        корни знаменателя       : -1 и 1
        производная знаменателя : 2 * x
    
        f(1)  / g'(1)   = 3/2  *  1/(x - 1)
        f(-1) / g'(-1)  = -1   *  1/(x + 1)
    
        
             3             1          6*x + 6 - 2*x + 2    x + 2     f
        ----------- - -----------  = ------------------ = -------- = -
        2 * (x - 1)   2 * (x + 1)      4 * (x^2 - 1)       x^2 - 1   g
    


    в СКА Максима:
    (%i5) h : ev ((x + 2) / (x^2 - 1)) ;
                                        x + 2
    (%o5)                               ------
                                         2
                                        x  - 1
    (%i6) partfrac (h,x) ;
                                     3           1
    (%o6)                        --------- - ---------
                                 2 (x - 1)   2 (x + 1)    
    

    в случае кратных корней знаменателя полиномиальной дроби используют формулу Эрмита

    если с - корень полинома f кратности m, то f = (x - c)^m * g(c) , g(c) ≠ 0

    если с - корень кратности m полинома f, то

      f'(c) = f"(c) = ... = f(m-1)(c) = 0
      f(m)(c) ≠ 0

    если неприводимый полином p^m делит полином f, то p^(m-1) делит f'

    алгебраические числа полиномов Дедекинда/Диофанта (c высшим коэффициентом равным единице) составляют кольцо по сложению и умножению


    разложение на простейшие дробно-рациональной функции

    дробь p(x) / q(x) называется несократимой, если полиномы не имеют общих корней

    используем Th Безу: если p(x) / (x - a) имеет остатком r(x), то r(x) = p(a)

    Th: пусть p(x) / q(x) - несократима и степень p(x) меньше степени q(x) и все коэффиценты - действительные числа. тогда

          p(x)/q(x) = a1/(x-x1) + a2/(x-x1)² + ... + an/(x-x1)ⁿ +
                      b1/(x-x2) + ...
    
          где x1,..,xn - корни q(x) и a1,..,an,b1,..,bn,.. ∈ ℝ

    т.о. если степень числителя меньше степени знаменателя, то

    пример:

           x + 4                 x + 4              -1         2
        -----------   =   -----------------   =   ------- + -------
        x^2 - x - 2       (x + 1) * (x - 2)       (x + 1)   (x - 2)
    
        -1 = (-1 + 4) / (-1 - 2) = 3 / -3
         2 = (2 + 4)  / (2 + 1)  = 6 / 3
    

    в СКА Максима:


    (%i31) myp : ev ((x+4)/(x^2-x-2));
        
                                        x + 4
    (%o31)                            ----------
                                       2
                                      x  - x - 2
    
    (%i32) factor (myp);
    
                                         x + 4
    (%o32)                          ---------------
                                    (x - 2) (x + 1)
    
    
    (%i34) gfactor (myp);
                                         x + 4
    (%o34)                          ---------------
                                    (x - 2) (x + 1)
    
    
    (%i35) partfrac(myp,x);
                                       2       1
    (%o35)                           ----- - -----
                                     x - 2   x + 1
    

    если корень кратный, то для каждой степени будет своя дробь: коэффициент старшей степени высчитывается как и раньше, а коэфициент для младшей степени высчитывается последним (когда коэфициенты для других корней уже посчитаны), полагая значение переменной равной теперь уже не корню, а нулю и приравнивая левую часть и правую часть со всеми уже посчитанными коэффициентами, в которой будет одна неизвестная, а именно - нужный последний коэффициент С

    пример:

              x - 1                         x - 1
        -----------------   =    ---------------------------  =
        (x^3 - 3*x^2 + 4)        (x - 2) * (x - 2) * (x + 1)
    
               C12          C11        C21 
        =   ---------  +  -------  - ------- 
            (x - 2)^2     (x - 2)    (x + 1) 
    
        сначала считаем коэффициент C12 для (x-2)^2 и коэффициент C21 для (x+1)
        подставляя значения корней, но не используя соответствующий знаменатель
    
               1/3          C11        2/9   
        =   ---------  +  -------  - ------- 
            (x - 2)^2     (x - 2)    (x + 1) 
    
              теперь для нахождения коэффициента для младшей степени (x-2)
              приравниваем нулю x в изначальной дроби и в получившейся дроби
              и пишем для левой и правой части:
    
                 -1/4 = 1/12 - С12/2 - 2/9
    
                  С12 = 2 * (1/3 - 2/9) = 2/9
            
       в итоге получаем ответ:
    
               1/3          2/9        2/9   
        =   ---------  +  -------  - ------- 
            (x - 2)^2     (x - 2)    (x + 1) 

    в СКА Максима:


    (%i78) myp : ev (x^3 - 3*x^2 + 4);
    
                                      3      2
    (%o78)                           x  - 3 x  + 4
    
    (%i79) gfactor (myp);
                                          2
    (%o79)                         (x - 2)  (x + 1)   
    
    
    (%i80) myp : ev (1/(3*(x-2)^2) + 2/(9*(x-2)) - 2/(9*(x+1)));
    
                               2            2           1
    (%o80)              (- ---------) + --------- + ----------
                           9 (x + 1)    9 (x - 2)            2
                                                    3 (x - 2)
    
    (%i81) gfactor (myp);
                                        x - 1
    (%o81)                         ----------------
                                          2
                                   (x - 2)  (x + 1)
    
    

    или же можем проверить и так:

    (%i13) myp : (x - 1) / ((x - 2)^2 * (x + 1)) ;
                                        x - 1
    (%o13)                         ----------------
                                          2
                                   (x - 2)  (x + 1)
    (%i14) partfrac (myp,x) ;
                               2            2           1
    (%o14)              (- ---------) + --------- + ----------
                           9 (x + 1)    9 (x - 2)            2
                                                    3 (x - 2)
    

    лепота !


    многочлены Чебышева

    многочлены Чебышева первого рода:

        T₀(x) = 1
        T₁(x) = x                                
        Tₙ(x) = 2 * x * Tₙ₋₁(x) - Tₙ₋₂(x) 

    многочлены Чебышева коммутируют: Tn ∘ Tm = Tm*n = Tm ∘ Tn и это один из трех примеров коммутации над полем с характеристикой 0. два других - это степени по переменной и степени по самому многочлену :

          pn ∘ pm = pn * m = pm ∘ pn
          p∘ n ∘ p∘ m = p∘ (m + n) = p∘ m ∘ p∘ n  
    Th Ритта: никаких других примеров над полем с харакеристикой 0 нет

    многочлены Чебышева второго рода :

        U₀(x) = 1
        U₁(x) = 2 * x
        Uₙ(x) = 2 * x * Tₙ₋₁(x) - Tₙ₋₂(x) 

    коэффициенты U являются значением определителя для матриц соответствющего размера :

        ( 2*t   1        ....
           1   2*t  1    ....
           ....          ....
           ....    1  2*t  1
           ....        1  2*t )
    все остальные элементы которых равны нулю :
        U₀(t) = 1
        U₁(t) = 2 * t
        U₂(t) = 2 * t * 2 * t - 1 


    приближение табличных значений зависимости - полиномом

    постановка задачи

    на отрезке [a,b] заданы n+1 точки x0, x1 , x2, …, xn называемые узлами интерполяции, и значения неизвестной функции f(x) в этих точках f(x0)=y0, f(x1)=y1, f(x2)=y2, ... , f(xn)=yn

    требуется построить интерполирующую функцию F(x) , которая в узлах интерполяции принимает те же значения, что и f(x): F(x0)=y0, F(x1)=y1, F(x2)=y2, ..., F(xn)=yn

    будем искать интерполирующую функцию F(x) в виде канонического полинома степени n. выбор многочлена степени n основан на том факте, что через n+1 точку проходит единственная кривая степени n. подставив, получим систему линейных алгебраических уравнений

        a0 + a1 * x0 + a2 * x0^2 + ... an * x0^n = y0
        a0 + a1 * x1 + a2 * x1^2 + ... an * x1^n = y1
        a0 + a1 * x2 + a2 * x2^2 + ... an * x2^n = y2
        ...
        a0 + a1 * xn + a2 * xn^2 + ... an * xn^n = yn
      

    решая эту систему линейных алгебраических уравнений, найдём коэффициенты интерполяционного полинома a0, a1, ..., an

    метод Лагранжа лучше использовать, если необходимо вычислить значение в небольшом количестве точек. для расчёта во многих точках лучше использовать метод Ньютона

    полиномиальное приближение табличной функции

    
              y(t) ≈ a₀  +  a₁ * t₁  +  a₂ * t₂²  +  ...  +  aₙ * tⁿ
    

    матрица Вандермонде - полиномиальный вычислитель

    
           y₁         1  t₁  t₁²  t₁³  ..  t₁ⁿ         b₀  
           y₂         1  t₂  t₂²  t₂³  ..  t₂ⁿ         b₁   
           y₃    =    1  t₃  t₃²  t₃³  ..  t₃ⁿ    *    b₂   
                      . 
           yₐ         1  tₐ  tₐ²  tₐ³  ..  tₐⁿ         bₐ  
    
    

    левый столбик - отсчеты (результаты наблюдений). правый - коэффициенты приближающего полинома

    пример

                   y = 4 * t / (1 + 10 * t^2)
    на интервале [0,1] с шагом 0.01

    положим, что есть сто измерений величины y равными тиками, но нет представления о функции. смоделируем в октаве:

    > t = 0:0.01:0.99 ;
    > for i = 1 : 100
    >   y(i) = 4 * t(i) / (1 + 10 * t(i) ^ 2) ;
    > end
    и тут же забудем, какой функцией добились отсчетов, а будем полагать эти отсчеты - табличными

    построим приближение первого порядка:

    > V = zeros (100, 2) ; 
    > V (:,1) = ones (100, 1) ; 
    > V (:,2) = t ;

    вычислим коэффициенты приближающего полинома:

    > b = V \ y' ;
    > z1 = V * b ;

    и построим график (опираясь только на результаты опыта и равномерные тики):

    > plot (t, y, "r", t, z1, "g")


    приближение первого порядка

    ну, не впечатляет пока...

    попробуем со вторым порядком:

    > for i = 1 : 100  t2 = t(i) * t(i) ; end
    > V (:,3) = t2 ;
    > b = V \ y' ;
    > z2 = V * b ;
    > plot (t, y, "r", t, z2, "g")
    


    приближение второго порядка

    > for i = 1 : 100  t3 = t(i) * t(i) * t(i) ; end
    > V (:,4) = t3 ;  
    > b = V \ y' ;
    > z3 = V * b ;
    > plot (t, y, "r", t, z3, "g")
    


    приближение третьего порядка

    > for i = 1 : 100  t4 = t(i) * t(i) * t(i) * t(i) ; end    
    > V (:,5) = t4 ;
    > b = V \ y' ;
    > z4 = V * b ;
    > plot (t, y, "r", t, z4, "g")
    


    приближение четвертого порядка

    красота!

    итак, имея сто отсчетов величины, мы получили функциональную зависимость ee от времени на интервале дискретизации - это называется "интерполяция полиномом", поскольку теперь мы можем получить значения не только в точках отсчета, но и в промежуточных точках - достаточно задать параметр t и знать полученные только что коэффициенты - столбик b

        p   =   b0   +   b1 * t   +   b2 * t * t   +   b3 * t * t * t   +   b4 * t * t * t * t

    octave:> help vander    
     -- vander (C)
     -- vander (C, N)
         Return the Vandermonde matrix whose next to last column is C.
    
         If N is specified, it determines the number of columns; otherwise,
         N is taken to be equal to the length of C.
    
         A Vandermonde matrix has the form:
    
              c(1)^(n-1) ... c(1)^2  c(1)  1
              c(2)^(n-1) ... c(2)^2  c(2)  1
                  .     .      .      .    .
                  .       .    .      .    .
                  .         .  .      .    .
              c(n)^(n-1) ... c(n)^2  c(n)  1
    
    octave:> help polyfit
    
     -- P = polyfit (X, Y, N)
     -- [P, S] = polyfit (X, Y, N)
     -- [P, S, MU] = polyfit (X, Y, N)
         Return the coefficients of a polynomial P(X) of degree N that
         minimizes the least-squares-error of the fit to the points '[X,Y]'.
    
         If N is a logical vector, it is used as a mask to selectively force
         the corresponding polynomial coefficients to be used or ignored.
    
         The polynomial coefficients are returned in a row vector.
    
         The optional output S is a structure containing the following fields:
    
         'R'  Triangular factor R from the QR decomposition.
    
         'X'  The Vandermonde matrix used to compute the polynomial coefficients.
    
         'C'  The unscaled covariance matrix, formally equal to the inverse
              of X'*X, but computed in a way minimizing roundoff error
              propagation.
    
         'df'     The degrees of freedom.
    
         'normr'  The norm of the residuals.
    
         'yf'     The values of the polynomial for each value of X.
    
         When the third output, MU, is present the coefficients, P, are
         associated with a polynomial in
    
         'XHAT = (X - MU(1)) / MU(2)'
         where MU(1) = mean (X), and MU(2) = std (X).
    
         This linear transformation of X improves the numerical stability of the fit.
      

    задача Ньютона

    интерполяционный полином в форме Ньютона – полином n-степени, который будет соединять все заданные точки из набора значений, полученных опытным путём с постоянным/переменным шагом измерений

    интерполяционный полином в форме Ньютона только по форме отличается от интерполяционного полинома в форме Лагранжа, представляя собой на заданной сетке один и тот же интерполяционный полином

    алгоритм вычисления полинома в форме Ньютона :
    1. в качестве исходных данных задается выборка из n-точек, которая включает в себя значения функции и значения аргумента функции
    2. выполняется вычисление разделенных разностей n-порядка, которые будет использоваться для построения полинома в форме Ньютона
    3. выполняется вычисление полинома n-степени в форме Ньютона по следующей формуле:

        Pn(x) = f(x0)
              + (x − x0) *                          d(x0,x1)
              + (x − x0) * (x − x1) *               d(x0,x1,x2)
              + ...
              + (x − x0) * (x − x1) .. (x − xn−1) * d(x0,x1,..,xn)
        
                        n                 i-1
        Pn(x) = f(x0) + Σ  [ d(x0,..,xk) * ∏ (x - xj) ]
                       i=1                j=0
    

    "разделенная разность 1-го порядка" определяется следующим выражением

        d(xi,xj) = [ f(xj) - f(xi) ] / [ xj - xi ] , j > i 

    "разделенная разность 2-го порядка" определяется следующим выражением

        d(xi,xj,xk) = [ d(xj,xk) - d(xi,xj) ] / [ xk - xi ] , k > j > i 

    смысл такого подхода к расчёту состоит в том, что при добавлении к данным нового узла справа формула многочлена удлиняется только на одно слагаемое, так что не приходится все расчёты выполнять заново

    простейшие частные случаи интерполяции по Ньютону

    итак, заданы векторы X и Y, содержащие исходные данные - координаты точек {Xi,Yi}. сначала нужно построить матрицу разделённых разностей, её размерность будет на 1 меньше, чем количество точек

    код octave:

    #!/home/user/.nix-profile/bin/octave
    
    1;
    
    # differences matrix creation
    # input  : v - f(t) , t - time slots
    # output : m1[nxn]
    function [m1] = diffs_1 (v, t)
      n = length (t) ;  m1 = zeros (n, n) ;
      for i = 1 : n 
        for j = i + 1 : n 
          m1(j,i) = (v(j) - v(i)) / (t(j) - t(i)) ; 
        end
      end
      m1 ;
    end
    
    # double differences matrix creation
    # input  : m1 - diff matrix,  t - time slots
    # output : m2[nxn]
    function [m2] = diffs_2 (m1, t)
      n = length (t) ; 
      for i = 1 : n - 1
        for j = i + 1 : n - 1 
          m2(i,j) = (m1(j,i) - m1(j-1,i)) / ( (t(i+2) - t(i+1)) * (t(i+1) - t(i)) ) ; 
        end
      end
      m2 ;
    end
    
    # time slots generation and values generation
    t = 0 : .01 : .99 ; 
    fd = fopen ("newton0.dat","w") ; 
    for i = 1 : length (t) 
      v(i) = 4 * t(i) / (1 + 10 * t(i) ^ 2) ;
      fprintf (fd, '%d\t%d\n', t(i), v(i)) ;
    end
    fclose (fd) ;
    
    # diff matrices creation
    m1 = diffs_1 (v, t) ;
    m2 = diffs_2 (m1, t) ;
    
    ## # calculation of polynomial approximation in x
    ## # input  : m[nxn] - differenses' matrix, v - f(t), t - time marks
    ## # output : r - aproximated value 
    function r = calc_1 (m1, v, t, x)
      i = 1 ; while (x > t(i++)) endwhile
      r = v(i) + (x - t(i)) * m1 (i, i-1) ; 
    end
    
    function r = calc_2 (m1, m2, v, t, x)
      i = 1 ; while (x > t(i++)) endwhile
      r = calc_1 (m1, v, t, x) + (x - t(i+1)) * (x - t(i)) * m2 (i, i-1) ; 
    end
    
    # generation of points of approximation
    z = .112 : .035 : 0.734 ;
    
    # approximations calculations and stores
    fd1 = fopen ("newton1.dat","w") ; 
    fd2 = fopen ("newton2.dat","w") ; 
    for i = 1 : length (z) 
      fprintf (fd1,'%d\t%d\n', z(i), calc_1 (m1,     v, t, z(i))) ;
      fprintf (fd2,'%d\t%d\n', z(i), calc_2 (m1, m2, v, t, z(i))) ;  
    end
    fclose (fd2) ;
    fclose (fd1) ;
    

    код gnuplot:

    #! /home/user/.nix-profile/bin/gnuplot
    
    plot 'newton0.dat' with line lc rgb "blue" lw 2 , \
         'newton1.dat' with line lc rgb "red"  lw 2
    pause -1 
    

    результат:


    задача Лагранжа

    постановка задачи: имеется n+1 различных элементов С из области определения переменной и n+1 (необязательно различных) элементов B из области значений. существует единственный полином одной переменной f , deg(f) ≤ n , такой что :

                        -------------------------------
                        x    | C0 | C1 | C2 | ... | Cn
                        -------------------------------
                        f(x) | B0 | B1 | B2 | ... | Bn
                       --------------------------------
      

    в такой формулировке задача называется "задачей Лагранжа"

    единственность решения очевидна. действительно, пусть таких решений два - f и g. тогда разность этих двух многочленов в каждой точке Ci равна нулю, а значит многочлен (f - g) имеет n+1 корень. но степень каждого из многочленов меньше или равна n, и разностный многочлен может иметь число корней больше своей степени только если он равен нулю, а значит - многочлены f и g совпадают QED

    доказательство существования решения основывается на том факте, что матрица (квадратная) Варнемонда имеет определитель не равный нулю, а значит - она обратима, а значит - решение у системы уравнений есть:

        C0^n * an + ... + C0^1 * a1 + C0^0 * a0 = B0
        C1^n * an + ... + C1^1 * a1 + C1^0 * a0 = B1
        C2^n * an + ... + C2^1 * a1 + C2^0 * a0 = B2
                    ...
        Cn^n * an + ... + Cn^1 * a1 + Cn^0 * a0 = Bn
      
    неравенство нулю определителя Вандермонда обьясняется тем, что Сi != Cj при i != j (по условию задачи)

    сам определитель Вандермонда расчитывается по формуле:

        
        det    =    ∏    (Ci - Cj)
                 0≤i<j≤n
     

    а над любым полем такое произведение - не равно нулю

    пример: используем матрицу Вандермонда для разложения функции по базису мономов

    octave listing:


    #!/home/user/.nix-profile/bin/octave
    
    # ticks
    t = 0 : 0.01 : 1.99 ;
    
    # clean signal
    for i = 1 : 200
      y(i) = 4 * t(i) / (1 + 10 * t(i) ^ 2) ;
    end
    fd = fopen ("vanderm0.dat", "w") ; fprintf (fd, "%i\n", y) ; fclose (fd) ;
    
    # clean interpolation
    V = vander (t',5) ;
    b = V \ y' ; 
    z5 = V * b ;
    fd = fopen ("vanderm1.dat", "w") ; fprintf (fd, "%i\n", z5) ; fclose (fd) ;
    
    # the signal with ~ 15% noise 
    r = rand (200,1) ;
    for i = 1 : 200
      k(i) = 4 * t(i) / (1 + 10 * t(i) ^ 2) + (-0.5 + r(i,1))/10;
    end
    fd = fopen ("vanderm2.dat", "w") ; fprintf (fd, "%f\n", k) ; fclose (fd) ;
    
    # interpolaition with noise
    V = vander (k',4) ;
    b = V \ k' ; 
    z4 = V * b ;
    fd = fopen ("vanderm3.dat", "w") ; fprintf (fd, "%f\n", z4) ; fclose (fd) ;
    

    строим графики чистой функции и ее приближения, а также графики функции с белым шумом ~ 15% и ее аппроксимации

    gnuplot listing:


    #! /home/user/.nix-profile/bin/gnuplot
    
    plot 'vanderm0.dat' using 1 with line lc rgb "blue", \
         'vanderm1.dat' using 1 with line lc rgb "red"
    pause -1
    
    plot 'vanderm2.dat' using 1 with line lc rgb "blue", \
         'vanderm3.dat' using 1 with line lc rgb "red"
    pause -1 
    

    результат:

    графики чистой функции и ее приближения (5 коэффициентов):

    графики аппроксимации функции с белым шумом ~15% и четырмя коэффициентами:

    уменьшение шума до ~2% и увеличение полинома не сильно улучшает картину. вот пример с 20 коэффициентами:


    задача Тейлора

    интерполяция с кратными значениями: для данной конкретной точки С мы знаем значение функции в точке и значения всех производных функции в этой точке. требуется найти приближающий полином

                          ---------------  
                            x     |  C
                          ---------------
                          f (x)   |  a0
                          f'(x)   |  a1
                            ...      ...
                          f(n)(x) |  an  
                          ---------------
      

    такой полином - единственный , существует и имеет вид:

         f = a0 + a1 * (x - C) / 1! + a2 * (x - C)^2 / 2! + ... + an * (x - C)^n / n1
    
      или же так:   
                   n
         f = a0 +  Σ  ak * (x - C)^k / k!
                  k=1
    
       иногда записывают в виде формулы:  
    
         f(x+y) = f(x) * exp [y * d/dx]
                = f(x) * ( 1  + y^1 * (d/dx)^1 / 1!
                              + y^2 * (d/dx)^2 / 2! 
                              +    ... 
                              + y^n * (d/dx)^n / n!
                         )
       имея в виду, что y - незначительное приращение аргумента x
       

    задача Эрмита

    это совместное обобщение задач Лагранжа и Тэйлора: даны несколько разных узлов и значения функции и ее производных в этих узлах. требуется найти приближающий полином

                  ------------------------------------
                   x       | C0   | C1   | ... | Cn
                   -----------------------------------
                   f(x)    | a00  | a10  | ... | an0
                   f'(x)   | a01  | a11  | ... | an1
                   f˝(x)   | a02  | a12  | ... | an2
                   ...     | ...  | ...  | ... | ...
                   f(k)(x) | a0k  | a1k  | ... | ank
                  ------------------------------------
    

    вывод формулы основан на линейной независимости столбцов


    тригонометрический полином

    интерполяционный алгебраический полином не всегда является подходящим средством приближения неизвестной функции, особенно если та принципиально неполиномиальна. например - "периодические функции". другой класс таких специфических функций составляют функции, имеющие определенную асимптотику при неограниченном возрастании их аргументов (по абсолютной величине или в определенном направлении) - так называемые "бесконечно-периодические функции". в этом случае ставят задачу приближения функции суммой экспонент


    многочлены от нескольких переменных

    пример с разными остатками от деления

        f1 = x² - y
        f2 = x * y - 1
    
        f = x² * y
        
        f = y * f1 + y²    r1 = y²
        f = x * f2 + x     r2 = x

    парциальная степень многочлена - максимальная степень одной конкретной переменной в каком либо мономе многочлена

    полная степень многочлена - максимальная сумма степеней входящих в многочлен мономов

    форма степени d - это однородный многочлен от нескольких переменных, в котором все мономы имеют одинаковую полную степень d

    размерность пространства многочленов от n переменных с максимальной степенью d есть биномиальный коэффициент (n+d-1, d). например для многочленов от трех переменных x, y, z степени 2:

          x², y², z², x * y, x * z, y * z
          размерность равна 6
          6 = (2+3-1,2) 

    линейный порядок на мономах

    такой порядок должен быть согласован с операцией "умножение", а для этого: