"Java ¿Í Mathematica ¸¦ ÀÌ¿ëÇÑ Á¶ÇÕ·Ð ¾Ë°í¸®ÁòÀÇ ±¸Çö"
¼º±Õ°ü´ëÇб³ ¼öÇаú 4Çгâ 1992312068¹ø À¯º´Çõ
ÇÑ Çб⵿¾È Á¶ÇÕ·ÐÀ» ¹è¿ì¸é¼ ´À³¤ °á·ÐÀº, Á¶ÇÕ·ÐÀº Çö½Ç¼¼°è¸¦ ¼öÇÐÀûÀ¸·Î ¸ðµ¨¸µÇϱ⿡ ÁÁÀº Çй®À̶ó´Â °ÍÀ̾ú½À´Ï´Ù. ÇÏÁö¸¸, Çö½Ç¼¼°èÀÇ º¹À⼺À¸·Î ÀÎÇÏ¿© ±×°ÍÀ» ¼º°øÀûÀ¸·Î ¸ðµ¨¸µÇÏ¿´´Ù°í ÇÏ´õ¶óµµ ¸ðµ¨¸µÇÑ ½ÄÀ» ¼ÕÀ¸·Î °è»êÇÑ´Ù´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇÑ ÀÏÀÓÀ» ¾Ë°Ô µÇ¾ú½À´Ï´Ù.
±âÁ¸ÀÇ ¼öÇÐ ÇÁ·Î±×·¡¹ÖÀº C ³ª PASCAL, ±×¸®°í FORTRAN µîÀ» ÀÌ¿ëÇÑ °ÍÀ̾úÀ¸³ª, ÀÌ°ÍÀº ÇÁ·Î±×·¡¹Ö¿¡ ¼Ò¿äµÇ´Â ½Ã°£ÀÌ ±æ°í, ¸ðµ¨¸µµÈ ³»¿ëÀ» ȸ鿡 ½Ã°¢ÀûÀ¸·Î ³ªÅ¸³»±â¿¡´Â ºÒÆíÇÑ Á¡ÀÌ ¸¹¾Ò½À´Ï´Ù. ¶ÇÇÑ ÇöÀç´Â ÀÎÅͳÝÀÇ World Wide Web(ÀÌÇÏ À¥) ȯ°æÀ» ÀÌ¿ëÇÑ Á¤º¸ÀÇ °øÀ¯°¡ ÁÖ°¡ µÇ´Âµ¥, ±âÁ¸ÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â °á°ú¸¦ °øÀ¯Çϱ⿡ ºÒÆíÇÑ Á¡ÀÌ ¸¹¾Ò½À´Ï´Ù.
±×·± ÀÌÀ¯·Î ¼öÇÐÀûÀÎ ¸ðµ¨¸µÀ» ÄÄÇ»Å͸¦ ÀÌ¿ëÇØ ºü¸£°Ô ½Ã°¢ÈÇÏ°í °á°ú°ªÀ» ±¸Çس¾ ¼ö ÀÖ´Â ¸Þ½îµå¸¦ ã´ø Áß, ¼·Î ¼º°ÝÀÌ ´Ù¸¥ µµ±¸Áö¸¸, Java ¿Í Mathematica °¡ ±×°Í¿¡ ÀûÇÕÇÏ´Ù´Â °á·Ð¿¡ À̸£°Ô µÇ¾ú½À´Ï´Ù. ±×·¡¼ ÀúÀÇ ÇÁ·ÎÁ§Æ®¿¡¼´Â Java ¿Í Mathematica ¶ó´Â µµ±¸¸¦ ¼Ò°³ÇÏ°í, ±×°ÍÀ» °¡Áö°í Á¶ÇÕ·ÐÀÇ ¹®Á¦µéÀ» ½ÇÁ¦ÀûÀ¸·Î ±¸Çö / Ç®¾î³»´Â °úÁ¤À» ¹ßÇ¥Çϱâ·Î ÇÏ¿´½À´Ï´Ù. ÀÌ ÇÁ·ÎÁ§Æ®´Â ÇâÈÄ ¼öÇÐ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ·Á´Â »ç¶÷µéÀ» À§ÇÑ °¡À̵尡 µÉ ¼ö ÀÖÀ¸¸®¶ó »ý°¢ÇÕ´Ï´Ù.
ÀúÀÇ ÇÁ·ÎÁ§Æ®´Â ´ÙÀ½°ú °°Àº ±¸Á¶·Î ÀÌ·ç¾îÁ®ÀÖ½À´Ï´Ù.
1. Java & Mathematica ¿¡ ´ëÇÑ ¼Ò°³.
1.1 Java
Java ´Â Sun Microsystems¿¡¼ °³¹ß, ÇöÀç ¹«·á·Î ¹èÆ÷ÇÏ°í ÀÖ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î½á 1999³â 11¿ù ÇöÀç ¹öÁ¯ 1.2 ±îÁö ¹èÆ÷µÇ¾î ÀÖ´Â »óÅÂÀÔ´Ï´Ù. Sun Microsystems ÀÇ À¥»çÀÌÆ® http://www.javasoft.com ¿¡¼ ÀÚ¹Ù°³¹ßÀÚ Å°Æ®(JDK: Java Developement Kit) Àüü¸¦ ÀÎÅͳݿ¡¼ ´Ù¿î ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ »çÀÌÆ®´Â À©µµ¿ìÁî 95/98, À©µµ¿ìÁî NT, ¼Ö¶ó¸®½º ¹× ¸ÅŲÅä½Ã¿¡ ´ëÇÑ JDK ¹öÁ¯À» Á¦°øÇÕ´Ï´Ù.
( Microsoft ÀÇ Java °³¹ß µµ±¸, Visual J++ ÀÇ È¸é ¿¹ )
Java ´Â C ³ª PASCAL °ú´Â ´Þ¸® °´Ã¼ÁöÇâÀûÀÎ °³³äÀ» ³»Æ÷ÇÏ°í ÀÖÀ¸¸ç, ¿©·¯ Ư¡À» °¡Áö°í Àִµ¥, ƯÈ÷ Java ´Â Java Applet À» Á¦ÀÛÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» °¡Áø´Ù´Â Á¡¿¡ ÁÖ¸ñÇÒ¸¸ ÇÕ´Ï´Ù. ÀÌ°ÍÀº ÀÚ½ÅÀÌ Á¦ÀÛÇÑ ÇÁ·Î±×·¥À» º°µµÀÇ ÀúÀå°ú ÄÄÆÄÀÏ °úÁ¤ ÇÊ¿ä¾øÀÌ ³Ý½ºÄÉÀÌÇÁ³ª ÀÎÅÍ³Ý ÀͽºÇ÷η¯ µîÀÇ À¥ ºê¶ó¿ìÀú¿¡¼ ¹Ù·Î ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Çϴ Ư¡ÀÔ´Ï´Ù..
Java ¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â, SunÞäÀÇ Java ȨÆäÀÌÁö(http://java.sun.com)¿¡¼ ãÀ» ¼ö ÀÖ½À´Ï´Ù.
1.2. Mathematica
Mathematica ´Â Wolfram Research¿¡¼ °³¹ß, ÇöÀç ¹öÁ¯ 4.0 ±îÁö Ãâ½ÃµÇ¾î ÀÖ½À´Ï´Ù. Mathematica ´Â ¹æ´ëÇÑ ¾çÀÇ ¼öÇÐ ÆÐÅ°Áö¸¦ º¸À¯ÇÏ°í ÀÖÀ¸¸ç ƯÈ÷ ±×·¡ÇÈ°ú ¼öÇÐ½Ä Ç¥Çö¿¡ ÇÊ¿äÇÑ ÇÔ¼öµéÀ» ¸¹ÀÌ Æ÷ÇÔÇÏ°í Àֱ⠶§¹®¿¡ ¼öÇÐÀûÀÎ ¸ðµ¨¸µÀ» ½±°Ô ½Ã°¢È ÇÒ ¼ö ÀÖ´Â µµ±¸ÀÔ´Ï´Ù.
( Mathematica ÀÇ È¸é ¿¹ )
Mathematica ¸¦ ÀÌ¿ëÇϸé ƯÁ¤ÇÑ ÇÔ¼ö¸¦ Á¦°øÇÏ´Â ÆÐÅ°Áö¸¦ ¸¸µé ¼ö ÀÖÀ¸¸ç ±×°ÍÀ» »ç¿ëÇÏ¿© ÀÛ¾÷ÀÇ »ý»ê¼ºÀ» ³ôÀÏ ¼ö ÀÖ½À´Ï´Ù.
Mathematica ¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â, Wolfram ResearchÀÇ È¨ÆäÀÌÁö(http://www.wolfram.com)¿¡¼ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
2. Java Applet À» ÀÌ¿ëÇÑ ±¸Çö
Java Applet À» ÀÌ¿ëÇÏ¿© (¼öÇÐ) ÇÁ·Î±×·¥À» Á¦ÀÛ ÇÏ´Â °ÍÀº ´ÙÀ½ÀÇ ´Ü°è¸¦ °ÅĨ´Ï´Ù.
- ¾Ë°í¸®Áò ºÐ¼®
- ¼Ò½ºÄÚµå ÀÛ¼º
- ÄÄÆÄÀÏ / µð¹ö±ë
- ¹ÙÀÌÆ®ÄÚµå ÀÛ¼º
- À¥ ¹®¼¿Í ¿¬°á
- À¥ ¹®¼ ³»¿¡¼ ½ÇÇà
´ÙÀ½Àº ÁÖ¾îÁø ¼öÀÇ FactorialÀ» Ç¥½ÃÇÏ´Â Java Applet ÀÇ ÄÚµå¿Í ½ÇÁ¦ Applet ÀÔ´Ï´Ù.
(¡Ø À§ Applet Àº ÁÖ¾îÁø ¼ýÀÚ°¡ 21 ÀÌ»óÀ϶§ factorial °ªÀÌ Java ÀÇ Á¤¼öÇ¥Çö ÇѰ躸´Ù Ä¿Áö±â ¶§¹®¿¡ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. )
À§ Applet À» ±¸¼ºÇÏ´Â Source Code ´Â ´ÙÀ½°ú °°½À´Ï´Ù.
import java.awt.*; import java.applet.*; import java.awt.event.*; /** * ÀÌ AppletÀº »ç¿ëÀڷκÎÅÍ ÇϳªÀÇ ÀÚ¿¬¼ö¸¦ ¹Þ¾Æ¼, ±×°Í¿¡ ÇØ´çÇÏ´Â * Factorial °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. */ public class Factorial extends Applet implements ActionListener { Label numLabel, resultLabel; TextField num, result; public void init() { numLabel = new Label("¼ýÀÚ¸¦ ÀÔ·ÂÇÏ°í Enter¸¦ ´©¸£¼¼¿ä"); num = new TextField( 10 ); num.addActionListener( this ); resultLabel = new Label("Factrial °ª : "); result = new TextField( 20 ); result.setEditable( false ); add( numLabel ); add( num ); add( resultLabel ); add( result ); } public void actionPerformed( ActionEvent e ) { long number, factorialValue; number = Long.parseLong( num.getText() ); showStatus( "Calculating... " ); factorialValue = factorial( number ); showStatus( "Done." ); result.setText( Long.toString(factorialValue) ); } long factorial( long n ) { if( n == 0 || n == 1 ) return 1; else return n * factorial( n - 1 ); } }¼Ò½ºÄڵ带 ÀÛ¼ºÇÑ ÈÄ, JDKÀÇ Java compiler ¸¦ ÀÌ¿ëÇÏ¿© ´ÙÀ½ÀÇ ¹®ÀåÀ» ½ÇÇàÇÏ¸é °á°ú·Î Factorial.class ÈÀÏÀ» ¾ò½À´Ï´Ù.
c:\work> javac Factorial.javaÀÌ·¸°Ô ¸¸µé¾îÁø Factorial.class ÈÀÏÀ» À¥ ¹®¼¿¡ »ðÀÔÇÏ´Â ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
<html> <body> <applet code="Factorial.class" width="320" height="60"> </applet> </body> </html>´ÙÀ½Àº °°Àº ¿ø¸®¿Í, ´ÙÀ½ÀÇ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Á¦ÀÛÇÑ fibonacci number »ý¼º¿ë Java Applet ÀÔ´Ï´Ù. ´ÙÀ½ Applet ÀÇ ¼Ò½ºÄÚµå´Â fibonacci.java ÀÔ´Ï´Ù. 1)
long fibonacci( long n ) { if( n == 0 || n == 1 ) return n; else return fibonacci( n - 1 ) + fibonacci( n - 2 ); }´õ À¯¿ëÇÑ Java Applet ÀÇ È°¿ëÀº 4ÀåÀÇ È°¿ë ¿¹¿¡¼ »ìÆ캸±â·Î ÇÏ°Ú½À´Ï´Ù.
3. Mathematica ¸¦ ÀÌ¿ëÇÑ ±¸Çö
Mathematica ¸¦ ÀÌ¿ëÇÏ´Â °ÍÀº Mathematica °¡ Á¦°øÇÏ´Â ¸¹Àº ÇÔ¼öµé°ú Mathematica Notebook ÀÇ ÇÁ¸®Á¨Å×À̼Ç/ÃâÆÇ ±â´ÉÀ» »ç¿ëÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ±âº»ÀûÀ¸·Î Mathematica ´Â ´ÙÀ½ÀÇ Combinatorics ÇÔ¼öµéÀ» Á¦°øÇÕ´Ï´Ù. (À̾îÁö´Â ±×¸²Àº, Mathematica°¡ Áö¿øÇÏ´Â Á¶ÇÕ·ÐÀÇ ÇÔ¼öµéÀ» Á÷Á¢ ÀÔ·ÂÇÏ°í ÀÛ¾÷Çϴ ȸéÀ» ĸÃÄÇÑ °ÍÀÔ´Ï´Ù.
Mathematica °¡ Á¦°øÇÏ´Â Á¶ÇÕ·Ð ±â¹Ý ÇÔ¼öµéÀº À̰ͺ¸´Ù ÈξÀ ¸¹Áö¸¸, ÇÑ Çб⵿¾È ¹è¿î ³»¿ë°ú Áߺ¹µÇ´Â ºÎºÐ¸¸ Ã߸° °ÍÀÔ´Ï´Ù. Mathematica ¸¦ »ç¿ëÇÏ¸é ¼öÇÐ ÇÁ·Î±×·¡¹ÖÀÇ ÀÛ¾÷½Ã°£À» È¿°úÀûÀ¸·Î ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.
4. È°¿ë ¿¹
4.1 Magic Square Applet
Magic Square ¶õ °¢ ¿, Çà, ±×¸®°í µÎ°³ÀÇ ´ë°¢¼±¿¡ À§Ä¡ÇÑ ¼öÀÇ ÇÕÀÌ °°µµ·Ï ¸¸µç Çà·ÄÀ» ¸»ÇÕ´Ï´Ù.
µû¶ó¼, order nÀÇ magic square´Â µ¿ÀÏÇÑ Magic Sum, Áï s = n (n2 + 1) / 2 ¸¦ °¡Áý´Ï´Ù. ¿©±â¼ ¹®Á¦´Â ¾î¶»°Ô Çϸé order nÀÇ magic square¸¦ ±¸ÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀ» ±¸ÃàÇÒ ¼ö Àִ°¡ ÇÏ´Â Á¡ÀÔ´Ï´Ù. ÀÌ Àý¿¡¼´Â, 17¼¼±âÀÇ ¼öÇÐÀÚ la LoubereÀÇ ¹æ¹ýÀ¸·Î nÀÌ È¦¼öÀÎ °æ¿ìÀÇ magic square¸¦ ¸¸µå´Â Java AppletÀ» ¸¸µé¾î º¾´Ï´Ù.
la LoubereÀÇ ¾Ë°í¸®ÁòÀº ´ÙÀ½°ú °°ÀÌ ºÐ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
- nÀº Ȧ¼ö¿©¾ß ÇÕ´Ï´Ù. (nÀÌ È¦¼ö°¡ ¾Æ´Ñ°æ¿ì error)
- 0th ¿ÀÇ °¡¿îµ¥ Çà¿¡ 1À» ³Ö°í Ãâ¹ßÇÕ´Ï´Ù.
- ±×ÈÄ, ´ÙÀ½ ±×¸²°ú °°Àº ¹æ½ÄÀ¸·Î ÁøÇàÇÕ´Ï´Ù.
¿À¸¥ÂÊ ÀÂÊ ´ë°¢¼± ¹æÇâÀ¸·Î À̵¿Çϸé¼, ÀÂÊ °æ°è¿¡ À̸£¸é ´Ù½Ã ¾Æ·¡ÂÊÀ¸·Î µ¹¾Æ¿À°í, ÀÌ¹Ì ¼ýÀÚ°¡ ä¿öÁ®ÀÖ´Â ÄÀ» ¸¸³ª¸é, ÇÑÄ ¾Æ·¡·Î À̵¿ÇÑ ÈÄ, ´Ù½Ã °°Àº ¹æ¹ýÀ¸·Î ÁøÇàÇÏ¸é¼ Áö³ªÄ¡´Â Ä¿¡ ¼ýÀÚ¸¦ ä¿ì´Â °ÍÀÔ´Ï´Ù.ÀÌ°ÍÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Â Java AppletÀº ´ÙÀ½°ú °°À¸¸ç n = 3 ºÎÅÍ n = 11 ±îÁö ÀÛµ¿ÇÕ´Ï´Ù.
ÀÌ ÇÁ·Î±×·¥ÀÇ ¼Ò½ºÄÚµå´Â MagicSquare.java ÀÔ´Ï´Ù. ¼Ò½ºÀÇ ¾Ë°í¸®Áò ±¸ÇöºÎºÐÀº ´ÙÀ½°ú °°½À´Ï´Ù.
Àü·«... ------- public void actionPerformed( ActionEvent e ) { int magicSumValue; number = Integer.parseInt( num.getText() ); if( number <= 11 && number > 1 ) { magicSumValue = magicSum( number ); status.setText( "Magic SumÀº " + Integer.toString( magicSumValue ) + "ÀÔ´Ï´Ù." ); repaint(); } else { status.setText( "1 º¸´Ù Å©°í, 11 ÀÌÇÏÀÎ ¼ö¸¦ ÀÔ·ÂÇϼ¼¿ä." ); } } int magicSum( int n ) { return (n*n*n + n) / 2; } void drawBox( Graphics g, int n ) { ...; } void drawMagicSquare( Graphics g, int n ) { int i,j,k,l,num; num = 1; k = 0; i = (n-1)/2; for(l = 0; l < n; l++ ) { for( j = 0; j < n; j++ ) { try { Thread.sleep(500); } catch (InterruptedException e) {} g.drawString(Integer.toString(num), 10 + 3 + (300/n)*((i+10*n)%n), 65 + 13 + (300/n)*((k+10*n)%n) ); k--; i++; num++; } k = k + 2; i--; } } ------- ÈÄ·«...4.2 n-Queens Problem
´ÙÀ½Àº n by n ü½ºÆÇ¿¡ n°³ÀÇ QueenµéÀ» ¼·Î °ø°ÝÇÏÁö ¾Êµµ·Ï ¹èÄ¡ÇÏ´Â ¸ðµç °¡Áö¼ö¸¦ ±¸ÇÏ´Â AppletÀÔ´Ï´Ù. ÀÌ AppletÀº 1ºÎÅÍ 10±îÁöÀÇ n-Queens ProblemÀ» Ç® ¼ö ÀÖµµ·Ï ¼³°èµÇ¾î ÀÖ½À´Ï´Ù. ÀÌ AppletÀº Á»´õ º¹ÀâÇÑ ±â´ÉµéÀ» ¿ä±¸Çϱ⠶§¹®¿¡ µÎ°³ÀÇ java source ÈÀÏ·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù. (NQueens.java, ChessBoard.java)
ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.
¿©±â¼ ÇØ°¡ "73025164" ¶ó°í Ç¥ÇöµÈ°ÍÀº
- 0¹ø° ¿ÀÇ 7¹ø° Çà¿¡ ù¹ø° QueenÀ» ³Ö°í,
- 1¹ø° ¿ÀÇ 3¹ø° Çà¿¡ µÎ¹ø° Queen,
- 2¹ø° ¿ÀÇ 0¹ø° Çà¿¡ ¼¼¹ø° Queen,
- °°Àº ¹æ¹ýÀ¸·Î 7¹ø° ¿ÀÇ 4¹ø° Çà¿¡ ¸¶Áö¸· QueenÀ» ³Ö´Â °ÍÀ» ¶æÇÕ´Ï´Ù.
½ÇÁ¦·Î ÀÛµ¿ÇÏ´Â AppletÀº ´ÙÀ½°ú °°½À´Ï´Ù.
Non-Attacking QueensÀÇ Çظ¦ ±¸ÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°½À´Ï´Ù.
boolean Threatens(int x, int y, int numPiecesPlaced) { int i = 0; boolean threats = false; int temp; while ((i < numPiecesPlaced) && (threats == false)) { if (board[i] == y) threats = true; temp = x-i; if ((y == (board[i]-temp)) || (y == (board[i]+temp))) threats = true; ++i; } return threats; } void FindSolution(int piecesPlaced) { int i; for (i=0; i<NUM_QUEENS; ++i) { if (!Threatens(piecesPlaced, i, piecesPlaced)) { board[piecesPlaced] = i; if (piecesPlaced == (NUM_QUEENS-1)) { PrintSolution(NUM_QUEENS, solutionsFound); ++(solutionsFound); } FindSolution(piecesPlaced+1); } } return; } void PrintSolution(int numQueens, int s) { int i; sol = new StringBuffer(""); for (i = 0; i<numQueens; ++i) { sol.append(Integer.toString(board[i])); } c.setSolution(sol.toString()); sol.append(": #" + Integer.toString(s)); solutions.addItem(sol.toString()); }
°á·Ð
Java / Java Applet °ú Mathematica µîÀÇ »õ·Î¿î µµ±¸¸¦ »ç¿ëÇÏ¸é ¼öÇÐÀûÀÎ ³»¿ëÀ» ½±°Ô Ç¥ÇöÇÏ°í ±¸ÇöÇÒ ¼ö ÀÖÀ¸¸ç, ƯÈ÷ ±³À°À» ¸ñÇ¥·Î »ç¿ëµÉ¶§ ±× È¿°ú°¡ Å©´Ù°í ÇÏ°Ú½À´Ï´Ù.
Java ¿Í Mathematica µîÀÇ µµ±¸µé, ±×¸®°í º¯ÈÇÏ´Â Çö½Ç¿¡ ÀûÀÀÇÏ´Â °ÍÀÌ Çй®À» ÇÏ´Â »ç¶÷ÀÇ ÀÚ¼¼¶ó°í »ý°¢ÇÕ´Ï´Ù.
Âü°íÀÚ·á.
- Java 2 Programming Bible / by Deitel & Deitel / Á¤º¸¹®È»ç
- Exploring Mathematics with your Computer / by Arthur Engel / MAA
- http://java.sun.com ÀÇ ¹®¼ÀÚ·áµé
- http://www.digitalcats.com ÀÇ Java °ü·Ã ¼Ò½ºµé