Symplectic¿ôÃÍÀÑʬˡ¤Ï¶áǯÅо줷¤¿Ä¶¹âÀºÅ٤οôÃÍÀÑʬˡ¤Ç ¤¢¤ë¡£¤½¤ÎƳ½ÐË¡¤¬Æüì¤Ê¤³¤È¤«¤é¤Þ¤À¤¢¤Þ¤êÉáµÚ¤·¤Æ¤¤¤Ê¤¤¤¬¡¢¤½¤Î »È¤¤Êý¤Ï»ê¤Ã¤Æ´Êñ¤Ç¤¢¤ê¡¢¶á¤¤¾Í迤¯¤ÎʬÌî¤Ç¤³¤ÎSymplecticË¡¤¬ »È¤ï¤ì¤ë¤Ç¤¢¤í¤¦¡£ ¤³¤ÎSymplectic¿ôÃÍÀÑʬˡ¤Î¸¶Íý¤È¹½ÃÛÊýË¡¡¢¼ÂºÝ¤ÎʪÍý ¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¤Ç¤ÎÍøÍѤλÅÊý¤ò³Ø¤Ü¤¦¡£
µÄÏÀ¤ò´Êñ¤Ë¤¹¤ë¤¿¤á 1¼ÁÅÀ·Ï¤Î±¿Æ°¤ò¹Í¤¨¤ë¤¬¡¢ ¤³¤ÎµÄÏÀ¤Ï¿ÂηϤˤ⤽¤Î¤Þ¤Þ³ÈÄ¥¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
ʪÂΤα¿Æ°ÎÌ p(t) ¤È°ÌÃÖ q(t) ¤Î»þ´ÖÊѲ½¤Ï¡¢ÂçÄñ¤ÎÌäÂê¤Ë¤ª¤¤¤Æ ¼¡¤Î¤è¤¦¤Ê·Á¤ÎÈùʬÊýÄø¼°¤Ë¤è¤Ã¤Æ»ÙÇÛ¤µ¤ì¤ë¡£
¤³¤³¤Ç Dh ¤ÏÃê¾ÝŪ¤Ê±é»»»Ò¤Ç¤¢¤ê¡¢Í¿¤¨¤ì¤¿ (p,q) ¤ò ¤½¤Î»þ´ÖÊѲ½Ê¬¤ËÊÑ´¹¤¹¤ë±é»»»Ò¤È¤¹¤ë¡£±é»»»Ò Dh ¤Ï p,q ¤ËÂФ·¤Æ·Á¼°¤¬ÉÔÊѤʱ黻»Ò¤Ç¤¢¤ê¡¢ ¤³¤ÎÈùʬÊýÄø¼°¤Ë¤ª¤¤¤Æ¤ÏÄê¿ô¤È¤·¤Æ°·¤¦¤³¤È¤¬¤Ç¤¤ë¡£ ¤½¤Î¤¿¤á¡¢¤³¤ÎÈùʬÊýÄø¼°¤Î²ò¤ÏÃê¾ÝŪ¤Ë¼¡¤Î¤è¤¦¤Ëɽ¤µ¤ì¤ë¡£
¤Ä¤Þ¤ê¡¢¤³¤Î Dh ¤Ï·Ï¤Î»þ´Ö¿ä¿Ê±é»»»Ò¤ÎÀ¸À®»Ò¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤ë¡£ (2)¼°¤ÏÃê¾ÝŪ¤Ê·Ï¤Î¸·Ì©²ò¤Ç¤¢¤ë¡£½é´üÃÍ p(0),q(0) ¤«¤éǤ°Õ¤Î»þ¹ï t ¤Ç¤ÎÃÍ p(t),q(t) ¤¬¤³¤Î¼°¤è¤êµá¤Þ¤ë¤¬¡¢¼ÂÍÑ¤Ç¤Ï ¤³¤Î»þ´Ö t ¤òû¤¤»þ´Ö ¦¤t ¤ËÃÖ¤´¹¤¨¤Æ¡¢ p(¦¤t),q(¦¤t) ¤òµá¤á¤Æ¡¢¤½¤ì¤òºÆ¤Ó½é´üÃͤȤ·¤Æ ¼¡¤Î¥¹¥Æ¥Ã¥×¤Ç¤ÎÃͤòµá¤á¤ëÊýË¡¤ò¤È¤ë¡£ ¤·¤«¤· (2)¼°¤ÏÃê¾ÝŪ¤Ê¤¿¤á¡¢ ¶ñÂÎŪ¤Ê·×»»¤Ë¤Ï¤È¤ê¤«¤«¤ì¤Ê¤¤¡£
p,q ¤Î»þ´ÖÊѲ½¤ò¤â¤¿¤é¤¹ÊªÍýŪÍ×ÁǤˤϡ¢Î㤨¤Ð±¿Æ°¥¨¥Í¥ë¥®¡¼¤Ë¤è¤ë Í×ÁÇ¡¢¥Ý¥Æ¥ó¥·¥ã¥ëÎÏ¡¢Ë໤ÎÏ¡¢Áê¸ßºîÍÑÎϤʤɤÎÊ£¿ô¤ÎÍ×ÁǤ¬¤¢¤ê¡¢¸Ä¡¹¤Î Í×ÁǤ¬¤â¤¿¤é¤¹»þ´ÖÊѲ½Ê¬¤ÎϤ¬¡¢·Ï¤Î»þ´ÖÊѲ½Ê¬¤È¤Ê¤ë¡£
±é»»»Ò Dh ¤Ï (p,q) ¤Î»þ´ÖÊѲ½Ê¬¤òƳ¤¯±é»»»Ò¤Ç¤¢¤ë¤¬¡¢ ¤³¤Î±é»»»Ò¤â¤Þ¤¿¡¢¸Ä¡¹¤ÎʪÍýŪÍ×ÁǤˤè¤ë»þ´ÖÊѲ½Ê¬¤òƳ¤¯±é»»»Ò¤Î Ϥȹͤ¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£µÄÏÀ¤ò¤µ¤é¤Ë´Êñ¤Ë¤¹¤ë¤¿¤á¤Ë¡¢±¿Æ°¥¨¥Í¥ë¥®¡¼ ¤Î¸ú²Ì¤Ë¤è¤ë±é»»»Ò Dk ¤È¥Ý¥Æ¥ó¥·¥ã¥ëÎϤθú²Ì¤Ë¤è¤ë±é»»»Ò Du ¤ß¤Î·Ï¤ò¹Í¤¨¤ë¡£¤Ä¤Þ¤ê¡¢¤â¤Ã¤È¤âñ½ã¤Êγ»Ò¤Î±¿Æ°¤Ç¤¢¤ê¡¢
¤Ç¤¢¤ë¡£(3)¼°¤Î±¦Êդα黻»Ò¤ÎϤλؿô¤ò±é»»»Ò¤Î »Ø¿ô¤ÎÀѤ˶á»÷Ÿ³«¤¹¤ë¤³¤È¤ò¹Í¤¨¤è¤¦¡£ t ¤Î1¼¡¤Î¶á»÷¤Ç¤Ï¼¡¤Î¤è¤¦¤ËŸ³«¤µ¤ì¤ë¡£ t ¤Î2¼¡¤Î¶á»÷¤Ç¤Ï¼¡¤Î¤è¤¦¤ËŸ³«¤µ¤ì¤ë¡£ ¤³¤Î¤è¤¦¤Ë³Æ±é»»»Ò¤òñÆȤǻþ´Ö¿ä¿Ê±é»»»Ò¤ÎÀ¸À®»Ò¤Ë»ÅΩ¤Æ¾å¤²¤ë ¤³¤È¤¬½ÅÍפʰÕÌ£¤ò¤â¤Ä¤³¤È¤Ï¤¹¤°¸å¤Ç¤ï¤«¤ë¡£Ê¬²ò¤µ¤ì¤¿³ÆÀ¸À®»Ò¤Ë¤è¤ë»þ´Ö¿ä¿Ê±é»»»Ò¤Î°ÕÌ£¤Ï¼¡¤ÎÄ̤ê¤Ç¤¢¤ë¡£
exp[¦¤t Dk] ¤Ï±¿Æ°¥¨¥Í¥ë¥®¡¼¤Î¸ú²Ì¤Î¤ß¤Î·Ï¤Î»þ´Ö¿ä¿Ê¤òɽ¤¹¡£ ¤¹¤Ê¤ï¤Á¼«Í³¶õ´Ö¤Ç¤Î±¿Æ°¤Ç¤¢¤ë¡£¤è¤Ã¤Æ p ¤ÏÉÔÊѤǤ¢¤ê°ÌÃÖ q ¤¬ Åù®ľÀþ±¿Æ°¤È¤·¤ÆÊѲ½¤¹¤ë¡£¤³¤ì¤Ï¸·Ì©¤Ë·×»»¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¢¤ë¡£
exp[¦¤t Du] ¤Ï¥Ý¥Æ¥ó¥·¥ã¥ëÎÏ Fu ¤¬¤â¤¿¤é¤¹ p ¤Î»þ´ÖȯŸ¤Î ¸ú²Ì¤òɽ¤¹¡£q ¤ÏÊѤï¤é¤Ê¤¤¡£ÊݸÎÏ¤Ï p ¤Ë°Í¤é¤Ê¤¤¤Î¤Ç Fu ¤ÏÄê¿ô¤È¤Ê¤ë¡£¤³¤ì¤â¤Þ¤¿¸·Ì©¤Ë·×»»¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¢¤ë¡£ SymplecticË¡¤Ï¡¢(4)¼°¡¢(5)¼° ¤Ê¤É¤Î»Ø¿ôÀÑŸ³«¤Î¼°¤Ë ½¾¤Ã¤Æ¤³¤Î2¼ï¤Î»þ´ÖȯŸºî¶È¤ò½çÈ֤˹Ԥ¦¿ôÃÍÀÑʬˡ¤Ê¤Î¤Ç¤¢¤ë¡£ »Ø¿ôÀÑŸ³«¤Ë n ¼¡¶á»÷¼°¤òÍѤ¤¤¿ÊýË¡¤ò n ¼¡Symplectic¿ôÃÍÀÑʬˡ¤È¸Æ¤Ö¡£¤Ê¤¼¤³¤ì¤À¤±¤Î¼ê½ç¤ÇĶ¹âÀºÅ٤ηë²Ì¤¬ÆÀ¤é¤ì¤ë¤Î¤Ç¤¢¤í¤¦¤«¡£
exp{[¦¤t Dk]}¡¢exp{[¦¤t Du]}¤Î³Æ»þ´Ö¿ä¿Ê±é»»»Ò¤Ï ñÆȤǸ·Ì©¤Ê»þ´ÖȯŸ¤ò·×»»¤¹¤ë¤¬ 1¼¡SymplecticË¡¤Ç¤Î¤½¤Î2¤Ä¤ÎÀÑ exp{[¦¤t Dk]} exp{[¦¤t Du]} ¤Ï²¿¤ò°ÕÌ£¤·¤Æ¤¤¤ë¤Î¤À¤í¤¦¤«¡£
BHC¤Î¸ø¼°¤«¤é¼¡¤Î´Ø·¸¤òËþ¤¿¤¹À¸À®»Ò Dh' ¤¬Â¸ºß¤¹¤ë¤³¤È¤¬¤ï¤«¤ë¡£
¤³¤Îº¸Êդγưø»Ò¤Î»þ´ÖȯŸ¤ò¸·Ì©¤Ë¹Ô¤¦¤³¤È¤Ï¡¢ ±¦ÊÕ¤ÎÀ¸À®»Ò Dh' ¤¬»ÙÇÛ¤¹¤ë¤è¤¦¤Ê·Ï¤Î»þ´ÖȯŸ¤ò ¸·Ì©¤Ë¹Ô¤¦¤³¤È¤Ê¤Î¤Ç¤¢¤ë¡£ À¸À®»Ò Dh' ¤Ï¸µ¤ÎÀ¸À®»Ò Dh ¤È¤ÏŸ³«¤ÎºÝ¤Î¶á»÷¤Îʬ¤À¤± °Û¤Ê¤Ã¤Æ¤¤¤ë¡£¤Ä¤Þ¤ê¡¢¤³¤Î2¤Ä¤Î·Ï¤ÎHamiltonian¤Î°ã¤¤¡¢¤¹¤Ê¤ï¤Á ¥¨¥Í¥ë¥®¡¼¤Î°ã¤¤¤Ï»Ø¿ôÀÑŸ³«¤ÎºÝ¤Î¶á»÷¤ÎÄøÅÙ¡¢O(¦¤t^{n+1})¤Ç¤¢¤ë¡£Dh' ¤Î·Ï¤Ç¤Î¥¨¥Í¥ë¥®¡¼¤Ï»þ´ÖȯŸ¤¬¸·Ì©¤Ê¤Î¤ÇÊݸ¤µ¤ì¤ë¡£ ½¾¤Ã¤Æ Dh ¤Î·Ï¤Î¥¨¥Í¥ë¥®¡¼¤ÏÊݸ¤µ¤ì¤ë¤Ù¤¿¿¤ÎÃͤ«¤é ¤ï¤º¤« O(¦¤t^{n+1}) ÄøÅÙ¤º¤ì¤ë¤À¤±¤Ç¡¢¤½¤ÎÀºÅÙ¤ò±Êµ×¤ËÊݤĤΤǤ¢¤ë¡£ Í×Ì󤹤ì¤ÐSymplecticË¡¤Ï¡¢·Ï¤ò¤ï¤º¤«¤ËÊÑ´¹¤·¤Æ¡¢ ¸·Ì©²ÄÀÑʬ·Ï¤È¤·¡¢¤³¤ì¤ò¸·Ì©¤ËÀÑʬ¤¹¤ëÊýË¡¤Ê¤Î¤Ç¤¢¤ë¡£ ¤³¤ì¤¬SymplecticË¡¤Î¾¤ËÎà¤ò¸«¤Ê¤¤ÆÃħ¤Ç¤¢¤ë¡£
SymplecticË¡¤Ï°ÌÃ֤䱿ưÎ̤ʤɤÎÊݸÎ̤ǤϤʤ¤ÊªÍýÎ̤θ·Ì©¤µ¤Þ¤Ç¤Ï Êݾڤ·¤Ê¤¤¤¬¡¢¥¨¥Í¥ë¥®¡¼¤¬Ä¶¹âÀºÅÙ¤ËÊݸ¤µ¤ì¤ë¤Î¤Ç¾¤ÎʪÍýÎ̤ο®ÍêÀ¤âÃø¤·¤¯¹â¤¤¡£
ÏÀ¤è¤ê¾Úµò¡¢SymplecticË¡¤Î°ÒÎϤò³Î¤«¤á¤ë¤¿¤á¤Ë ´Êñ¤Ê¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤òºî¤Ã¤Æ¤ß¤è¤¦¡£
N¸Ä¤Î¼ÁÅÀ¤¬½ÅÎϤòµÚ¤Ü¤·¤¢¤Ã¤Æ±¿Æ°¤¹¤ë·Ï¤ò¥·¥ß¥å¥ì¡¼¥·¥ç¥ó ¤·¤Æ¤ß¤è¤¦¡£ N=3¤Î·Ï¤Ï¤¤¤ï¤æ¤ë3ÂÎÌäÂê¤È¸Æ¤Ð¤ì¡¢Âå¿ôŪ¤Ë¤Ï²ò¤±¤Ê¤¤¤³¤È¤ÇÍ̾ ¤Ç¤¢¤ë¡£¤è¤ê¿¤¯¤Î¿ÂηϤϤʤª¤µ¤é¤Ç¤¢¤ë¡£
Îã¤È¤·¤Æ¡¢4¸Ä¤ÎÀ±¤¬±ß¼þ¾å¤ËÅù´Ö³Ö¤Çʤó¤Ç±ß¼þ¾å¤ò¤Þ¤ï¤ëÏ¢À®·Ï¤ò °·¤ª¤¦¡£´Êñ¤Î¤¿¤á±¿Æ°¤Ï2¼¡¸µÊ¿ÌÌÆâ¤Ë¸ÂÄꤹ¤ë¡£ ¼¡¤Î·Á¼°¤Î2¼¡¤ÎSymplecticË¡¤òÍѤ¤¤ë¡£
ºÇ¸å¤Î°ø»Ò¤Ï·Á¼°¤ò¤½¤í¤¨¤ë¤¿¤á¤À¤±¤Ç¤¢¤ë¡£ ³Æ»þ´Ö¿ä¿Ê¤Î±é»»»Ò¤Î¸ú²Ì¤Ï¼¡¤ÎÄ̤ê¤È¤Ê¤ë¡£ ·Á¼°Åª¤Ë¤Ï¡¢p,q,f ¤Ï2N¼¡¸µ¤Î¥Ù¥¯¥È¥ë¤Ç¤¢¤ë¤¬¡¢ ·×»»¤ÎºÝ¤Ë¤Ï¸Ä¡¹¤ÎÀ±¤Ë¤Ä¤¤¤Æ2¼¡¸µ¥Ù¥¯¥È¥ë¤Ç·×»»¤¹¤ë¡£¥×¥í¥°¥é¥à¤ÏÈæ³ÓŪ´Êñ¤Ç¤¢¤ë¡£ ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï star.cc ¤Ç¤¢¤ë¡£ ¤Þ¤º½ôÄê¿ô¤òÀßÄꤹ¤ë¡£
ñ°Ì·Ï¤Ï¤«¤Ê¤êŬÅö¤Ç¤¢¤ë¡£ À±¤Î±¿Æ°Î̤ä°ÌÃ֤ʤɤξðÊó¤ò«¤Í¤Æ¹½Â¤ÂΤȤ·¤Æ´ÉÍý¤·¤è¤¦¡£#include "cip.h" #include "vector2.h" //---- physical constants const double Mstar = 1.0; // mass of a star const double G = 1.00; // Gravity constant //---- experimental settings const double dT = 1.0/256; // temporal step const int N = 4; // number of stars
¼¡¤Ë»Ø¿ôÀÑŸ³«¤Î°ø»Ò¤Î¿ô¤ÈŸ³«·¸¿ô¤ò¹°èÄê¿ô¤È¤·¤ÆÄêµÁ¤¹¤ë¡£//---- declaration of structure Matter struct Matter { Vector2 p, q, f; // momentum, position, force };
ÇÛÎó symp_k[], symp_u[] ¤Ï¤½¤ì¤¾¤ì Dk,Du ¤Î ʬ²ò·¸¿ô¤òºîÍѤµ¤»¤ë½ç¤Ë³ÊǼ¤·¤¿ÇÛÎó¤Ç¤¢¤ë¡£¤Ê¤ª¡¢Du¤ÎÊý¤òÀè¤Ë ºîÍѤµ¤»¤ë¡£symp_r ¤Ï¤³¤ÎÇÛÎó¤ÎÍ×ÁǤοô¤Ç¤¢¤ë¡£ ¤³¤Î¤è¤¦¤Ë¤ï¤¶¤ï¤¶ÇÛÎó¤È¤·¤Æ·¸¿ô¤òÄêµÁ¤·¤¿Íýͳ¤Ï¸å¤Ç¾Ò²ð¤¹¤ë ¹â¼¡¿ô¤ÎSymplecticË¡¤ËÂбþ¤¹¤ë¤¿¤á¤Ç¤¢¤ë¡£const int symp_r = 2; const double symp_k[2] = { +0.500000000000000, +0.500000000000000 }; const double symp_u[2] = { +0.000000000000000, +1.000000000000000 };
Init() ´Ø¿ô¤ÏÀ±¤Î½é´üÃͤòÀßÄꤹ¤ë¡£
Interaction() ´Ø¿ô¤Ï2¤Ä¤ÎÀ±¤Î´Ö¤ËƯ¤¯½ÅÎϤò·×»»¤¹¤ë¡£//---- initialize properties of stars void Init( Matter M[] ) { for( int n=0 ; n<N ; n++ ){ // locate stars on circumference double ang = 2*M_PI/N*n; M[n].p = Vector2( -sin(ang), cos(ang) ); M[n].q = Vector2( cos(ang), sin(ang) ); } }
CalcField() ´Ø¿ô¤Ï³ÆÀ±¤¬Â¾¤ÎÁ´À±¤«¤é¼õ¤±¤ë½ÅÎϤò·×»»¤¹¤ë¡£//---- calculates gravity force amoung two stars Vector2 Interaction( Matter& M1, Matter& M2 ) { const Vector2 vec_r = M1.q - M2.q; const double r = abs(vec_r); return( -G*Mstar*Mstar/(r*r*r) * vec_r ); }
Á´¥¨¥Í¥ë¥®¡¼¤ò·×»»¤¹¤ë´Ø¿ôCalcEnergy() ¤Ï¼¡¤ÎÄ̤ê¤Ç¤¢¤ë¡£//---- calculates gravity field void CalcField( Matter M[] ) { int n1, n2; // reset M[].f for( n1=0 ; n1<N ; n1++ ){ M[n1].f = Vector2( 0.0, 0.0 ); } // sums up M[].f for( n1=0 ; n1<N ; n1++ ){ for( n2=n1+1 ; n2<N ; n2++ ){ Vector2 f = Interaction( M[n1], M[n2] ); M[n1].f += f; M[n2].f -= f; // Newton's law "The third law of motion" } } }
ºÇ¸å¤Ëmain() ´Ø¿ô¤ÏSymplecticÀÑʬ¤ò¼Â¹Ô¤¹¤ë¡£//---- calculates total energy double CalcEnergy( Matter M[] ) { int n1, n2; double E; // sums up energy for( n1=0, E=0.0 ; n1<N ; n1++ ){ E += (1.0/(2*Mstar))*abs2(M[n1].p); // Kinetic Energy for( n2=n1+1 ; n2<N ; n2++ ){ E += -G*Mstar*Mstar/abs(M[n1].q-M[n2].q); // Potential Energy } } return( E ); }
//---- main function int main( void ) { int n; Matter M[N]; Init( M ); for( double T=0.0 ; T<10.0 ; T += dT ){ // symplectic steps for( int r=0 ; r<symp_r ; r++ ){ CalcField( M ); for( n=0 ; n<N ; n++ ){ // Potential term M[n].p += dT*symp_u[r] * M[n].f; } for( n=0 ; n<N ; n++ ){ // Kinetic term M[n].q += dT*symp_k[r] * (1.0/Mstar) * M[n].p; } } printf("%lf %lf\n", T, CalcEnergy(M) ); } return(0); }
¤³¤Î¥×¥í¥°¥é¥à¤¬·×»»¤¹¤ë4Ï¢À±¤Îµ°Æ»
½ÅÎϤϰúÎϤǤ¢¤ë¤¿¤á¡¢À±¤¬°Û¾ï¤ËÀ᤹ܶ¤ë¤³¤È¤¬¤¢¤ë¡£¤½¤Î¾ì¹ç¡¢ ²Ã®ÅÙ¤¬Â礤¯¤Ê¤ê¤¹¤®¤ÆSymplecticË¡¤Ç¤âÀµ³Î¤Ë·×»»¤Ç¤¤Ê¤¯¤Ê¤ë¡£ ¤³¤ì¤ËÂн褹¤ë¤Ë¤Ï²Ã®Å٤˱þ¤¸¤Æ»þ´Ö¹ï dT ¤ò¼«Æ°Ä´À°¤¹¤ë ¤è¤¦¤ËÀ߷פ·¤¿¤ê¡¢¾×Æͤˤè¤ëÄ·¤ÍÊÖ¤ê¤òµ¯¤³¤·¤¿¤ê¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
À±¤Î¿Âα¿Æ°¤Î¼¡¤ÏÅŻҤοÂα¿Æ°¤ò¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¤·¤Æ¤ß¤è¤¦¡£ ÅÅ»ÒƱ»Î¤Ï¥¯¡¼¥í¥óÀÍÎϤÇȿȯ¤¹¤ë¤¬¡¢¤µ¤é¤Ë³°¤«¤éÀż§¾ì B ¤ò z¼´¤Î¸þ¤¤Ë¤«¤±¤ë¡£iÈÖÌܤÎÅŻҤα¿Æ°ÊýÄø¼°¤Ï¼¡¤ÎÄ̤ê¤Ç¤¢¤ë¡£
¤³¤³¤Ë E_i ¤ÏiÈÖÌܤÎÅŻҤ˺îÍѤ¹¤ë¾¤ÎÅŻҤΥ¯¡¼¥í¥ó ÀÍÎϤˤè¤ëÅžì¤Ç¤¢¤ë¡£ »þ´Ö¿ä¿Ê±é»»»Ò¤ÎÀ¸À®»Ò Dh¤Ë¤Ï¼§¾ì¤Ë¤è¤ë¹à Db ¤¬²Ã¤ï¤ë¤³¤È¤Ë¤Ê¤ë¡£ 3¤Ä¤Î¹à¤ÎϤλؿôÀѤ⤽¤ì¤¾¤ì¤Î»Ø¿ô¤ÎÀѤËʬ²ò¤¹¤ë»ö¤ÏÍưפˤǤ¤ë¤¬¡¢ ¤³¤³¤Ç¤Ï¡¢¤½¤¦¤Ï¤»¤º¤Ë¡¢Dk+Db ¤ò¤Þ¤È¤á¤Æ°ì¤Ä¤Î±é»»»Ò¤È¤·¤Æ °·¤¦¡£¤Ê¤¼¤Ê¤é¡¢¤³¤Î±é»»»Ò¤Î°ÕÌ£¤¹¤ë¤È¤³¤í¤ÏÅž줬̵¤¯°ìÍͼ§¾ì¤Î¤ß¤Î ·Ï¤Ç¤ÎÅŻҤα¿Æ°¤Ç¤¢¤ë¡£¤³¤Î·Ï¤Î»þ´ÖÉý ¦¤t ¤Ç¤Î»þ´ÖȯŸ¤Ï Âå¿ôŪ¤ËÍưפËÅú¤¨¤¬ÆÀ¤é¤ì¤Æ¡¢ ¤³¤³¤Ç¦Ø¤ÏLarmor¼þÇÈ¿ô ¦Ø=eB/m ¤Ç¤¢¤ë¡£ ·ë¶É¡¢¤³¤Î·Ï¤Ç¤âSymplecticË¡¤Ï·Ï¤ò¸·Ì©²ÄÀÑʬ·Ï¤ËÊÑ´¹¤Ç¤¤ë¡£¥×¥í¥°¥é¥à¤ÎÍפȤʤëÉôʬ¤Î¤ß¤òºÜ¤»¤Æ¤ª¤¯¡£ ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï electrons.cc ¤Ç¤¢¤ë¡£
//---- physical constants const double Mele = 1.0; // mass of an electron const double Eele = 1.0; // charge of an electron const double Aint = 1.0; // coupling constant of ele-ele interaction const double Bext = 2.0; // external magnetic field const double Omega = Eele*Bext/Mele; // Larmor anglur frequency //---- calculates electric force amoung two electrons inline Vector2 Interaction( Matter& M1, Matter& M2 ) { const Vector2 vec_r = M1.q - M2.q; const double r = abs(vec_r); return( Aint*Eele*Eele/(r*r*r) * vec_r ); } //---- calculates total energy double CalcEnergy( Matter M[] ) { int n1, n2; double E; // sums up energy for( n1=0, E=0.0 ; n1<N ; n1++ ){ E += 0.5/Mele*abs2(M[n1].p); // kinetic energy for( n2=n1+1 ; n2<N ; n2++ ){ E += Aint*Eele*Eele/abs(M[n1].q-M[n2].q); // potential energy } } return( E ); } //---- main function int main( void ) { int n; Matter M[N]; Init( M ); for( double T=0.0 ; T<500.0 ; T += dT ){ for( int r=0 ; r<symp_r ; r++ ){ CalcField( M ); for( int n=0 ; n<N ; n++ ){ // potential term M[n].p += dT*symp_u[r] * M[n].f; } for( n=0 ; n<N ; n++ ){ // kinetic and Magnetic term double co = cos(Omega*dT*symp_k[r]); double si = sin(Omega*dT*symp_k[r]); M[n].q.x += (1.0/(Mele*Omega))*( M[n].p.x*si - M[n].p.y*(1-co) ); M[n].q.y += (1.0/(Mele*Omega))*( M[n].p.x*(1-co) + M[n].p.y*si ); double p_x = M[n].p.x; M[n].p.x = p_x*co - M[n].p.y*si; M[n].p.y = p_x*si + M[n].p.y*co; } } printf("%lf %lf\n", T, CalcEnergy(M) ); } return(0); }
¤³¤Î¥×¥í¥°¥é¥à¤¬·×»»¤¹¤ë¼§¾ìÃæ¤Î4ÅŻҤε°Æ»
¤³¤Î¥×¥í¥°¥é¥à¤â¤Þ¤¿ÅŻҤε°ÀפòWindow¤ËÉÁ¤¯¤È³Ú¤·¤¤¡£
³°¤«¤é°ìÍͤÊÅžì¤òxyÊ¿ÌÌÆâ¤Ë²Ã¤¨¤Æ¡¢ÅŻҴÖÁê¸ßºîÍѤè¤ê½½Ê¬¶¯¤¯¤¹¤ë¤È ÅŻҤϲ󞤷¤Ê¤¬¤éÅžì¤È¼§¾ì¤È¿âľ¤ÊÊý¸þ¤Ø°ÜÆ°¤¹¤ë¡£ ÅŻҤò²Ã®¤·¤Æ¤¤¤ë¤Î¤ÇÅöÁ³¥¨¥Í¥ë¥®¡¼¤ÏÁý²Ã¤¹¤ë ¤¬Åžì¤Î»Å»ö¤Îʬ¤â²ÃÌ£¤·¤¿Á´¥¨¥Í¥ë¥®¡¼¤ÏÊݸ¤µ¤ì¤ë¡£ ÅŻҤËË໤ÎϤòƯ¤«¤»¤ë¤è¤¦¤Ë¤¹¤ë¤ÈÅžì¤Î¸þ¤¤ÈµÕ(ËÜÍèÅŻҤ¬¿Ê¤àÊý¸þ) ¤Ë¾¯¤·Æ°¤¯¤è¤¦¤Ë¤Ê¤ë¡£Ë໤ÎϤΤ¿¤á·Ï¤Î¥¨¥Í¥ë¥®¡¼¤Ï¸º¾¯¤¹¤ë¤¬ »¶°ï¤·¤¿Ê¬¤â²ÃÌ£¤·¤¿Á´¥¨¥Í¥ë¥®¡¼¤ÏÊݸ¤µ¤ì¤ë¡£
»Ø¿ôÀѤò¦¤t ¤Î¤è¤ê¹â¼¡¤Î¹à¤Þ¤Ç¹Íθ¤·¤ÆŸ³«¤¹¤ë¹â¼¡SymplecticË¡¤Î ¹½ÃÛÊýË¡¤Ï¶áǯ¤Þ¤Ç¤ÏÆñ¤·¤¤µ»½Ñ¤Ç¤¢¤Ã¤¿¡£ ¤½¤ì¤¬1990ǯÂå¤ËÆþ¤Ã¤ÆÅìµþÂç³ØʪÍý¶µ¼¼¤ÎÎëÌÚÁýͺÀèÀ¸¤Ë¤è¤êǤ°Õ¤Ë¹â¼¡¤Î »Ø¿ôÀÑŸ³«Ë¡¤¬³«È¯¤µ¤ì¡¢¤¤¤¯¤é¤Ç¤âĶ¹âÀºÅ٤ι⼡SymplecticË¡¤¬¼ê·Ú¤Ë ¹½ÃۤǤ¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¤¢¤ë¡£¤½¤Î¹½ÃÛË¡¤Î¤Ò¤È¤Ä¤ò¤³¤³¤Ç´Êñ¤Ë ¾Ò²ð¤¹¤ë¡£
¤Ê¤ó¤é¤«¤ÎºîÍÑÁÇ A,B¤ÎϤλؿô exp[A+B] ¤ò exp[A]¤Èexp[B]¤ÎÀѤǶá»÷¤¹¤ë¤³¤È¤¬ÌÜŪ¤Ç¤¢¤ë
A+B¤Ï¼«Ê¬¼«¿È¤È¤Ï²Ä´¹¤Ç¤¢¤ë¤¿¤á Ǥ°Õ¤Î¿ô s_3 ¤ËÂФ·¤Æ¼¡¤Î¹±Åù¼°¤¬À®¤êΩ¤Ä¡£
¤³¤ÎÀѤÎÃæ¤ÎÂè1°ø»Ò¤ò (A+B) ¤Ë¤Ä¤¤¤ÆºîÍÑÁǤÎ3¼¡¤Î¹à¤Þ¤Ç TaylorŸ³«¤¹¤ë¡£ Âè2¡¢Âè3°ø»Ò¤Ë¤Ä¤¤¤Æ¤âƱÍͤËŸ³«¤·¤Æ¡¢¤½¤ì¤é¤ò (16)¼°¤Ë ÂåÆþ¤¹¤ë¤³¤È¤ò¹Í¤¨¤ë¡£À°Íý¤·¤¿·ë²Ì¡¢¤½¤Îɽ¼°¤Î¤¦¤ÁºîÍÑÁǤÎ3¼¡¤Î¹à ¤Ï¼¡¤ÎÄ̤ê¤Ç¤¢¤ë¡£ ¤³¤³¤Ç s_3¤Ë¼¡¤Î´Ø·¸¤òËþ¤¿¤µ¤»¤ë¡£ ¤¹¤ë¤È¡¢(16)¼°¤Ë¤ÏºîÍÑÁǤÎ3¼¡¤Î¹à¤¬ ̵¤¯¤Ê¤ë¤³¤È¤Ë¤Ê¤ë¡£¤È¤³¤í¤Ç¡¢ºîÍÑÁǤÎ2¼¡¤Î¹à¤Þ¤ÇÀµ³Î¤Ë¶á»÷¤·¤¿¼¡¼°
¤³¤ì¤Ï¤³¤ì¤Þ¤Ç¤ÎÎã¤Ç»È¤ï¤ì¤Æ¤¤¿Ê¬²òɽ¼°¤Ç¤¢¤ë¡£ ¤³¤Îɽ¼°¤òO(3)¤ò´Þ¤á¤¿¤Þ¤Þ(16)¼°¤Î³Æ°ø»Ò¤ËÍѤ¤¤ë¤È ¤È¤Ê¤ë¤¬¡¢¤³¤³¤Çs_3¤¬(19)¼°¤Î´Ø·¸¤òËþ¤¿¤¹¤Ê¤é¤Ð¡¢ [ºîÍÑÁǤÎ3¼¡¤Î¹à]¤Ï0¤Ç¤¢¤ë¡£½¾¤Ã¤Æ (22)(23)¼°¤Ï»ö¼Â¾å ºîÍÑÁǤÎ3¼¡¤Î¹à¤Þ¤ÇÀµ³Î¤Ë¶á»÷¤·¤¿¼¡¼°¤Ë¾¤Ê¤é¤Ê¤¤¡£¤¹¤Ê¤ï¤Á¡¢ ¤Ç¤¢¤ë¡£3¼¡¶á»÷Ÿ³«¤¬´°À®¤·¤¿¤éƱÍͤÊÏÀÍý¤Ç¤è¤ê¹â¼¡¤Î¶á»÷Ÿ³«¤¬ ¼¡¡¹¤Ë¹½ÃÛ¤µ¤ì¤ë¡£¤³¤ì¤¬ÎëÌÚÀèÀ¸¤¬Ä󾧤µ¤ì¤¿¹â¼¡Å¸³«¤Î¹½ÃۤδðËÜÀïά ¤Ç¤¢¤ë¡£m¼¡¶á»÷ S_{m} ¤Ïm-1¶á»÷ S_{m-1} ¤Ë¤è¤ê¼¡¤ÎÍͤ˹½ÃÛ¤µ¤ì¤ë¡£ ¤È¤³¤í¤¬¾Ü¤·¤¯Ä´¤Ù¤ë¤È¤³¤Îʬ²ò¤Î¾ì¹ç¡¢´ñ¿ô¼¡¤Î¶á»÷Ÿ³« S_{2m-1} ¤ÏºîÍÑÁǤΠ2m ¼¡¤Þ¤ÇÀµ¤·¤¯¶á»÷¤·¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤ë¡£¤Ä¤Þ¤ê¡¢ ¤³¤Î¤Ò¤È¤Ä¹â¼¡¤Î¶ö¿ô¼¡¤Î¶á»÷Ÿ³« S_{2m}¤ÈƱ¤¸¤Ê¤Î¤Ç¤¢¤ë¡£ ½¾¤Ã¤Æ¡¢¼¡¤Î¤è¤¦¤Ë¶ö¿ô¼¡¤Î¶á»÷Ÿ³«¤À¤±¤Ç¤òÍѤ¤¤Æ¾¯¤Ê¤¤°ø»Ò¿ô¤Ç ¹â¼¡¤Î¶á»÷Ÿ³«¤ò¹½ÃۤǤ¤ë¡£ ¤³¤¦¤·¤Æ¹â¼¡¤Î¶á»÷Ÿ³«¤òºÇ½é¤Î S_2 ¤Î³Ý¤±¹ç¤ï¤»¤Ç¹½ÃۤǤ¤ë¡£ ¤¹¤Ê¤ï¤Á¡¢»Ø¿ôÀÑŸ³«¤¬Ç¤°Õ¤Î¼¡¿ô¤Þ¤Ç²Äǽ¤Ë¤Ê¤ê¡¢¤µ¤é¤Ë Ǥ°Õ¤Î¼¡¿ô¤ÎSymplecticË¡¤¬¹½ÃÛ¤µ¤ì¤ë¤Î¤Ç¤¢¤ë¡£(30)-(32)¼°¤Ë¤è¤ë4¼¡¤È6¼¡¤ÎSymplecticË¡¤Î ¤¿¤á¤Î·¸¿ô¤ò¥Õ¥¡¥¤¥ë symplectic.h ¤Ë ºÜ¤»¤Æ¤ª¤¯¡£
·¸¿ô¤ÎÃæ¤Ë¤ÏÉé¤ÎÃͤò»ý¤Ä¤â¤Î¤ä1°Ê¾å¤ÎÃͤò»ý¤Ä¤â¤Î¤¬¤¢¤ë¡£ Éé¤ÎŸ³«·¸¿ô¤Ï»þ´Ö¤ò¤µ¤«¤Î¤Ü¤ëÀÑʬ¤Ë¤Ê¤ë¡£1¤ò±Û¤¨¤ëŸ³«·¸¿ô¤Ï ¦¤t ¤Î1¥¹¥Æ¥Ã¥×¤è¤êÂ礤ÊÉý¤ÇÀÑʬ¤¹¤ë¤³¤È¤Ë¤Ê¤êÀºÅپ夢¤Þ¤ê ¤è¤í¤·¤¯¤Ê¤¤¡£ Ÿ³«·¸¿ô¤¬¾®¤µ¤ÊÃͤȤʤ뼡¤Î¥¿¥¤¥×¤Î»Ø¿ôÀѤΟ³«Ë¡¤¬¤¢¤ë¡£
¤³¤Î(33)-(35)¼°¤Ë¤è¤ëSymplecticË¡¤Î·¸¿ô¤Ï ¥Õ¥¡¥¤¥ë symplectic.h ¤ËºÜ¤»¤Æ¤ª¤¯¡£¤³¤³¤Ç¾Ò²ð¤·¤¿Å¸³«¤Î»ÅÊý¤Ë¤è¤ë·¸¿ô¤Ë¤ÏÌÌÇò¤¤À¼Á¤¬¤¢¤ë¤Î¤Ç¾Ò²ð¤·¤Æ ¤ª¤³¤¦¡£SymplecticË¡¤Ïû¤¤»þ´Ö ¦¤t ¤Î´Ö¤Î·Ï¤Î»þ´ÖȯŸ¤ò 2¼ï¤Î»þ´Ö¿ä¿Ê±é»»»Ò¤ò¸ò¸ß¤Ë²¿²ó¤âºîÍѤ·¤Æ¿¥¹¥Æ¥Ã¥×¤Ç·×»»¤¹¤ë¤Î¤À¤¬¡¢ 1¥¹¥Æ¥Ã¥×¤Ç¤É¤ì¤À¤±»þ´Ö¤¬¿Ê¤à¤«¤ò¥°¥é¥Õ¤Ë¤¹¤ë¤È²¼¿Þ¤ÎÍͤˤʤ롣 3¤Ä¤Î¥°¥é¥Õ¤Ï²¼¤«¤é(33)-(35)¼°¤ÎÊý¼°¤Ç 4¼¡,6¼¡,8¼¡¤ÇŸ³«¤·¤¿ ¤â¤Î¤Ç¤¢¤ë¡£¥¹¥Æ¥Ã¥×¤´¤È¤Ë»þ´Ö¤ò¿Ê¤á¤¿¤êÌᤷ¤Ê¤¬¤é ¦¤t ¤Î»þ´Ö¤ò ¿Ê¤à¤³¤È¤¬¤ï¤«¤ë¡£¤µ¤é¤Ë¡¢¼¡¿ô¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤Æ¡¢¤³¤Î¹½Â¤¤¬¼«¸ÊÁê»÷Ū ¤ËÊ£»¨²½¤¹¤ë¤³¤È¤â¤ï¤«¤ë¡£¤³¤Î¤¿¤áº£¤Þ¤Ç¾Ò²ð¤·¤Æ¤¤¿¤³¤Îʬ²òÊýË¡¤Ï ¥Õ¥é¥¯¥¿¥ëʬ²ò¤È¸Æ¤Ð¤ì¤ë¡£
¤³¤ì¤éŸ³«ÊýË¡¤Ë¤Ï¿¤¯¤Î¼ïÎब¤¢¤êƱ¤¸¼¡¿ô¤Ç¤âÀºÅ٤䟳«°ø»Ò¿ô¤¬ °Û¤Ê¤ë¡£É¬ÍפÊÀºÅÙ¤ä®Å٤˱þ¤¸¤ÆÁª¤Ö¡£
(33)-(35)¼°¤Ë¤è¤ë¥Õ¥é¥¯¥¿¥ëʬ²ò
SymplecticË¡¤Ï¸ÅŵÎϳؤΤߤʤ餺ÎÌ»ÒÏÀ¤Î·×»»¤Ë¤ª¤¤¤Æ¤â°ÒÎϤò ȯ´ø¤¹¤ë¡£Î㤨¤ÐSchrodingerÊýÄø¼°
¤Ë¤ª¤¤¤Æ±¦ÊÕ¤Î2¹à¤òʬΥ¤¹¤ë¤È¡¢Âè1¹à¤Î¤ß¤Ê¤é¼«Í³Î³»Ò¤Î ±¿Æ°¤Ç¤¢¤ê¡¢Âè2¹à¤Î¤ß¤Ê¤éÇÈÆ°´Ø¿ô¤Î°ÌÁ꤬²óž¤¹¤ë¤À¤±¤Ç¤¢¤ë¡£ ¼ÂºÝ¡¢Âè1¹à¤Ë¤è¤ë»þ´ÖȯŸ¤Î·×»»¤Ë¤Ï¿¾¯¤Î¶á»÷¤¬É¬ÍפÀ¤¬ »þ´ÖȿžÂоÎÀ¤ò¸·Ì©¤ËËþ¤¿¤¹·×»»¤¬²Äǽ¤Ç¤¢¤ë¡£¤Þ¤¿Î®ÂÎÎϳؤΠNavier-StokesÊýÄø¼°
¤Ë¤ª¤¤¤Æ¤â¡¢±¦ÊÕ¤Î2¹à¤òʬΥ¤¹¤ë¤È¡¢Âè1¹à¤Î¤ß¤Ê¤é´°Á´Î®ÂΤα¿Æ°¤Ç¤¢¤ê¡¢ Âè2¹à¤Î¤ß¤Ê¤é³È»¶ÊýÄø¼°¤Ë´Ô¸µ¤Ç¤¤ë¡£¤³¤ÎÊýË¡¤â¤Þ¤¿ÍÍѤǤ¢¤ë¡£SymplecticË¡¤Ï¤µ¤é¤ËÉý¹¤¯±þÍѤ¬¸ú¤¡¢Î̻ҥâ¥ó¥Æ¥«¥ë¥íË¡¡¢·ÐÏ©ÀÑʬ¡¢ ʬ»ÒÆ°Îϳء¢Î̻Ҳ½³Ø¡¢Î̻Ҹ÷³Ø¡¢²Ã®´ïʪÍý³Ø¡¢°ìÈÌÁêÂÐÀÍýÏÀ¡¢ ¥«¥ª¥¹¤Ê¤É¼Â¤Ë¤µ¤Þ¤¶¤Þ¤ÊʬÌî¤Ç»È¤ï¤ì»Ï¤á¤Æ¤¤¤ë¡£
¤³¤ÎSymplectic¿ôÃÍÀÑʬˡ¤Ï¿ôÃÍÀÑʬ¤Ë¤â¿¼±ó¤Ê¤ëÍý³Ø¤¬¤¢¤ë¤³¤È¤ò²æ¡¹¤Ë ÄË´¶¤µ¤»¤ë¤â¤Î¤Ç¤¢¤ë¡£