maple : 도함수, 미분, 접선

함수 f(x) 의 도함수는 수식 (f(x+h)-f(x))/h 에서 h를 0으로 보낸 것입니다. ^^ 이 정도는 고등학교 때 이미 배우고 오셨지요!!!! 한번 아래의 식들을 살펴 보겠습니다. 함수 x^2-3*x+4의 도함수를 구해 보자는 것입니다. 먼저 종이에 계산을 해 보시고요. 확인해 보겠습니다.

> f := x -> x^2-3*x+4;
> g := h -> (f(x+h)-f(x)) / h;
> simplify(g(h));
> limit(g(h),h=0);

따라서 f'(x)=2x-3 이라는 결론을 내릴 수 있습니다. 다음의 예제들은 어떨까요?

> f := x -> piecewise(x<0,0,x*sin(1/x));
> plot(f(x),x=-0.05..0.1);
> a := limit(f(x),x=0);
> limit((f(h)-a)/h,h=0,right);

> f := x -> piecewise(x<0,0,x^2*sin(1/x^2));
> plot(f(x),x=-0.05..0.1);
> a := limit(f(x),x=0);
> limit((f(h)-a)/h,h=0);

따라서 첫번째 함수는 x=0 에서 미분불가능이고, 두번째 함수는 미분가능입니다. 아마도 수학과 컴퓨터에서 배우는 미분은 이 정도일 것입니다. 충분히 하실 수 있겠지요?

함수 f(x)를 미분하기 위한 명령어는 diff(f(x),x) 이고, n번 미분은 diff(f(x),x$n) 입니다.

> diff(x^n,x);
> simplify(diff(x^n,x$3));
> diff((x^2+1)/x + x/(x^2+1),x);
> simplify(%);
> diff(exp(x)*sin(x),x$5);
> simplify(subs(x=Pi,%));
> diff(g(x)^2,x);
> diff(x*g(x^2),x$2);

Differential operator D를 이용하여 미분할 수도 있읍니다.

D는 diff와는 달리 함수에 작용한다는 점에 유의하십시오. 자세한 설명은 ?D를 하여 참조하시고요….. 아래의 것들을 보시면 이해가 빠르실 것입니다. 보시면 아시겠지만 여기서의 n번 미분은 @@n 의 꼴로 쓰시면 되겠고요.

> D(sin); D(tan); D(sec); D(log);
> f := x -> exp(x)*sin(x);
> D(f);
> (D@@5)(f);
> (D@@10)(f);
> diff(f(x),x$10);

수학에서 어찌 되었건 값이 있기는 있는데, 계산으로 알기도 무지하게 복잡하고 언뜻 봐서는 잡기도 힘든 그런 것이 있죠? 그럴 경우에 굳이 정확한 값이 필요한 것이 아니라면 근사값을 쓰게 됩니다. 이와 같은 근사값은 실제의 값보다 유용하게 쓰이는 일이 많습니다. 오늘은 접선과 미분값을 이용하여 근사값을 구하는 방법을 생각해 보겠습니다. 이런 내용은 일반수학책에 아마 나와 있을 것이니까 긴 설명 생략하고 바로 넘어가죠.

함수 f(x)가 x=a 에서 미분가능하면 x=a 의 근방에서 f(x)는 x=a 에서의 접선으로 근사할 수 있습니다. 여기까지는 아시겠죠?

f(x)의 x=a 에서의 접선의 방정식은 L(x)=f(a)+f'(a)(x-a) 입니다. 이제 L(x)를 계산해보고 그래프를 f(x)와 같이 그려봅시다. 자, 아래의 함수를 디벼 보도록 하겠습니다.

> f := x -> sqrt(1+x);

이 함수의 그래프를 먼저 그려 보겠습니다. 분명히, 연속이고요, 그래프를 척 보기에도 미분은 가능할 것 같죠?

> plot(f(x),x=-1..3);

그러면 이 그래프를 더 확대해 보겠습니다. 이 경우 거의 직선에 가깝게 나타납니다. 간격을 더욱 줄이면 더 확실하게 보일 것입니다.

> plot(f(x),x=-0.2..0.2);

그러면 이제 위의 식을 미분해 보죠. 아래에서 unapply(수식,변수)는 수식을 함수로 바꾸어 주는 기능을 합니다. 즉 이 기능을 쓰면, 앞서 계산한 결과인 식을 바로 함수로 써 줄 수 있으니 귀찮은 일이 줄어든다는 거죠.

> diff(f(x),x);
> df := unapply(%,x);

일단, 한번 아까 살펴본, -0.2에서 0.2 사이의 근사값을 구한다고 생각해 보죠. 일단은 그냥 한번 0.13 정도가 x로 들어갈 것입니다. 이 경우, 상당히 작은 오차를 갖고 근사값이 나옵니다. 물론, 7.25 같은 값을 이 방법으로 구하려면 f(0) 대신에 f(7) 이 들어가야 옳겠습니다. 이 방법은, 어떤 값을 함수에 넣은 결과를 구하고 싶을 때, 그 값에 비교적 가까이 있는 다른 구하기 쉬운 값과 그 값에서의 미분값을 이용하는 것이므로 쉽게 사용하실 수 있습니다.

> L := x -> f(0) + df(0)*(x-0);
> plot([L(x), f(x)], x=-1..3);

근사에서의 에러는 f(x)와 L(x) 의 차이의 절대값을 의미합니다. 구간 -0.2 <= x <= 0.2 에서 에러가 얼마나 되는지 그려보겠습니다. 화면에는 무식하게 크게 나오지만, y축의 숫자를 보시면 별 차이 없다는 것을 아실 수 있습니다. 이 정도만 되어도 좋은 근사값이라는 것이죠……

> e := x -> abs(f(x)-L(x));
> plot(e(x),x=-0.2..0.2);

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.