본문으로 이동

Matlab/다항식

위키배움터
자료 정보
진행 상황: 이 자료는 갓 만들어지기 시작하였습니다. 잘 진행될 수 있도록 여러분이 도와주세요.
교육 수준: 이 자료는 대학교 강의 수준의 자료입니다.
과목 정보: 이 자료는 공학 과목의 자료입니다.
자료 형식: 이 자료는 강의형식의 자료입니다.

여기서는 Matlab을 통해 함수의 근사해를 구하는 방법에 대해 소개합니다.

roots를 이용해 다항식 근 구하기

[편집]

roots([항들의 계수를 콤마(,)를 이용해 나열]) 함수를 통해 다항식의 근을 구할 수 있습니다.[1] 예를 들어 의 근을 구하고자 한다면,

>> roots([1,-3,2])    % 항들의 계수를 콤마(,)를 이용해 [] 안에 나열
ans =

   2
   1

또는 다음과 같이 미리 roots안에 들어갈 벡터를 만들어주어도 됩니다.

>> p=[1,-3,2];    % 미리 p라는 벡터 안에 해를 구하고자 하는 다항식의 계수들만 넣어서 할 수도 있음
>> roots(p)
ans =

   2
   1

주의할 점은, 계수가 0인 항이 있을 때입니다. 예를 들어 의 근을 구하고자 한다면,

>> roots([1, 0, -5])   % 1차항의 계수가 0이더라도 반드시 다항식의 차수보다 낮은 항인 경우 0을 넣어주어야 합니다
ans =

  -2.2361
   2.2361
>> roots([1, -5])   % 만일 중간에 0을 넣어주지 않으면 x-5=0의 해인 5를 구하게 됩니다.([] 안의 1을 1차항의 계수로 인식해버림)
ans =  5

fzero

[편집]

fzero(함수, 초기가정치)를 이용해 원하는 함수의 해를 구할 수 있습니다.[2] 이때 '함수' 부분에 들어갈 함수는 미리 익명함수로 정의해주어야 합니다.

>> f=@(x)8-4.5*(x-sin(x));   % 익명함수 f를 정의
>> root=fzero(f,2)   % 2를 초기 가정치로 하여 f의 근을 찾아 'root' 에 넣기
root =  2.4305

괄호 안에 직접 함수를 넣을 수는 없습니다. 다음 네 방식으로는 작동하지 않습니다.

>> root=fzero(8-4.5*(x-sin(x)),2)    % 괄호 안에 직접 함수를 넣으면 오류
error: 'x' undefined near line 1 column 19
>> x=[]       % x를 미리 선언한다고 해도 괄호 안에 직접 함수를 넣으면 오류
x = [](0x0)
>> root=fzero(8-4.5*(x-sin(x)),2)
error: fun(2): out of bound 0
error: called from
    fzero at line 145 column 6
>> x=1   % x를 미리 빈 변수가 아닌 다른 값으로 선언한다고 해도 괄호 안에 직접 함수를 넣으면 오류
x =  1
>> root=fzero(8-4.5*(x-sin(x)),2)
error: fun(2): out of bound 1
error: called from
    fzero at line 145 column 6
>> root=fzero('8-4.5*(x-sin(x))',2)   % 함수를 작은 따옴표를 이용해 넣어준다고 해도 오류
error: @8-4.5*(x-sin(x)): no function and no method found
error: called from
    fzero at line 118 column 9

대입해서 값 구하기

[편집]

polyval을 사용하면 대입해서 다항식의 값을 구할 수 있다. 예를 들어 x2 - 3x + 2의 x = 2일 때의 값을 구하려면 다음과 같이 한다.

octave:1> polyval([1, -3, 2], 2)
ans = 0

각주

[편집]
  1. GNU Octave command line에서 help roots를 입력해 나온 도움말을 참고함
  2. GNU Octave command line에서 help fzero를 입력해 나온 도움말을 참고함