maple : 적분, 면적

적분에 대한 명령어는 int입니다. 만약 적분이 구해지지 않으면 evalf를 사용하여 적분에 대한 근사값을 얻을 수 있읍니다.

1/(1-x^2)를 x에 대해 적분해 보겠습니다.

> int(1/(1-x^2),x);

다시 적분된 것을 미분해 보아야 겠죠? ^^

> diff(%,x);

같은 식으로 1/sqrt(1-x^2), 1+tan(x)^2를 적분해 보겠습니다.

> int(1/sqrt(1-x^2),x);
> int(1+tan(x)^2,x);

위의 내용은 부정적분이고, 구간을 정해서 적분할 때는 아래와 같이, x에 직접 구간을 주면 됩니다.

> int(x^2,x=a..b);
> int(1/(1+x^3),x=1..3);
> evalf(%);

아래의 내용도 실습해 보면 됩니다.

> int(exp(-x^2),x=0..infinity);
> int(sin(sin(x)),x=0..Pi/2);
> evalf(%);

정적분의 정의에 의하면, 두 함수 f(x)와 g(x)사이의 면적은 int(abs(f(x)-g(x)),x=a..b) 로 주어집니다. 즉, f(x)-g(x)값의 절대값들의 합으로 생각할 수도 있겠는데요. 여기에서 a,b는 두 함수의 교점을 나타냅니다.

먼저 f(x)와 g(x)의 정의를 하고, 그래프를 그려 봅니다.

> f := x->1-x^2; g := x->exp(-x);
> plot([f(x),g(x)],x=0..1);
> a:=0; b:=fsolve(f(x)=g(x),x=0.5..1);
> int(abs(f(x)-g(x)),x=a..b);

매개변수로 주어진 곡선 (x(t),y(t)) 의 구간 [a,b]에서의 길이는 int(sqrt(diff(x(t),t)^2+diff(y(t),t)^2),t=a..b) 로 주어집니다. 아래의 극좌표로 주어진 곡선 r=f(t), 0<=t<=2*Pi 의 길이를 구해 보겠습니다.

> f := t->2*(1+cos(t));
> with(plots):

아차, 극좌표로 된 것을 그릴 때는 아래와 같이……

> polarplot(f(t),t=0..2*Pi);
> x := t->f(t)*cos(t); y := t->f(t)*sin(t);
> int(sqrt(diff(x(t),t)^2+diff(y(t),t)^2),t=0..2*Pi)

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);

maple : 매개변수, 극좌표, 주석

여러분은 고등학교에서 매개변수를 사용하여 함수를 표시하는 방법을 공부하였을 것입니다.

예를 들면 원은 x=cos t, y=sin t 로 나타낼 수 있읍니다. 이러한 함수의 그래프는 다음과 같이 그릴 수 있읍니다.

> plot([cos(t),sin(t),t=0..2*Pi]);
> plot([t-sin(t),1-cos(t),t=0..4*Pi]);
> plot([3*cos(t)+cos(3*t),3*sin(t)-sin(3*t),t=0..2*Pi]);
> plot3d([cos(s)*(3+cos(t)),sin(s)*(3+cos(t)),sin(t)],s=0..2*Pi,t=0..2*Pi);

극좌표를 이용하여 그래프 r=r(theta) 를 그릴 때에는 polarplot 함수를 이용합니다.

이 함수는 plots 패키지에 포함되어 있으므로 with(plots):를 입력해야 합니다.

> with(plots):
> polarplot(1+2*sin(theta),theta=0..2*Pi);
> polarplot(theta/4,theta=0..8*Pi);
> polarplot(sin(4*theta),theta=0..2*Pi,axes=none,color=blue);

극좌표에서의 매개방정식 r=f(t) , theta=g(t) 를 그릴 때에도 마찬가지로 합니다.

> polarplot([sin(t),cos(t),t=0..2*Pi]);

좌표가 주어진 점들을 그래프로 나타낼 때에도 plot를 쓸 수 있읍니다.

display는 그려진 plot을 보여주는 함수인데, 여러 개의 plot을 동시에 보여주기 위해서 사용합니다.

display를 사용하기 위해서는 with(plots):를 입력하여 plots 패키지를 불러야 합니다.

> data_list:=[[-2,4],[-1,1],[0,0],[1,1],[2,4],[3,9],[4,16]];
> plot(data_list);
> plot(data_list,style=point,symbol=box);
> a := plot(data_list,color=blue):
> b := plot(data_list,style=point,symbol=box):
> with(plots):
> display(a,b);

그래프에 여러 가지 방법으로 주석을 달 수 있읍니다. 여기에서 주의할 것은 Maple에서는 string을 back quote(‘)를 이용해서 나타낸다는 것입니다.

> plot(sin(x),x=-Pi..Pi,title=`Graph of sin(x)`);

원하는 위치에 주석을 달기 위해서는 textplot을 이용해야 합니다.

이 함수를 사용하기 위해서는 with(plots):를 입력하여 plots 패키지를 불러야 합니다.

> with(plots):
> a:=plot(sin(x),x=-Pi..Pi):
> b:=textplot([Pi/2,1,`Local Maximum`]):
> c:=textplot([-Pi/2,-1,`Local Minimum`]):
> display(a,b,c);

maple : 그래프 그리기

일변수 함수 f 의 [a,b]상에서의 그림은 plot(f(x),x=a..b,opt1,…)를 사용하여 그립니다. 여기에서 opt1,… 은 plot에 줄 수 있는 옵션을 말합니다.

> ?plot,options
> plot(sin(x),x=0..2*Pi);
> f := x->7*sin(x) + sin(7*x);
> plot(f(x),x=0..10);
> plot(f(x),x=0..10,y=0..8,axes=boxed);
> plot(sin(x)/x,x=0..infinity);

Maple은 불연속점 근처에서 거의 수직인 직선을 그립니다. 이 직선을 없애기 위해서는 옵션 discont=true를 넣어주면 됩니다.

> plot(tan(x),x=-3..3,y=-10..10);
> plot(tan(x),x=-3..3,y=-10..10,discont=true,color=blue);

그래프를 클릭하면 Content Bar의 내용이 달라지는데, 가장 왼쪽에 나오는 숫자가 클릭한 점의 좌표를 말하며, 그 외의 버튼은 그래프를 여러 모양으로 나타냅니다. 또는 Style, Axes 메뉴에서도 같은 일을 할 수 있읍니다.

여러 개의 함수를 한 좌표축에 그리기 위해서는 함수들을 List로 묶으면 됩니다.

> plot([sin(x)/x,cos(x)/x],x=0..8*Pi);

Maple 에서 불연속점을 가진 함수를 정의할 때에는 다음과 같이 합니다.

> f := x -> piecewise(x<1,-1, x<2,1, 3);
> plot(f(x),x=0..3);
> plot(f(x),x=0..3,discont=true,color=blue);

3차원 그래프는 꽤 재미있는 부분이라, 멍석만 깔아주면 알아서들 잘 하실 수 있는 부분이라 생각합니다. 간단히만 하고 넘어가겠습니다.

> plot3d(sin(x*y),x=-2..2,y=-2..2);
> plot3d(sin(x)*cos(y),x=0..2*Pi,y=0..2*Pi,axes=FRAMED);

이번에도 그래프를 클릭하면 Content Bar에 메뉴가 나타나게 됩니다.

가장 왼쪽에 있는 theta와 phi의 숫자는 우리가 그래프를 바라보는 각도를 의미합니다. 마우스로 그래프를 클릭한 채 움직이면 원하는 대로 각도를 바꿀 수 있읍니다.

그 외의 버튼들은 그래프의 style이나 좌표축에 관한 것으로, 직접 하면 그 의미를 쉽게 알 수 있읍니다.

한 가지 명심해야 할 것은, 버튼을 누른 후에는 제일 오른쪽에 있는 R버튼을 눌러서 다시 그려야 합니다. (R은 Redraw를 의미함)