매트랩의 기능 중에서 가장 쓸모 있다고 생각하는 기능 중 하나가 그래프이다!
사람이 손으로 그래프를 그리는 데에는 한계가 있기에 어떠한 그래프의 생김새를 알고 싶을 때는 매트랩을 활용하자..
벡터 함수 (Vector Function)
벡터 함수란 위의 예시처럼 매개 변수 t 에 대해서 3차원 공간 상의 점의 좌표를 갖는 함수이다. 즉, 실수에 벡터를 대응시키는 함수이다. 이제 매트랩에서 함수 정의를 하고 t 의 구간 -10부터 10까지 그래프를 그려보자.
<수치적 풀이>
1. 함수 정의. 매트랩의 function handle 로 정의한다. (아직 t에 어떠한 값도 대입되지 않았다.)
xt = @(t) sin(t);
yt = @(t) cos(t);
zt = @(t) t;
다음 단계로 넘어가기 전에 이 함수가 어떻게 생겼는지 그래프를 그리고 가자.
fplot3(xt, yt, zt, [-10 10])
2. 매개 변수 t의 구간 설정 및 각각의 xt, yt, zt 의 대입.
t = linspace(-10, 10);
% numerical way
xt_n = xt(t);
yt_n = yt(t);
zt_n = zt(t);
3. xt, yt, zt 를 t에 대하여 미분. 아래 사진을 참고!
xt_n_diff = diff(xt_n)./diff(t);
yt_n_diff = diff(yt_n)./diff(t);
zt_n_diff = diff(zt_n)./diff(t);
다음 단계로 넘어가기 전에 미분된 벡터 함수의 값(접선 벡터)이 어떻게 생겼는지 그래프를 그려보자!
r_diff = sqrt(xt_n_diff.^2 + yt_n_diff.^2 + zt_n_diff.^2);
quiver3(xt_n(1:99), yt_n(1:99), zt_n(1:99), xt_n_diff./r_diff, yt_n_diff./r_diff, zt_n_diff./r_diff)
4. 곡선의 총 길이 구하기. 아래 사진이 벡터 함수의 총길이를 구하는 공식이다.
s_num = r_diff.*diff(t);
s_num 은 아직 행렬의 형태이고 각 행렬의 값을 다 더해준 값이 곡선의 길이가 된다.
>> sum(s_num) (함수 sum 은 행렬의 모든 요소의 합을 구해준다.)
ans =
28.2602
<해석적 풀이>
위의 수치적 풀이와 다른 점은 매개변수 t 의 값을 정해주지 않고 매트랩 상에서 변수로 설정한다.
나머지 풀이는 비슷한 방식으로 흘러가므로 설명은 생략!
syms k
xk = sin(k);
yk = cos(k);
zk = k;
xk_diff = diff(xk);
yk_diff = diff(yk);
zk_diff = diff(zk);
rk_diff = sqrt(xk_diff^2 + yk_diff^2 + zk_diff^2);
rk_diff = matlabFunction(rk_diff);
s_ana = integral(rk_diff, -10, 10);
마지막에만 매트랩 built-in 함수 integral 을 구간 -10에서 10까지 사용해 주었다.
>> s_ana
s_ana =
28.2843
어느 정도의 오차는 존재하지만 풀이 상에는 문제가 없다!