Matlab/다항식
< 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