diff --git a/examples-gallery/intermediate/double_pendulum_on_a_cart_300_nodes_solution.csv b/examples-gallery/intermediate/double_pendulum_on_a_cart_300_nodes_solution.csv new file mode 100644 index 00000000..cd5efb5e --- /dev/null +++ b/examples-gallery/intermediate/double_pendulum_on_a_cart_300_nodes_solution.csv @@ -0,0 +1,3001 @@ +0.000000000000 +0.003506091081 +0.010515534313 +0.021023992731 +0.035025246683 +0.052510815865 +0.073469495622 +0.097886818116 +0.125744452700 +0.157019564133 +0.191684151929 +0.229704398827 +0.271040060605 +0.315643932635 +0.363461429936 +0.414430316478 +0.468480615507 +0.525534725519 +0.585507756394 +0.648308087619 +0.713838136511 +0.781995309188 +0.852642900331 +0.924875355317 +0.997051458591 +1.066534267114 +1.133023025816 +1.196348008592 +1.256702759542 +1.313883289041 +1.368433634848 +1.420212151109 +1.469629006219 +1.516608167316 +1.561362964590 +1.603905149706 +1.644794453853 +1.684015165284 +1.721895797480 +1.758604981952 +1.794170347965 +1.828877954999 +1.862624705964 +1.895380366888 +1.927118353357 +1.957729221048 +1.987202258096 +2.015085471100 +2.040665029441 +2.063416998342 +2.083228352347 +2.100108328987 +2.114061823179 +2.125089375249 +2.133187147808 +2.138346888689 +2.140555879370 +2.139796869323 +2.136047997411 +2.129282702208 +2.119469624045 +2.106572502796 +2.090550076978 +2.071355991882 +2.048938727162 +2.023241557957 +1.994202568252 +1.961754741171 +1.925826158371 +1.886340349923 +1.843216847100 +1.796372003109 +1.745720160303 +1.691175255429 +1.632652964016 +1.570073486862 +1.503365068927 +1.432468305017 +1.357341217659 +1.277964981896 +1.194350017746 +1.106541985388 +1.014627032930 +0.918735516362 +0.819043402804 +0.715770736884 +0.609176906706 +0.499552932491 +0.387211496838 +0.272475798874 +0.155668443265 +0.037101449793 +-0.082931845353 +-0.204162618347 +-0.326350102373 +-0.449283100466 +-0.572779866378 +-0.696686796299 +-0.820876344403 +-0.945244506055 +-1.069708130358 +-1.194202245630 +-1.318677515762 +-1.443097894865 +-1.567438511386 +-1.691683788562 +-1.815825793022 +-1.939862794821 +-2.063798018314 +-2.187638562239 +-2.311394468109 +-2.435077917037 +-2.555794176318 +-2.672596262720 +-2.785607977526 +-2.894944355636 +-3.000712413533 +-3.103011837437 +-3.201935611642 +-3.297570589505 +-3.389998010616 +-3.479293968129 +-3.565529830386 +-3.648772620915 +-3.729085360692 +-3.806527376334 +-3.881154577603 +-3.953019707332 +-4.022172566590 +-4.088660217651 +-4.152527167063 +-4.213815530889 +-4.272565183983 +-4.328813894951 +-4.382597448288 +-4.433949755004 +-4.482902952920 +-4.529487497687 +-4.573732245447 +-4.615664527962 +-4.655310220947 +-4.692693806257 +-4.727838428483 +-4.760765946477 +-4.791496980242 +-4.820050953569 +-4.846446132781 +-4.870699661850 +-4.892827594172 +-4.912844921200 +-4.930765598141 +-4.946602566853 +-4.960367776103 +-4.972072199266 +-4.981725849569 +-4.989337792934 +-4.994916158472 +-4.998468146640 +-5.000000035084 +-4.999517182145 +-4.997024027878 +-4.992524092906 +-4.986019974690 +-4.977513341266 +-4.967004922335 +-4.954494497607 +-4.939980882261 +-4.923461909367 +-4.904934409107 +-4.884394184590 +-4.861835984059 +-4.837253469243 +-4.810639179582 +-4.781984492048 +-4.751279576232 +-4.718513344353 +-4.683673395802 +-4.646745955826 +-4.607715807897 +-4.566566219316 +-4.523278859538 +-4.477833710722 +-4.430208969975 +-4.380380942755 +-4.328323926924 +-4.274010086978 +-4.217409318060 +-4.158489099447 +-4.097214337431 +-4.033547197736 +-3.967446927997 +-3.898869671342 +-3.827768272856 +-3.754092081615 +-3.677786752342 +-3.598794052409 +-3.517051682168 +-3.432493119579 +-3.345047503808 +-3.254639577302 +-3.161189711796 +-3.064614050943 +-2.964824810913 +-2.861730790077 +-2.755238149423 +-2.645251535597 +-2.531675626604 +-2.414417183528 +-2.293387685881 +-2.168506608196 +-2.039705355021 +-1.906931805246 +-1.770155323029 +-1.630250735288 +-1.490040196036 +-1.352424395601 +-1.218003045183 +-1.086895688058 +-0.959194394123 +-0.834965903490 +-0.714254265303 +-0.597083726679 +-0.483461670648 +-0.373381452952 +-0.266825036506 +-0.163765364215 +-0.064168443808 +0.032004857775 +0.124797296853 +0.214253989215 +0.300421372058 +0.383346362209 +0.463075681913 +0.539655325474 +0.613130142794 +0.683543518780 +0.750937130551 +0.815350767140 +0.876822198838 +0.935387085550 +0.991078915370 +1.043928966209 +1.093966284608 +1.141217677010 +1.185707709623 +1.227458713809 +1.266490794477 +1.302821839488 +1.336467528458 +1.367441339646 +1.395754553899 +1.421416254802 +1.444433324371 +1.464810433743 +1.482550028472 +1.497652308105 +1.510115199861 +1.519934326311 +1.527102967102 +1.531612014900 +1.533449925901 +1.532602665489 +1.529053649886 +1.522783684998 +1.513770904118 +1.501990706722 +1.487415701323 +1.470015656270 +1.449757463561 +1.426605122147 +1.400519749002 +1.371459628399 +1.339380312389 +1.304234788545 +1.265973734485 +1.224545882485 +1.179898521505 +1.131978167683 +1.080731437429 +1.026106158893 +0.968052758783 +0.908506119759 +0.852358828611 +0.799652029714 +0.750417483360 +0.704678669336 +0.662451949008 +0.623747737703 +0.588571645838 +0.556925556792 +0.528808618684 +0.504218135191 +0.483150346966 +0.465601100016 +0.451566400721 +0.441042859112 +0.434028022894 +0.430520604743 +0.430520604743 +0.430520604743 +-1.570796326795 +-1.572070668896 +-1.574617142686 +-1.578432311769 +-1.583511363998 +-1.589847913060 +-1.597433755616 +-1.606258589871 +-1.616309703521 +-1.627571641337 +-1.640025865217 +-1.653650422066 +-1.668419637113 +-1.684303851911 +-1.701269226874 +-1.719277627442 +-1.738286610555 +-1.758249523939 +-1.779115724909 +-1.800830918307 +-1.823337605439 +-1.846575627889 +-1.870472612848 +-1.894700256566 +-1.918697328171 +-1.941597430219 +-1.963309811602 +-1.983788950852 +-2.003104810689 +-2.021203532238 +-2.038260678927 +-2.054241240413 +-2.069275161051 +-2.083346439783 +-2.096523544653 +-2.108815425609 +-2.120386508679 +-2.131235548580 +-2.141457288966 +-2.151100314304 +-2.160173654773 +-2.168756362534 +-2.176821220100 +-2.184361040896 +-2.191369765032 +-2.197819593283 +-2.203709019001 +-2.208921407080 +-2.213273292023 +-2.216631623682 +-2.218969722277 +-2.220291735660 +-2.220599792661 +-2.219894006697 +-2.218172472070 +-2.215431252328 +-2.211664360752 +-2.206863733399 +-2.201019195416 +-2.194118421732 +-2.186146893722 +-2.177087854059 +-2.166922262851 +-2.155628759278 +-2.143183634456 +-2.129560823217 +-2.114731925011 +-2.098666267411 +-2.081331029697 +-2.062691449022 +-2.042711137477 +-2.021352545096 +-1.998577610805 +-1.974348649786 +-1.948629530063 +-1.921387190670 +-1.892593544990 +-1.862227790770 +-1.830279107824 +-1.796749661354 +-1.761657743187 +-1.725040783000 +-1.686957866085 +-1.647491334672 +-1.606747062731 +-1.564853107207 +-1.521956652161 +-1.478219437548 +-1.433812129685 +-1.388908267233 +-1.343678453796 +-1.298285364529 +-1.252879934258 +-1.207598865293 +-1.162563393840 +-1.117879119173 +-1.073636635830 +-1.029912703458 +-0.986771720616 +-0.944267318088 +-0.902443939307 +-0.861338321828 +-0.820980830643 +-0.781396621072 +-0.742606627186 +-0.704628383058 +-0.667476690414 +-0.631164149203 +-0.595701568248 +-0.561098272592 +-0.527362322858 +-0.494500660488 +-0.462793351319 +-0.432274294186 +-0.402874212053 +-0.374528597294 +-0.347177275917 +-0.320764019345 +-0.295236199011 +-0.270544479026 +-0.246642542443 +-0.223486847021 +-0.201036406803 +-0.179252596223 +-0.158098973873 +-0.137541123397 +-0.117546509338 +-0.098084346025 +-0.079125477879 +-0.060642269713 +-0.042608505815 +-0.024999296769 +-0.007790993115 +0.009038894931 +0.025511772360 +0.041648029430 +0.057467107403 +0.072987560398 +0.088227113712 +0.103202718963 +0.117930606328 +0.132426334126 +0.146704835980 +0.160780465753 +0.174667040441 +0.188377881182 +0.201925852530 +0.215323400145 +0.228582587003 +0.241715128266 +0.254732424916 +0.267645596266 +0.280465511441 +0.293202819943 +0.305867981393 +0.318471294538 +0.331022925635 +0.343532936292 +0.356011310873 +0.368467983549 +0.380912865137 +0.393355869736 +0.405806941352 +0.418276080567 +0.430773371383 +0.443309008350 +0.455893324082 +0.468536817303 +0.481250181537 +0.494044334580 +0.506930448909 +0.519919983156 +0.533024714833 +0.546256774450 +0.559628681225 +0.573153380561 +0.586844283494 +0.600715308319 +0.614780924607 +0.629056199841 +0.643556848903 +0.658299286634 +0.673300683714 +0.688579026055 +0.704153177936 +0.720042949018 +0.736269165364 +0.752853744501 +0.769819774436 +0.787191596392 +0.804994890818 +0.823256765918 +0.842005847556 +0.861272368864 +0.881088257172 +0.901487214984 +0.922504790510 +0.944178431759 +0.966547516259 +0.989653346062 +1.013539094699 +1.038249689232 +1.063831606398 +1.090332557280 +1.117801030260 +1.146285657722 +1.175834369240 +1.206493294067 +1.238305381008 +1.271308716637 +1.305534546262 +1.341005038244 +1.377730881370 +1.415382379426 +1.452905130170 +1.489226721044 +1.524144387439 +1.557638203156 +1.589700619282 +1.620335143634 +1.649554835853 +1.677380738875 +1.703840341422 +1.728966138369 +1.752794330533 +1.775363684593 +1.796714558249 +1.816888084920 +1.835925505551 +1.853867631565 +1.870754421645 +1.886624655244 +1.901515686831 +1.915463266463 +1.928501414082 +1.940662336736 +1.951976379598 +1.962472003205 +1.972175780674 +1.981112409780 +1.989304735774 +1.996773781605 +2.003538782877 +2.009617225417 +2.015024883763 +2.019775859231 +2.023882616510 +2.027356017953 +2.030205354909 +2.032438375580 +2.034061309016 +2.035078884910 +2.035494348967 +2.035309473654 +2.034524564184 +2.033138459653 +2.031148529248 +2.028550663547 +2.025339260927 +2.021507209194 +2.017045862613 +2.011945014633 +2.006192866711 +1.999775993849 +1.992679307657 +1.984886018057 +1.976377595143 +1.967133733161 +1.957132319228 +1.946349410137 +1.934759221606 +1.922334135457 +1.909044731654 +1.894859853828 +1.879746718806 +1.863671082876 +1.846597479734 +1.828489547302 +1.809310462386 +1.789023503222 +1.767592760233 +1.745688729628 +1.725049948268 +1.705692161079 +1.687626599188 +1.670860546606 +1.655397942915 +1.641239994812 +1.628385773501 +1.616832780203 +1.606577467121 +1.597615705601 +1.589943196789 +1.583555822743 +1.578449937807 +1.574622601111 +1.572071751577 +1.570796326795 +1.570796326795 +1.570796326795 +-1.570796326795 +-1.571115363989 +-1.571753813261 +-1.572712271964 +-1.573991603560 +-1.575592995335 +-1.577518028783 +-1.579768760688 +-1.582347812295 +-1.585258463245 +-1.588504746163 +-1.592091537028 +-1.596024635853 +-1.600310831716 +-1.604957946173 +-1.609974849363 +-1.615371444066 +-1.621158614313 +-1.627348137112 +-1.633952558022 +-1.640985033698 +-1.648459146577 +-1.656385225776 +-1.664682527412 +-1.673171596097 +-1.681530453290 +-1.689708515196 +-1.697668530998 +-1.705419811584 +-1.712918811993 +-1.720224501151 +-1.727303165688 +-1.734199756358 +-1.740891381586 +-1.747397881939 +-1.753710603450 +-1.759904517189 +-1.765969764888 +-1.771949959440 +-1.777865556227 +-1.783715762383 +-1.789541013808 +-1.795320934366 +-1.801046620427 +-1.806709847205 +-1.812289141043 +-1.817779021707 +-1.823102648583 +-1.828140456372 +-1.832803869327 +-1.837071826892 +-1.840944283525 +-1.844421738553 +-1.847505217915 +-1.850196257418 +-1.852496886580 +-1.854409612356 +-1.855937401975 +-1.857083664012 +-1.857852226604 +-1.858247311476 +-1.858273502150 +-1.857935704276 +-1.857239095583 +-1.856189062326 +-1.854791118392 +-1.853050802384 +-1.850973546996 +-1.848564513919 +-1.845828386320 +-1.842769109846 +-1.839389572237 +-1.835691211339 +-1.831673542145 +-1.827333596109 +-1.822665271416 +-1.817658602300 +-1.812298969901 +-1.806566297307 +-1.800434296545 +-1.793869862629 +-1.786832733212 +-1.779275542751 +-1.771144386598 +-1.762379964738 +-1.752919296953 +-1.742697903411 +-1.731652251499 +-1.719722209889 +-1.706853244793 +-1.692998143790 +-1.678118142462 +-1.662183430616 +-1.645173101286 +-1.627074661147 +-1.607883242202 +-1.587600648361 +-1.566234347467 +-1.543796489724 +-1.520303004675 +-1.495772804875 +-1.470227106557 +-1.443688865626 +-1.416182320176 +-1.387732627116 +-1.358365579249 +-1.328107389450 +-1.296984529654 +-1.265023613824 +-1.232251315663 +-1.198694313378 +-1.164379255355 +-1.130072907872 +-1.096063454140 +-1.062367288725 +-1.028998288497 +-0.995968110867 +-0.963286450816 +-0.930961263386 +-0.898998957042 +-0.867404562388 +-0.836181879940 +-0.805333610063 +-0.774861467614 +-0.744766283483 +-0.715048094796 +-0.685706225313 +-0.656739357286 +-0.628145595870 +-0.599922526980 +-0.572067269408 +-0.544576521836 +-0.517446605351 +-0.490673501935 +-0.464252889387 +-0.438180173027 +-0.412450514533 +-0.387058858189 +-0.361999954803 +-0.337268383516 +-0.312858571711 +-0.288764813190 +-0.264981284789 +-0.241502061560 +-0.218321130661 +-0.195432404068 +-0.172829730198 +-0.150506904552 +-0.128457679463 +-0.106675773008 +-0.085154877173 +-0.063888665322 +-0.042870799027 +-0.022094934313 +-0.001554727361 +0.018756160287 +0.038844056993 +0.058715276712 +0.078376115090 +0.097832845942 +0.117091718076 +0.136158952482 +0.155040739839 +0.173743238342 +0.192272571850 +0.210634828345 +0.228836058714 +0.246882275856 +0.264779454141 +0.282533529227 +0.300150398276 +0.317635920603 +0.334995918795 +0.352236180368 +0.369362460026 +0.386380482608 +0.403295946815 +0.420114529855 +0.436841893124 +0.453483689123 +0.470045569793 +0.486533196520 +0.502952252096 +0.519308454980 +0.535607576256 +0.551855459786 +0.568058046108 +0.584221400775 +0.600351747924 +0.616455510022 +0.632539354928 +0.648610251559 +0.664675535735 +0.680742988005 +0.696820925557 +0.712918310640 +0.729044878279 +0.745211286376 +0.761429291649 +0.777711955074 +0.794073880587 +0.810531490650 +0.827103341665 +0.843810481007 +0.860676845244 +0.877729695697 +0.895000082283 +0.912523319407 +0.930339448096 +0.948493646828 +0.967036540314 +0.986024342590 +1.005518761119 +1.025530831073 +1.045924782494 +1.066501447711 +1.087181953391 +1.107914335333 +1.128646229387 +1.149326043355 +1.169903903705 +1.190332374938 +1.210566966728 +1.230566454585 +1.250293044826 +1.269712415432 +1.288793662368 +1.307509177385 +1.325834479082 +1.343748014779 +1.361230946793 +1.378266933364 +1.394841911593 +1.410943887549 +1.426562736907 +1.441690018167 +1.456318799506 +1.470443499627 +1.484059742456 +1.497164225243 +1.509754599376 +1.521829363152 +1.533387765636 +1.544429720791 +1.554955731024 +1.564966819383 +1.574464469652 +1.583450573670 +1.591927385249 +1.599897480134 +1.607363721487 +1.614329230454 +1.620797361397 +1.626771681448 +1.632255954047 +1.637254126193 +1.641770319147 +1.645808822352 +1.649374090364 +1.652470742576 +1.655103565540 +1.657277517678 +1.658997736131 +1.660269545500 +1.661098468146 +1.661490235654 +1.661450800965 +1.660986350554 +1.660103315828 +1.658808382736 +1.657108498260 +1.655010872136 +1.652522971721 +1.649652507405 +1.646407405404 +1.642795764086 +1.638825789335 +1.634505703740 +1.629843623870 +1.624847399662 +1.619524410350 +1.614072446383 +1.608959778339 +1.604179458522 +1.599726062729 +1.595595513608 +1.591784893653 +1.588292256775 +1.585116445390 +1.582256918235 +1.579713592539 +1.577486702796 +1.575576677357 +1.573984033232 +1.572709288997 +1.571752895374 +1.571115182990 +1.570796326795 +1.570796326795 +1.570796326795 +0.000000000000 +0.358480116077 +0.716680190293 +1.074436831933 +1.431557545309 +1.787811190570 +2.142919216439 +2.496547978759 +2.848302524947 +3.197722283115 +3.544279132927 +3.887378338352 +4.226362775368 +4.560520777357 +4.889097740545 +5.211311383848 +5.526370257176 +5.833494768559 +6.131939693484 +6.421016883549 +6.700116736746 +6.968726883420 +7.223359601174 +7.385403929460 +7.379642251478 +7.104266457480 +6.798139975755 +6.474659856428 +6.170968644483 +5.846420522963 +5.577497516284 +5.294091936008 +5.052624003732 +4.803382095197 +4.575952121792 +4.349723696717 +4.180724960564 +4.010119777544 +3.873103439883 +3.753328822922 +3.636379158878 +3.548677632836 +3.450434949687 +3.349100995448 +3.245048919233 +3.129806713235 +3.013469273230 +2.850917789385 +2.615380727744 +2.326273979725 +2.025610949335 +1.725892409810 +1.426674351038 +1.127511537622 +0.827956370756 +0.527557461321 +0.225858147233 +-0.077604946204 +-0.383303230583 +-0.691717286753 +-1.003337710661 +-1.318665549639 +-1.638212166802 +-1.962498319069 +-2.292052166592 +-2.627405844960 +-2.969090123276 +-3.317626538795 +-3.673516242026 +-4.037224609547 +-4.409160498011 +-4.789648849163 +-5.178895262072 +-5.576941208310 +-5.983608906200 +-6.398435669475 +-6.820599023657 +-7.248836258859 +-7.681365478864 +-8.115819455836 +-8.549208038381 +-8.977928098235 +-9.397839948747 +-9.804423557308 +-10.193015416141 +-10.559108822227 +-10.898681104106 +-11.208498037316 +-11.486344752946 +-11.731145989150 +-11.942962526707 +-12.122876616496 +-12.272798561514 +-12.395234627153 +-12.493053501193 +-12.569278551563 +-12.626920965556 +-12.668858165006 +-12.697754447763 +-12.716016781575 +-12.725777355763 +-12.728894903385 +-12.726968082926 +-12.721355752377 +-12.713200430842 +-12.703452464134 +-12.692893350125 +-12.682157358075 +-12.671751040043 +-12.662070532053 +-12.653416718164 +-12.646008361605 +-12.342628197007 +-11.942423776915 +-11.554877413134 +-11.179092787160 +-10.814250056419 +-10.459599738609 +-10.114456595420 +-9.778193769641 +-9.450237281860 +-9.130060934938 +-8.817181640866 +-8.511155164209 +-8.211572264270 +-7.918055211388 +-7.630254649489 +-7.347846776006 +-7.070530810570 +-6.798026725081 +-6.530073209381 +-6.266425848627 +-6.006855490407 +-5.751146781574 +-5.499096856629 +-5.250514161224 +-5.005217395988 +-4.763034567354 +-4.523802133429 +-4.287364234193 +-4.053571996398 +-3.822282904569 +-3.593360230382 +-3.366672513506 +-3.142093087727 +-2.919499646783 +-2.698773844935 +-2.479800927783 +-2.262469389287 +-2.046670651353 +-1.832298762683 +-1.619250113872 +-1.407423166031 +-1.196718190413 +-0.987037016714 +-0.778282787896 +-0.570359719502 +-0.363172861547 +-0.156627861149 +0.049369275855 +0.254912439561 +0.460095637506 +0.665013258067 +0.869760330472 +1.074432794566 +1.279127782141 +1.483943911750 +1.688981598970 +1.894343384210 +2.100134280254 +2.306462141859 +2.513438059869 +2.721176782428 +2.929797166038 +3.139422659298 +3.350181822333 +3.562208884945 +3.775644346596 +3.990635621276 +4.207337730169 +4.425914044741 +4.646537082359 +4.869389355780 +5.094664276637 +5.322567111383 +5.553315985681 +5.787142929917 +6.024294953856 +6.265035132195 +6.509643674323 +6.758418940249 +7.011678349686 +7.269759111446 +7.533018674387 +7.801834767468 +8.076604853138 +8.357744763075 +8.645686215971 +8.940872831546 +9.243754151822 +9.554777060457 +9.874373857261 +10.202946107584 +10.540843264189 +10.888334985980 +11.245576107107 +11.612563420931 +11.989083943398 +12.374655238921 +12.768459856938 +13.169278013697 +13.575425290994 +13.984704928404 +14.304537929076 +14.335819926855 +14.070520979676 +13.743904589454 +13.405065502591 +13.056812733467 +12.701736124787 +12.342155713523 +11.980096156860 +11.617281722712 +11.255146630292 +10.894855738874 +10.537331298717 +10.183282396963 +9.833234652725 +9.487558526553 +9.146495262054 +8.810179966435 +8.478661679698 +8.151920506518 +7.829882018922 +7.512429207388 +7.199412283495 +6.890656634834 +6.585969213839 +6.285143614566 +5.987964060455 +5.694208495000 +5.403650937968 +5.116063243362 +4.831216372005 +4.548881271599 +4.268829440110 +3.990833234083 +3.714665971710 +3.440101870792 +3.166915853887 +2.894883246617 +2.623779390134 +2.353379184894 +2.083456580016 +1.813784020561 +1.544131863860 +1.274267775695 +1.003956117528 +0.732957337220 +0.461027377920 +0.187917122994 +-0.086628100557 +-0.362868931776 +-0.641072262236 +-0.921511353028 +-1.204465723214 +-1.490220734857 +-1.779066780050 +-2.071297951378 +-2.367210048361 +-2.667097738327 +-2.971250650926 +-3.279948141942 +-3.593452416203 +-3.911999655293 +-4.235788760190 +-4.564967302930 +-4.899614300711 +-5.239719500993 +-5.585159009511 +-5.935667137149 +-6.088343278991 +-5.740777116875 +-5.389004150029 +-5.033983853637 +-4.676562867634 +-4.317469014498 +-3.957310246714 +-3.596577842113 +-3.235652871558 +-2.874815001510 +-2.514252816797 +-2.154075006515 +-1.794321920955 +-1.434977162828 +-1.075979012098 +-0.717231595892 +-0.358615802286 +0.000000000000 +-0.000000000000 +0.000000000000 +-0.130295047638 +-0.260364091685 +-0.390081781679 +-0.519307453935 +-0.647880157960 +-0.775614111816 +-0.902294759297 +-1.027675637794 +-1.151476297106 +-1.273381529133 +-1.393042167967 +-1.510077691050 +-1.624080787643 +-1.734623957371 +-1.841268060837 +-1.943572575578 +-2.041107130830 +-2.133463727162 +-2.220268917710 +-2.301195156886 +-2.375970501798 +-2.443346092168 +-2.477154281321 +-2.453579446504 +-2.341419846371 +-2.219981403339 +-2.093888619932 +-1.974949171731 +-1.850502925161 +-1.744007153128 +-1.633931750235 +-1.537142501618 +-1.438717225604 +-1.347292461660 +-1.256782784594 +-1.183084838908 +-1.109259569389 +-1.045121360403 +-0.985950667644 +-0.927703265350 +-0.877538547376 +-0.824590978849 +-0.770908619162 +-0.716606666410 +-0.659462383215 +-0.602164052878 +-0.532940371588 +-0.444958269299 +-0.343372460993 +-0.239058779734 +-0.135169195629 +-0.031497273391 +0.072163052377 +0.176018226111 +0.280275882361 +0.385145650276 +0.490839915680 +0.597574508529 +0.705569277572 +0.815048502819 +0.926241080119 +1.039380390291 +1.154703736475 +1.272451196286 +1.392863688181 +1.516179992768 +1.642632398397 +1.772440556712 +1.905803040886 +2.042886004992 +2.183808263570 +2.328622075029 +2.477288968660 +2.629650174592 +2.785391697379 +2.944004935096 +3.104745098101 +3.266591570420 +3.428216661943 +3.587971506373 +3.743899355316 +3.893786031298 +4.035253629877 +4.165896149555 +4.283445492882 +4.385946008918 +4.471909430883 +4.540423083420 +4.591193283832 +4.624520126779 +4.641214256308 +4.642476061539 +4.629760745838 +4.604649639830 +4.568741541171 +4.523570608208 +4.470551388834 +4.410947741780 +4.345860617842 +4.276229377148 +4.202841906852 +4.126349769507 +4.047285627705 +3.966081082548 +3.883083767191 +3.798573049929 +3.712774051568 +3.625869905512 +3.538012320955 +3.449330578332 +3.359939108359 +3.241912320113 +3.120419547111 +3.006010001390 +2.898196034811 +2.796534555212 +2.700622163779 +2.610090777630 +2.524603737175 +2.443852370790 +2.367552978684 +2.295444193885 +2.227284678151 +2.162851112551 +2.101936445540 +2.044348364909 +1.989907963624 +1.938448573142 +1.889814741097 +1.843861333286 +1.800452742580 +1.759462189846 +1.720771104021 +1.684268570391 +1.649850837703 +1.617420876131 +1.586887979323 +1.558167404780 +1.531180047700 +1.505852144170 +1.482115000231 +1.459904743901 +1.439162097685 +1.419832169505 +1.401864260340 +1.385211687110 +1.369831619616 +1.355684930542 +1.342736057692 +1.330952877805 +1.320306591393 +1.310771618195 +1.302325502900 +1.294948830903 +1.288625153922 +1.283340925388 +1.279085445554 +1.275850816372 +1.273631906194 +1.272426326860 +1.272234414349 +1.273059226041 +1.274906546770 +1.277784905964 +1.281705606304 +1.286682764393 +1.292733363966 +1.299877322269 +1.308137570277 +1.317540147504 +1.328114312218 +1.339892667935 +1.352911307128 +1.367209973134 +1.382832241272 +1.399825720193 +1.418242274468 +1.438138269324 +1.459574838334 +1.482618174609 +1.507339845701 +1.533817131934 +1.562133387092 +1.592378419438 +1.624648889559 +1.659048719655 +1.695689506258 +1.734690924933 +1.776181110851 +1.820296993064 +1.867184552304 +1.916998961664 +1.969904556058 +2.026074558943 +2.085690472726 +2.148941011470 +2.216020420090 +2.287125982389 +2.362454470866 +2.442197234994 +2.526533564453 +2.615621905610 +2.709588464394 +2.808512715208 +2.912409382070 +3.021206605794 +3.134720312832 +3.252625318474 +3.374424484021 +3.499418324431 +3.626678768159 +3.755032086241 +3.849675630541 +3.836511867687 +3.713699333966 +3.570155142183 +3.424573597237 +3.278220214149 +3.132225487444 +2.987566043194 +2.845058132989 +2.705360805726 +2.568985915607 +2.436312376140 +2.307602533924 +2.183019062974 +2.062641276331 +1.946480168293 +1.834491822225 +1.726589049719 +1.622651280630 +1.522532817386 +1.426069616992 +1.333084784108 +1.243392959222 +1.156803775041 +1.073124537251 +0.992162266452 +0.913725218517 +0.837623982202 +0.763672236262 +0.691687233763 +0.621490068855 +0.552905770773 +0.485763261074 +0.419895202954 +0.355137765586 +0.291330321663 +0.228315092515 +0.165936752115 +0.104041998934 +0.042479102769 +-0.018902567653 +-0.080253031404 +-0.141722192010 +-0.203460339772 +-0.265618655201 +-0.328349708328 +-0.391807947456 +-0.456150169236 +-0.521535959499 +-0.588128091120 +-0.656092860980 +-0.725600342709 +-0.796824525015 +-0.869943296773 +-0.945138229256 +-1.022594092648 +-1.102498027901 +-1.185038275843 +-1.270402343258 +-1.358774460638 +-1.450332159708 +-1.545241772562 +-1.643652632192 +-1.745689742291 +-1.851444691562 +-1.960964626348 +-2.074239176285 +-2.191185299120 +-2.239576568925 +-2.110211219896 +-1.979236031794 +-1.847112517539 +-1.714244249990 +-1.580973180078 +-1.447578731398 +-1.314279247428 +-1.181235251056 +-1.048553999032 +-0.916294880981 +-0.784475299129 +-0.653076755923 +-0.522050962804 +-0.391325858744 +-0.260811489415 +-0.130405746286 +-0.000000000000 +-0.000000000000 +0.000000000000 +-0.032619942781 +-0.065278215484 +-0.097997564585 +-0.130805198218 +-0.163734225965 +-0.196824953517 +-0.230125976711 +-0.263695009045 +-0.297599368214 +-0.331916042722 +-0.366731261719 +-0.402139502500 +-0.438241892489 +-0.475143996886 +-0.512953028475 +-0.551774569081 +-0.591708947091 +-0.632847464582 +-0.675268702275 +-0.719035141555 +-0.764190316269 +-0.810401591269 +-0.848357211705 +-0.867964424580 +-0.854650956721 +-0.836165551152 +-0.813871437593 +-0.792529315477 +-0.766734940670 +-0.746969840913 +-0.723757719473 +-0.705141585450 +-0.684184903669 +-0.665256819568 +-0.645443911073 +-0.633296416115 +-0.620140962938 +-0.611444707897 +-0.604839912567 +-0.598154050529 +-0.595602555331 +-0.590967702975 +-0.585422499369 +-0.579036352891 +-0.570454633577 +-0.561312587729 +-0.544313977122 +-0.515090418086 +-0.476810436157 +-0.436377118477 +-0.395939144543 +-0.355552224180 +-0.315270200936 +-0.275145206151 +-0.235227719437 +-0.195566556097 +-0.156208777037 +-0.117199507583 +-0.078581645674 +-0.040395434033 +-0.002677864203 +0.034538127643 +0.071224722753 +0.107360600482 +0.142932711060 +0.177938527626 +0.212388878516 +0.246311472565 +0.279755236417 +0.312795577714 +0.345540662336 +0.378138734393 +0.410786395906 +0.443737576403 +0.477312636496 +0.511906645979 +0.547995360047 +0.586136837149 +0.626966126711 +0.671180233919 +0.719510963032 +0.772684579774 +0.831369674696 +0.896117896850 +0.967305528322 +1.045085897332 +1.129362155146 +1.219786537831 +1.315786724981 +1.416614144080 +1.521405029052 +1.629243855914 +1.739220314476 +1.850474152511 +1.962225718604 +2.073792843956 +2.184596420122 +2.294157699332 +2.402090263087 +2.508089113485 +2.611918711286 +2.713401183699 +2.812405433121 +2.908837515760 +3.002632414486 +3.093747178914 +3.182155321716 +3.267842321186 +3.350802068931 +3.431034104955 +3.508541477861 +3.507650869081 +3.477294981664 +3.445262832453 +3.411811843583 +3.377168943109 +3.341534779724 +3.305087253561 +3.267984494159 +3.230367380947 +3.192361683943 +3.154079888601 +3.115622757488 +3.077080672145 +3.038534790866 +3.000058051797 +2.961716045648 +2.923567778057 +2.885666338217 +2.848059487545 +2.810790179852 +2.773897022586 +2.737414687173 +2.701374275175 +2.665803645971 +2.630727710753 +2.596168696960 +2.562146386629 +2.528678331680 +2.495780048722 +2.463465195631 +2.431745731831 +2.400632064012 +2.370133178762 +2.340256763437 +2.311009316444 +2.282396247967 +2.254421972072 +2.227089991019 +2.200402972528 +2.174362820690 +2.148970741130 +2.124227300995 +2.100132484285 +2.076685743018 +2.053886044682 +2.031731916397 +2.010221486206 +1.989352521894 +1.969122466700 +1.949528476288 +1.930567451507 +1.912236071202 +1.894530824545 +1.877448043316 +1.860983934634 +1.845134614639 +1.829896143722 +1.815264563933 +1.801235939304 +1.787806399911 +1.774972190634 +1.762729725697 +1.751075650272 +1.740006910632 +1.729520834567 +1.719615224117 +1.710288463001 +1.701539641557 +1.693368702537 +1.685776611663 +1.678765557626 +1.672339187028 +1.666502880801 +1.661264079839 +1.656632669005 +1.652621430316 +1.649246578082 +1.646528390970 +1.644491958557 +1.643168062748 +1.642594217588 +1.642815894263 +1.643887961362 +1.645876373369 +1.648860142345 +1.652933628052 +1.658209178921 +1.664820148552 +1.672924297003 +1.682707559256 +1.694388120054 +1.708220668503 +1.724500610444 +1.743567884692 +1.765809856257 +1.791662547525 +1.821609231669 +1.856175187131 +1.895917263845 +1.941406941909 +1.993205896608 +2.046133142065 +2.085178594407 +2.103860157948 +2.114477321057 +2.119781406969 +2.119731522946 +2.114406597059 +2.103982354155 +2.088708071014 +2.068884876588 +2.044846686107 +2.016944282309 +1.985532625282 +1.950961186766 +1.913566944053 +1.873669601774 +1.831568606513 +1.787541553511 +1.741843637876 +1.694707861833 +1.646345766854 +1.596948510811 +1.546688153963 +1.495719053283 +1.444179293025 +1.392192101423 +1.339867220118 +1.287302205317 +1.234583648776 +1.181788313096 +1.128984180396 +1.076231416380 +1.023583253829 +0.971086800679 +0.918783778486 +0.866711197308 +0.814901972981 +0.763385492579 +0.712188133486 +0.661333741120 +0.610844069882 +0.560739191407 +0.511037873689 +0.461757934057 +0.412916568430 +0.364530658564 +0.316617058306 +0.269192858988 +0.222275633076 +0.175883653998 +0.130036088562 +0.084753156602 +0.040056250203 +-0.004031997858 +-0.047487710233 +-0.090285843580 +-0.132400372491 +-0.173804607585 +-0.214471683439 +-0.254375259778 +-0.293490487593 +-0.331795300058 +-0.369272095028 +-0.405909879789 +-0.441706946558 +-0.476674134831 +-0.510838706885 +-0.544248789396 +-0.557435796905 +-0.522744501284 +-0.488763572681 +-0.455337241332 +-0.422327798759 +-0.389616656330 +-0.357104491708 +-0.324710684260 +-0.292372218072 +-0.260042215011 +-0.227688236031 +-0.195290460325 +-0.162839822861 +-0.130336163858 +-0.097786420528 +-0.065202872354 +-0.032601436571 +-0.000000000000 +-0.000000000000 +50.000000000000 +36.652782443075 +36.624149576324 +36.578810833514 +36.513790378516 +36.425137040248 +36.308003239873 +36.156756008591 +35.965126869130 +35.726406579017 +35.433688650036 +35.080161963957 +34.659447663401 +34.165969043252 +33.595335996101 +32.944718656634 +32.213179540407 +31.401931080208 +30.514487174979 +29.556683569078 +28.536551234858 +27.464031689660 +26.034910133495 +16.568214649646 +-0.589102491618 +-28.155784978999 +-31.299887585082 +-33.074209437576 +-31.050893542234 +-33.183407271070 +-27.496020046011 +-28.976790095596 +-24.688877267552 +-25.483727100927 +-23.253566829499 +-23.130714577641 +-17.279267751656 +-17.443518835419 +-14.009228936891 +-12.246350022726 +-11.957512845871 +-8.967038364973 +-10.044818472804 +-10.360885338521 +-10.638799590900 +-11.782933879036 +-11.894916028129 +-16.620068745689 +-24.082475681173 +-29.559705720666 +-30.741277262964 +-30.644707839191 +-30.593536208480 +-30.587887649649 +-30.628003809535 +-30.714272228306 +-30.847232040428 +-31.027569576183 +-31.256106567773 +-31.533780525647 +-31.861615442812 +-32.240679920527 +-32.672028695657 +-33.156622237257 +-33.695217488557 +-34.288220917790 +-34.935492808880 +-35.636089251759 +-36.387925804642 +-37.187344763692 +-38.028567251676 +-38.903013393133 +-39.798481001423 +-40.698188868799 +-41.579719457004 +-42.413942709749 +-43.164072098563 +-43.785095775083 +-44.223929557413 +-44.420726242031 +-44.311795039449 +-43.834462158692 +-42.933867212821 +-41.571121747500 +-39.731556151020 +-37.431202918434 +-34.719551833525 +-31.677217621998 +-28.408424243894 +-25.029690769379 +-21.657171822705 +-18.395307565856 +-15.328762148149 +-12.518469716406 +-10.001486130540 +-7.793626654938 +-5.893645881164 +-4.287866965960 +-2.954499058154 +-1.867231453253 +-0.997969444367 +-0.318753508568 +0.197007666369 +0.573832470451 +0.833840462999 +0.996680393162 +1.079616110334 +1.097700997285 +1.063993492919 +0.989783079721 +0.884808790053 +0.757467064510 +31.019090520941 +40.918881925458 +39.624659559174 +38.422081235633 +37.303327677165 +36.261204901146 +35.289144283602 +34.381176651696 +33.531895517615 +32.736415384930 +31.990328562839 +31.289662571792 +30.630839376196 +30.010637132008 +29.426154782850 +28.874779611923 +28.354157715525 +27.862167278866 +27.396894486863 +26.956611878900 +26.539758948467 +26.144924790317 +25.770832605507 +25.416325885792 +25.080356111659 +24.761971811753 +24.460308844829 +24.174581778334 +23.904076249894 +23.648142209430 +23.406187950105 +23.177674845957 +22.962112722897 +22.759055797707 +22.568099126992 +22.388875514586 +22.221052831900 +22.064331711108 +21.918443575954 +21.783148979447 +21.658236221726 +21.543520225088 +21.438841646520 +21.344066211179 +21.259084253070 +21.183810451752 +21.118183756268 +21.062167489584 +21.015751011311 +20.978946329162 +20.951792382090 +20.934354694090 +20.926726370811 +20.929029283092 +20.941415444558 +20.964068591986 +20.997205978677 +21.041080392410 +21.095982410703 +21.162242907019 +21.240235822042 +21.330381214179 +21.433148602666 +21.549060614962 +21.678696946993 +21.822698639851 +21.981772669099 +22.156696832001 +22.348324902609 +22.557592003304 +22.785520111994 +23.033223584142 +23.301914514849 +23.592907693688 +23.907624808320 +24.247597424555 +24.614468100904 +25.009988772729 +25.436015249529 +25.894496289866 +26.387455229212 +26.916961509937 +27.485088670224 +28.093854359789 +28.745136739330 +29.440560176235 +30.181341490243 +30.968086206911 +31.800522522037 +32.677159310690 +33.594854129369 +34.548278729390 +35.529274591173 +36.526101463259 +37.522600472748 +38.497322937533 +39.422718798872 +40.264534466353 +40.981633401817 +41.526509078183 +41.846777089056 +32.701309963993 +3.198426377182 +-27.125478254512 +-33.394877306231 +-34.644586343927 +-35.607087839594 +-36.304790990878 +-36.765282072222 +-37.018762175745 +-37.095944588393 +-37.026485325650 +-36.837925081897 +-36.555069403962 +-36.199713145063 +-35.790614984817 +-35.343639103341 +-34.871997280661 +-34.386541428033 +-33.896071482626 +-33.407635734002 +-32.926809869717 +-32.457947638576 +-32.004400517380 +-31.568706633622 +-31.152750889189 +-30.757899110631 +-30.385109396147 +-30.035023838756 +-29.708043619349 +-29.404390176595 +-29.124154833713 +-28.867338932112 +-28.633886210141 +-28.423708882406 +-28.236708625389 +-28.072793458521 +-27.931891324079 +-27.813961010756 +-27.719000930598 +-27.647056142755 +-27.598223916303 +-27.572658033992 +-27.570571955401 +-27.592240877740 +-27.638002651472 +-27.708257422054 +-27.803465773974 +-27.924145044127 +-28.070863343036 +-28.244230668502 +-28.444886310292 +-28.673481519151 +-28.930656141355 +-29.217007594158 +-29.533050172650 +-29.879162233512 +-30.255518302298 +-30.662002618061 +-31.098100103687 +-31.562760307991 +-32.054229632632 +-32.569847332032 +-33.105801652545 +-33.656844468821 +-34.215966394835 +-34.774040050293 +-35.319446142490 +-35.837686863686 +-15.610364871650 +35.536885738633 +35.967010288548 +36.299033343630 +36.544491738911 +36.715533959592 +36.824416107066 +36.883067576280 +36.902756472988 +36.893850885856 +36.865663451904 +36.826363106403 +36.782937147426 +36.741187728395 +36.705748871555 +36.680112532042 +36.666654785651 +36.666655673009 +-0.000000000000 +0.000000000000 +-13.322010957718 +-13.298903231223 +-13.262979052782 +-13.212672722501 +-13.145910016786 +-13.060152045502 +-12.952456785268 +-12.819561967253 +-12.657992531755 +-12.464194658905 +-12.234696334596 +-11.966291499291 +-11.656241196860 +-11.302481138777 +-10.903821294054 +-10.460120250966 +-9.972415969551 +-9.442995805727 +-8.875392584883 +-8.274299481171 +-7.645401589251 +-6.888814037457 +-3.456716694368 +2.410407866258 +11.467752988792 +12.416467840326 +12.892350651021 +12.160958232547 +12.724000570219 +10.888655153673 +11.254654341086 +9.896212127952 +10.063487671624 +9.347720647394 +9.254157633087 +7.535242956496 +7.548261175855 +6.557808131664 +6.049904670992 +5.955502881160 +5.129089206791 +5.413621629414 +5.488750316731 +5.552100580156 +5.842714521309 +5.858465064023 +7.077772005876 +8.995725870064 +10.386636145648 +10.665547386178 +10.622185592746 +10.599930765583 +10.598745085087 +10.618667306027 +10.659819111809 +10.722404439826 +10.806705146599 +10.913073376710 +11.041920031845 +11.193698185888 +11.368879785188 +11.567923395172 +11.791230053633 +12.039083436217 +12.311569515032 +12.608469705839 +12.929120207992 +13.272228981996 +13.635640860605 +14.016041154479 +14.408589635502 +14.806481275052 +15.200439478663 +15.578164264474 +15.923784600824 +16.217402957378 +16.434870332379 +16.547984875723 +16.525349806753 +16.334126481579 +15.942835509711 +15.325156067179 +14.464347898064 +13.357538219844 +12.018827025774 +10.480160394050 +8.789325996206 +7.005175149716 +5.190996729927 +3.407501474297 +1.706890480799 +0.129013215914 +-1.300076849906 +-2.567483841228 +-3.671421842005 +-4.618499895530 +-5.420947566786 +-6.094172062371 +-6.654829895805 +-7.119442897788 +-7.503498415057 +-7.820934949994 +-8.083909423593 +-8.302754862912 +-8.486056566904 +-8.640794272866 +-8.772514512557 +-8.885510286177 +-8.982994560398 +-9.067260562777 +-9.139826601918 +-12.067643358804 +-12.422022805490 +-11.697798568663 +-11.023433892522 +-10.394373153385 +-9.806557906915 +-9.256377277189 +-8.740618391354 +-8.256419620915 +-7.801227722208 +-7.372759277076 +-6.968966449110 +-6.588006854720 +-6.228217235518 +-5.888090569053 +-5.566256243842 +-5.261462935908 +-4.972563847630 +-4.698503999258 +-4.438309295066 +-4.191077117526 +-3.955968232681 +-3.732199817392 +-3.519039444063 +-3.315799880726 +-3.121834584049 +-2.936533780118 +-2.759321042929 +-2.589650293612 +-2.427003154709 +-2.270886603570 +-2.120830877283 +-1.976387588701 +-1.837128019208 +-1.702641559054 +-1.572534270479 +-1.446427552516 +-1.323956889513 +-1.204770667986 +-1.088529048587 +-0.974902881770 +-0.863572657186 +-0.754227478034 +-0.646564052545 +-0.540285695529 +-0.435101333471 +-0.330724507117 +-0.226872365785 +-0.123264401723 +-0.019622085616 +0.084332832325 +0.188879220227 +0.294297699010 +0.400871820066 +0.508889292445 +0.618643266030 +0.730433677405 +0.844568665227 +0.961366061994 +1.081154968992 +1.204277420913 +1.331090146014 +1.461966426700 +1.597298063770 +1.737497445237 +1.882999717167 +2.034265049160 +2.191780980397 +2.356064822971 +2.527666086768 +2.707168873345 +2.895194163810 +3.092401895794 +3.299492684973 +3.517208994381 +3.746335486094 +3.987698200141 +4.242162088626 +4.510626281748 +4.794016267653 +5.093271919225 +5.409329986184 +5.743099277271 +6.095426273368 +6.467048329994 +6.858530948585 +7.270184840239 +7.701957726745 +8.153295131021 +8.622964000223 +9.108833210513 +9.607606340179 +10.114505326277 +10.622909768951 +11.123966972536 +11.606203585013 +12.055191702225 +12.453349896805 +12.779989276390 +13.011738025028 +13.123478911406 +9.676824692025 +-1.345928307772 +-12.556961677588 +-14.676669071549 +-14.884978148911 +-14.963894703131 +-14.927223898241 +-14.790698006995 +-14.570714510862 +-14.283346591357 +-13.943644163416 +-13.565199741734 +-13.159931704607 +-12.738031070465 +-12.308021078177 +-11.876886974622 +-11.450243125016 +-11.032513850249 +-10.627112264295 +-10.236607519445 +-9.862875342930 +-9.507229822172 +-9.170536375730 +-8.853307024216 +-8.555779693711 +-8.277983532688 +-8.019792240938 +-7.780967292714 +-7.561192751439 +-7.360103161794 +-7.177305792112 +-7.012398300144 +-6.864982715427 +-6.734676474232 +-6.621121108188 +-6.523989073470 +-6.442989111495 +-6.377870451702 +-6.328426099418 +-6.294495394529 +-6.275965977148 +-6.272775252525 +-6.284911406787 +-6.312413985784 +-6.355374009044 +-6.413933547619 +-6.488284645834 +-6.578667410109 +-6.685367020105 +-6.808709334956 +-6.949054666534 +-7.106789168241 +-7.282313137215 +-7.476025345754 +-7.688302300504 +-7.919471074015 +-8.169774065025 +-8.439323730809 +-8.728045018664 +-9.035602944445 +-9.361312593043 +-9.704028858798 +-10.062013669053 +-10.432779476047 +-10.812909765602 +-11.197860530759 +-11.581750978552 +-11.957150775183 +-4.947763082965 +13.226953967525 +13.391551887104 +13.508962440114 +13.585109705180 +13.626294213753 +13.638909070061 +13.629199407733 +13.603077090395 +13.565988311843 +13.522827243680 +13.477886886006 +13.434837809605 +13.396725994677 +13.365982056163 +13.344435493474 +13.333329012964 +13.333329335640 +0.000000000000 +0.000000000000 +-3.335224500423 +-3.339143541521 +-3.345388294843 +-3.354414942723 +-3.366826878068 +-3.383359866981 +-3.404861534957 +-3.432264116664 +-3.466549593022 +-3.508706755260 +-3.559680412850 +-3.620313897036 +-3.691287149892 +-3.773053911494 +-3.865782639076 +-3.969306575566 +-4.083088583059 +-4.206205767035 +-4.337357433220 +-4.474897505573 +-4.616888694141 +-4.724869617671 +-3.880770608852 +-2.004738549167 +1.361234888976 +1.890039414392 +2.279460582121 +2.182124262105 +2.637344627051 +2.020881686010 +2.373322254185 +1.903405739026 +2.142714933474 +1.935301059934 +2.025769888058 +1.242020045139 +1.345078685236 +0.889148183657 +0.675306984906 +0.683595646464 +0.260877505348 +0.473890259062 +0.566969079316 +0.652951243312 +0.877437483702 +0.934728043602 +1.738022134144 +2.987961405720 +3.913934934319 +4.134102645931 +4.134578724365 +4.129358754447 +4.118633553456 +4.102578186150 +4.081361533298 +4.055153762039 +4.024134250807 +3.988500902698 +3.948481456772 +3.904347395682 +3.856431135965 +3.805147318763 +3.751019174645 +3.694711102278 +3.637068756609 +3.579168052199 +3.522374490646 +3.468414017459 +3.419456046760 +3.378208126649 +3.348019622057 +3.332988329336 +3.338058600837 +3.369091884997 +3.432880424591 +3.537062856647 +3.689888855955 +3.899773514837 +4.174588772133 +4.520669291674 +4.941573102756 +5.436733918414 +6.000254743186 +6.620178899065 +7.278575998986 +7.952650135367 +8.616821977735 +9.245436713070 +9.815534575840 +10.309094677228 +10.714339057152 +11.025975730941 +11.244537782530 +11.375143386141 +11.426033567744 +11.407175433004 +11.329106382760 +11.202087789456 +11.035559855054 +10.837847424765 +10.616052296008 +10.376070572183 +10.122684780175 +9.859693709626 +9.590054965652 +9.316024761592 +9.039286362037 +8.761063191337 +8.482215468172 +8.203320712845 +7.924737661719 +-0.091060252432 +-3.103736267241 +-3.275125574811 +-3.420194768324 +-3.542061713647 +-3.643413342969 +-3.726575581516 +-3.793569872964 +-3.846159953810 +-3.885890685182 +-3.914120346569 +-3.932047544245 +-3.940733685383 +-3.941121800737 +-3.934052358725 +-3.920276597760 +-3.900467808140 +-3.875230916390 +-3.845110660870 +-3.810598595083 +-3.772139112470 +-3.730134651680 +-3.684950213015 +-3.636917293657 +-3.586337330481 +-3.533484723943 +-3.478609504005 +-3.421939688816 +-3.363683378507 +-3.304030619592 +-3.243155069790 +-3.181215488453 +-3.118357073933 +-3.054712666002 +-2.990403828795 +-2.925541827519 +-2.860228510270 +-2.794557104736 +-2.728612938177 +-2.662474087924 +-2.596211968612 +-2.529891861475 +-2.463573390212 +-2.397310947253 +-2.331154073543 +-2.265147794389 +-2.199332913276 +-2.133746265010 +-2.068421032498 +-2.003386619077 +-1.938669078240 +-1.874291108620 +-1.810272103604 +-1.746628155431 +-1.683372010320 +-1.620512970163 +-1.558056735185 +-1.496005180625 +-1.434356058958 +-1.373102617359 +-1.312233117983 +-1.251730246118 +-1.191570388281 +-1.131722758806 +-1.072148349254 +-1.012798670006 +-0.953614247431 +-0.894522832966 +-0.835437272050 +-0.776252970859 +-0.716844887027 +-0.657063956585 +-0.596732853045 +-0.535640955516 +-0.473538380781 +-0.410128909217 +-0.345061606461 +-0.277920912173 +-0.208214935322 +-0.135361664060 +-0.058672771151 +0.022665321065 +0.109613449672 +0.203305091147 +0.305075317281 +0.416493352709 +0.539398448028 +0.675938275965 +0.828608273432 +1.000289184392 +1.194278384093 +1.414308259235 +1.664541890575 +1.949532549940 +2.274129326338 +2.643307190812 +3.061897298051 +3.534194474575 +4.063426746153 +4.651089973235 +5.296181663134 +5.411543698097 +3.992200420318 +1.910095577025 +1.085551337837 +0.542316012120 +-0.005100389506 +-0.544446794434 +-1.065826220607 +-1.561718354390 +-2.026821572581 +-2.457783644117 +-2.852879951120 +-3.211683380978 +-3.534755089086 +-3.823372570246 +-4.079301866533 +-4.304614260961 +-4.501543943195 +-4.672381213822 +-4.819395182874 +-4.944780104262 +-5.050620098089 +-5.138867798953 +-5.211333278382 +-5.269680339791 +-5.315427936276 +-5.349955004062 +-5.374507441782 +-5.390206309820 +-5.398056589158 +-5.398956040148 +-5.393703851464 +-5.383008879623 +-5.367497359131 +-5.347720020056 +-5.324158589505 +-5.297231680760 +-5.267300092042 +-5.234671548934 +-5.199604932205 +-5.162314037879 +-5.122970920003 +-5.081708869658 +-5.038625087173 +-4.993783108941 +-4.947215056335 +-4.898923782807 +-4.848885006957 +-4.797049535089 +-4.743345697615 +-4.687682150530 +-4.629951227600 +-4.570033071975 +-4.507800829193 +-4.443127247970 +-4.375893111386 +-4.305998008350 +-4.233374050777 +-4.158003239338 +-4.079939267633 +-3.999334610308 +-3.916473731224 +-3.831813121813 +-3.746028562890 +-3.660069391693 +-3.575218504293 +-3.493155047075 +-3.416012299562 +-1.348304956533 +3.547009873145 +3.474378431255 +3.417673661268 +3.375048888137 +3.344549204115 +3.324204727680 +3.312103304029 +3.306444939548 +3.305579627523 +3.308031044282 +3.312509038309 +3.317913886362 +3.323335071056 +3.328046960917 +3.331503335593 +3.333332253241 +3.333332333910 +0.000000000000 +0.000000000000 +49.999985321404 +49.999984275306 +49.999983091554 +49.999981742686 +49.999980193988 +49.999978401061 +49.999976306374 +49.999973834293 +49.999970883763 +49.999967317272 +49.999962943785 +49.999957491530 +49.999950563089 +49.999941558233 +49.999929534881 +49.999912943827 +49.999889085846 +49.999852897841 +49.999793905712 +49.999687250924 +49.999459723503 +49.524255924677 +36.816346598107 +11.671747745912 +-30.900390374371 +-36.551018953520 +-40.260373948693 +-37.954055191260 +-42.379096150097 +-33.960992427206 +-37.255101495231 +-30.862416008455 +-32.927588356953 +-29.809437265165 +-30.231938564559 +-20.620446053399 +-21.351905344398 +-15.700966139645 +-12.896897078032 +-12.668572261027 +-7.547279393769 +-9.707511201207 +-10.503029203123 +-11.227935145663 +-13.543336251889 +-13.965144312224 +-22.929663357439 +-37.050301011356 +-47.537812111220 +-49.999008254404 +-49.999432788781 +-49.999637752525 +-49.999750677093 +-49.999818995836 +-49.999863272942 +-49.999893513693 +-49.999915035739 +-49.999930868473 +-49.999942836761 +-49.999952091377 +-49.999959386265 +-49.999965231617 +-49.999969982375 +-49.999973891468 +-49.999977142944 +-49.999979873218 +-49.999982185056 +-49.999984157006 +-49.999985849875 +-49.999987311280 +-49.999988578884 +-49.999989682741 +-49.999990647015 +-49.999991491263 +-49.999992231391 +-49.999992880390 +-49.999993448897 +-49.999993945635 +-49.999994377757 +-49.999994751125 +-49.999995070535 +-49.999995339897 +-49.999995562385 +-49.999995740557 +-49.999995876437 +-49.999995971584 +-49.999996027107 +-49.999996043673 +-49.999996021463 +-49.999995960114 +-49.999995858618 +-49.999995715194 +-49.999995527114 +-49.999995290481 +-49.999994999924 +-49.999994648192 +-49.999994225574 +-49.999993719083 +-49.999993111249 +-49.999992378311 +-49.999991487404 +-49.999990392061 +-49.999989024692 +-49.999987283400 +-49.999985007472 +-49.999981928278 +-49.999977561060 +-49.999970933765 +-49.999959770772 +-49.999937208979 +-49.999868505676 +23.227144091649 +49.999858379407 +49.999926132579 +49.999948578616 +49.999959718679 +49.999966337408 +49.999970694010 +49.999973755999 +49.999976006776 +49.999977714649 +49.999979040396 +49.999980086136 +49.999980919761 +49.999981588086 +49.999982124355 +49.999982552747 +49.999982891189 +49.999983153168 +49.999983348941 +49.999983486356 +49.999983571422 +49.999983608712 +49.999983601655 +49.999983552734 +49.999983463640 +49.999983335374 +49.999983168313 +49.999982962255 +49.999982716437 +49.999982429530 +49.999982099622 +49.999981724168 +49.999981299925 +49.999980822862 +49.999980288026 +49.999979689383 +49.999979019590 +49.999978269712 +49.999977428837 +49.999976483566 +49.999975417331 +49.999974209455 +49.999972833855 +49.999971257211 +49.999969436320 +49.999967314202 +49.999964814188 +49.999961830687 +49.999962005726 +49.999962121573 +49.999962181281 +49.999962187345 +49.999962141704 +49.999962045798 +49.999961900612 +49.999961706711 +49.999961464266 +49.999961173068 +49.999960832540 +49.999960441737 +49.999959999345 +49.999959503664 +49.999958952600 +49.999958343632 +49.999957673787 +49.999956939598 +49.999956137059 +49.999955261566 +49.999954307849 +49.999953269890 +49.999952140824 +49.999950912826 +49.999949576973 +49.999948123076 +49.999946539489 +49.999944812870 +49.999942927896 +49.999940866921 +49.999938609547 +49.999936132110 +49.999933407028 +49.999930401986 +49.999927078894 +49.999923392549 +49.999919288864 +49.999914702507 +49.999909553668 +49.999903743542 +49.999897147851 +49.999889607310 +49.999880913173 +49.999870784602 +49.999858832012 +49.999844495223 +49.999826934163 +49.999804824359 +49.999775945847 +49.999736275737 +49.999677713460 +49.999581233704 +49.999389339905 +37.090841910906 +-3.250347376115 +-43.432550255975 +-49.999473944584 +-49.999665887685 +-49.999758858172 +-49.999813034321 +-49.999848122322 +-49.999872468748 +-49.999890206268 +-49.999903609565 +-49.999914030536 +-49.999922320884 +-49.999929042359 +-49.999934579441 +-49.999939203445 +-49.999943110800 +-49.999946446863 +-49.999949321240 +-49.999951817943 +-49.999954002301 +-49.999955925758 +-49.999957629282 +-49.999959145820 +-49.999960502098 +-49.999961719963 +-49.999962817386 +-49.999963809233 +-49.999964707849 +-49.999965523522 +-49.999966264831 +-49.999966938933 +-49.999967551780 +-49.999968108294 +-49.999968612503 +-49.999969067651 +-49.999969476274 +-49.999969840267 +-49.999970160921 +-49.999970438949 +-49.999970674495 +-49.999970867125 +-49.999971015799 +-49.999971118829 +-49.999971173804 +-49.999971177497 +-49.999971125726 +-49.999971013176 +-49.999970833159 +-49.999970577283 +-49.999970235015 +-49.999969793080 +-49.999969234626 +-49.999968538054 +-49.999967675335 +-49.999966609548 +-49.999965291181 +-49.999963652395 +-49.999961597840 +-49.999958989326 +-49.999955618950 +-49.999951159109 +-49.999945062327 +-49.999936340338 +-49.999923009954 +-49.999900422618 +-49.999854528039 +-49.999713830996 +-21.130004722839 +49.999718265063 +49.999861003211 +49.999907349088 +49.999930349304 +49.999944141131 +49.999953371921 +49.999960016217 +49.999965054471 +49.999969027696 +49.999972258063 +49.999974948779 +49.999977233915 +49.999979205184 +49.999980927243 +49.999982446855 +49.999983798615 +49.999985008648 +-0.000000000000 +0.009780433904 diff --git a/examples-gallery/intermediate/plot_two_link_pendulum_on_a_cart.py b/examples-gallery/intermediate/plot_two_link_pendulum_on_a_cart.py index fbb85513..5ff381f3 100644 --- a/examples-gallery/intermediate/plot_two_link_pendulum_on_a_cart.py +++ b/examples-gallery/intermediate/plot_two_link_pendulum_on_a_cart.py @@ -1,12 +1,33 @@ -""" +r""" Upright a Double Pendulum ========================= +Objectives +---------- + +- Show the use of opty's variable time interval feature to solve a relatively + simple problem. +- Show the use of additional state variables to enforce terminal constraints on + :math:`\dfrac{d^2}{dt^2}(\textrm{state variables})`. + +Introduction +------------ + A double pendulum is rotationally attached to a cart which can move along the horizontal X axis. The goal is to get the double pendulum to an upright position in the shortest time possible, given an upper limit on the absolute value of the force that can be applied to the cart. Gravity points in the negative Y direction. +To ensure that it is at rest, not only the speeds, but also its accelerations +are constrained to be zero at the beginning and end of the motion. + + +Notes +----- + +The upright double pendulum seems to be a very standard example in physics. +One can find a lot about it in the internet. + **Constants** @@ -20,18 +41,20 @@ **States** -- q1: position of the cart along the X axis [m] -- q2: angle of the first pendulum with respect to the vertical [rad] -- q3: angle of the second pendulum with respect to the first [rad] -- u1: speed of the cart along the X axis [m/s] -- u2: angular speed of the first pendulum [rad/s] -- u3: angular speed of the second pendulum [rad/s] +- q1: position of the cart along the X axis [m] +- q2: angle of the first pendulum with respect to the vertical [rad] +- q3: angle of the second pendulum with respect to the first [rad] +- u1: speed of the cart along the X axis [m/s] +- u2: angular speed of the first pendulum [rad/s] +- u3: angular speed of the second pendulum [rad/s] +- h1, h2, h3: auxiliary states **Specifieds** -- f: force applied to the cart [N] +- F: force applied to the cart [N] """ +import os import numpy as np import sympy as sm import sympy.physics.mechanics as me @@ -48,6 +71,7 @@ O, P1, P2, P3 = sm.symbols('O P1 P2 P3', cls=me.Point) O.set_vel(N, 0) q1, q2, q3, u1, u2, u3, F = me.dynamicsymbols('q1 q2 q3 u1 u2 u3 F') +h1, h2, h3 = me.dynamicsymbols('h1 h2 h3') lx, m1, m2, m3, g, iZZ1, iZZ2 = sm.symbols('lx, m1, m2, m3 g, iZZ1, iZZ2') A1.orient_axis(N, q2, N.z) @@ -85,13 +109,17 @@ ) fr, frstar = KM.kanes_equations(bodies, loads=loads) eom = kd.col_join(fr + frstar) -sm.pprint(sm.trigsimp(eom)) +# %% +# add the auxiliary eoms for h1, h2, h3 +eom = eom.col_join(sm.Matrix([h1 - u1.diff(t), h2 - u2.diff(t), + h3 - u3.diff(t)])) +sm.pprint(sm.trigsimp(eom)) # %% # Define various objects to be use in the optimization problem. h = sm.symbols('h') -state_symbols = tuple((*q_ind, *u_ind)) +state_symbols = tuple((*q_ind, *u_ind, h1, h2, h3)) constant_symbols = (lx, m1, m2, m3, g, iZZ1, iZZ2) specified_symbols = (F,) @@ -117,7 +145,6 @@ def obj(free): """Minimize h, the time interval between nodes.""" return free[-1] - def obj_grad(free): grad = np.zeros_like(free) grad[-1] = 1.0 @@ -141,6 +168,9 @@ def obj_grad(free): u1: 0.0, u2: 0.0, u3: 0.0, + h1: 0.0, + h2: 0.0, + h3: 0.0, } instance_constraints = (tuple(xi.subs({t: 0}) - xi_val for xi, xi_val in @@ -150,7 +180,7 @@ def obj_grad(free): # %% # Bounding h > 0 helps avoid 'solutions' with h < 0. -bounds = {F: (-150.0, 150.0), +bounds = {F: (-50.0, 50.0), q1: (-5.0, 5.0), h: (0.0, 1.0) } @@ -167,7 +197,8 @@ def obj_grad(free): known_parameter_map=par_map, instance_constraints=instance_constraints, time_symbol=t, - bounds=bounds + bounds=bounds, + backend='numpy' ) # Initial guess. @@ -182,25 +213,18 @@ def obj_grad(free): initial_guess[-1] = 0.01 # %% -# Plot the initial guess. -_ = prob.plot_trajectories(initial_guess) - -# Find the optimal solution. -# As initial guess the solution of a previous run, stored in -# 'two_link_pendulum_on_a_cart_solution.npy' is used. -initial_guess = np.load('two_link_pendulum_on_a_cart_solution.npy') -solution, info = prob.solve(initial_guess) -print('Message from optimizer:', info['status_msg']) -print('Iterations needed', len(prob.obj_value)) -print(f"Objective value {solution[-1]: .3e}") - -# %% -#This is where the solution is saved to give better initial conditions -# ```np.save('two_link_pendulum_on_a_cart_solution.npy', solution)``` - -# %% -# Plot the evolution of the objective function. -_ = prob.plot_objective_value() +# Use stored solution if available, else use initial_guess as given above. +fname = f'double_pendulum_on_a_cart_{num_nodes}_nodes_solution.csv' +if os.path.exists(fname): + solution = np.loadtxt(fname) +else: + # Find the optimal solution as no stored solution available. + for _ in range(3): + solution, info = prob.solve(initial_guess) + initial_guess = solution + print('Message from optimizer:', info['status_msg']) + print('Iterations needed', len(prob.obj_value)) + print(f"Objective value {solution[-1]: .3e}") # %% # Plot the accuracy of the solution. @@ -217,7 +241,6 @@ def obj_grad(free): len(specified_symbols),num_nodes, variable_duration=True) state_sol1 = state_sol.T[::4, :] num_nodes = state_sol1.shape[0] -print('num nodes', num_nodes) solution = list(state_sol1.T.flatten()) + [h_var] P1_x = np.empty(num_nodes) @@ -282,11 +305,8 @@ def animate_pendulum(time, P1_x, P1_y, P2_x, P2_y): ax.add_patch(recht) return fig, ax, line1, line2, recht - duration = (num_nodes - 1) * solution[-1] *4 times = np.linspace(0.0, duration, num_nodes) -fig, ax, line1, line2, recht = animate_pendulum(times, P1_x, P1_y, P2_x, P2_y) - def animate(i): message = (f'running time {times[i]: .2f} sec') @@ -302,15 +322,16 @@ def animate(i): line2.set_data(wert_x, wert_y) return line1, line2, - -anim = animation.FuncAnimation(fig, animate, frames=num_nodes, - interval=solution[-1]*1000.0 * 4) - # %% # A frame from the animation. fig, ax, line1, line2, recht = animate_pendulum(times, P1_x, P1_y, P2_x, P2_y) -# sphinx_gallery_thumbnail_number = 6 -animate(50) +# sphinx_gallery_thumbnail_number = 3 +_ = animate(50) + +# %% +fig, ax, line1, line2, recht = animate_pendulum(times, P1_x, P1_y, P2_x, P2_y) +anim = animation.FuncAnimation(fig, animate, frames=num_nodes, + interval=solution[-1]*1000.0 * 4) plt.show()