간단한 방정식의 경우 눈으로, 또 손으로 쉽게 풀어낼 수 있지만, 왠만한 고차원의 방정식은 계산하기 쉽지 않습니다. 그렇다면 매트랩으로 방정식의 해를 구할 수 있습니다. 계산은 사람보다 컴퓨터가 잘하니까요. ㅎㅎ
예제1
먼저 간단한 예를 들어보겠습니다. $x^2 + 2x + 1 = 0$ 의 해는 중근으로 -1임을 우리는 쉽게 알 수 있습니다. 이것을 매트랩을 구현하면, 아래와 같습니다.
먼저 방정식의 변수를 syms 명령어를 이용해서 설정해주고, 그 다음 방정식을 입력해줍니다. solve 함수에 방정식과 변수를 입력해주면 방정식의 해가 출력됩니다.
예제2
간단한 예를 하나 더 들겠습니다. $x^3 - 6x^2 + 11x - 6 =0$의 해는 무엇일까요? 이 방정식 역시 그렇게 해를 구하기가 어려운 것은 아니지만, 매트랩을 통해 풀어보겠습니다.
이 방정식의 해는 1, 2, 3이라고 solve 함수가 알려줬습니다. 혹시 의심가시는 분은 손으로 계산해보시면 됩니다.^^
예제3
이번에는 손으로 풀기엔 정말 귀찮은 방정식을 하나 풀어보겠습니다.
$z^2 + 3.898z + 1.1794 = 0$
물론 그 유명한 근의 공식을 사용하면 누구든 풀 수 있습니다. 단지 오래 걸릴 뿐이죠. 대신 매트랩에게 맡겨보겠습니다.
왜인지는 잘 모르겠지만, 이런 형태로 해가 출력되었습니다. 이때는 위 결과를 그대로 명령 창에 넣어주면 계산된 결과가 나옵니다.
결국 이 방정식의 해는 -3.5674, -0.3306임을 알게 되었습니다. 근의 공식을 이용해서 손으로 풀어도 이 결과가 나오니 안심하세요.^^
하지만 더 좋은 방법이 있습니다. double이란 아이디로 댓글을 남겨주신 분의 조언에 의하면, solve(eq, z)를 double 함수로 감싸주면 계산된 결과가 출력된다고 합니다.
이 방법이 좀 더 간결하죠?
예제4
그리고 간혹 방정식의 해를 위와 같은 방식으로 구했는데 root라는 것이 포함된 어떠한 식으로 표현될 때가 있습니다.
당혹스럽죠. 그러나 이에 대한 설명을 매트랩 측에서 다음과 같이 해주고 있습니다.
결론만 말하자면 이런 경우에는 vpa함수를 활용하라는 것입니다.
해를 구하고 보니 6개의 해가 모두 복소수였습니다. (그런데 거의 허수부분은 모두 0에 가깝습니다. $10^{-38}$, $10^{-39}$이 붙어있기 때문입니다.)
하지만, 사실 이것도 double 함수로 solve 함수를 감싸주면 손쉽게 해결됩니다.
마무리 인사
제가 이해한 것을 바탕으로 설명한 것이기 때문에, 혹시 틀린 부분이 있을수도 있습니다. 그런 부분 있다면, 저에게 한수 가르쳐주시길 부탁드리며 글을 마칩니다. 한수 가르쳐주신 double님께 감사드립니다.^^
(이 글은 2021-2-23에 갱신되었습니다.)
'Dev > matlab' 카테고리의 다른 글
[MATLAB] 로그스케일 그래프 그리기, semilogy, semilogx, loglog 함수 (0) | 2019.10.23 |
---|---|
[MATLAB] 엑셀 파일의 내용 불러오기, xlsread 함수 (0) | 2019.10.23 |
[MATLAB] 숫자열에 숫자가 아닌 것(NaN)이 포함되어 있을 때 평균내기, mean 함수 응용 (0) | 2019.10.19 |
[MATLAB] 적분하기, integral 함수 (7) | 2019.10.17 |
[MATLAB] identity matrix 생성하기, eye 함수 (0) | 2019.10.09 |
[MATLAB] 연립방정식 해 구하기, mldivide 함수 (0) | 2019.10.09 |
[MATLAB] 다양한 정도로 압축된 jpeg 이미지 만들기, imwrite 함수 (0) | 2019.07.03 |
[MATLAB] 표준화된 z-점수 산출하기, zscore 함수 (0) | 2019.06.14 |