완숙의 블로그

다항식 (Polynomial) 본문

Programing Language/Matlab

다항식 (Polynomial)

완숙 2018. 12. 11. 23:03
  • 다항식 표현

    다항식은, 다음과 같은 형태의 함수이다.

    𝑓(𝑥) =𝑎𝑛𝑥𝑛+𝑎𝑛−1𝑥𝑛−1+⋯+𝑎1𝑥+𝑎0 (𝑎𝑛, 𝑎𝑛−1, ... , 𝑎1, 𝑎0 은 실수, n은 음이 아닌 정수)

    Matlab은 다항식을 열벡터로 인지한다.

    계수를 원소로 가지는 열벡터로 존재한다. n차 다항식은 길이가 (n+1) * 1 크기 (상수항까지) 인 열벡터로 인지한다.

    ex) 2x^2 -4x + 10

    => [2 -4 10]T

    이것은 선형대수에서의 표기방식과 흡사하다.

    따라서 계수행렬을 생각하는 것이 곧 다항식을 만드는 것과 동일하다.

    다항식 = 계수행렬

  • 함수값

    결과값이 궁금할 때는 Polyval 함수를 사용하면 된다.

    결과값 = polyval(계수행렬, Input Value)

    Input Value는 1차원 리스트여도 가능하다.

    p = [1.0 -12.1 40.59 -17.015 -71.95 35.88];

    x = -1.5:0.1:6.7;

    y = polyval(p, x);

    plot(x,y)

  • 근행렬

    해당 방정식의 근이 알고 싶을 때는 어떻게 하면 될까?

    roots함수를 사용하면 된다.

    매트랩에서 다항식은 계수행렬로 대표되므로,

    근행렬 = roots(계수행렬)

    p = [1.0 -12.1 40.59 -17.015 -71.95 35.88];

    r = roots(p)

    r =    6.5000    4.0000    2.3000   -1.2000    0.5000

  • 근을 아는 경우

    근을 알 때 방정식을 추정하고 싶으면 어떻게 할까?

    계수행렬 = poly(근행렬)

    r = [6.5 4 2.3 -1.2 0.5];

    p = poly(r)

    p =


        1.0000  -12.1000   40.5900  -17.0150  -71.9500   35.8800

  • 다항식의 사칙연산

    다항식의 사칙연산에 대해 알아보자.

    • 덧셈, 뺄셈

      행렬에서 차원이 다를 경우 덧셈, 뺄셈이 불가능하다. 그래서 같은 크기로 벡터를 만들어줘야 한다.

      p1 = [ 3 15 0 -10 -3 15 -40 ];

      p2short = [ 3 0 -2 -6 ];

      p2 = [ zeros(1,length(p1)-length(p2short)) p2short ]

      % p2 = 0 0 0 3 0 -2 -6 %

      ans =

      3 15 0 -7 -3 13 -46

    • 곱셈

      함수의 곱셈은 convolution을 사용한다. 사용은 conv 함수이다. convolution에 대해서는 포스팅을 따로 할 예정이다. 지금은 그냥 인정(ㅠ)하고 넘어가자.

      p1 = [ 3 15 0 -10 -3 15 -40 ];

      p2 = [ 3 0 -2 -6 ];

      pm = conv(p1, p2)

      ans =

      9 45 -6-78-99 65-54-12-10240

    • 나눗셈

      나눗셈은 deconv함수를 사용한다.

      u=[2 9 7 -6];

      v = [ 1 3 ];

      [a b] = deconv(u, v)

      a =

          2 3 -2

      b =

          0 0 0 0

      a 는 몫의 계수행렬, b 는 나머지의 계수행렬이다. 영행렬이 나온 것을 봐서 나누어 떨어졌음을 알 수 있다.




Comments