What is mathematica?

PATH : /opt/local/bin/math

mathematica는 Stephen Wolfram에 의해서 만들어진 수학 응용 분야의 소프트 웨어이다. mathematica는 기본적 수학 연산 이외에도 미적분, matrix 연산,미분 방정식 풀이 그리고 2,3차원 그래픽 표현 기능을 갖추고 있다.

mathematica는 연산을 수행하는 kernal 부분과 사용자 interface의 두 부분으로 나누어 진다. 보통의 window가 작동되는 pc에서는 notebook interface라 하여 mathematica의 기능과 함께 문서 편집을 동시에 할수 있다. 그러나 Unix나 pc의 dos에서는 kernal이 바로 뜨게 된다.
ㅤㅤ Unix나 dos상에서 mathematica를 작동 시키면 'In[#]:='와 같은 prompt가 뜬다. 여기서 mathematica의 명령어를 치면 'Out[#]:=' 다음에 결과가 출력 된다.

그런데 mathematica의 함수들에 설명하기 앞서 몇가지 먼저 언급하자면 mathematica 의 object(함수,List 등등)들은 대문자로 시작하며 함수를 나타내기 위해서는 대괄호 를 쓴다. 즉, Plot[ ]과 같이 함수의 인자는 [ ] 안에 들어 간다. 그리고 mathematica 에는 행렬 표현과 같이 여러개의 데이타를 하나의 묶음으로 취급할 수 있는데 이를 List라 한다. List는 중괄호({})로 묶여 함수에서 사용되는 대괄호([ ])와 구분 된다. 그리고 mathematica는 symbolic computation을 한다. 예를 들어 3 + 6과 같은 연산을 하면 위의 표현은 mathematica 내부에서 시스템이 인식할 수 있는 동등한 표현으로 변환된다.



1.Numerical calculation

mathematica에서는 거의 모든 수학적 연산이 가능하다.뿐만 아니라 정확한 값의 출력도 가능하고 유효 숫자도 조절할 수 있다.

예를 들면,

In[1]:= 5 + 9

Out[1]= 14
In[2]:= 3 ^ 100

Out[2]= 515377520732011331036461129765621272702107522001

3 ^ 100의 정확한 값을 출력한다.

In[4]:= N[ Sqrt[10], 50]

Out[4]= 3.1622776601683793319988935444327185337195551393252
square root 10을 유효 숫자 50개까지 출력한다.

In[5]:= (3 + 4I)^12

Out[5]= 32125393 - 242017776 I
In[6]:= BesselJ[0,13.5]

Out[6]= 0.214989
여러가지 표준 함수들의 값도 계산할 수 있다.

In[7]:= FindRoot[BesselJ[0,x], {x,14.5} ]

Out[7]= {x -> 14.9309}
14.5근처에서의 Bessel 함수의 근을ㅤ찾는다.

In[8]:= NIntegrate[ Sin[Sin[x]], {x,0,Pi} ]

Out[8]= 1.78649
수치 적분도 가능하다. 구간 [0,Pi]에서 Sin[Sin[x]]의 수치 적분


2.Graphics

mathematica에는 많은 그래픽 함수가 있다. 대표적인 것으로 Plot[ ], CountourPlot[ ], Plot3D[ ], 그리고 ParametricPlot(3D)[ ]등이 있다.

In[1]:=Plot[Sin[x],{x,0,2 Pi}]

In[2]:=Plot[Tan[x],{x,-3,3}]

In[3]:=CountourPlot[ Sin[x + Sin[y]],{x,-2,2},{y,-2,2}]

In[4]:=Plot3D[ Sin[x + Sin[y]],{x,-3,3},{y,-3,3}]

In[6]:=Plot3D[ Exp[-(x^2+y^2)], {x,-2,2},{y,-2,2}, Mesh -> False]

In[7]:=Plot3D[ Exp[-(x^2+y^2)], {x,-2,2},{y,-2,2}, Shading -> False]

In[8]:= ParametricPlot3D[ { Cos[t] (3+Cos[u]), Sin[t] (3+ Cos[u]),Sin[u]}, {t,0,2Pi},{u,0,2Pi} ]


3.Algebra and Calculus

mathematica에서는 숫자뿐만 아니라 수식도 다룰 수가 있다. 대표적인 예는 주어진 다항식을 전개하거나 인수분해하고 미분, 적분하는 것이다.

In[1]:= 9 (2 + x) (x + y) + (x + y)^2

2

Out[36]= 9 (2 + x) (x + y) + (x + y)
같은 수식이 출력된다. 그리고 *대신에 여백으로 쓸 수 있다.

In[2]:= Expand[ %^3 ]

               3         4         5         6          2            3
Out[37]= 5832 x  + 9720 x  + 5400 x  + 1000 x  + 17496 x  y + 30132 x  y + 
 
            4           5              2          2  2          3  2
>    17280 x  y + 3300 x  y + 17496 x y  + 32076 x  y  + 19494 x  y  + 
 
           4  2         3            3         2  3         3  3        4
>    3930 x  y  + 5832 y  + 12636 x y  + 8802 x  y  + 1991 x  y  + 972 y  + 
 
             4        2  4       5         5    6
>    1242 x y  + 393 x  y  + 54 y  + 33 x y  + y

앞의 수식을 세제곱한 다음 전개시킨다. marhematica에서는 바로 앞에서 계산된 식이나 값을 사용할 수 있는데 '%'로 표시된다.

In[3]:= Factor[%]

                3                3
Out[38]= (x + y)  (18 + 10 x + y)
위의 전개된 식을 인수분해한다.

In[4]:= Integrate[ x^2 Sin[x]^2, x]

            3                                  2
         4 x  - 6 x Cos[2 x] + 3 Sin[2 x] - 6 x  Sin[2 x]
Out[39]= ------------------------------------------------
                                24
x에 대해 부정 적분을 한다. 따라서 결과는 식으로 표시되며 정적분을 하려면 Nintegrate[ ]함수를 이용한다.

In[5]:= D[ % , x]

             2       2
         12 x  - 12 x  Cos[2 x]
Out[40]= ----------------------
                   24

앞의 식을 x에 대해 미분한다. 이것도 앞의 적분과 마찬가지로 symbolic differentiation 이다.

In[7]:= Series[ % , {x, 0, 14} ]

               6      8    10      12      14
          4   x    2 x    x     2 x     2 x          15
Out[41]= x  - -- + ---- - --- + ----- - ------ + O[x]
              3     45    315   14175   467775
앞의 식을 series expansion한다.


4.Solving Equation

In[1]:= x^3 - 7 x^2 + 3 a x == 0

                   2    3
Out[2]= 3 a x - 7 x  + x  == 0

In[2]:= Solve[ %, x]

                         7 - Sqrt[49 - 12 a]         7 + Sqrt[49 - 12 a]
Out[3]= {{x -> 0}, {x -> -------------------}, {x -> -------------------}}
                                  2                           2
앞의 방정식을 푼다. symbolic computation. 수치해를 구하기 위해서는 NSolve[ ] 함수를 이용한다.

In[3]:= Solve[ { a x + b y == 0, x + y == c }, {x,y} ]

                    a c            a c
Out[1]= {{x -> c + ------, y -> -(------)}}
                   -a + b         -a + b
연립 방정식도 풀 수 있다. 두 번째 인수에 미지수를 지정해 준다.

In[4]:= NSolve[x^5 +2x +1 ==0,x]

Out[4]= {{x -> -0.701874 - 0.879697 I}, {x -> -0.701874 + 0.879697 I}, 
 
>    {x -> -0.486389}, {x -> 0.945068 - 0.854518 I}, 
 
>    {x -> 0.945068 + 0.854518 I}}

In[5]:= FindRoot[{Sin[x] == x-y , Cos[y] == x+y},{x,1},{y,0}]

Out[5]= {x -> 0.883401, y -> 0.1105}
In[2]:= FindRoot[Cos[x] == x, {x, 1}]

Out[2]= {x -> 0.739085}
In[2]:= Solve[{x + y == 1, (1 + y^2 + x y - 2 y) == 0}, {x, y}]

Out[2]= {{x -> 0, y -> 1}}

5. File and External Operation

매스매티카에서 나오는 정의와 결과를 이용하여 파일로 처리할 수 있다.

     << name    : read in a plain text file of mathematica input
expr >> name    : output expr to a file as plain text
expr >>> name   : expr 을 file 에 붙인다. ( append , attach) 
      !!name    : display the contents of a plain text file
in[15]:= Expand[(x+y)^3] >> kk

In[16]:= !!kk

x^3 + 3*x^2*y + 3*x*y^2 + y^3

In[17]:= <

          3      2          2    3
Out[17]= x  + 3 x  y + 3 x y  + y
다음은 행렬 데이타이다.

In[1]:= data = {{1,2},{2,3},{3,4},{4,5}};

In[2]:= WriteMatrix["test1.txt",data]

Out[2]= test1.txt
In[3]:= !!test1.txt

1       2
2       3
3       4
4       5
WriteMatrix 는 두개의 인수, 파일 이름과, 매트릭스 이름이 필요하다.

TeXForm[expr],FortranFrom[],CForm[] :표현을 tex ,fortran ,c input 으로 바꿔준다.

In[29]:= (x+y)^2(x y)

Out[29]= x y (x + y)
In[30]:= TeXForm[%]

Out[30]//TeXForm= x\,y\,{{\left( x + y \right) }^2}
In[34]:= FortranForm[%]

Out[34]//FortranForm= x*y*(x + y)**2
In[35]:= CForm[%]

Out[35]//CForm= x*y*Power(x + y,2)

expr >>"!command" : 외부 명령어에 텍스트 형식의 표현을 입력한다. 
    <<"!command" : 외부 명령어를 실행하고, 그것이 만들어내는 결과를
                 읽어 들인다.
In[31]:= x^2 + y^2 >> "!lpr"

위의 표현이 프린터로 출력된다.

In[29]:= !ls

total 71
   1 560/                  1 es1/                  1 nsmail/
   1 Calendar/             1 friends/              2 oldsystems/
   1 Mail/                 1 http-docs/            1 scratch/
   1 News/                 1 human/                8 sound
   1 ad/                   1 kk                    1 test1.txt
   1 anounce/              1 letters/              1 tmp/
   1 bin/                 42 mbox
   1 course/               1 no560/
shell 명령어를 실행 시키려면 !command 형식으로 쓴다.

6. Reference

Stephen Wolfram , Mathematica , Addison Wesley, 2nd Ed.

Link to the more information (Mathematica Group)

Technical Information about Mathematica
http://www.wri.com/support/ /