æ°åŠè
ããã°ã©ããŒã®ç掻ã®äžã§æ°æéããŸãã¯ãŠã£ãããã£ã¢ãèªã
ãŸãã
ããã¯ã³ããŒã«ããŒãããšãã°ã©ããšããŠ
åŒçšããŸã ã
-ããã«ã¡ã¯ãç§ã®ååã¯ïŒ
usernameïŒ
ã§ãããããã§äœãèµ·ãã£ãŠããã®ããçè§£ããããã«ãã·ã°ã衚èšã®éé¡ãçŽã«å¯ãã«å
¬éããŸãã
-ããã«ã¡ã¯ãïŒ
usernameïŒ
ïŒ
ã§ããããååã®èšäºã§è¿°ã¹ãããã«ãæ°åŠãæãã
ãããã¯ãªçåŸãããŸãããè¶£å³ãšããŠã¯ãã ããŠãéžã³ãä»ã§ã¯ã»ã°ãŠã§ã€ã«ãŒããçµã¿ç«ãŠãããšæã£ãŠããŸãã 圌ãã¯ãããéããŸãããã圌女ã¯ãã©ã³ã¹ãä¿ã¡ãããããŸããã 圌ãã¯
PIDã³ã³ãããŒã©ãŒã䜿çšããããšãèããŸããããããŸãæ©èœããããã«ä¿æ°ãéžæã§ããŸããã§ããã ã¢ããã€ã¹ãæ±ãã«æ¥ãŠãã ããã ããããå¶åŸ¡çè«ã§ã¯äžè¬çã«ããŒã ããŒã ã«è¿ã¥ããŸããã§ããã ããããããã§äžåºŠãç·åœ¢äºæ¬¡ã¬ã®ã¥ã¬ãŒã¿ãèè
ãå©ããããpidã¯åœ¹ã«ç«ããªãã£ã
ãšããèšäºãèŠãŸã
ã ã
ããã§ãæã«PIDããããšæ³åãããšïŒ
ããã«ç§ã®èšäºããããŸãããããã¯ããçš®ã®æèšãžã®ææã«è»¢ãããã®ã§ãïŒãä»ã®å¶åŸ¡æ¹æ³ã«ã€ããŠãèããŠããŸããã§ããã ãããã£ãŠãç§ã®ã¿ã¹ã¯ã¯ãç·åœ¢2次ã¬ã®ã¥ã¬ãŒã¿ãäœã§ããããæ³åããããšã§ãïŒãããŠãåæã«åŠçã«èª¬æããŸãïŒã ãããŸã§ã®ãšãããéã䜿ã£ãä»äºã¯ãããŸãããæåŠã䜿ã£ãŠä»äºãããæ¹æ³ã瀺ããŸãããããç§ã®ä»äºã®å€§éšåãå ããããã§ãã
ç§ã®äœåã«ã€ããŠã®é²åºäž»çŸ©ããªããªã£ãã®ã§ãããã«ç§ã®è·å ŽããããŸãïŒã¯ãªãã¯å¯èœïŒïŒ

䜿çšãããœãŒã¹
ããã§ãç§ãæåã«ããããšã¯ã
ãŠã£ãããã£ã¢ã«è¡ãããšã§ãã ãã·ã¢ã®ãŠã£ãããã£ã¢ã¯æ®é
·ã§å®¹èµŠãªãã®ã§ãç§ãã¡ã¯è±èªã®ããã¹ãã®ã¿ãèªã¿ãŸãã 圌ãå«ãªã®ã§ããããŸã ããã§ã¯ãããŸããã ã ãããèªãã ã ãã¹ãŠã®å
¥éããã¹ãããªãã¯ã®ãã¡ãç§ã«èå³ãæã£ãŠãããã¬ãŒãºã¯1ã€ã ãã§ãã
æé©å¶åŸ¡ã®çè«ã¯ãåçã·ã¹ãã ãæå°ã³ã¹ãã§éçšããããšã«é¢ãããã®ã§ãã ã·ã¹ãã ãã€ããã¯ã¹ãäžé£ã®ç·åœ¢åŸ®åæ¹çšåŒã§èšè¿°ãããã³ã¹ãã2æ¬¡é¢æ°ã§èšè¿°ãããå Žåã¯ãLQåé¡ãšåŒã°ããŸãã
ãã·ã¢èªã«ç¿»èš³ãããšã圌ãã¯åŸ®åæ¹çšåŒïŒããææïŒã«ãã£ãŠç¹å®ã®åçã·ã¹ãã ãã¢ãã«åããå¶åŸ¡ãçŽæ¥éžæããŠãããçš®ã®2æ¬¡é¢æ°ãæå°åãããšèšããŸãïŒããïŒæå°äºä¹è¿äŒŒãæããŸãïŒã ããã ããã«èªã¿èŸŒããïŒ
æéå°å¹³ç·ãé£ç¶æéLQRã
[äžé£ã®ã²ã©ãæ°åŒ]
ç§ãã¡ã¯ãããã¹ãããããŸããããã¯æ²Œã§ã®ãã®ãããªèªã¿åãã§ããããã«ãããªãã®æã§é£ç¶çãªæ©èœãèæ
®ããããšã¯æããã«ããããããã§ãããã
ç¡éã®å°å¹³ç·ãé£ç¶æéLQRã
[ããã«æãããåŒã®ã·ãªãŒãº]
1æéããšã¯ç°¡åã§ã¯ãªããäžé©åãªç©åããªããªã£ããããã¹ããããããšãçªç¶ããã«è峿·±ããã®ãèŠã€ãããŸãã
æéæéã颿£æéLQR
ãããããã倧奜ãã§ãã 颿£ã·ã¹ãã ããããäžå®ã®ééïŒæåã®èªã¿åãã®äžéšã®ééã¯åžžã«1ç§ã«çããïŒã§ç¶æ
ã調ã¹ãŸãã æ¹çšåŒã®å°é¢æ°ã¯ãªããªããŸããããªããªãã çŸåšãïŒx_ {k + 1} -x_ {l}ïŒ/ 1ç§ãšããŠè¿äŒŒã§ããŸãã ããã§ãx_kãäœã§ããããçè§£ããŠãããšããã§ãããã
äžæ¬¡å
ã®äŸ
ãã¡ã€ã³ãã³ã¯ããã¹ãŠã®æ¹çšåŒãã©ã®ããã«èªããã圌ãããªããã°ãªããªãããšãæ£ç¢ºã«æžããã
å®éãç§ã®æšæž¬ã«ã¯äžå®éã®æ¬ç©ã®å質ããããŸããã 誰ãã説æããŠãããšãã«ä»æ¥ã䜿ã£ãŠããã¹ããŒã ããããŸãã
ç§ãçè§£ããããšããŠããããšïŒç§ã¯äŸãäœãç¶ããŠããŸãã äŸãã°ãæ°åŠè
ã¯çŽ æŽãããå®çãæã¡èŸŒã¿ã圌ãã¯çè奮ããŠããŸãã å®çã®æ¡ä»¶ãæããŠãããã®ã§ããã¹ãŠã®æ¡ä»¶ã«åããã®ãæ§ç¯ããŸãã ã»ããïŒ1ã€ã®ããŒã«ïŒ-ãã©ãã©ïŒ2ã€ã®ããŒã«ïŒããããŸãã ãããããããŒã«ã¯ç§ã®é ã®äžã§è²ãå€ããããé«ªã®æ¯ãªã©ãæé·ããããããŸãã æåŸã«åœŒãã¯å®çãè¿°ã¹ãŠããŸããããã¯ç§ã®æ¯ãããããã®ç·è²ã®ããŒã«ã®äºã«ã¯åœãŠã¯ãŸããªãããŒã«ã«ã€ããŠã®éŠ¬é¹¿ããããšã§ãã
ãŸããç§ãã¡ã¯ãã¡ã€ã³ãã³ãããã¯ãŒã«ã§ããïŒ å人çã«ã¯ããã§ã¯ãããŸããã ããã§ã¯ããããããã ããåé床ã§èµ°è¡ããŠããè»ããããŸãã ã¿ã¹ã¯ã¯ãç¹å®ã®æçµé床ãŸã§å éããããšã§ããã圱é¿ãäžããããšãã§ããã®ã¯ãã¢ã¯ã»ã«ããã«ãŸãã¯è»ã®å éã ãã§ãã
è»ãå®ç§ã§ããã®æ³åã«åŸã£ãŠåããšæ³åããŠã¿ãŸãããã

x_kã¯1ç§ãããã®è»ã®é床kãu_kã¯å¿
èŠãªã¢ã¯ã»ã«ããã«ã®äœçœ®ã§ãã1ç§ãããã®å é床kãšããŠè§£éã§ããŸãã åèšã§ãç¹å®ã®é床x_0ã§éå§ããæ¬¡ã«ãã®ãããªæ°å€ç©åãå®è¡ããŸãïŒã©ã®åèªã«å
¥ã£ãã®ãïŒã m / sããã³m / s ^ 2ã远å ããªãããšã«æ³šæããŠãã ãããu_kã«ã¯ã枬å®ééã®1ç§ãä¹ç®ãããŸãã ããã©ã«ãã§ã¯ããã¹ãŠã®ä¿æ°ã0ãŸãã¯1ã®ããããã§ãã
ããã§ãäœãèµ·ãã£ãŠããã®ããçè§£ããããã«ãç§ã¯
ãã®çš®ã®ã³ãŒããæžã
ãŠã ãŸã ïŒç§ã¯æžã
ãçŽåŸã«æšãŠã1åéãã®ã³ãŒããããããæžã
ãŠããŸãïŒã
念ã®ããããã«ãªã¹ãããŸããããã€ãã®ããã«ã
OpenNLã䜿çšããŠå€§èŠæš¡ãªã¹ããŒã¹ç·åœ¢æ¹çšåŒãè§£ããŸãã
é衚瀺ã®ããã¹ã#include <iostream> #include "OpenNL_psm.h" int main() { const int N = 60; const double xN = 2.3; const double x0 = .5; const double hard_penalty = 100.; nlNewContext(); nlSolverParameteri(NL_NB_VARIABLES, N*2); nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE); nlBegin(NL_SYSTEM); nlBegin(NL_MATRIX); nlBegin(NL_ROW); // x0 = x0 nlCoefficient(0, 1); nlRightHandSide(x0); nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); // xN = xN nlCoefficient((N-1)*2, 1); nlRightHandSide(xN); nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); // uN = 0, for convenience, normally uN is not defined nlCoefficient((N-1)*2+1, 1); nlScaleRow(hard_penalty); nlEnd(NL_ROW); for (int i=0; i<N-1; i++) { nlBegin(NL_ROW); // x{i+1} = xi + ui nlCoefficient((i+1)*2 , -1); nlCoefficient((i )*2 , 1); nlCoefficient((i )*2+1, 1); nlScaleRow(hard_penalty); nlEnd(NL_ROW); } for (int i=0; i<N; i++) { nlBegin(NL_ROW); // xi = xN, soft nlCoefficient(i*2, 1); nlRightHandSide(xN); nlEnd(NL_ROW); } nlEnd(NL_MATRIX); nlEnd(NL_SYSTEM); nlSolve(); for (int i=0; i<N; i++) { std::cout << nlGetVariable(i*2) << " " << nlGetVariable(i*2+1) << std::endl; } nlDeleteContext(nlGetCurrent()); return 0; }
ã ãããç§ããã£ãŠããããšãçè§£ããŸãããã ã¯ããã«ãN = 60ãšèšããŸãããã¹ãŠã«60ç§ããããŸãã ããããç§ã¯ãæçµéåºŠã¯æ¯ç§2.3ã¡ãŒãã«ãæåã®æ¯ç§0.5ã¡ãŒãã«ã§ããã¹ãã ãšèšããŸããããã¯ãã«ããŒã¶ãŒããèšå®ãããŸãã 60 * 2ã®å€æ°-60ã®é床å€ãš60ã®å é床å€ïŒå³å¯ã«èšãã°ã59ã®å é床ãããã¯ãã§ããã60ããããæåŸã¯å³å¯ã«0ã§ãããšèšãæ¹ãç°¡åã§ãïŒã
åèšã2 * Nåã®å€æ°ïŒN = 60ïŒããããå¶æ°ã®å€æ°ïŒéåžžã®ããã°ã©ããŒã®ããã«ãŒãããã«ãŠã³ããéå§ïŒã¯é床ã§ããã奿°ã®å€æ°ã¯å éã§ãã ãããã®è¡ã§åæéåºŠãšæçµé床ãèšå®ããŸãã
å®éãç§ã¯åæé床ãx0ïŒ.5m / sïŒã«ããããŠæçµçãª-xNïŒ2.3m / sïŒã«ããããšèšã£ãã
nlBegin(NL_ROW)
x {i + 1} = xi + uiã§ããããšãããã£ãŠããã®ã§ãã·ã¹ãã ã«N-1åã®ãã®ãããªæ¹çšåŒã远å ããŸãããã
for (int i=0; i<N-1; i++) { nlBegin(NL_ROW);
ããã§ãç§ãã¡ã¯ãã¹ãŠã®å³ããå¶éãã·ã¹ãã ã«è¿œå ããŸããããããŠå®éãæ£ç¢ºã«æé©åããããã®ã¯äœã§ããïŒ x_iãã§ããã ãæ©ãæçµé床xNã«å°éãããããšèšã£ãŠå§ããŸãããã
for (int i=0; i<N; i++) { nlBegin(NL_ROW);
ããŠãã·ã¹ãã ã®æºåãã§ããŠãããç¶æ
éã®é·ç§»ã«é¢ããå³å¯ãªã«ãŒã«ãèšå®ãããŠããŸããã·ã¹ãã ã®å質ã®2æ¬¡é¢æ°ãèšå®ãããŠããŸããããã¯ã¹ãæ¯ã£ãŠãæå°äºä¹ãè§£x_iãu_iãšããŠäžããããããšã確èªããŸãããïŒèµ€ãç·ã¯é床ãç·ã¯å é床ã§ãïŒïŒ

Oookeyãå®éã«ã¯æ¯ç§0.5ã¡ãŒãã«ããæ¯ç§3ã®ã³ã³ãã§ãã2ã¡ãŒãã«ã«å éããŸããããç§ãã¡ã®ã·ã¹ãã ã¯é床ã«å éããŸããïŒã§ããã ãæ©ãåæããããšãèŠæ±ãããããããã¯è«ççã§ãïŒã
ãããŠãæå°ã®å éãæ±ããæéã®åæã§ã¯ãªããç®ç颿°
ã倿ŽããŸãããïŒ
ããã§ã¯commitããŸã ïŒïŒ
for (int i=0; i<N; i++) { nlBegin(NL_ROW);

ããŒããä»ã§ã¯è»ã¯1åéã«æ¯ç§2ã¡ãŒãã«å éããŠããŸãã ã§ã¯ãæçµçãªé床ã«ãã°ããåæãããŠãå°ãå éããŠã¿ãŸãããïŒ
ãããã³ãããã§ãïŒã
for (int i=0; i<N; i++) { nlBegin(NL_ROW);
ãããããããä»ã¯çŸãããªã£ãŠããïŒ

ãããã£ãŠãå¶åŸ¡ã®å€§ããã®é«éåæãšå¶éã¯ããã¡ãããç«¶åããç®æšã§ãã Wikipediaã®æ®µèœã®æåã®è¡ã§åæ¢ããæç¹ã§ãã²ã©ãæ°åŒãããããããã¯çè§£ã§ããŸããã å€ãã®å Žåãèšäºãèªãããšã¯ãããŒã¯ãŒããæ€çŽ¢ããç§ãå人çã«ææããŠããã®ãšåãããã€ã¹ã䜿çšããŠãã¹ãŠã®çµæãå®å
šã«è¡šç€ºããããšã«ãªããŸãã
ã§ã¯ãçŸæç¹ã§ã¯äœããããŸããïŒ ã·ã¹ãã ã®åæç¶æ
+ã·ã¹ãã ã®æçµç¶æ
+ç§æ°ãæã€ããšã«ãããçæ³çãªå¶åŸ¡u_iãèŠã€ããããšãã§ããŸãã ããã¯ãã»ã°ãŠã§ã€ãããŸãé©åã§ãªãå Žåã«ã®ã¿æå¹ã§ãã ãããŒãã©ããã£ãŠãããããã®ïŒ ãããã£ãŠãWikipediaã§æ¬¡ã®ããã¹ããèªãã§ãã ããã
次ã®ããã«å®çŸ©ãããããã©ãŒãã³ã¹ã€ã³ããã¯ã¹

ããã©ãŒãã³ã¹ã€ã³ããã¯ã¹ãæå°åããæé©ãªå¶åŸ¡ã·ãŒã±ã³ã¹ã¯ã

ããã§[次ã¯äœã§ããïŒïŒ]
ã ãã ãJ = ...ããšããåŒã®çå·ã®åŸã¯ããããŸããããããã¯æããã«2æ¬¡é¢æ°ã§ãã ç®æšãžã®è¿
éãªåæãšæå°ã³ã¹ãã®ããã«ãåŸã§è©³ããèŠãŠãããŸããããã§çè§£ã¯ååã§ãã
u_k = -F x_kã ãã£ãšã 圌ãã¯ãç§ãã¡ã®1次å
ã®äŸã§ã¯ããã€ã§ãæé©ãªå é床ã¯å®æ°-Fã«çŸåšã®é床ãæãããã®ã§ãããšèšã£ãŠããŸãã ãããããã ããããçå®ã¯ãç·ãšèµ€ã®ã°ã©ãã£ãã¯ãäºãã«çãããã»ã©äŒŒãŠãããšããããšã§ãïŒ
1Dã®äŸã§å®éã®æ¹çšåŒãæžããŠã¿ãŸãããã
ãã®ãããåè³ªç®¡çæ©èœããããŸãã

è»ã®é床ã®é£æ¥ããå€ã®éã®æ¥ç¶ã®å¶éã芳å¯ããªããããããæå°åãããïŒ

ã¹ããã-ã¹ããã-ã¹ãããã§ããããŠã£ãããã£ã¢ã®x_k ^ TQ x_kã¯äžäœäœã§ããïŒ çµå±ã®ãšãããããã¯åçŽãªx_k ^ 2ã§ãããïŒx_k-x_NïŒ^ 2ïŒïŒ ã¢ãã®æšãããã圌ãã¯æã
ãå
¥ããããšæãæçµç¶æ
ã¯ãŒããã¯ãã«ã ãšä»®å®ã
ãŸã!!! [æ€é²æžã¿]ããã«ã€ããŠã¯ãWIKIPEDIAå
šäœã®ããŒãžã«åèªããããŸããïŒïŒ
ããŠãæ·±ãåŒåžããèœã¡çããŠãã ããã ããã§ãå¶éããªãããã«ãu_iãä»ããŠJã®å®åŒåã§ãã¹ãŠã®x_iã衚çŸããŸãã ããã§ãå¶åŸ¡ãã¯ãã«ã®ã¿ã倿°ã«ãªããŸãã ãã®ãããæ¬¡ã®ããã«èšè¿°ããã颿°Jãæå°åããŸãã

ã€ãŸããã ãã©ã±ãããéããŸãããïŒãšãã°ã©ããåç
§ïŒïŒ

ããã®çç¥èšå·ã¯ãu_0ããç¬ç«ããŠãããããæå³ããŸãã æå°å€ãæ¢ããŠããã®ã§ããããèŠã€ããããã«ããã¹ãŠã®å埮åããŒãã«èšå®ããå¿
èŠããããŸãããæåã¯u_0ã«é¢ããå埮åã«èå³ããããŸãã

åèšãããšãu_0ã«æ¬¡ã®åŒãããå Žåã«ã®ã¿æé©ãªå¶åŸ¡ãæé©ã«ãªãããšãããããŸãã

ãã®åŒã«ã¯ä»ã®äžæãªu_iãå«ãŸããŸããããbutãã1ã€ããããšã«æ³šæããŠãã ããã åè«ã¯ãè»ãæ¯å2ã¡ãŒãã«ããå éããªãããã«ããããšã§ãã ç§ã圌女ã«äžããåã¯ãæ
æã«ååãªæéã®ããã§ããã ãããŠãç§ã¯1æéãäžããããšãã§ããŸãã u_iã«äŸåããçšèªã¯ã倱瀌ãªå Žåããã¹ãŠå éã®ä»äºã§ãããNã«äŸåããŸããã ãããã£ãŠãNãååã«å€§ããå Žåãæé©ãªu_0ã¯æçµäœçœ®ããx0ãã©ãã ãé¢ããŠãããã«ã®ã¿
ç·åœ¢çã«äŸåããŸãã
ã€ãŸããå¶åŸ¡ã¯æ¬¡ã®ããã«ãªããŸããã·ã¹ãã ãã¢ãã«åããu_iãšx_iãç·åœ¢ã«æ¥ç¶ããããžãã¯ä¿æ°ãèŠã€ããŠèšè¿°ããããããã§ãèŠã€ãã£ãããžãã¯ä¿æ°ã䜿çšããŠç·åœ¢æ¯äŸã³ã³ãããŒã©ãŒãäœæããŸãã
éåžžã«æ£çŽã«èšããšããã®æç¹ãŸã§ã¯ãã¡ãããã³ãŒããæžãããšã¯ããŸããã§ãããç§ã¯å¿ã®äžã§äžèšã®ãã¹ãŠãè¡ããäžæã®çŽã«å°ãæžããŸããã ããããããã¯ç§ãäžåºŠã ãå€ãã®ã³ãŒããæžããšããäºå®ãåŠå®ãããã®ã§ã¯ãããŸããã
2Dã®äŸ
çŽèгãšããŠãããã¯çŽ æŽãããã§ããã
ããã«ç§ãå®éã«æžã
ãæåã®ã³ãŒãããã
ãŸã ïŒ
é衚瀺ã®ããã¹ã #include <iostream> #include <vector> #include "OpenNL_psm.h" int main() { const int N = 60; const double x0 = 3.1; const double v0 = .5; const double hard_penalty = 100.; const double rho = 16.; nlNewContext(); nlSolverParameteri(NL_NB_VARIABLES, N*3); nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE); nlBegin(NL_SYSTEM); nlBegin(NL_MATRIX); nlBegin(NL_ROW); nlCoefficient(0, 1); // x0 = 3.1 nlRightHandSide(x0); nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); nlCoefficient(1, 1); // v0 = .5 nlRightHandSide(v0); nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); nlCoefficient((N-1)*3, 1); // xN = 0 nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); nlCoefficient((N-1)*3+1, 1); // vN = 0 nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); // uN = 0, for convenience, normally uN is not defined nlCoefficient((N-1)*3+2, 1); nlScaleRow(hard_penalty); nlEnd(NL_ROW); for (int i=0; i<N-1; i++) { nlBegin(NL_ROW); // x{N+1} = xN + vN nlCoefficient((i+1)*3 , -1); nlCoefficient((i )*3 , 1); nlCoefficient((i )*3+1, 1); nlScaleRow(hard_penalty); nlEnd(NL_ROW); nlBegin(NL_ROW); // v{N+1} = vN + uN nlCoefficient((i+1)*3+1, -1); nlCoefficient((i )*3+1, 1); nlCoefficient((i )*3+2, 1); nlScaleRow(hard_penalty); nlEnd(NL_ROW); } for (int i=0; i<N; i++) { nlBegin(NL_ROW); // xi = 0, soft nlCoefficient(i*3, 1); nlEnd(NL_ROW); nlBegin(NL_ROW); // vi = 0, soft nlCoefficient(i*3+1, 1); nlEnd(NL_ROW); nlBegin(NL_ROW); // ui = 0, soft nlCoefficient(i*3+2, 1); nlScaleRow(rho); nlEnd(NL_ROW); } nlEnd(NL_MATRIX); nlEnd(NL_SYSTEM); nlSolve(); std::vector<double> solution; for (int i=0; i<3*N; i++) { solution.push_back(nlGetVariable(i)); } nlDeleteContext(nlGetCurrent()); for (int i=0; i<N; i++) { for (int j=0; j<3; j++) { std::cout << solution[i*3+j] << " "; } std::cout << std::endl; } return 0; }
ããã§ã¯ãã¹ãŠãåãã§ãã·ã¹ãã 倿°ã®ã¿ã2ã€ã«ãªããŸãããé床ã ãã§ãªãããã·ã³ã®åº§æšã2ã€ã§ãã
ãããã£ãŠãåæäœçœ®+åæé床ïŒx0ãv0ïŒãäžãããããšãæçµäœçœ®ïŒ0,0ïŒã«å°éããåç¹ã§åæ¢ããå¿
èŠããããŸãã
ããç¬éããæ¬¡ã®ç¬éãžã®é·ç§»ã¯ãx_ {k + 1} = x_k + v_kãããã³v_ {k + 1} = v_k + u_kãšããŠå®è¡ãããŸãã
ç§ã¯ä»¥åã®ã³ãŒãã«ã€ããŠååã«ã³ã¡ã³ãããŸããããããã¯åé¡ãåŒãèµ·ãããªãã¯ãã§ãã äœæ¥ã®çµæã¯æ¬¡ã®ãšããã§ãã

èµ€ãç·ã¯åº§æšãç·ã¯é床ãéã¯ã¢ã¯ã»ã«ããã«ã®äœçœ®ã§ãã åã®ãã®ã«åºã¥ããŠãéãæ²ç·ã¯èµ€ãšç·ã®å éåã§ãããšæ³å®ãããŸãã ããŒããããã§ããïŒ æ°ããŠã¿ããïŒ
ã€ãŸããçè«çã«ã¯ãu_i = a * x_i + b * v_iã®ãããª2ã€ã®æ°å€aãšbãèŠã€ããå¿
èŠããããŸãã ãããŠãããã¯ååã®èšäºã§è¡ã£ãç·åœ¢ååž°ã«ãããŸããïŒ ããã
ã³ãŒãã§ãã
ãã®äžã§ãæåã«äžã®å³ã«ããæ²ç·ãæ€èšããæ¬¡ã«éãæ²ç·= a *èµ€+ b *ç·ã«ãªãããã«aãšbãæ¢ããŸãã
ããã«ãå®éã®u_iãšãç·ãšèµ€ã®ç·ãæããããã§åŸããã®ãšã®éãã瀺ããŸãã

1ç§ããã1ç§ããã100åã®1ã¡ãŒãã«ã®ãªãŒããŒã®åå·®ïŒ ãã£ããã!!! ç§ãåŒçšããã³ãããã¯ãa = -0.0513868ãb = -0.347324ãæäŸããŸãã åå·®ã¯æ¬åœã«å°ããã§ãããããã¯æ£åžžã§ããåæããŒã¿ã¯å€æŽããŸããã§ããã
ããã§ã¯ ããã·ã³ã®åæäœçœ®ãšé床ã
æ ¹æ¬çã«å€æŽããŠã以åã®èšç®ããããžãã¯çªå·aãšbãæ®ããŠã¿ãŸãããã
ãã®æé©ãªãœãªã¥ãŒã·ã§ã³ãšãæãæããªæé ã§åŸããããã®ãšã®éããæ¬¡ã«ç€ºããŸããããäžåºŠå®å
šã«èª¬æããŸãã
double xi = x0; double vi = v0; for (int i=0; i<N; i++) { double ui = xi*a + vi*b; xi = xi + vi; vi = vi + ui; std::cout << (ui-solution[i*3+2]) << std::endl; }

ãŠã£ãããã£ã¢ãæäŸããŠããããªã«ããåŸ®åæ¹çšåŒã¯ãããŸããã ç§ã圌ãã«ã€ããŠèªãå¿
èŠããããããããŸãããã圌ããæçãããšããããã¯åŸã§ãããŸãã ãããŸã§ã®éãåçŽãª2æ¬¡é¢æ°ã¯ç§ãå®å
šã«æºè¶³ãããŸãã
ä¹Ÿç¥æ®æž£
åèšïŒããã䜿çšããã«ã¯ãäž»ã«2ã€ã®å°é£ããããŸãã
aïŒè¯å¥œãªé·ç§»è¡åAããã³BãèŠã€ããŸãããã¡ããããã¹ãŠããªããžã§ã¯ããä»ã®ãã®ã®è³ªéã«äŸåãããããéåæ¹çšåŒãèšè¿°ããå¿
èŠããããŸãã
bïŒç®æšãžã®æéã®åæã®ç®æšéã®é©åãªåŠ¥åä¿æ°ãèŠã€ããŸãããåæã«äœåãªåªåãããããšã¯ãããŸããã
aãšbãå®äºãããšãã¡ãœããã¯ææã«èŠããŸãã å¯äžã®ããšã¯ãã·ã¹ãã ã®ç¶æ
ã«é¢ããå®å
šãªç¥èãå¿
èŠãšããããšã§ãããåžžã«æ©èœãããšã¯éããŸããã ããšãã°ãã»ã°ãŠã§ã€ã®äœçœ®ã¯ããããŸããããžã£ã€ãã¹ã³ãŒããå é床èšãªã©ã®ã»ã³ãµãŒã®ããŒã¿ã«åºã¥ããŠæšæž¬ããããšããã§ããŸããã ãããããã¯ããã«ã€ããŠã§ããæ¬¡åã¯çåŸã«æããŸãã
ã ãããç§ã¯3ã€ã®ç®æšãéæãããã£ãïŒ
aïŒlqrãšã¯äœããçè§£ãã
bïŒç§ãçè§£ããããšãçåŸãšããªãã«èª¬æãã
cïŒããªããšç§ã®çåŸã«ãç§ïŒã»ãšãã©ã®äººãããã§ããããã«ïŒæ°åŠã®ããã¹ãã§ã¯æ°ã®æ¯ãªããšãçè§£ããŠããªãããšã瀺ããŸãã ç§ãã¡ã¯ãããã¿ã€ãããŒã¯ãŒããæ¢ããåé·ã§äžå¿
èŠãªæ¹æ³ãšæœè±¡åãæšãŠãçŸåšã®ç¥èã®ç¯å²å
ã«æŒã蟌ãããšããŠããŸãã
ç§ã¯æåãããšæããŸãã ç¹°ãè¿ãã«ãªããŸãããç§ã¯å¶åŸ¡çè«ã®å°éå®¶ã§ã¯ãããŸãããè£è¶³ãä¿®æ£ãå¿
èŠãªå Žåã¯ãæ¥ããããããªãã§ãã ããã
ãæ¥œãã¿ãã ããïŒ