Free cookie consent management tool by TermsFeed Policy Generator

Changeset 16976


Ignore:
Timestamp:
05/21/19 22:56:20 (4 years ago)
Author:
gkronber
Message:

#2925: Update data files to have equidistant time steps. Reactivated CVODES solver.

Location:
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3
Files:
14 added
15 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/CVODES.cs

    r16256 r16976  
    174174    );
    175175
     176    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
     177    public delegate void CVErrHandlerFn(
     178     int errorCode,
     179     IntPtr module, // const char *
     180     IntPtr function,  // const char *
     181     IntPtr msg, // char *
     182     IntPtr ehdata
     183    );
     184
    176185    // returns a void* to the cvodes memory block if successful otherwise NULL
    177186    public static IntPtr CVodeCreate(MultistepMethod lmm, NonlinearSolverIteration iter) {
     
    415424      if (Environment.Is64BitProcess) return CVodeFree_x64(ref cvode_mem);
    416425      else return CVodeFree_x86(ref cvode_mem);
     426    }
     427
     428
     429    internal static int CVodeSetErrHandlerFn(IntPtr cvode_mem, CVErrHandlerFn errorHandler, IntPtr data) {
     430      if (Environment.Is64BitProcess) return CVodeSetErrHandlerFn_x64(cvode_mem, errorHandler, data);
     431      else return CVodeSetErrHandlerFn_x86(cvode_mem, errorHandler, data);
    417432    }
    418433
     
    812827      );
    813828
     829    [DllImport("sundials_cvodes-x86.dll", EntryPoint = "CVodeSetErrHandlerFn", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
     830    private static extern int CVodeSetErrHandlerFn_x86(IntPtr cvode_mem, CVErrHandlerFn errorHandler, IntPtr data);
     831
    814832    [DllImport("sundials_cvodes-x86.dll", EntryPoint = "CVodeFree", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
    815 
    816833    private static extern int CVodeFree_x86(ref IntPtr cvode_mem);
    817834
     
    10961113
    10971114    [DllImport("sundials_cvodes-x64.dll", EntryPoint = "CVodeFree", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
    1098 
    10991115    private static extern int CVodeFree_x64(ref IntPtr cvode_mem);
     1116
     1117
     1118    [DllImport("sundials_cvodes-x64.dll", EntryPoint = "CVodeSetErrHandlerFn", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
     1119    private static extern int CVodeSetErrHandlerFn_x64(IntPtr cvode_mem, CVErrHandlerFn errorHandler, IntPtr data);
    11001120
    11011121    #region matrix
     
    11821202    [DllImport("sundials_cvodes-x64.dll", EntryPoint = "N_VCloneVectorArray_Serial", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
    11831203    private static extern IntPtr N_VCloneVectorArray_Serial_x64(int count, IntPtr vec); // returns N_Vector* !
     1204
    11841205    #endregion
    11851206
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/HeuristicLab.Problems.DynamicalSystemsModelling-3.3.csproj

    r16954 r16976  
    118118  </ItemGroup>
    119119  <ItemGroup>
     120    <Compile Include="CVODES.cs" />
    120121    <Compile Include="Instances\DataDescriptor.cs" />
    121122    <Compile Include="OdeParameterIdentification.cs" />
     
    141142    <None Include="Instances\ChemicalReaction.csv" />
    142143    <EmbeddedResource Include="Instances\ChemicalReaction.csv.zip" />
     144    <EmbeddedResource Include="Instances\double_linear_h_1_equidistant.txt.zip" />
     145    <EmbeddedResource Include="Instances\double_pend_h_1_equidistant.txt.zip" />
    143146    <None Include="Instances\E-CELL.csv" />
    144147    <EmbeddedResource Include="Instances\E-CELL.csv.zip" />
    145148    <None Include="Instances\Glider_1.csv" />
    146149    <EmbeddedResource Include="Instances\Glider_1.csv.zip" />
     150    <EmbeddedResource Include="Instances\linear_h_1_equidistant.txt.zip" />
    147151    <None Include="Instances\LotkaVolterra.csv" />
    148152    <EmbeddedResource Include="Instances\LotkaVolterra.csv.zip" />
     153    <EmbeddedResource Include="Instances\pendulum_h_1_equidistant.txt.zip" />
    149154    <None Include="Instances\predator_prey_1.csv" />
    150155    <EmbeddedResource Include="Instances\predator_prey_1.csv.zip" />
     156    <EmbeddedResource Include="Instances\real_double_linear_h_1_equidistant.txt.zip" />
     157    <EmbeddedResource Include="Instances\real_double_pend_h_1_equidistant.txt.zip" />
     158    <EmbeddedResource Include="Instances\real_linear_h_1_equidistant.txt.zip" />
     159    <EmbeddedResource Include="Instances\real_pend_h_1_equidistant.txt.zip" />
    151160    <None Include="Instances\S-System.csv" />
    152161    <EmbeddedResource Include="Instances\S-System.csv.zip" />
     
    291300  </ItemGroup>
    292301  <ItemGroup>
     302    <Content Include="Instances\# README.txt" />
     303    <None Include="Instances\pendulum_h_1_equidistant.txt" />
     304    <None Include="Instances\double_linear_h_1_equidistant.txt" />
     305    <None Include="Instances\double_pend_h_1_equidistant.txt" />
     306    <None Include="Instances\linear_h_1_equidistant.txt" />
     307    <None Include="Instances\real_double_linear_h_1_equidistant.txt" />
     308    <None Include="Instances\real_double_pend_h_1_equidistant.txt" />
     309    <None Include="Instances\real_linear_h_1_equidistant.txt" />
     310    <None Include="Instances\real_pend_h_1_equidistant.txt" />
    293311    <Content Include="sundials_cvodes-x64.dll">
    294312      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/Instances/pendulum_h_1_equidistant.txt

    r16970 r16976  
    1 t;theta;omega;v
    2 0.02;1.56874608122987;-0.198215825131781;-9.79997740774612
    3 0.04;1.56115576202518;-0.416769224595534;-9.79940852398577
    4 0.06;1.55028372193127;-0.623269173289159;-9.79763082109256
    5 0.08;1.54468149930913;-0.705858864144413;-9.79635098754607
    6 0.1;1.52754386073091;-0.912251061511948;-9.79018322197376
    7 0.12;1.50134440830472;-1.15967109660331;-9.77532290367731
    8 0.14;1.4679064081962;-1.41281831960097;-9.74645482440716
    9 0.16;1.43432659642324;-1.62826469198267;-9.70675724993762
    10 0.18;1.41952074828869;-1.71418136994579;-9.68595536846762
    11 0.2;1.37909404600435;-1.92793309054672;-9.61731954835222
    12 0.22;1.32447485300749;-2.18205620076956;-9.50020049577612
    13 0.24;1.2753558558715;-2.3858913738581;-9.37161765674118
    14 0.26;1.25523519758259;-2.46343847936162;-9.31231993163691
    15 0.28;1.20206810940885;-2.65475497225107;-9.13631657581441
    16 0.3;1.13318279475286;-2.87899756618972;-8.87080265846951
    17 0.32;1.0588053155781;-3.09579884549923;-8.53701034957632
    18 0.34;0.992311933576061;-3.27086845323823;-8.1990922590758
    19 0.36;0.964357145977603;-3.33960998822044;-8.04615819084181
    20 0.38;0.891933141620441;-3.50508430322281;-7.61967275935143
    21 0.4;0.800634211498993;-3.69102966402551;-7.02670659094116
    22 0.42;0.704819608694701;-3.8607721740716;-6.34176880959805
    23 0.44;0.622861971826605;-3.98855515471348;-5.71384087728525
    24 0.46;0.556172117266379;-4.07857110262074;-5.17086276234397
    25 0.48;0.488070208571341;-4.15931621447535;-4.59272212691522
    26 0.5;0.418714063133072;-4.23023218021594;-3.98210593770352
    27 0.52;0.34827023664358;-4.29080955502264;-3.34236559983808
    28 0.54;0.204826023151875;-4.3792167322465;-1.99198271543943
    29 0.56;0.132194476529381;-4.40636812190815;-1.29087894657116
    30 0.58;0.0617625447553851;-4.42169567749806;-0.604538527928841
    31 0.6;-0.00627716897164661;-4.42587373975885;0.0614802241267177
    32 0.62;-0.142155365217027;-4.40353833318769;1.38763921222506
    33 0.64;-0.208886935774822;-4.3776072697134;2.03113977723328
    34 0.66;-0.274357641099355;-4.3424207639848;2.65368983633987
    35 0.68;-0.403368827706824;-4.24465394695545;3.84473318957877
    36 0.7;-0.467430266560211;-4.18178907796009;4.41353026401486
    37 0.72;-0.531259327796966;-4.10958655667351;4.96238668709364
    38 0.74;-0.655268205784563;-3.94098544308479;5.96909679014836
    39 0.76;-0.717468839979079;-3.84158757336105;6.4400298846202
    40 0.78;-0.780276183204002;-3.73098497229658;6.89076164353195
    41 0.8;-0.841188919581483;-3.61323499988222;7.30199420633354
    42 0.82;-0.900093914476029;-3.48899021433118;7.67396174583089
    43 0.84;-0.961305536039301;-3.34787468920122;8.03122363003775
    44 0.86;-1.08424505673303;-3.02552368847277;8.65903231370804
    45 0.88;-1.14094402661763;-2.85616146137067;8.90509128748555
    46 0.9;-1.19652765660852;-2.67464385466458;9.11800894305925
    47 0.92;-1.24192789870848;-2.51396354041321;9.27200540866638
    48 0.94;-1.25927740861703;-2.44893504898269;9.32551486633627
    49 0.96;-1.30058912761908;-2.28486944926824;9.44170166758256
    50 0.98;-1.3464236682147;-2.08564255535696;9.55206671064279
    51 1;-1.39140952391776;-1.86602361596991;9.64016659414852
    52 1.02;-1.43466756082438;-1.62633880699496;9.70736806950991
    53 1.04;-1.47197062840792;-1.38529668738058;9.75074743054948
    54 1.06;-1.49857052144253;-1.18377652503702;9.77357846941541
    55 1.08;-1.50801185959929;-1.10304282709259;9.77981943858127
    56 1.1;-1.5290653282895;-0.895319094564573;9.79080786367076
    57 1.12;-1.548994463412;-0.641256069107395;9.7973321550773
    58 1.14;-1.56233187043747;-0.38708422926847;9.79952543461567
    59 1.16;-1.56850119978264;-0.175251538637751;9.79996125243528
    60 1.18;-1.56965012669137;-0.0905176969723619;9.79998062619942
    61 1.2;-1.56928789063435;0.118838086638923;9.79997766095049
    62 1.22;-1.56309590334689;0.368080695288001;9.79960209229047
    63 1.24;-1.5531816453728;0.575767398274653;9.79821132321501
    64 1.26;-1.54794821172043;0.658833434558124;9.7971737837865
    65 1.28;-1.53169654904193;0.866426561619328;9.79191546442345
    66 1.3;-1.50655809197917;1.11482000145969;9.77881191847661
    67 1.32;-1.47518314281774;1.36224373349689;9.75378674381326
    68 1.34;-1.44434281530566;1.56781724318295;9.71995773453057
    69 1.36;-1.43075720891838;1.64983336989444;9.70227113389894
    70 1.38;-1.39368708959005;1.8540304495212;9.64403964785919
    71 1.4;-1.34318842206827;2.09906677601036;9.54376432709075
    72 1.42;-1.2860200138267;2.34295107426308;9.40102459816339
    73 1.44;-1.23370668993152;2.54300737576508;9.24393924055607
    74 1.46;-1.21154761969719;2.62203475258826;9.16986317651578
    75 1.48;-1.153139922933;2.81632991028476;8.95172782484674
    76 1.5;-1.07981986529971;3.03706719605031;8.63641644700845
    77 1.52;-1.00315727584028;3.24337448669523;8.2566169924906
    78 1.54;-0.935575381079818;3.40772012592743;7.88228132570107
    79 1.56;-0.90758464467535;3.47122797940696;7.71649302321986
    80 1.58;-0.835361134048447;3.62342105332248;7.25997271337558
    81 1.6;-0.758228497606258;3.77089059340855;6.73518916521185
    82 1.62;-0.691439990534443;3.88418470292787;6.24535374202732
    83 1.64;-0.622751804573357;3.98855564336474;5.71261064902426
    84 1.66;-0.480336964594616;4.16762370070872;4.52537126112589
    85 1.68;-0.406971413067468;4.24096370928929;3.87647788899022
    86 1.7;-0.332427032319788;4.30269833178708;3.19586044346511
    87 1.72;-0.25691064800756;4.35231684328173;2.4883240807502
    88 1.74;-0.184160550145938;4.38825736074598;1.79350415494904
    89 1.76;-0.044413164519911;4.42365412570857;0.434838612039077
    90 1.78;0.0257098490142659;4.42510513426916;-0.251773879722829
    91 1.8;0.0940624162414031;4.41617267305467;-0.919943113650948
    92 1.82;0.160491594329429;4.39743504444888;-1.5652142239549
    93 1.84;0.292139475857229;4.33118652402102;-2.82091301508649
    94 1.86;0.35722551432335;4.28397105624277;-3.42502409357211
    95 1.88;0.421682121490936;4.22765519390623;-4.00904343045667
    96 1.9;0.54771037812862;4.08943275071346;-5.10074542678867
    97 1.92;0.610633980661001;4.0059768407752;-5.61632363719572
    98 1.94;0.67379860792052;3.9123907109479;-6.11181986919021
    99 1.96;0.735408815958906;3.81118424029675;-6.57168756973847
    100 1.98;0.856814769318436;3.58108871511943;-7.40267835185466
    101 2;0.919465448541576;3.44558430096782;-7.79004360383459
    102 2.02;0.979640962991438;3.3035688257992;-8.13338439544905
    103 2.04;1.03723203988619;3.15581093812382;-8.43445757676599
    104 2.06;1.09554330465114;2.99274442039023;-8.70996761512869
    105 2.08;1.15409561336834;2.81455775485403;-8.95779897547474
    106 2.1;1.20900804010443;2.63181809398469;-9.16237400256889
    107 2.12;1.26019699126093;2.44535152885498;-9.32823984141548
    108 2.14;1.31028163174655;2.24398229925969;-9.46626203955054
    109 2.16;1.35869595623758;2.02811945594337;-9.57786061104823
    110 2.18;1.4021924479195;1.81008335140663;-9.65900360155247
    111 2.2;1.44072871586766;1.59049749834371;-9.71564235348613
    112 2.22;1.47011027458198;1.39879639128922;-9.74910905865832
    113 2.24;1.48146816934129;1.31720612476089;-9.75966763695438
    114 2.26;1.50678827901055;1.11292572507497;-9.77897815404435
    115 2.28;1.5316321820715;0.867387800812241;-9.79190542854185
    116 2.3;1.55031213210743;0.621625767725759;-9.79764610182736
    117 2.32;1.56149113398341;0.406962253187152;-9.79946372450279
    118 2.34;1.56487187397446;0.315212980629898;-9.7997160095963
    119 2.36;1.56945803720994;0.0858321855709665;-9.79998410409391
    120 2.38;1.56888987922071;-0.143553620007082;-9.79995136407703
    121 2.4;1.56711629798705;-0.235307903083455;-9.79990281465603
    122 2.42;1.55881675590276;-0.464680615901938;-9.79908814253348
    123 2.44;1.54313389672648;-0.725877012132236;-9.7958400109097
    124 2.46;1.5257943870497;-0.931773927117243;-9.78942291468299
    125 2.48;1.51761177569857;-1.01409287561407;-9.78548782737851
    126 2.5;1.49404229499307;-1.21967539355331;-9.76999071515699
    127 2.52;1.46016339676051;-1.46580867736387;-9.73842159660924
    128 2.54;1.41817724494131;-1.72090357344831;-9.68341459432425
    129 2.56;1.3766233846097;-1.94048160180111;-9.61270210746284
    130 2.58;1.3585636472191;-2.0278344484376;-9.57698952925571
    131 2.6;1.30985966633527;-2.24444031852747;-9.46381249024562
    132 2.62;1.25645533083503;-2.4581908200111;-9.31498802973058
    133 2.64;1.23369523882802;-2.54268829804135;-9.2436280300185
    134 2.66;1.17754201514743;-2.73758275706053;-9.04688930213171
    135 2.68;1.10810312089423;-2.95493095500476;-8.76386881690883
    136 2.7;1.03345335809591;-3.16455602977596;-8.41263049468023
    137 2.72;0.953802656831351;-3.36471278856949;-7.9863587224253
    138 2.74;0.879225344988252;-3.53380636061219;-7.54415879506705
    139 2.76;0.810844699704671;-3.67280760292069;-7.09940609774743
    140 2.78;0.739909986802798;-3.80287954777451;-6.60306880760459
    141 2.8;0.666599877793497;-3.92304633318248;-6.05531172353417
    142 2.82;0.591111187656251;-4.03234369402559;-5.45738584545803
    143 2.84;0.513659225204216;-4.12983760978703;-4.81170472905801
    144 2.86;0.434476727503349;-4.21465282747028;-4.12187220156645
    145 2.88;0.353811640453356;-4.28599829156357;-3.39265549467556
    146 2.9;0.27748032029928;-4.34026266618153;-2.68283887180404
    147 2.92;0.205843882574353;-4.37876855652316;-2.00175819942944
    148 2.94;0.13366774096818;-4.40595024271161;-1.3051908944384
    149 2.96;-0.00885770024086808;-4.42585531095823;0.0867551316175163
    150 2.98;-0.0761471138939128;-4.41952495769984;0.7450994518858
    151 3;-0.143264056037089;-4.40321276596197;1.39840508659528
    152 3.02;-0.27601578579149;-4.34139687611713;2.66931489266026
    153 3.04;-0.341001082968115;-4.29665602199094;3.27570879447784
    154 3.06;-0.405245324275659;-4.24294309622682;3.86162530948144
    155 3.08;-0.532139219257252;-4.10848629633817;4.96974645263235
    156 3.1;-0.595645774987487;-4.02676355948308;5.49550946950315
    157 3.12;-0.65781380397215;-3.93708574181393;5.98877591913253
    158 3.14;-0.718523187219345;-3.83997020024362;6.44818399849438
    159 3.16;-0.843035110217505;-3.60941620709089;7.31384675242613
    160 3.18;-0.90358236387918;-3.4812167461588;7.69497632588517
    161 3.2;-0.961886906498744;-3.34685791566578;8.03538594210697
    162 3.22;-1.02199116837195;-3.19575984614038;8.35670024485477
    163 3.24;-1.08338637415315;-3.02789061098168;8.65491633129425
    164 3.26;-1.14141522483303;-2.85460170123313;8.90685851057183
    165 3.28;-1.1959793244394;-2.67676679025082;9.11645246346843
    166 3.3;-1.24927607789909;-2.48626141648364;9.29444798090068
    167 3.32;-1.30086749490854;-2.28355608925945;9.44225990604676
    168 3.34;-1.3480428002592;-2.07803777948431;9.55545584998124
    169 3.36;-1.39074842496978;-1.87039531172274;9.63961135138625
    170 3.38;-1.4315318597092;-1.64485718685202;9.70307006059976
    171 3.4;-1.46376307470345;-1.44237581499856;9.74258938707214
    172 3.42;-1.4754404845698;-1.36115886756479;9.75414960521004
    173 3.44;-1.50158502076612;-1.15778306564945;9.77551427845941
    174 3.46;-1.52746380315332;-0.913289040426239;9.79016317137375
    175 3.48;-1.54475278106593;-0.703724161061628;9.79633826301425
    176 3.5;-1.55063010292131;-0.616494452438665;9.79766891685189
    177 3.52;-1.56182805269519;-0.3983876006027;9.79946718734038
    178 3.54;-1.56897340444947;-0.136628027883163;9.79996740198767
    179 3.56;-1.56968396947333;0.0815074825267155;9.79998177182817
    180 3.58;-1.56856981066139;0.168760563430059;9.79996354367224
    181 3.6;-1.5626752967266;0.379466376901578;9.79956487135176
    182 3.62;-1.55000416542767;0.626351386261765;9.79757671006071
    183 3.64;-1.53111340260463;0.873145616541827;9.79169238779374
    184 3.66;-1.51070930518866;1.07863958851885;9.78144917714443
    185 3.68;-1.50130519441966;1.16077160700782;9.77548257163557
    186 3.7;-1.47378110199058;1.37174126036202;9.75231636069036
    187 3.72;-1.43414427090105;1.62882054296913;9.70639341659835
    188 3.74;-1.39603207655544;1.84191921613006;9.64806698054971
    189 3.76;-1.37943673163928;1.92677624154911;9.61846388315673
    190 3.78;-1.33460397063712;2.13748588426198;9.52411468320637
    191 3.8;-1.27662105751983;2.38051687161244;9.37485872831051
    192 3.82;-1.21423080117446;2.61243136857772;9.17869859647019
    193 3.84;-1.1579369612045;2.80154121536071;8.97157521659694
    194 3.86;-1.13428788054864;2.87591493523505;8.87610211622553
    195 3.88;-1.07242630424872;3.05783351149039;8.60167203435859
    196 3.9;-0.993110343535538;3.26859234921177;8.20280556927072
    197 3.92;-0.90838220587828;3.46895121225648;7.7200440842053
    198 3.94;-0.834104748958043;3.62607809737286;7.25205881764924
    199 3.96;-0.803451964625949;3.68606010078491;7.04692555256627
    200 3.98;-0.724659892079511;3.82771252198733;6.48870646887302
    201 4;-0.643541547434513;3.95836635074805;5.87711955415286
    202 4.02;-0.576804197841842;4.05186816819545;5.34136512658929
    203 4.04;-0.439043581279882;4.21058752732978;4.16316160824712
    204 4.06;-0.368346861772598;4.27468268222956;3.52648419314009
    205 4.08;-0.296671945808074;4.32794188417278;2.86306141399829
    206 4.1;-0.22420312002042;4.36995554150118;2.17738505356251
    207 4.12;-0.151130377365781;4.40039506089777;1.47445453442967
    208 4.14;-0.0120896941887321;4.42574226223411;0.118406991534705
    209 4.16;0.0562078762214286;4.42240784492011;-0.55022645359437
    210 4.18;0.124374433965999;4.40877660497301;-1.21502554129569
    211 4.2;0.256936724483516;4.3527207633043;-2.48903678022965
    212 4.22;0.321981756860899;4.31074732261681;-3.0995574579901
    213 4.24;0.386328506998525;4.25974907318272;-3.69065433774399
    214 4.26;0.514456379465439;4.12954026469083;-4.81978292207324
    215 4.28;0.577240602438476;4.05150389701072;-5.34540958982915
    216 4.3;0.638766537792501;3.96563565664217;-5.84010962587283
    217 4.32;0.701070637743168;3.86873589770782;-6.31814446837035
    218 4.34;0.824937115585952;3.6457055095864;-7.19490407593061
    219 4.36;0.883999752610413;3.52399872839371;-7.57496235065751
    220 4.38;0.945223103405363;3.38606244635696;-7.94003404585325
    221 4.4;1.00814249483201;3.23174745784423;-8.28534345323592
    222 4.42;1.06806854805571;3.07131787183097;-8.58380022921435
    223 4.44;1.12489313167871;2.90563541677097;-8.83839739037686
    224 4.46;1.18092278186421;2.72718471493268;-9.06092320709799
    225 4.48;1.23574575013221;2.53640017572924;-9.25182871244252
    226 4.5;1.28655661364324;2.34205186326534;-9.4039778407063
    227 4.52;1.33328884596094;2.14489355029955;-9.52251233066875
    228 4.54;1.37912568504493;1.92848869367177;-9.61788019213157
    229 4.56;1.4232537741123;1.69317646360287;-9.69146344759509
    230 4.58;1.45571409348346;1.49594956220283;-9.7338133933335
    231 4.6;1.46754403563195;1.41682416012321;-9.74644374269726
    232 4.62;1.49422178201085;1.21865130662623;-9.77020504293074
    233 4.64;1.52160315237355;0.973600982642255;-9.78737574478142
    234 4.66;1.5434247458828;0.721487467682873;-9.79590658318855
    235 4.68;1.55673979794012;0.511277527414434;-9.79887293197839
    236 4.7;1.5607668226205;0.427178229538768;-9.79934819334205
    237 4.72;1.56758626494406;0.216923844829188;-9.79991130000748
    238 4.74;1.56991066271621;-0.0361438851432762;-9.79999508312774
    239 4.76;1.56693912026379;-0.247665550614458;-9.79986567570628
    240 4.78;1.56443559768243;-0.332274572947089;-9.79974033046634
    241 4.8;1.55488973915028;-0.54378294501634;-9.79851724915983
    242 4.82;1.53751898719209;-0.79752500266369;-9.79405191296643
    243 4.84;1.51391430031465;-1.0482790335339;-9.78328774475893
    244 4.86;1.48969657328236;-1.25462319925847;-9.76662055336728
    245 4.88;1.47875511712013;-1.33705604202356;-9.75734993005631
    246 4.9;1.44827490933035;-1.54267268061923;-9.7246790752092
    247 4.92;1.4060863939395;-1.78828902546384;-9.66488675841202
    248 4.94;1.36582595962425;-1.99358930498405;-9.59188491441316
    249 4.96;1.34821528907229;-2.07645703549025;-9.55527515567532
    250 4.98;1.30098230573634;-2.28192020782915;-9.44129696771756
    251 5;1.23858429483283;-2.52475802167623;-9.25919215933087
    252 5.02;1.16995086328433;-2.76211462663623;-9.01736770374542
    253 5.04;1.10985853780565;-2.95003090202839;-8.77209701582345
    254 5.06;1.08562394575593;-3.02083294447494;-8.66391440432016
    255 5.08;1.0225031100533;-3.19344876868432;-8.35714828575579
    256 5.1;0.942314543340568;-3.39176699365398;-7.92066539011438
    257 5.12;0.85743502365474;-3.57848528322994;-7.40339754513494
    258 5.14;0.781078135991376;-3.72933467294311;-6.8959390927044
    259 5.16;0.714489435726075;-3.84640060670178;-6.41760214988818
    260 5.18;0.645919447526367;-3.95467074702335;-5.89537900003045
    261 5.2;0.575529411435672;-4.05338597135985;-5.33054895693128
    262 5.22;0.503493499454005;-4.14181580163302;-4.72525342623489
    263 5.24;0.429998760906735;-4.21927211105692;-4.08251344469821
    264 5.26;0.279437681059167;-4.33883762516863;-2.70102315576547
    265 5.28;0.206365012145827;-4.37860952859963;-2.00682819399417
    266 5.3;0.136285881333149;-4.40524766080435;-1.33064868221268
    267 5.32;0.0658685085402296;-4.42101320220065;-0.644643506269028
    268 5.34;-0.00471281264932037;-4.42578970048101;0.0461566044869721
    269 5.36;-0.140015778763592;-4.40424851860221;1.3669196083351
    270 5.38;-0.206326716320282;-4.37876974101363;2.00658897017558
    271 5.4;-0.272180551623132;-4.34372746272842;2.63314047142061
    272 5.42;-0.402047004649455;-4.24582811876575;3.83279482411397
    273 5.44;-0.46575174061335;-4.18359692198325;4.39892745589674
    274 5.46;-0.528452328684389;-4.11300528345357;4.93874763906276
    275 5.48;-0.654759155171857;-3.94167778618852;5.96497266266354
    276 5.5;-0.716501963597775;-3.84331750595638;6.43316813454917
    277 5.52;-0.776627398109222;-3.73781412238798;6.86558462335929
    278 5.54;-0.838173598186086;-3.61913740288248;7.28183660335249
    279 5.56;-0.96107090021493;-3.34872152516285;8.0305920066374
    280 5.58;-1.01883328167223;-3.20437051230397;8.34134051405891
    281 5.6;-1.07759477634337;-3.04430991298076;8.62803267817041
    282 5.62;-1.13686719934138;-2.86867520723601;8.88806782874805
    283 5.64;-1.19256986386828;-2.68827715632377;9.10403956368617
    284 5.66;-1.24461557693028;-2.50395461634337;9.28035197298311
    285 5.68;-1.29551720539389;-2.30536628491158;9.4278844294306
    286 5.7;-1.33693670848925;-2.12856431705639;9.53090883534807
    287 5.72;-1.35255335923393;-2.05730762632628;9.56520742376478
    288 5.74;-1.38919096873263;-1.87817918534388;9.63670965191066
    289 5.76;-1.42880991047436;-1.66173648068482;9.69970341751307
    290 5.78;-1.46531825316808;-1.43121593634378;9.74397191751251
    291 5.8;-1.49808225926314;-1.18695725482629;9.77302525443444
    292 5.82;-1.52079583985205;-0.982979366189633;9.78714757013002
    293 5.84;-1.52865577405189;-0.901310569136196;9.79069492302986
    294 5.86;-1.54523823944688;-0.697050495439038;9.79642673628672
    295 5.88;-1.56003489554686;-0.438818229602957;9.79925176986058
    296 5.9;-1.56765494939493;-0.212742608572872;9.79992822471304
    297 5.92;-1.56920087833818;-0.122307976735148;9.79996410634867
    298 5.94;-1.5693102947045;0.103779125413158;9.79997906790208
    299 5.96;-1.56268197061875;0.375076348961152;9.79954529776891
    300 5.98;-1.55216099443863;0.593049329999877;9.7980201382979
    301 6;-1.54683182976733;0.675377557801189;9.79690782887783
    302 6.02;-1.53039639552802;0.881127480587236;9.79139961911489
    303 6.04;-1.50507440416999;1.12780516507316;9.77785462809791
    304 6.06;-1.47353972379698;1.3739980407245;9.75222541762195
    305 6.08;-1.44139169185748;1.58528100421277;9.71592567323527
    306 6.1;-1.42656261850098;1.67362708155089;9.69610604865044
    307 6.12;-1.38588455636389;1.89346375940767;9.6297162272921
    308 6.14;-1.33061678842336;2.15488553308105;9.51457501903042
    309 6.16;-1.27924035765128;2.36994615908248;9.38190320382415
    310 6.18;-1.25728270603913;2.45507561192918;9.31780240010604
    311 6.2;-1.20283617532853;2.65219919540643;9.13919239622511
    312 6.22;-1.13515213516116;2.87300925800065;8.87916202800419
    313 6.24;-1.0621434713353;3.08665589906925;8.55321473684753
    314 6.26;-0.997447852788276;3.25811995004928;8.22696130525145
    315 6.28;-0.970565736998173;3.32475329192435;8.08113399675394
    316 6.3;-0.909618586439425;3.46736373682959;7.73035457070066
    317 6.32;-0.840037251570339;3.61502281862202;7.29314400584746
    318 6.34;-0.767643152685907;3.75355137199962;6.80089761194553
    319 6.36;-0.692626296525125;3.88186702461168;6.25334217741208
    320 6.38;-0.615197589158796;3.99889182279203;5.65141020446716
    321 6.4;-0.535589397102367;4.10357364401707;4.99734575094273
    322 6.42;-0.454054495693249;4.19491972902775;4.2947549930835
    323 6.44;-0.37086360493064;4.27202715421537;3.54859214310691
    324 6.46;-0.22082676994619;4.37163731274806;2.14514652121134
    325 6.48;-0.148082113508147;4.40141846522886;1.44494395331074
    326 6.5;-0.0749405271480904;4.41948726884231;0.733237321622717
    327 6.52;-0.00455515562124399;4.4259101436334;0.0446149647241527
    328 6.54;0.130193486761357;4.407164827518;-1.27157677750794
    329 6.56;0.197200942476044;4.38283328863659;-1.91899629487787
    330 6.58;0.263310233516495;4.34902440989412;-2.54936204777807
    331 6.6;0.392743743730681;4.25413778917394;-3.74878366449204
    332 6.62;0.456256686816478;4.19348533675382;-4.31564398139205
    333 6.64;0.519878659010112;4.12313923605231;-4.86588635574325
    334 6.66;0.645701787128558;3.95532518976908;-5.89444449928917
    335 6.68;0.706532622876217;3.85991729360419;-6.35929208418658
    336 6.7;0.768431458892509;3.7525957940219;-6.80762602784152
    337 6.72;0.831128533676048;3.6333468203578;-7.23574386329532
    338 6.74;0.89174168333171;3.50718181695897;-7.62265543285172
    339 6.76;1.01053156090264;3.22548767766961;-8.29754402880233
    340 6.78;1.07234636527078;3.05919797570114;-8.60368518904966
    341 6.8;1.13083444622895;2.88735249198364;-8.86315021095873
    342 6.82;1.18589508596443;2.71083123555036;-9.07975990155133
    343 6.84;1.2396624557397;2.52191105821546;-9.26420399927299
    344 6.86;1.2833988793704;2.35481994763479;-9.39544789253581
    345 6.88;1.30002989214008;2.28732474484808;-9.44034094357905
    346 6.9;1.33941710878966;2.1173184197112;-9.53637046270448
    347 6.92;1.38271529832956;1.91134724925444;-9.6251443146745
    348 6.94;1.42435305534246;1.68663378687911;-9.69294683520144
    349 6.96;1.46350369809747;1.44351795456734;-9.74205865533899
    350 6.98;1.49656020306368;1.19942573326685;-9.77190880682908
    351 7;1.51952263661356;0.995576968778617;-9.7865004376728
    352 7.02;1.52748343659935;0.913958007547837;-9.79018860052491
    353 7.04;1.54476744313665;0.702286001215113;-9.79625465245336
    354 7.06;1.55996032191033;0.44214065659109;-9.79925584296178
    355 7.08;1.56744030754692;0.225315192419742;-9.79991939965509
    356 7.1;1.56905062096134;0.138582027770475;-9.79995965491633
    357 7.12;1.56962210586325;-0.0782484585517574;-9.79998795600347
    358 7.14;1.56440127948784;-0.331845950812676;-9.79971391245288
    359 7.16;1.55292446364654;-0.578831260859661;-9.79817425693197
    360 7.18;1.53869187744721;-0.784601008834534;-9.79447860900148
    361 7.2;1.53175410922627;-0.866885617350377;-9.79206052721543
    362 7.22;1.51130045933083;-1.07245464786324;-9.78176677038658
    363 7.24;1.48042495062297;-1.32372783716955;-9.75853841380582
    364 7.26;1.44925832103267;-1.53668771069595;-9.72585547297816
    365 7.28;1.43545131847571;-1.62165881691307;-9.70852521368845
    366 7.3;1.39760142948346;-1.83322261190836;-9.65059434623393
    367 7.32;1.34621193987147;-2.08510134526619;-9.55031798597932
    368 7.34;1.29937429903811;-2.28918517064142;-9.4376481981258
    369 7.36;1.27988326138146;-2.36798295143698;-9.38465416236206
    370 7.38;1.22821534066775;-2.56265879274932;-9.22575183775467
    371 7.4;1.16098871525259;-2.79137652019375;-8.98301486527283
    372 7.42;1.0881032288214;-3.01318753884909;-8.67411889823303
    373 7.44;1.02345582360569;-3.19112636541564;-8.36235172503967
    374 7.46;0.996644162463075;-3.26009384025449;-8.22265183524791
    375 7.48;0.927105319522959;-3.42676984870071;-7.83172896418292
    376 7.5;0.839297928674986;-3.61537987674624;-7.28549927236307
    377 7.52;0.746967756244719;-3.78927711895215;-6.65085518746705
    378 7.54;0.666733618874402;-3.92321774598469;-6.05724320142204
    379 7.56;0.599945679778724;-4.02067257434548;-5.52989587755335
    380 7.58;0.531595828890043;-4.10893993947152;-4.96474995597615
    381 7.6;0.461843645815494;-4.18740505199003;-4.36416765533403
    382 7.62;0.318819545082796;-4.31270362047862;-3.0697498134746
    383 7.64;0.245913701804339;-4.35857816801782;-2.38413612621308
    384 7.66;0.172334492462805;-4.39275831736387;-1.67938466065259
    385 7.68;0.10117141369784;-4.41455800028213;-0.989209515172891
    386 7.7;0.0326334153439656;-4.42471016964124;-0.319562546162588
    387 7.72;-0.104511123739436;-4.41379723126415;1.02174687316026
    388 7.74;-0.171727730625574;-4.3932972601051;1.67376083670231
    389 7.76;-0.23748902137661;-4.36341185391815;2.30433842061622
    390 7.78;-0.367314436879094;-4.27580213795304;3.51746686298667
    391 7.8;-0.431691902553777;-4.21801520245785;4.09826481111768
    392 7.82;-0.495713592958439;-4.15099983283375;4.65911282583862
    393 7.84;-0.620363094485454;-3.99231424985025;5.69438364409788
    394 7.86;-0.682785928938451;-3.89817499017141;6.18023459954386
    395 7.88;-0.745692871336873;-3.79323727796382;6.64591386589471
    396 7.9;-0.806822931591931;-3.68099665764007;7.0733040989404
    397 7.92;-0.927312426973403;-3.42757783021136;7.83605783537049
    398 7.94;-0.990139722264976;-3.27736002887594;8.18994240367322
    399 7.96;-1.05009296446888;-3.12094927543182;8.49756608643907
    400 7.98;-1.10706392640808;-2.95918633661024;8.76164573756548
    401 8;-1.16357786344555;-2.78403685328743;8.9948868296532
    402 8.02;-1.21920520221869;-2.59588601866612;9.19718017763866
    403 8.04;-1.27090198167665;-2.40397211268109;9.35971147117945
    404 8.06;-1.31859821174229;-2.20906527632343;9.48751409620961
    405 8.08;-1.35738057699339;-2.0343347471237;9.57523217493259
    406 8.1;-1.37332271428841;-1.95771610412609;9.60710105038916
    407 8.12;-1.4104125629526;-1.76520602721252;9.67206428616991
    408 8.14;-1.4499230356294;-1.53277292779033;9.72685625940042
    409 8.16;-1.4838507718095;-1.29927783614262;9.76179902692807
    410 8.18;-1.51292883353949;-1.05728535744333;9.78270296316467
    411 8.2;-1.533318647446;-0.848793996035762;9.79265523616
    412 8.22;-1.54019537449497;-0.765341687186001;9.79494872754005
    413 8.24;-1.55418662770609;-0.556655447101937;9.79840022326279
    414 8.26;-1.56521417576462;-0.306174529076567;9.79977228812377
    415 8.28;-1.56958047510386;-0.0946173142365923;9.79999074284266
    416 8.3;-1.5700337525467;-0.00830708618768208;9.79999513704328
    417 8.32;-1.56774611410411;0.20747070459582;9.79991759978462
    418 8.34;-1.558843565918;0.466397421523056;9.79911393460662
    419 8.36;-1.54310031614906;0.725272636425475;9.79579192186468
    420 8.38;-1.525259647528;0.937293847163265;9.78917347998032
    421 8.4;-1.51700059637523;1.01989899719128;9.78515531711916
    422 8.42;-1.49321794149055;1.22619375019385;9.76934736064393
    423 8.44;-1.45904366507447;1.4731723685817;9.73717546656711
    424 8.46;-1.42588355557374;1.67821298566679;9.69524139905291
    425 8.48;-1.41137411875719;1.75996458733858;9.67368943200146
    426 8.5;-1.37107685950912;1.96759169986954;9.60200466267816
    427 8.52;-1.31622105358145;2.21775698804078;9.48014284630741
    428 8.54;-1.25485501138247;2.46411885448551;9.31008427574898
    429 8.56;-1.19891710736614;2.66558418131268;9.12504630920641
    430 8.58;-1.17527726205264;2.74497741900718;9.03833789912335
    431 8.6;-1.11599269062287;2.93140092002248;8.79821136376673
    432 8.62;-1.04214943640296;3.14130578005973;8.45603219250001
    433 8.64;-0.963310733764466;3.34200197765314;8.03999720556543
    434 8.66;-0.894039065384171;3.50102704763107;7.63394103477262
    435 8.68;-0.865407571538728;3.56223051673206;7.45515880492124
    436 8.7;-0.804032452727364;3.68611555537819;7.05378191222137
    437 8.72;-0.668827229101069;3.91981507029374;6.07296645824394
    438 8.74;-0.598271424815528;4.02280429343102;5.51598285456689
    439 8.76;-0.525976167266099;4.11552399067408;4.91687536192123
    440 8.78;-0.452130541442426;4.19724743965409;4.27847747990478
    441 8.8;-0.376936185493384;4.26730760936469;3.60452857569891
    442 8.82;-0.30060540963698;4.32511479314089;2.89962388080311
    443 8.84;-0.227085837857009;4.3686091052336;2.20500477191543
    444 8.86;-0.085820922389234;4.41763975385177;0.83948401169952
    445 8.88;-0.0147750332151617;4.42554964101775;0.144698549433588
    446 8.9;0.054233295748742;4.42269507802684;-0.530928567233345
    447 8.92;0.187580559810215;4.3869590331437;-1.82652188806418
    448 8.94;0.253701273475682;4.35453620216147;-2.45835284102587
    449 8.96;0.319179430982771;4.31273583201735;-3.07348996099146
    450 8.98;0.383876171771135;4.2618496977971;-3.66837249104689
    451 9;0.510635324907487;4.13401781858409;-4.78724020732097
    452 9.02;0.573832851544473;4.05591151435875;-5.31725396346669
    453 9.04;0.637150524161359;3.96793902653216;-5.82723545524693
    454 9.06;0.759316445850976;3.76920509455678;-6.74358911605631
    455 9.08;0.82094201632015;3.65340057646009;-7.16787940810299
    456 9.1;0.883584190294356;3.52472650718313;-7.57198891494234
    457 9.12;0.943921552941303;3.38937694779671;-7.93320328850462
    458 9.14;1.00184400993511;3.24808825581244;-8.25284925274856
    459 9.16;1.06101372875537;3.09075138622035;-8.54987243932154
    460 9.18;1.12093530663366;2.91745241293133;-8.82123858888944
    461 9.2;1.17734985048124;2.7391951028533;-9.04783677628481
    462 9.22;1.23016683582469;2.55682942434104;-9.23393387994063
    463 9.24;1.2818031875963;2.36072804956141;-9.39039825048332
    464 9.26;1.33175950011873;2.15132853340179;-9.51865066177967
    465 9.28;1.37705099869109;1.93945924495592;-9.61442518794748
    466 9.3;1.41763006939953;1.72577583147931;-9.68350326615674
    467 9.32;1.45544188988797;1.49691516049602;-9.73316667115738
    468 9.34;1.48458745404856;1.29390655128874;-9.76254140862079
    469 9.36;1.49502758358275;1.21253734093635;-9.77081824452085
    470 9.38;1.51807448807269;1.00888291527274;-9.78560548395335
    471 9.4;1.54023024105737;0.76420149317809;-9.79497577247812
    472 9.42;1.55672429993529;0.50778449027371;-9.79879338553135
    473 9.44;1.56585526023836;0.284406123672298;-9.79983354634655
    474 9.46;1.56804113969243;0.195048553191847;-9.79991597910086
    475 9.48;1.56983932192713;-0.0283465775283993;-9.79999477578018
    476 9.5;1.56674884848496;-0.251739114290087;-9.79984813989923
    477 9.52;1.56404607226216;-0.341094090811978;-9.79970514009328
    478 9.54;1.5543656342066;-0.553888512423307;-9.79843865135474
    479 9.56;1.53730053150686;-0.80071695060819;-9.79400454655638
    480 9.58;1.5140182214038;-1.04736542357444;-9.78335612693582
    481 9.6;1.48995850854484;-1.25262305385032;-9.76684445504399
    482 9.62;1.47909366492197;-1.3346212042554;-9.75767058690694
    483 9.64;1.44729297758865;-1.54812951974984;-9.72322359434126
    484 9.66;1.40187495485469;-1.81027498736415;-9.65761844740755
    485 9.68;1.35872730519927;-2.02710146867207;-9.57712256614627
    486 9.7;1.34006183456737;-2.11329264745504;-9.53695870739006
    487 9.72;1.2899271218483;-2.32681078621997;-9.41132368016484
    488 9.74;1.22684142847954;-2.56772038010024;-9.22138743773055
    489 9.76;1.16084612622115;-2.79195395669199;-8.98266764044131
    490 9.78;1.1017611320438;-2.97389546934202;-8.73633447242025
    491 9.8;1.07705498884325;-3.04518603929864;-8.62425602772315
    492 9.82;1.01271165058679;-3.21881951826174;-8.30652581322637
    493 9.84;0.938419225465717;-3.40168031233334;-7.90017637356968
    494 9.86;0.86751215657923;-3.55833181475966;-7.46976793120521
    495 9.88;0.793507367681971;-3.70561698932108;-6.98063426222674
    496 9.9;0.716607928200271;-3.84233344121427;-6.4320093951547
    497 9.92;0.63704105152158;-3.96727453440152;-5.82446953779525
    498 9.94;0.555058924389318;-4.07925407565086;-5.16007520501194
    499 9.96;0.470937681925976;-4.17714591259268;-4.44245014885074
    500 9.98;0.384974645644839;-4.2599206005121;-3.67678324945217
     1zero;t;theta;omega1;omega2;v
     20;0;1,5707963267949;0,01;0,01;-9,8
     30;0,0199435824926262;1,5690468030497;-0,185447049133125;-0,185447049133125;-9,79998504754202
     40;0,0398871649852524;1,56339943963919;-0,380891535141874;-0,380891535141874;-9,79973532617267
     50;0,0598307474778785;1,55385440128563;-0,576322380421437;-0,576322380421437;-9,79859415605632
     60;0,0797743299705047;1,54041179254492;-0,771716532668412;-0,771716532668412;-9,79547672995062
     70;0,0997179124631309;1,52307310027964;-0,967017101438835;-0,967017101438835;-9,78884436650659
     80;0,119661494955757;1,50184125538184;-1,16213158625024;-1,16213158625024;-9,77671334708016
     90;0,139605077448383;1,47672137154395;-1,3569275722976;-1,3569275722976;-9,75666893673552
     100;0,159548659941009;1,44772125181193;-1,55122208733304;-1,55122208733304;-9,72587103449737
     110;0,179492242433636;1,41485247577885;-1,74477180993738;-1,74477180993738;-9,68108215592949
     120;0,199435824926262;1,37813339837047;-1,9372600189113;-1,9372600189113;-9,61868127159841
     130;0,219379407418888;1,33758970798398;-2,12829293870799;-2,12829293870799;-9,53471853013898
     140;0,239322989911514;1,29325506293181;-2,31739963904338;-2,31739963904338;-9,42497370300086
     150;0,25926657240414;1,24517245585375;-2,50402702795319;-2,50402702795319;-9,28502337522233
     160;0,279210154896766;1,19339732742832;-2,68752368288354;-2,68752368288354;-9,11033717293435
     170;0,299153737389393;1,13799970995711;-2,86715098939423;-2,86715098939423;-8,89640279292021
     180;0,319097319882019;1,0790655571621;-3,04208343613583;-3,04208343613583;-8,6388648476863
     190;0,339040902374645;1,0166973139284;-3,21141350349488;-3,21141350349488;-8,33367338970963
     200;0,358984484867271;0,951015366586319;-3,37415708451641;-3,37415708451641;-7,97725477954339
     210;0,378928067359897;0,882161993718776;-3,52925042287196;-3,52925042287196;-7,56671752240915
     220;0,398871649852524;0,810301254734915;-3,67559214197408;-3,67559214197408;-7,10004328593096
     230;0,41881523234515;0,735618913760132;-3,81206059487068;-3,81206059487068;-6,57624780091029
     240;0,438758814837776;0,658322828555564;-3,93752131122869;-3,93752131122869;-5,99555167544257
     250;0,458702397330402;0,578643264979682;-4,05084286216007;-4,05084286216007;-5,35950715192898
     260;0,478645979823028;0,496833927274802;-4,15094883358089;-4,15094883358089;-4,6711163390946
     270;0,498589562315654;0,413168384455917;-4,23684007096816;-4,23684007096816;-3,93482708885133
     280;0,518533144808281;0,327938825812;-4,30761893665865;-4,30761893665865;-3,15650473470992
     290;0,538476727300907;0,241455077585663;-4,36251357020268;-4,36251357020268;-2,34333431103887
     300;0,558420309793533;0,154040437902097;-4,40091037811633;-4,40091037811633;-1,50363310997008
     310;0,578363892286159;0,0660280040208068;-4,42237302884608;-4,42237302884608;-0,646604231317743
     320;0,598307474778785;-0,0222414144169002;-4,42665202307565;-4,42665202307565;0,217947921117598
     330;0,618251057271411;-0,110423919652562;-4,41369702407014;-4,41369702407014;1,07995653461839
     340;0,638194639764038;-0,198177497381886;-4,38365833593757;-4,38365833593757;1,9294512319325
     350;0,658138222256664;-0,28516446353376;-4,33688301860941;-4,33688301860941;2,75688913449012
     360;0,67808180474929;-0,37105567189465;-4,27389989319858;-4,27389989319858;3,55347472845092
     370;0,698025387241916;-0,455534898853443;-4,19540171850015;-4,19540171850015;4,31143784125406
     380;0,717968969734542;-0,53830086077377;-4,10222842883795;-4,10222842883795;5,02424219198253
     390;0,737912552227169;-0,619069960228668;-3,99533464439281;-3,99533464439281;5,68672393928641
     400;0,757856134719795;-0,697579002111393;-3,87576072329767;-3,87576072329767;6,29516770820558
     410;0,777799717212421;-0,773586125669082;-3,74461151667173;-3,74461151667173;6,84731050604858
     420;0,797743299705047;-0,846871600225607;-3,60302192089839;-3,60302192089839;7,34227674292541
     430;0,817686882197673;-0,917238551007849;-3,45212721503044;-3,45212721503044;7,78047106005834
     440;0,837630464690299;-0,98451264367355;-3,29304703194559;-3,29304703194559;8,16342442827307
     450;0,857574047182926;-1,04854169997755;-3,12686167021042;-3,12686167021042;8,49362739026181
     460;0,877517629675552;-1,10919404972296;-2,95459065426567;-2,95459065426567;8,77433207755339
     470;0,897461212168178;-1,16635774771315;-2,77718212597971;-2,77718212597971;9,00936990402618
     480;0,917404794660804;-1,21993933188569;-2,59550732528299;-2,59550732528299;9,20296927042301
     490;0,93734837715343;-1,26986200938509;-2,41034760343377;-2,41034760343377;9,35958759485525
     500;0,957291959646057;-1,31606304659747;-2,22239536869887;-2,22239536869887;9,48375948768525
     510;0,977235542138683;-1,35849258567217;-2,03225285366943;-2,03225285366943;9,57997127159705
     520;0,997179124631309;-1,39711229184892;-1,84043621014955;-1,84043621014955;9,65255912267757
     530;1,01712270712394;-1,43189375655303;-1,64737152399099;-1,64737152399099;9,7056137872655
     540;1,03706628961656;-1,46281568182392;-1,45340951432795;-1,45340951432795;9,74292364027497
     550;1,05700987210919;-1,48986261055403;-1,25883214592518;-1,25883214592518;9,76792123126598
     560;1,07695345460181;-1,51302424551721;-1,06385601362064;-1,06385601362064;9,78365093913545
     570;1,09689703709444;-1,53229478520876;-0,868638007362338;-0,868638007362338;9,79274045307523
     580;1,11684061958707;-1,5476706982811;-0,673283923771452;-0,673283923771452;9,79738248726719
     590;1,13678420207969;-1,55914990799523;-0,47786368287163;-0,47786368287163;9,79933617916762
     600;1,15672778457232;-1,56673140862568;-0,282420503383806;-0,282420503383806;9,79991936979167
     610;1,17667136706494;-1,57041483426738;-0,0869749591420389;-0,0869749591420389;9,80000189963644
     620;1,19661494955757;-1,57020050944195;0,108469612379024;0,108469612379024;9,8000012009222
     630;1,2165585320502;-1,56608836766811;0,303915227034472;0,303915227034472;9,79989307694045
     640;1,23650211454282;-1,55807818109789;0,499356898063231;0,499356898063231;9,79920746126029
     650;1,25644569703545;-1,54617039220021;0,694772197752604;0,694772197752604;9,79702976664617
     660;1,27638927952808;-1,53036605270254;0,89011548716739;0,89011548716739;9,79199436162124
     670;1,2963328620207;-1,51066740850311;1,08531336840132;1,08531336840132;9,78229204335016
     680;1,31627644451333;-1,48707810326492;1,28025404575962;1,28025404575962;9,76567806517666
     690;1,33622002700595;-1,45960438813474;1,47477523992634;1,47477523992634;9,73948062128656
     700;1,35616360949858;-1,42825713846445;1,66865387640424;1,66865387640424;9,70061465443659
     710;1,37610719199121;-1,39305239846577;1,86159988405785;1,86159988405785;9,64560405744602
     720;1,39605077448383;-1,35401221451935;2,05325540934256;2,05325540934256;9,57062448112366
     730;1,41599435697646;-1,31116604857323;2,2431834891275;2,2431834891275;9,47155257861399
     740;1,43593793946908;-1,26455284352158;2,43085989572141;2,43085989572141;9,34403388396405
     750;1,45588152196171;-1,21422399829281;2,61567221493767;2,61567221493767;9,18356840040894
     760;1,47582510445434;-1,16024430498314;2,796916918894;2,796916918894;8,98562477807909
     770;1,49576868694696;-1,10269242641955;2,97380462029321;2,97380462029321;8,74576789010056
     780;1,51571226943959;-1,04166294004508;3,1454584686876;3,1454584686876;8,45979945983007
     790;1,53565585193222;-0,977269892187554;3,31091249734307;3,31091249734307;8,12393976393079
     800;1,55559943442484;-0,90964750381721;3,46914089776742;3,46914089776742;7,7350127877663
     810;1,57554301691747;-0,83895083482041;3,6190665363598;3,6190665363598;7,29062795550983
     820;1,59548659941009;-0,765356354584994;3,75956721506314;3,75956721506314;6,78938114602673
     830;1,61543018190272;-0,68906275504062;3,88949859478805;3,88949859478805;6,23097556393208
     840;1,63537376439535;-0,61029297426871;4,00772870750846;4,00772870750846;5,61645277463504
     850;1,65531734688797;-0,529291111340302;4,11316411477359;4,11316411477359;4,94823081021678
     860;1,6752609293806;-0,446322347214577;4,20476998924517;4,20476998924517;4,23018043203236
     870;1,69520451187323;-0,361672768598453;4,28159906006898;4,28159906006898;3,46762472110139
     880;1,71514809436585;-0,275645472471796;4,34282995832595;4,34282995832595;2,66724661051462
     890;1,73509167685848;-0,188557956485271;4,38778804509145;4,38778804509145;1,83693705829656
     900;1,7550352593511;-0,100740433972701;4,41596121544961;4,41596121544961;0,985586855166113
     910;1,77497884184373;-0,0125316352919622;4,42702438545312;4,42702438545312;0,12280678458829
     920;1,79492242433636;0,0757261685117872;4,42084948202438;4,42084948202438;-0,741407214904661
     930;1,81486600682898;0,163689509389155;4,39750880781145;4,39750880781145;-1,59700262254723
     940;1,83480958932161;0,251017975128795;4,35727237884891;4,35727237884891;-2,43422345676706
     950;1,85475317181423;0,337379269763042;4,30059735936996;4,30059735936996;-3,24394899865825
     960;1,87469675430686;0,422451604345737;4,22811717812763;4,22811717812763;-4,01797700455412
     970;1,89464033679949;0,505927027363731;4,14061673690178;4,14061673690178;-4,74926134816718
     980;1,91458391929211;0,587515107850032;4,03900518402649;4,03900518402649;-5,43208581799024
     990;1,93452750178474;0,666944448204908;3,92429601515481;3,92429601515481;-6,0621620606927
     1000;1,95447108427737;0,743964331155479;3,79757309584351;3,79757309584351;-6,63665820869171
     1010;1,97441466676999;0,818346382060471;3,65995822701233;3,65995822701233;-7,15416354409218
     1020;1,99435824926262;0,889884826681939;3,51259206049132;3,51259206049132;-7,61459266911737
     1030;2,01430183175524;0,958396517308212;3,35660589889279;3,35660589889279;-8,01905446471568
     1040;2,03424541424787;1,02372035122887;3,19309405816957;3,19309405816957;-8,36968204284173
     1050;2,0541889967405;1,0857167181985;3,02310098193179;3,02310098193179;-8,6694498666393
     1060;2,07413257923312;1,14426655127828;2,84760744950696;2,84760744950696;-8,92198743458696
     1070;2,09407616172575;1,19926932988168;2,66751518133685;2,66751518133685;-9,13138588640926
     1080;2,11401974421837;1,25064127059122;2,48364025601359;2,48364025601359;-9,30202912203576
     1090;2,133963326711;1,29831421321658;2,29671125922233;2,29671125922233;-9,43843812422737
     1100;2,15390690920363;1,34223417533717;2,10736581016487;2,10736581016487;-9,54513352509501
     1110;2,17385049169625;1,38235878105529;1,916150721995;1,916150721995;-9,62652159075985
     1120;2,19379407418888;1,41865511591861;1,72352978033957;1,72352978033957;-9,68679877747546
     1130;2,21373765668151;1,4510987507784;1,52988558997812;1,52988558997812;-9,72987947484608
     1140;2,23368123917413;1,4796727427445;1,3355255676816;1,3355255676816;-9,7593437438353
     1150;2,25362482166676;1,50436564478848;1,14068481283286;1,14068481283286;-9,7783865010031
     1160;2,27356840415938;1,52516968334646;0,94554203662719;0,94554203662719;-9,7898021043916
     1170;2,29351198665201;1,54207989464764;0,750228188515822;0,750228188515822;-9,79595961770914
     1180;2,31345556914464;1,55509358520833;0,554830355137874;0,554830355137874;-9,79879272014784
     1190;2,33339915163726;1,56421005977388;0,359398843573032;0,359398843573032;-9,79979263731858
     1200;2,35334273412989;1,56942889699159;0,163954519477977;0,163954519477977;-9,79999280763018
     1210;2,37328631662252;1,57074974737055;-0,0314954092216584;-0,0314954092216584;-9,80000032518603
     1220;2,39322989911514;1,56817259419664;-0,22694609948864;-0,22694609948864;-9,79997005454536
     1230;2,41317348160777;1,56169748419756;-0,422390273536018;-0,422390273536018;-9,79959852236228
     1240;2,43311706410039;1,55132478795866;-0,617814236492102;-0,617814236492102;-9,79814224007072
     1250;2,45306064659302;1,53705520578616;-0,81319021301762;-0,81319021301762;-9,79442265705547
     1260;2,47300422908565;1,51888975333575;-1,00845917025729;-1,00845917025729;-9,78680348721918
     1270;2,49294781157827;1,49683161786726;-1,20352180820602;-1,20352180820602;-9,77320817503051
     1280;2,5128913940709;1,47088664737297;-1,39823144441281;-1,39823144441281;-9,75113026009738
     1290;2,53283497656352;1,44106395024299;-1,59238968294819;-1,59238968294819;-9,71764623428609
     1300;2,55277855905615;1,4073768458368;-1,78573996841693;-1,78573996841693;-9,66943417147494
     1310;2,57272214154878;1,36984376592803;-1,97795307837472;-1,97795307837472;-9,60279596409799
     1320;2,5926657240414;1,32849144525337;-2,16862085918423;-2,16862085918423;-9,51371823897117
     1330;2,61260930653403;1,28335616803197;-2,35725250101223;-2,35725250101223;-9,39793298026378
     1340;2,63255288902666;1,23448456311339;-2,54327071180252;-2,54327071180252;-9,25098704974814
     1350;2,65249647151928;1,18193481480722;-2,72601098408161;-2,72601098408161;-9,06834395944525
     1360;2,67244005401191;1,12577895719141;-2,90471632154493;-2,90471632154493;-8,84550991593069
     1370;2,69238363650453;1,06610604993376;-3,07853701034901;-3,07853701034901;-8,57817756535909
     1380;2,71232721899716;1,0030229581285;-3,24654874474857;-3,24654874474857;-8,2623843746758
     1390;2,73227080148979;0,93665568887478;-3,40775325079912;-3,40775325079912;-7,89469130239856
     1400;2,75221438398241;0,867150028243912;-3,56108531559977;-3,56108531559977;-7,47238251206791
     1410;2,77215796647504;0,79467380757961;-3,70543204983294;-3,70543204983294;-6,99362292098812
     1420;2,79210154896766;0,71941804436536;-3,83965844982596;-3,83965844982596;-6,45767994159763
     1430;2,81204513146029;0,641595752087113;-3,96263156751631;-3,96263156751631;-5,86505056377675
     1440;2,83198871395292;0,561441988105795;-4,07323695660407;-4,07323695660407;-5,21759185853112
     1450;2,85193229644554;0,479214862359987;-4,17040585724779;-4,17040585724779;-4,51860951602602
     1460;2,87187587893817;0,395192427566631;-4,25315729394312;-4,25315729394312;-3,77286075501503
     1470;2,8918194614308;0,309670476530455;-4,32062267739268;-4,32062267739268;-2,98649914849015
     1480;2,91176304392342;0,222961408054999;-4,37206097227912;-4,37206097227912;-2,16696263488107
     1490;2,93170662641605;0,135391659063599;-4,40689289940756;-4,40689289940756;-1,32278774841639
     1500;2,95165020890867;0,0472963202619799;-4,42472057258672;-4,42472057258672;-0,463330914358535
     1510;2,9715937914013;-0,0409834759838914;-4,42533775920517;-4,42533775920517;0,401525647498309
     1520;2,99153737389393;-0,129103493917872;-4,4087365335298;-4,4087365335298;1,26170213495571
     1530;3,01148095638655;-0,216722057438139;-4,37510908723174;-4,37510908723174;2,10728872205774
     1540;3,03142453887918;-0,303503533366587;-4,32484171638451;-4,32484171638451;2,92888125712553
     1550;3,05136812137181;-0,389120978551898;-4,25850145012777;-4,25850145012777;3,71787691680388
     1560;3,07131170386443;-0,473260885175299;-4,1768136597436;-4,1768136597436;4,46675256297043
     1570;3,09125528635706;-0,555625901340421;-4,08064295155916;-4,08064295155916;5,16925618130573
     1580;3,11119886884968;-0,635936494495097;-3,97096746679592;-3,97096746679592;5,82052544787463
     1590;3,13114245134231;-0,713933689063713;-3,84884324568172;-3,84884324568172;6,41715545072239
     1600;3,15108603383494;-0,789380443119465;-3,71538096485553;-3,71538096485553;6,95718571135086
     1610;3,17102961632756;-0,862061991701137;-3,5717204292685;-3,5717204292685;7,44002490777418
     1620;3,19097319882019;-0,931786091211774;-3,4189967231279;-3,4189967231279;7,86632715491803
     1630;3,21091678131281;-0,998383102176659;-3,25831939762423;-3,25831939762423;8,2378430939429
     1640;3,23086036380544;-1,06170531511052;-3,09075778791763;-3,09075778791763;8,5572412887178
     1650;3,25080394629807;-1,12162573239075;-2,91731937446983;-2,91731937446983;8,8279139663105
     1660;3,27074752879069;-1,17803626698158;-2,73893604310621;-2,73893604310621;9,0537907255349
     1670;3,29069111128332;-1,23084678109602;-2,55645852149358;-2,55645852149358;9,23916071937908
     1680;3,31063469377595;-1,27998371508546;-2,37065144898663;-2,37065144898663;9,38850976513461
     1690;3,33057827626857;-1,32538777569938;-2,18218661648296;-2,18218661648296;9,50637384098593
     1700;3,3505218587612;-1,36701156913107;-1,99164789379639;-1,99164789379639;9,59721500849146
     1710;3,37046544125382;-1,40481851660164;-1,79953169319968;-1,79953169319968;9,66532134276895
     1720;3,39040902374645;-1,4387816110056;-1,60625218247657;-1,60625218247657;9,71472946292373
     1730;3,41035260623908;-1,46888157147744;-1,41214050766082;-1,41214050766082;9,7491520799366
     1740;3,4302961887317;-1,49510447771464;-1,21746122739402;-1,21746122739402;9,77194173710568
     1750;3,45023977122433;-1,51744072028355;-1,02241925174781;-1,02241925174781;9,78605398186092
     1760;3,47018335371695;-1,53588441170235;-0,82716375448204;-0,82716375448204;9,79402877953138
     1770;3,49012693620958;-1,55043283872748;-0,631794314339891;-0,631794314339891;9,79797182981858
     1780;3,51007051870221;-1,56108443944769;-0,436369633368507;-0,436369633368507;9,79954089634803
     1790;3,53001410119483;-1,5678383628716;-0,240923550528034;-0,240923550528034;9,79995762311595
     1800;3,54995768368746;-1,57069431280915;-0,0454741606536458;-0,0454741606536458;9,80000089291441
     1810;3,56990126618009;-1,56965220183364;0,149972074335834;0,149972074335834;9,79999736787167
     1820;3,58984484867271;-1,56471233977991;0,345415259915786;0,345415259915786;9,79982086947961
     1830;3,60978843116534;-1,55587477103859;0,540850453297164;0,540850453297164;9,79890986693179
     1840;3,62973201365796;-1,54313952033119;0,736254961214171;0,736254961214171;9,79625236621416
     1850;3,64967559615059;-1,5265078741186;0,9315780091426;0,9315780091426;9,79039220297402
     1860;3,66961917864322;-1,50598243738346;1,12673423881625;1,12673423881625;9,77942572162509
     1870;3,68956276113584;-1,48156785597517;1,32159978158019;1,32159978158019;9,76101604266077
     1880;3,70950634362847;-1,45327126966776;1,51600182814738;1,51600182814738;9,73239847869284
     1890;3,7294499261211;-1,42110344153969;1,70970854647064;1,70970854647064;9,690407035154
     1900;3,74939350861372;-1,38508160532594;1,90241627895576;1,90241627895576;9,63148684598596
     1910;3,76933709110635;-1,34523003102695;2,0937453687287;2,0937453687287;9,55174390841014
     1920;3,78928067359897;-1,30158067762334;2,28324019418237;2,28324019418237;9,44700205697914
     1930;3,8092242560916;-1,25417458738702;2,47036335446051;2,47036335446051;9,31286858863049
     1940;3,82916783858423;-1,20306484451527;2,65448014959638;2,65448014959638;9,14482375747332
     1950;3,84911142107685;-1,14831887294082;2,83486845371886;2,83486845371886;8,93834273504116
     1960;3,86905500356948;-1,09001968457687;3,01071827125255;3,01071827125255;8,68903112669767
     1970;3,8889985860621;-1,02826642537104;3,18113682883966;3,18113682883966;8,39277068677054
     1980;3,90894216855473;-0,96317597764384;3,34515263122073;3,34515263122073;8,04588683148074
     1990;3,92888575104736;-0,894886774186029;3,50171336847976;3,50171336847976;7,64535035207071
     2000;3,94882933353998;-0,823558875037932;3,64972599005681;3,64972599005681;7,18897135823831
     2010;3,96877291603261;-0,749373980908084;3,78807238052989;3,78807238052989;6,67556354302181
     2020;3,98871649852524;-0,672535890436369;3,91561646092792;3,91561646092792;6,10512290856295
     2030;4,00866008101786;-0,593270702286147;4,03122219871822;4,03122219871822;5,47894143206761
     2040;4,02860366351049;-0,511828316753514;4,13380317039863;4,13380317039863;4,79976493852162
     2050;4,04854724600311;-0,428478564165845;4,22234479875042;4,22234479875042;4,07177508861379
     2060;4,06849082849574;-0,343510345171996;4,29592825787755;4,29592825787755;3,30058496457604
     2070;4,08843441098837;-0,257230712815345;4,35375590064397;4,35375590064397;2,49315290093179
     2080;4,10837799348099;-0,169960634403822;4,39518476424182;4,39518476424182;1,65760646369582
     2090;4,12832157597362;-0,0820315636242179;4,41974549392852;4,41974549392852;0,803007815900605
     2100;4,14826515846624;0,00621662029614052;4,4271530092507;4,4271530092507;-0,0609225534061739
     2110;4,16820874095887;0,0944402884997655;4,417320549346;4,417320549346;-0,92413962229459
     2120;4,1881523234515;0,182296959512841;4,39036245280947;4,39036245280947;-1,77663121906856
     2130;4,20809590594412;0,269447736391079;4,34659096174281;4,34659096174281;-2,60875107688376
     2140;4,22803948843675;0,355561622424415;4,28650265444723;4,28650265444723;-3,41154574604111
     2150;4,24798307092938;0,44031994665717;4,21076193271362;4,21076193271362;-4,1770424184917
     2160;4,267926653422;0,523418419691438;4,12018465729623;4,12018465729623;-4,89846824773924
     2170;4,28787023591463;0,604570022255429;4,01570613186812;4,01570613186812;-5,5704019103971
     2180;4,30781381840725;0,683507822757144;3,89835287276184;3,89835287276184;-6,18886318968148
     2190;4,32775740089988;0,759985980759502;3,76922118691795;3,76922118691795;-6,7513293005029
     2200;4,34770098339251;0,833780653570764;3,62944215983983;3,62944215983983;-7,25667896305046
     2210;4,36764456588513;0,90469085858377;3,48015213122221;3,48015213122221;-7,7050946834099
     2220;4,38758814837776;0,972538220156516;3,32247612222616;3,32247612222616;-8,09791528275027
     2230;4,40753173087039;1,03716659598825;3,15750313527064;3,15750313527064;-8,43747108955305
     2240;4,42747531336301;1,09844059751967;2,9862639722654;2,9862639722654;-8,72688960374912
     2250;4,44741889585564;1,15624485068956;2,80972072788164;2,80972072788164;-8,96991127329798
     2260;4,46736247834826;1,21048276709359;2,62875970827561;2,62875970827561;-9,17070594391132
     2270;4,48730606084089;1,26107462474463;2,44417847275553;2,44417847275553;-9,33370059881514
     2280;4,50724964333352;1,30795511215594;2,25668580874435;2,25668580874435;-9,46342545879389
     2290;4,52719322582614;1,35107220029647;2,0669002678316;2,0669002678316;-9,56438455265968
     2300;4,54713680831877;1,39038575010491;1,87535343099227;1,87535343099227;-9,64094820700713
     2310;4,56708039081139;1,42586572245563;1,68248643521928;1,68248643521928;-9,69725809117479
     2320;4,58702397330402;1,4574894352312;1,48866439996506;1,48866439996506;-9,73716094591429
     2330;4,60696755579665;1,48524040165946;1,29418153095711;1,29418153095711;-9,7641555999542
     2340;4,62691113828927;1,50910765938464;1,09926512983653;1,09926512983653;-9,78135900566978
     2350;4,6468547207819;1,529084801253;0,904081675145117;0,904081675145117;-9,7914775945131
     2360;4,66679830327453;1,54516781232793;0,708744941162942;0,708744941162942;-9,79678484617347
     2370;4,68674188576715;1,55735435418165;0,513332362666462;0,513332362666462;-9,79911716135007
     2380;4,70668546825978;1,56564322696088;0,317892140693689;0,317892140693689;-9,79987029418788
     2390;4,7266290507524;1,57003407163185;0,122447588841142;0,122447588841142;-9,79999775802158
     2400;4,74657263324503;1,5705272451712;-0,0729969002461332;-0,0729969002461332;-9,80000244009992
     2410;4,76651621573766;1,56712250572224;-0,268443607393904;-0,268443607393904;-9,79993698457816
     2420;4,78645979823028;1,55981972148574;-0,463888004483;-0,463888004483;-9,79941082038897
     2430;4,80640338072291;1,54861927678002;-0,659310164488569;-0,659310164488569;-9,79759026564098
     2440;4,82634696321553;1,53352206223049;-0,854669854141864;-0,854669854141864;-9,79319506345058
     2450;4,84629054570816;1,51453004861505;-1,04990101089312;-1,04990101089312;-9,78449407910189
     2460;4,86623412820079;1,49164637644938;-1,24489973745705;-1,24489973745705;-9,76932086957326
     2470;4,88617771069341;1,46487688507396;-1,43951233961598;-1,43951233961598;-9,74507883302667
     2480;4,90612129318604;1,43423170441814;-1,63352655795745;-1,63352655795745;-9,7087580623959
     2490;4,92606487567867;1,39972577048733;-1,82666546415337;-1,82666546415337;-9,65695207973225
     2500;4,94600845817129;1,36137979642926;-2,01858555199379;-2,01858555199379;-9,58589533098267
     2510;4,96595204066392;1,31922165001178;-2,20886360833538;-2,20886360833538;-9,49151237359397
     2520;4,98589562315654;1,27328856151968;-2,39699128915707;-2,39699128915707;-9,36948634355796
     2530;5,00583920564917;1,22362974141155;-2,58237297640178;-2,58237297640178;-9,21533741281631
     2540;5,0257827881418;1,17030742429546;-2,76432128730044;-2,76432128730044;-9,02452963036087
     2550;5,04572637063442;1,11339733780495;-2,94206297437895;-2,94206297437895;-8,79259952128893
     2560;5,06566995312705;1,05299100869669;-3,11473539820936;-3,11473539820936;-8,51529357379876
     2570;5,08561353561968;0,989199092289005;-3,28138742151848;-3,28138742151848;-8,18874523492211
     2580;5,1055571181123;0,922152019255036;-3,44100603283934;-3,44100603283934;-7,80965266746164
     2590;5,12550070060493;0,852000939329382;-3,59252227071791;-3,59252227071791;-7,37546760597756
     2600;5,14544428309755;0,778918216979129;-3,73481809679224;-3,73481809679224;-6,88459694082763
     2610;5,16538786559018;0,703098620300167;-3,86675140879479;-3,86675140879479;-6,33652686343781
     2620;5,18533144808281;0,624760851526798;-3,98718741186148;-3,98718741186148;-5,73205174975334
     2630;5,20527503057543;0,544144998838482;-4,0950244671609;-4,0950244671609;-5,07333020593178
     2640;5,22521861306806;0,461512509888872;-4,18921341992907;-4,18921341992907;-4,36396815523371
     2650;5,24516219556068;0,377146090446372;-4,26878830857982;-4,26878830857982;-3,60903194706974
     2660;5,26510577805331;0,291345712285406;-4,33290478446393;-4,33290478446393;-2,81496532968236
     2670;5,28504936054594;0,20442638657798;-4,38085961806824;-4,38085961806824;-1,98945352888702
     2680;5,30499294303856;0,116716501378334;-4,41210855831565;-4,41210855831565;-1,14122617770138
     2690;5,32493652553119;0,0285534791900577;-4,42629197046355;-4,42629197046355;-0,279786089738933
     2700;5,34488010802382;-0,0597209580124391;-4,42324598096949;-4,42324598096949;0,584917364630208
     2710;5,36482369051644;-0,14776308492906;-4,40300639534173;-4,40300639534173;1,44281408260851
     2720;5,38476727300907;-0,235231605299347;-4,36580753371451;-4,36580753371451;2,28406852663826
     2730;5,40471085550169;-0,321792647755943;-4,31207345845031;-4,31207345845031;3,09942290003969
     2740;5,42465443799432;-0,407122154068937;-4,24240775283864;-4,24240775283864;3,88048887302393
     2750;5,44459802048695;-0,490909388620038;-4,15756905614675;-4,15756905614675;4,61999500056016
     2760;5,46454160297957;-0,572860677049547;-4,05844548566565;-4,05844548566565;5,31197413038582
     2770;5,4844851854722;-0,652700977455093;-3,94603481974117;-3,94603481974117;5,95187584367199
     2780;5,50442876796482;-0,730175662729514;-3,82140981730493;-3,82140981730493;6,53660424859814
     2790;5,52437235045745;-0,805052312864283;-3,68568674934808;-3,68568674934808;7,06449563771016
     2800;5,54431593295008;-0,877121033164002;-3,54000589510547;-3,54000589510547;7,53523308938372
     2810;5,5642595154427;-0,946194549329833;-3,38550196269311;-3,38550196269311;7,94972072409527
     2820;5,58420309793533;-1,01210780398229;-3,22327636513685;-3,22327636513685;8,30991937007036
     2830;5,60414668042796;-1,07471739239711;-3,05438455508509;-3,05438455508509;8,61866431952135
     2840;5,62409026292058;-1,13390071009441;-2,87982013997538;-2,87982013997538;8,87948136654627
     2850;5,64403384541321;-1,18955385966581;-2,70049949484097;-2,70049949484097;9,0963898081666
     2860;5,66397742790583;-1,24159008521952;-2,51725425296301;-2,51725425296301;9,27373277988581
     2870;5,68392101039846;-1,28993861853248;-2,33082975411967;-2,33082975411967;9,41601755208241
     2880;5,70386459289109;-1,3345431914889;-2,14187945739732;-2,14187945739732;9,52777425995542
     2890;5,72380817538371;-1,3753593048116;-1,95096662728243;-1,95096662728243;9,61343685080711
     2900;5,74375175787634;-1,4123523075559;-1,75857029630946;-1,75857029630946;9,6772450995179
     2910;5,76369534036897;-1,44549643699345;-1,56508736403406;-1,56508736403406;9,72317024233231
     2920;5,78363892286159;-1,47477367721003;-1,37083797508127;-1,37083797508127;9,75485663296416
     2930;5,80358250535422;-1,50017165372866;-1,17606870977;-1,17606870977;9,77557231011543
     2940;5,82352608784684;-1,52168186720266;-0,980969398879283;-0,980969398879283;9,78818487641329
     2950;5,84346967033947;-1,53929884259288;-0,785679613000745;-0,785679613000745;9,79513967643439
     2960;5,8634132528321;-1,55301966526812;-0,590293363337015;-0,590293363337015;9,7984515812814
     2970;5,88335683532472;-1,56284346760117;-0,394865852574143;-0,394865852574143;9,79969392896296
     2980;5,90330041781735;-1,56876963257067;-0,199421365678639;-0,199421365678639;9,79998360248647
     2990;5,92324400030997;-1,57079783538425;-0,0039710216975397;-0,0039710216975397;9,80000058221546
     3000;5,9431875828026;-1,56892803918765;0,191478972361714;0,191478972361714;9,7999842660578
     3010;5,96313116529523;-1,56316026823055;0,386923160787759;0,386923160787759;9,79971905701764
     3020;5,98307474778785;-1,55349491048428;0,582352065076896;0,582352065076896;9,79853481654425
     3030;6,00301833028048;-1,53993240612326;0,777741131261749;0,777741131261749;9,79533302731553
     3040;6,02296191277311;-1,52247362898176;0,9730366035847;0,9730366035847;9,78856092846661
     3050;6,04290549526573;-1,50112155397603;1,16814616324223;1,16814616324223;9,77622458702236
     3060;6,06284907775836;-1,47588146717731;1,36293185714845;1,36293185714845;9,75589222710544
     3070;6,08279266025098;-1,44676177129075;1,5572069705146;1,5572069705146;9,72471419841751
     3080;6,10273624274361;-1,41377473469416;1,75072575801346;1,75072575801346;9,67943487333841
     3090;6,12267982523624;-1,37693749915713;1,94317415715432;1,94317415715432;9,61643004186558
     3100;6,14262340772886;-1,33627572273033;2,13415721794526;2,13415721794526;9,53173525554007
     3110;6,16256699022149;-1,29182409461495;2,32319772617677;2,32319772617677;9,42112180394994
     3120;6,18251057271411;-1,24362691482868;2,50973589271086;2,50973589271086;9,28016705675915
     3130;6,20245415520674;-1,19173954143484;2,69312577829161;2,69312577829161;9,10433782783237
     3140;6,22239773769937;-1,13623172404338;2,8726228444148;2,8726228444148;8,88912222138367
     3150;6,24234132019199;-1,07718960154951;3,04739550359325;3,04739550359325;8,63016921689047
     3160;6,26228490268462;-1,01471681770041;3,21653404969485;3,21653404969485;8,32344362226622
     3170;6,28222848517725;-0,948935527511343;3,37905203386464;3,37905203386464;7,96539892282643
     3180;6,30217206766987;-0,879987340116371;3,53389427996596;3,53389427996596;7,55316197287075
     3190;6,3221156501625;-0,808036706731556;3,67995388407845;3,67995388407845;7,08473443054018
     3200;6,34205923265512;-0,733270279013287;3,81610088070034;3,81610088070034;6,55916930269096
     3210;6,36200281514775;-0,655896914807349;3,94120085530654;3,94120085530654;5,97672887870586
     3220;6,38194639764038;-0,576147615248723;4,05413197363182;4,05413197363182;5,33901552161405
     3230;6,401889980133;-0,494276791186173;4,15381347107236;4,15381347107236;4,64907223323432
     3240;6,42183356262563;-0,410558803845175;4,23924876494843;4,23924876494843;3,91139317508146
     3250;6,44177714511826;-0,325286211963086;4,3095477604455;4,3095477604455;3,13188411737334
     3260;6,46172072761088;-0,238768709300079;4,3639421626912;4,3639421626912;2,31776257973424
     3270;6,48166431010351;-0,151330607900371;4,40182221689817;4,40182221689817;1,47738533811732
     3280;6,50160789259613;-0,0633054974775656;4,42275648573376;4,42275648573376;0,619979258265363
     3290;6,52155147508876;0,0249663254534839;4,42650322661712;4,42650322661712;-0,244644591950205
     3300;6,54149505758139;0,113140722603872;4,41301789875755;4,41301789875755;-1,10641478800141
     3310;6,56143864007401;0,200875350164227;4,38245673647908;4,38245673647908;-1,95536553576015
     3320;6,58138222256664;0,287833267784946;4,33517183023242;4,33517183023242;-2,78197779927494
     3330;6,60132580505926;0,373685551576128;4,27169875572872;4,27169875572872;-3,57748084348508
     3340;6,62126938755189;0,458116076338752;4,19273531059861;4,19273531059861;-4,33413943576192
     3350;6,64121297004452;0,540824427416839;4,09912295491805;4,09912295491805;-5,04546032775846
     3360;6,66115655253714;0,621527581199664;3,9918217858449;3,9918217858449;-5,70632174161998
     3370;6,68110013502977;0,699962731424555;3,87187514086915;3,87187514086915;-6,31305305714419
     3380;6,7010437175224;0,775888842303276;3,7403860087769;3,7403860087769;-6,86343632590761
     3390;6,72098730001502;0,849087035298158;3,59849162390244;3,59849162390244;-7,35663937321477
     3400;6,74093088250765;0,919360951449536;3,44732913560261;3,44732913560261;-7,79310017722252
     3410;6,76087446500027;0,986536923947833;3,28801402760095;3,28801402760095;-8,17438360956579
     3420;6,7808180474929;1,05046335680134;3,12162499869696;3,12162499869696;-8,50300603011836
     3430;6,80076162998553;1,11100958038923;2,94918170687811;2,94918170687811;-8,78224197881975
     3440;6,82070521247815;1,16806411056979;2,77163000921525;2,77163000921525;-9,01593710021808
     3450;6,84064879497078;1,22153370918695;2,58983601687837;2,58983601687837;-9,20832807159383
     3460;6,86059237746341;1,27134202415026;2,40458061972087;2,40458061972087;-9,36387670051586
     3470;6,88053595995603;1,31742728468233;2,21655210220175;2,21655210220175;-9,48711943620088
     3480;6,90047954244866;1,35973995393189;2,02635045714988;2,02635045714988;-9,58253958564335
     3490;6,92042312494128;1,398241642094;1,83448764055859;1,83448764055859;-9,65446352521555
     3500;6,94036670743391;1,43290382108216;1,6413925466619;1,6413925466619;-9,70697918558225
     3510;6,96031028992654;1,46370598465749;1,44740982604403;1,44740982604403;-9,74386128824863
     3520;6,98025387241916;1,49063321775655;1,25281642286956;1,25281642286956;-9,76853074464691
     3530;7,00019745491179;1,51367514450518;1,05782805252406;1,05782805252406;-9,78401669253081
     3540;7,02014103740441;1,53282533928422;0,862603165774452;0,862603165774452;-9,79293640607935
     3550;7,04008461989704;1,54808072323367;0,667248996429865;0,667248996429865;-9,79747505875991
     3560;7,06002820238967;1,55943949115564;0,471830435635617;0,471830435635617;-9,79937123441043
     3570;7,07997178488229;1,56690066400622;0,276386099326949;0,276386099326949;-9,7999264499325
     3580;7,09991536737492;1,57046387240651;0,0809370791221344;0,0809370791221344;-9,80000000030576
     3590;7,11985894986755;1,57012901293442;-0,114508976315157;-0,114508976315157;-9,80000119439152
     3600;7,13980253236017;1,56589641240733;-0,309952741036882;-0,309952741036882;-9,79988488659955
     3610;7,1597461148528;1,55776605148918;-0,505391057724942;-0,505391057724942;-9,79916933600111
     3620;7,17968969734542;1,54573791251291;-0,70080451311596;-0,70080451311596;-9,79692333501126
     3630;7,19963327983805;1,52981311824242;-0,896147346650978;-0,896147346650978;-9,79177238320445
     3640;7,21957686233068;1,50999396964483;-1,09134108991651;-1,09134108991651;-9,78189321107067
     3650;7,2395204448233;1,48628466927901;-1,28627041963524;-1,28627041963524;-9,7650268515111
     3660;7,25946402731593;1,45869169863057;-1,48077238437557;-1,48077238437557;-9,73848437805265
     3670;7,27940760980855;1,42722509138719;-1,67462612176348;-1,67462612176348;-9,69917178503561
     3680;7,29935119230118;1,39190101154511;-1,86754088141798;-1,86754088141798;-9,64360272497778
     3690;7,31929477479381;1,35274234672352;-2,05915095691956;-2,05915095691956;-9,5679405283723
     3700;7,33923835728643;1,30977938840431;-2,24901605738565;-2,24901605738565;-9,46805488280922
     3710;7,35918193977906;1,26305130615687;-2,43661392261328;-2,43661392261328;-9,33958677386857
     3720;7,37912552227169;1,21260888104407;-2,6213267957865;-2,6213267957865;-9,17803148767952
     3730;7,39906910476431;1,15851700802513;-2,80244917303344;-2,80244917303344;-8,9788558120707
     3740;7,41901268725694;1,10085581893745;-2,9791865602815;-2,9791865602815;-8,73763116232262
     3750;7,43895626974956;1,03972117384633;-3,15066125635564;-3,15066125635564;-8,45017681206671
     3760;7,45889985224219;0,975226538796637;-3,31591433958697;-3,31591433958697;-8,11272409578689
     3770;7,47884343473482;0,907506540234131;-3,47390564493208;-3,47390564493208;-7,72211213269653
     3780;7,49878701722744;0,836717256273758;-3,62355141015058;-3,62355141015058;-7,27598483544633
     3790;7,51873059972007;0,763036336712333;-3,76373766543833;-3,76373766543833;-6,77295930117399
     3800;7,5386741822127;0,686663507690866;-3,89332703198177;-3,89332703198177;-6,21281249456693
     3810;7,55861776470532;0,607820754301709;-4,01118018943448;-4,01118018943448;-5,59658088405679
     3820;7,57856134719795;0,526754081636761;-4,11620160599847;-4,11620160599847;-4,92675326261948
     3830;7,59850492969057;0,443729524663356;-4,20736235236491;-4,20736235236491;-4,20724481928177
     3840;7,6184485121832;0,359032633278536;-4,28372307978152;-4,28372307978152;-3,44341330660252
     3850;7,63839209467583;0,27296762075608;-4,34446123782989;-4,34446123782989;-2,64198539081662
     3860;7,65833567716845;0,185852986034048;-4,3889054672982;-4,3889054672982;-1,81089140944417
     3870;7,67827925966108;0,0980184272438592;-4,41655375802816;-4,41655375802816;-0,959042899666818
     3880;7,6982228421537;0,00980279218148503;-4,42708574270491;-4,42708574270491;-0,0960657435949368
     3890;7,71816642464633;-0,0784507191944003;-4,42037833969458;-4,42037833969458;0,768028571686509
     3900;7,73811000713896;-0,166399289912357;-4,39650993279207;-4,39650993279207;1,6231975883764
     3910;7,75805358963158;-0,253702913146656;-4,35575756073844;-4,35575756073844;2,45970216692862
     3920;7,77799717212421;-0,340028876111144;-4,2985848972199;-4,2985848972199;3,26844020765913
     3930;7,79794075461684;-0,425056173131087;-4,22562741149855;-4,22562741149855;4,04124414210151
     3940;7,81788433710946;-0,508477580823387;-4,1376760760148;-4,1376760760148;4,77110958933077
     3950;7,83782791960209;-0,590002737086616;-4,03564580376888;-4,03564580376888;5,45236031375476
     3960;7,85777150209471;-0,669361035443295;-3,92054841708188;-3,92054841708188;6,08075213828916
     3970;7,87771508458734;-0,746302683374623;-3,79347081375939;-3,79347081375939;6,65350112010887
     3980;7,89765866707997;-0,820599740414308;-3,65553922103001;-3,65553922103001;7,1692366751733
     3990;7,91760224957259;-0,892047116238277;-3,50789027659486;-3,50789027659486;7,62791426881461
     4000;7,93754583206522;-0,960462382806525;-3,35165379044281;-3,35165379044281;8,03067534650222
     4010;7,95748941455784;-1,02568539327401;-3,18792678153774;-3,18792678153774;8,37968374910452
     4020;7,97743299705047;-1,08757701210144;-3,01775077310839;-3,01775077310839;8,677936342339
     4030;7,9973765795431;-1,1460183888053;-2,8421016592824;-2,8421016592824;8,92907646954848
     4040;8,01732016203572;-1,2009097661194;-2,66188046491204;-2,66188046491204;9,13721001381796
     4050;8,03726374452835;-1,25216840903964;-2,4779008792983;-2,4779008792983;9,30672825056924
     4060;8,05720732702098;-1,29972637941309;-2,29088791914675;-2,29088791914675;9,4421526318809
     4070;8,0771509095136;-1,34352943045445;-2,10147669715875;-2,10147669715875;9,54800139139223
     4080;8,09709449200623;-1,3835355911746;-1,91021394739526;-1,91021394739526;9,62867555385067
     4090;8,11703807449885;-1,41971307391068;-1,71755651175555;-1,71755651175555;9,68836565481858
     4100;8,13698165699148;-1,45203775843691;-1,52388411245174;-1,52388411245174;9,73097571593952
     4110;8,15692523948411;-1,48049211104394;-1,32950330989659;-1,32950330989659;9,76007018088681
     4120;8,17686882197673;-1,50506451326863;-1,13465229425417;-1,13465229425417;9,7788377303846
     4130;8,19681240446936;-1,52574787374239;-0,939506709984877;-0,939506709984877;9,79005785087977
     4140;8,21675598696199;-1,54253765098382;-0,744189748225312;-0,744189748225312;9,79608904042777
     4150;8,23669956945461;-1,55543120556107;-0,54878659425532;-0,54878659425532;9,79884636745479
     4160;8,25664315194724;-1,56442714337347;-0,353350283963924;-0,353350283963924;9,79980342832518
     4170;8,27658673443986;-1,56952517341788;-0,157906749353085;-0,157906749353085;9,79999253684887
     4180;8,29653031693249;-1,57072555826115;0,0375377920383803;0,0375377920383803;9,80000102175597
     4190;8,31647389942512;-1,56802794820193;0,232985602072396;0,232985602072396;9,79996573584126
     4200;8,33641748191774;-1,56143231125894;0,428432179642543;0,428432179642543;9,79957331235669
     4210;8,35636106441037;-1,55093895846346;0,623859860497899;0,623859860497899;9,79806848756347
     4220;8,37630464690299;-1,53654866311257;0,81923356801989;0,81923356801989;9,79425427937046
     4230;8,39624822939562;-1,51826311567255;1,01449458227657;1,01449458227657;9,78648275557133
     4240;8,41619181188825;-1,49608499529014;1,20954639962782;1,20954639962782;9,77266478671769
     4250;8,43613539438087;-1,47001977533069;1,40424361808733;1,40424361808733;9,75027936208166
     4260;8,4560789768735;-1,44007688032886;1,59838418640043;1,59838418640043;9,7163900444463
     4270;8,47602255936613;-1,40627018030293;1,79170439906792;1,79170439906792;9,66766255048006
     4280;8,49596614185875;-1,36861908737291;1,98387495306628;1,98387495306628;9,60039309843448
     4290;8,51590972435138;-1,32714988658537;2,17448639023803;2,17448639023803;9,51055553248095
     4300;8,535853306844;-1,28189822769082;2,36304580346867;2,36304580346867;9,3938720894543
     4310;8,55579688933663;-1,23291124783379;2,54897375857683;2,54897375857683;9,24588738697082
     4320;8,57574047182926;-1,18024857019942;2,73159980192516;2,73159980192516;9,06206581806014
     4330;8,59568405432188;-1,1239830444269;2,91016681184829;2,91016681184829;8,83791914242962
     4340;8,61562763681451;-1,06420323529821;3,08382632635769;3,08382632635769;8,56914400312871
     4350;8,63557121930713;-1,00101648321721;3,2516424970342;3,2516424970342;8,25179348971344
     4360;8,65551480179976;-0,934549503485754;3,41261535676922;3,41261535676922;7,88244811853976
     4370;8,67545838429239;-0,864949507018781;3,5656846789317;3,5656846789317;7,45840684743358
     4380;8,69540196678501;-0,792384749971534;3,70973748852302;3,70973748852302;6,97789096885036
     4390;8,71534554927764;-0,717046151963945;3,84363451069439;3,84363451069439;6,44017771064579
     4400;8,73528913177027;-0,639148133550786;3,96623912639558;3,96623912639558;5,84581694112146
     4410;8,75523271426289;-0,558926753748951;4,07644229891872;4,07644229891872;5,19671039566092
     4420;8,77517629675552;-0,476639706183332;4,17318158234209;4,17318158234209;4,49620025460207
     4430;8,79511987924814;-0,392566218720575;4,25547334856993;4,25547334856993;3,74909343602655
     4440;8,81506346174077;-0,307003069216012;4,32245102294416;4,32245102294416;2,96158967298188
     4450;8,8350070442334;-0,220262682959518;4,37338355472834;4,37338355472834;2,14116183012344
     4460;8,85495062672602;-0,132671492364351;4,40769518863249;4,40769518863249;1,29636950977451
     4470;8,87489420921865;-0,0445655021712049;4,4249922128012;4,4249922128012;0,436597398569716
     4480;8,89483779171128;0,0437142359971141;4,42507513953;4,42507513953;-0,428262918570996
     4490;8,9147813742039;0,131823890339707;4,40794315891083;4,40794315891083;-1,28813550449033
     4500;8,93472495669653;0,219421401396917;4,3737947365956;4,3737947365956;-2,13311635332339
     4510;8,95466853918915;0,306171438423063;4,32302038140846;4,32302038140846;-2,95382072798846
     4520;8,97461212168178;0,391747793445511;4,256193058403;4,256193058403;-3,74168211339176
     4530;8,99455570417441;0,47583704027138;4,1740444703194;4,1740444703194;-4,48921002345445
     4540;9,01449928666703;0,558142339230613;4,07744081875259;4,07744081875259;-5,19019058002695
     4550;9,03444286915966;0,638385064199779;3,96736309656885;3,96736309656885;-5,83981215595039
     4560;9,05438645165228;0,716306723058931;3,84487211508135;3,84487211508135;-6,43471417941025
     4570;9,07433003414491;0,791670869541382;3,71107771937418;3,71107771937418;-6,97297739995628
     4580;9,09427361663754;0,864263498500497;3,56711885813089;3,56711885813089;-7,45404946057036
     4590;9,11421719913016;0,933893203309122;3,41413292060192;3,41413292060192;-7,87862431647319
     4600;9,13416078162279;1,00039094491095;3,25322789671553;3,25322789671553;-8,24848430880541
     4610;9,15410436411542;1,06360948588585;3,08546959818296;3,08546959818296;-8,56631945968412
     4620;9,17404794660804;1,12342262070137;2,91186413702347;2,91186413702347;-8,8355454889507
     4630;9,19399152910067;1,17972304834448;2,73334221594471;2,73334221594471;-9,06010435351842
     4640;9,21393511159329;1,23242099118087;2,55075092535204;2,55075092535204;-9,24429316034744
     4650;9,23387869408592;1,28144300641045;2,36485218636939;2,36485218636939;-9,39260073294789
     4660;9,25382227657855;1,32673044873543;2,17631554289895;2,17631554289895;-9,509562890605
     4670;9,27376585907117;1,36823666054141;1,98572070800505;1,98572070800505;-9,59963831950114
     4680;9,2937094415638;1,40592522606377;1,7935619733684;1,7935619733684;-9,66710771293965
     4690;9,31365302405642;1,4397690009721;1,60025073800899;1,60025073800899;-9,71599667363263
     4700;9,33359660654905;1,46974882125642;1,40611986981374;1,40611986981374;-9,75001118041022
     4710;9,35354018904168;1,49585132505678;1,21142836201131;1,21142836201131;-9,77249278487141
     4720;9,3734837715343;1,51806726280315;1,01637711965283;1,01637711965283;-9,78638234242119
     4730;9,39342735402693;1,53639063890387;0,821114484497936;0,821114484497936;-9,79420170227482
     4740;9,41337093651956;1,55081830102532;0,625741480233533;0,625741480233533;-9,79804474011998
     4750;9,43331451901218;1,56134913352709;0,430318609158973;0,430318609158973;-9,79956470423168
     4760;9,45325810150481;1,56798235990769;0,234874639289512;0,234874639289512;-9,79996521562743
     4770;9,47320168399743;1,57071765069177;0,0394242514535842;0,0394242514535842;-9,80000222235698
     4780;9,49314526649006;1,56955493112919;-0,156025088556452;-0,156025088556452;-9,79999246898932
     4790;9,51308884898269;1,56449423469199;-0,351469260651106;-0,351469260651106;-9,79980867467083
     4800;9,53303243147531;1,55553595170353;-0,54690232094141;-0,54690232094141;-9,79886145567213
     4810;9,55297601396794;1,54268027195267;-0,74230283609705;-0,74230283609705;-9,79612859923217
     4820;9,57291959646057;1,5259280302493;-0,937621650715406;-0,937621650715406;-9,79013726892007
     4830;9,59286317895319;1,50528192942292;-1,13277323886209;-1,13277323886209;-9,77897690703868
     4840;9,61280676144582;1,48074672325291;-1,32762887856066;-1,32762887856066;-9,76029514726654
     4850;9,63275034393844;1,4523301218657;-1,52201292708074;-1,52201292708074;-9,73131613255956
     4860;9,65269392643107;1,42004333752938;-1,71569064541952;-1,71569064541952;-9,68885157326543
     4870;9,6726375089237;1,38390266356234;-1,90836051779786;-1,90836051779786;-9,62934498717356
     4880;9,69258109141632;1,34393240196954;-2,09964256436675;-2,09964256436675;-9,54889242385037
     4890;9,71252467390895;1,30016552872965;-2,28907390486823;-2,28907390486823;-9,44330493697809
     4900;9,73246825640157;1,25264421986469;-2,47611098918124;-2,47611098918124;-9,30818761726839
     4910;9,7524118388942;1,20142137023357;-2,66012480994641;-2,66012480994641;-9,13902138573437
     4920;9,77235542138683;1,14656421379983;-2,84038604320222;-2,84038604320222;-8,93127926226519
     4930;9,79229900387945;1,08815601778284;-3,01608087458721;-3,01608087458721;-8,68056950640599
     4940;9,81224258637208;1,0262972409257;-3,18631353117402;-3,18631353117402;-8,38278766051707
     4950;9,83218616886471;0,961106284136774;-3,35010955457455;-3,35010955457455;-8,03428995612114
     4960;9,85212975135733;0,892720851130278;-3,50642472590963;-3,50642472590963;-7,6320568324081
     4970;9,87207333384996;0,821301724817399;-3,65415926861478;-3,65415926861478;-7,17392536228938
     4980;9,89201691634258;0,747031339651636;-3,7921886963405;-3,7921886963405;-6,6587429000673
     4990;9,91196049883521;0,670114350052417;-3,91937776426753;-3,91937776426753;-6,08654056120828
     5000;9,93190408132784;0,590777723644847;-4,03459828047178;-4,03459828047178;-5,45866927112346
     5010;9,95184766382046;0,509272090489836;-4,13675853222113;-4,13675853222113;-4,77790993105455
     5020;9,97179124631309;0,425868088809942;-4,22484699556175;-4,22484699556175;-4,04849249917394
     5030;9,99173482880571;0,340854989035493;-4,29795328241913;-4,29795328241913;-3,27607161914566
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/Plugin.cs.frame

    r16954 r16976  
    2929  [Plugin("HeuristicLab.Problems.DynamicalSystemsModelling","TODO", "3.3.0.$WCREV$")]
    3030  [PluginFile("HeuristicLab.Problems.DynamicalSystemsModelling-3.3.dll", PluginFileType.Assembly)]
     31  [PluginFile("sundials_cvodes-x64.dll", PluginFileType.NativeDll)]
     32  [PluginFile("sundials_cvodes-x86.dll", PluginFileType.NativeDll)]
     33  [PluginFile("sundials_nvecserial-x86.dll", PluginFileType.NativeDll)]
    3134  [PluginDependency("HeuristicLab.ALGLIB", "3.7")]
    3235  [PluginDependency("HeuristicLab.Attic", "1.0")]
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/Problem.cs

    r16972 r16976  
    3939using HEAL.Attic;
    4040using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
     41using System.Runtime.InteropServices;
    4142
    4243namespace HeuristicLab.Problems.DynamicalSystemsModelling {
     
    5556    private const string NumericIntegrationStepsParameterName = "Steps for numeric integration";
    5657    private const string TrainingEpisodesParameterName = "Training episodes";
     58    private const string TestEpisodesParameterName = "Test episodes";
    5759    private const string OptimizeParametersForEpisodesParameterName = "Optimize parameters for episodes";
    5860    private const string OdeSolverParameterName = "ODE Solver";
     
    8991    public IValueParameter<ItemList<IntRange>> TrainingEpisodesParameter {
    9092      get { return (IValueParameter<ItemList<IntRange>>)Parameters[TrainingEpisodesParameterName]; }
     93    }
     94    public IValueParameter<ItemList<IntRange>> TestEpisodesParameter {
     95      get { return (IValueParameter<ItemList<IntRange>>)Parameters[TestEpisodesParameterName]; }
    9196    }
    9297    public IFixedValueParameter<BoolValue> OptimizeParametersForEpisodesParameter {
     
    139144    public IList<IntRange> TrainingEpisodes {
    140145      get { return TrainingEpisodesParameter.Value; }
     146    }
     147    public IList<IntRange> TestEpisodes {
     148      get { return TestEpisodesParameter.Value; }
    141149    }
    142150    public bool OptimizeParametersForEpisodes {
     
    215223      Parameters.Add(new FixedValueParameter<IntValue>(NumericIntegrationStepsParameterName, "Number of steps in the numeric integration that are taken from one row to the next (set to 1 to 100). More steps makes the algorithm slower, less steps worsens the accuracy of the numeric integration scheme.", new IntValue(10)));
    216224      Parameters.Add(new ValueParameter<ItemList<IntRange>>(TrainingEpisodesParameterName, "A list of ranges that should be used for training, each range represents an independent episode. This overrides the TrainingSet parameter in ProblemData.", new ItemList<IntRange>()));
     225      Parameters.Add(new ValueParameter<ItemList<IntRange>>(TestEpisodesParameterName, "A list of ranges that should be used for validation, each range represents an independent episode. This overrides the TestSet parameter in ProblemData.", new ItemList<IntRange>()));
    217226      Parameters.Add(new FixedValueParameter<BoolValue>(OptimizeParametersForEpisodesParameterName, "Flag to select if parameters should be optimized globally or for each episode individually.", new BoolValue(false)));
    218227      Parameters.Add(new FixedValueParameter<DoubleValue>("Pretuning NMSE weight", "For fitness weighting", new DoubleValue(0.5)));
     
    220229      Parameters.Add(new FixedValueParameter<DoubleValue>("Numeric differences smoothing", "Determines the amount of smoothing for the numeric differences which are calculated for pre-tuning. Values from -8 to 8 are reasonable. Use very low value if the data contains no noise. Default: 2.", new DoubleValue(2.0)));
    221230
    222       var solversStr = new string[] { "HeuristicLab" /* , "CVODES" */};
     231      var solversStr = new string[] { "HeuristicLab", "CVODES" };
    223232      var solvers = new ItemSet<StringValue>(
    224233        solversStr.Select(s => new StringValue(s).AsReadOnly())
     
    293302
    294303      // optimize parameters by fitting f(x,y) to calculated differences dy/dt(t)
    295       double nmse = pretuningErrorWeight * PreTuneParameters(trees, problemData, targetVars, latentVariables, random, episodes,
    296         maxPretuningParameterOptIterations, numericDifferencesSmoothing,
    297         initialTheta, out double[] pretunedParameters);
     304      double[] pretunedParameters = initialTheta.SelectMany(v => v).ToArray();
     305      double nmse = 0;
     306      if (pretuningErrorWeight > 0 || maxPretuningParameterOptIterations > -1) {
     307        nmse += pretuningErrorWeight * PreTuneParameters(trees, problemData, targetVars, latentVariables, random, episodes,
     308          maxPretuningParameterOptIterations, numericDifferencesSmoothing,
     309          initialTheta, out pretunedParameters);
     310      }
    298311
    299312      // extend parameter vector to include parameters for latent variable trees
     
    303316        .ToArray();
    304317
    305       // optimize parameters using integration of f(x,y) to calculate y(t)
    306       nmse += odeErrorWeight * OptimizeParameters(trees, problemData, targetVars, latentVariables, episodes, maxOdeParameterOptIterations, pretunedParameters, numericIntegrationSteps, odeSolver,
    307         out double[] optTheta);
     318      double[] optTheta = pretunedParameters;
     319      if (odeErrorWeight > 0 || maxOdeParameterOptIterations > -1) {
     320        // optimize parameters using integration of f(x,y) to calculate y(t)
     321        nmse += odeErrorWeight * OptimizeParameters(trees, problemData, targetVars, latentVariables, episodes, maxOdeParameterOptIterations, pretunedParameters, numericIntegrationSteps, odeSolver,
     322          out optTheta);
     323      }
    308324      // var optTheta = pretunedParameters;
    309325
     
    371387        var t = targetTrees[treeIdx];
    372388
     389        // check if we need to change the problem data
    373390        var targetValuesDiff = new List<double>();
     391
     392        // TODO: smooth only once
    374393        foreach (var ep in episodes) {
    375394          var episodeRows = Enumerable.Range(ep.Start, ep.Size);
     
    620639        results.Add(new Result("SNMSE", typeof(DoubleValue)));
    621640      }
    622       if(!results.ContainsKey("SNMSE values")) {
     641      if (!results.ContainsKey("SNMSE values")) {
    623642        var dt = new DataTable("SNMSE values");
    624643        dt.Rows.Add(new DataRow("ODE SNMSE"));
     
    629648        results.Add(new Result("Solution", typeof(Solution)));
    630649      }
    631       // if (!results.ContainsKey("Squared error and gradient")) {
    632       //   results.Add(new Result("Squared error and gradient", typeof(DataTable)));
    633       // }
     650
    634651
    635652      // when no training episodes are specified then we implicitly use the training parition from the problemData
     
    713730          if (colIdx < targetVars.Length) {
    714731            var targetVar = targetVars[colIdx];
    715             var trainingDataTable = new DataTable(targetVar + " prediction (training)"); 
     732            var trainingDataTable = new DataTable(targetVar + " prediction (training)");
    716733            var actualValuesRow = new DataRow(targetVar, "The values of " + targetVar, problemData.Dataset.GetDoubleValues(targetVar, trainingRows));
    717734            var idx = Enumerable.Range(0, trainingRows.Length).Select(i => i * targetVars.Length + colIdx);
     
    860877          var model = new SymbolicRegressionModel(name + "_diff", t, new SymbolicDataAnalysisExpressionTreeLinearInterpreter());
    861878          var solutionDataset = ((Dataset)problemData.Dataset).ToModifiable();
     879          solutionDataset.Name = ((Dataset)problemData.Dataset).Name;
     880          solutionDataset.Description = ((Dataset)problemData.Dataset).Description;
     881
    862882          var absValues = solutionDataset.GetDoubleValues(name).ToArray();
    863883
    864884          var diffValues = new double[absValues.Length];
    865           foreach(var ep in TrainingEpisodes) {
     885          foreach (var ep in TrainingEpisodes.Concat(TestEpisodes)) {
    866886            var y = solutionDataset.GetDoubleValues(name, Enumerable.Range(ep.Start, ep.End - ep.Start)).ToArray();
    867887            var yd = CalculateDifferences(y, NumericDifferencesSmoothing).ToArray();
    868             for(int r = ep.Start;  r < ep.End;r++) {
     888            for (int r = ep.Start; r < ep.End; r++) {
    869889              diffValues[r] = yd[r - ep.Start];
    870890            }
     
    873893          solutionDataset.AddVariable(name + "_diff", diffValues);
    874894          var solutionProblemData = new RegressionProblemData(solutionDataset, problemData.AllowedInputVariables, name + "_diff");
     895          solutionProblemData.Name = problemData.Name;
     896          solutionProblemData.Description = problemData.Description;
     897
    875898          solutionProblemData.TrainingPartition.Start = TrainingEpisodes.Select(ep => ep.Start).Min();
    876899          solutionProblemData.TrainingPartition.End = TrainingEpisodes.Select(ep => ep.End).Max(); // assumes training episodes are sequential without gaps
    877           solutionProblemData.TestPartition.Start = problemData.TestPartition.Start;
    878           solutionProblemData.TestPartition.End = problemData.TestPartition.End;
     900          if (TestEpisodes.Any()) {
     901            solutionProblemData.TestPartition.Start = TestEpisodes.Select(ep => ep.Start).Min();
     902            solutionProblemData.TestPartition.End = TestEpisodes.Select(ep => ep.End).Max();
     903          } else {
     904            solutionProblemData.TestPartition.Start = problemData.TestPartition.Start;
     905            solutionProblemData.TestPartition.End = problemData.TestPartition.End;
     906          }
    879907          var solution = model.CreateRegressionSolution(solutionProblemData);
    880908          results.AddOrUpdateResult("Solution " + name, solution);
     
    9891017            IntegrateHL(trees, calculatedVariables, nodeValues, numericIntegrationSteps); // integrator updates nodeValues
    9901018          else if (odeSolver == "CVODES")
    991             throw new NotImplementedException();
    992           // IntegrateCVODES(trees, calculatedVariables, variableValues, parameterValues, t - prevT);
     1019            IntegrateCVODES(trees, calculatedVariables, nodeValues);
    9931020          else throw new InvalidOperationException("Unknown ODE solver " + odeSolver);
    9941021          prevT = t;
     
    10381065    #region CVODES
    10391066
    1040     /*
     1067
    10411068    /// <summary>
    10421069    ///  Here we use CVODES to solve the ODE. Forward sensitivities are used to calculate the gradient for parameter optimization
     
    10441071    /// <param name="trees">Each equation in the ODE represented as a tree</param>
    10451072    /// <param name="calculatedVariables">The names of the calculated variables</param>
    1046     /// <param name="variableValues">The start values of the calculated variables as well as their sensitivites over parameters</param>
    1047     /// <param name="parameterValues">The current parameter values</param>
    10481073    /// <param name="t">The time t up to which we need to integrate.</param>
    10491074    private static void IntegrateCVODES(
    10501075      ISymbolicExpressionTree[] trees, // f(y,p) in tree representation
    10511076      string[] calculatedVariables, // names of elements of y
    1052       Dictionary<string, Tuple<double, Vector>> variableValues,  //  y (intput and output) input: y(t0), output: y(t0+t)
    1053       double[] parameterValues, // p
    1054       double t // duration t for which we want to integrate
     1077      NodeValueLookup nodeValues
    10551078      ) {
    10561079
    10571080      // the RHS of the ODE
    10581081      // dy/dt = f(y_t,x_t,p)
    1059       CVODES.CVRhsFunc f = CreateOdeRhs(trees, calculatedVariables, parameterValues);
     1082      CVODES.CVRhsFunc f = CreateOdeRhs(trees, calculatedVariables, nodeValues);
    10601083      // the Jacobian ∂f/∂y
    1061       CVODES.CVDlsJacFunc jac = CreateJac(trees, calculatedVariables, parameterValues);
     1084      CVODES.CVDlsJacFunc jac = CreateJac(trees, calculatedVariables, nodeValues);
    10621085
    10631086      // the RHS for the forward sensitivities (∂f/∂y)s_i(t) + ∂f/∂p_i
    1064       CVODES.CVSensRhsFn sensF = CreateSensitivityRhs(trees, calculatedVariables, parameterValues);
     1087      CVODES.CVSensRhsFn sensF = CreateSensitivityRhs(trees, calculatedVariables, nodeValues);
    10651088
    10661089      // setup solver
     
    10711094      IntPtr yS0 = IntPtr.Zero;
    10721095      IntPtr linearSolver = IntPtr.Zero;
    1073       var ns = parameterValues.Length; // number of parameters
     1096      var ns = nodeValues.ParameterCount; // number of parameters
    10741097
    10751098      try {
     
    10781101        // y must be initialized before calling CVodeInit
    10791102        for (int i = 0; i < calculatedVariables.Length; i++) {
    1080           CVODES.NV_Set_Ith_S(y, i, variableValues[calculatedVariables[i]].Item1);
     1103          CVODES.NV_Set_Ith_S(y, i, nodeValues.GetVariableValue(calculatedVariables[i]).Item1);
    10811104        }
    10821105
     
    10851108        var flag = CVODES.CVodeInit(cvode_mem, f, 0.0, y);
    10861109        Assert(CVODES.CV_SUCCESS == flag);
     1110
     1111        flag = CVODES.CVodeSetErrHandlerFn(cvode_mem, errorFunction, IntPtr.Zero);
     1112        Assert(CVODES.CV_SUCCESS == flag);
     1113
    10871114
    10881115        double relTol = 1.0e-2;
     
    11091136            var yS0_i = *((IntPtr*)yS0.ToPointer() + pIdx);
    11101137            for (var varIdx = 0; varIdx < calculatedVariables.Length; varIdx++) {
    1111               CVODES.NV_Set_Ith_S(yS0_i, varIdx, variableValues[calculatedVariables[varIdx]].Item2[pIdx]);
     1138              CVODES.NV_Set_Ith_S(yS0_i, varIdx, nodeValues.GetVariableValue(calculatedVariables[varIdx]).Item2[pIdx]); // TODO: perf
    11121139            }
    11131140          }
     
    11221149        // make one forward integration step
    11231150        double tout = 0.0; // first output time
    1124         flag = CVODES.CVode(cvode_mem, t, y, ref tout, CVODES.CV_NORMAL);
     1151        flag = CVODES.CVode(cvode_mem, 1.0, y, ref tout, CVODES.CV_NORMAL);
    11251152        if (flag == CVODES.CV_SUCCESS) {
    1126           Assert(t == tout);
     1153          Assert(1.0 == tout);
    11271154
    11281155          // get sensitivities
     
    11331160          for (int varIdx = 0; varIdx < calculatedVariables.Length; varIdx++) {
    11341161            var yi = CVODES.NV_Get_Ith_S(y, varIdx);
    1135             var gArr = new double[parameterValues.Length];
    1136             for (var pIdx = 0; pIdx < parameterValues.Length; pIdx++) {
     1162            var gArr = new double[ns];
     1163            for (var pIdx = 0; pIdx < ns; pIdx++) {
    11371164              unsafe {
    11381165                var yS0_pi = *((IntPtr*)yS0.ToPointer() + pIdx);
     
    11401167              }
    11411168            }
    1142             variableValues[calculatedVariables[varIdx]] = Tuple.Create(yi, new Vector(gArr));
     1169            nodeValues.SetVariableValue(calculatedVariables[varIdx], yi, new Vector(gArr));
    11431170          }
    11441171        } else {
    1145           variableValues.Clear();   // indicate problems by not returning new values
     1172          throw new InvalidOperationException();
    11461173        }
    11471174
     
    11561183    }
    11571184
     1185    private static void errorFunction(int errorCode, IntPtr module, IntPtr function, IntPtr msg, IntPtr ehdata) {
     1186      var moduleStr = Marshal.PtrToStringAnsi(module);
     1187      var functionStr = Marshal.PtrToStringAnsi(function);
     1188      var msgStr = Marshal.PtrToStringAnsi(msg);
     1189      string type = errorCode == 0 ? "Warning" : "Error";
     1190      throw new InvalidProgramException($"{type}: {msgStr} Module: {moduleStr} Function: {functionStr}");
     1191    }
    11581192
    11591193    private static CVODES.CVRhsFunc CreateOdeRhs(
    11601194      ISymbolicExpressionTree[] trees,
    11611195      string[] calculatedVariables,
    1162       double[] parameterValues) {
     1196      NodeValueLookup nodeValues) {
    11631197      // we don't need to calculate a gradient here
    11641198      return (double t,
     
    11671201              IntPtr user_data // optional user data, (unused here)
    11681202              ) => {
    1169                 // TODO: perf
    1170                 var nodeValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, Vector>>();
    1171 
    1172                 int pIdx = 0;
    1173                 foreach (var tree in trees) {
    1174                   foreach (var n in tree.IterateNodesPrefix()) {
    1175                     if (IsConstantNode(n)) {
    1176                       nodeValues.Add(n, Tuple.Create(parameterValues[pIdx], Vector.Zero)); // here we do not need a gradient
    1177                       pIdx++;
    1178                     } else if (n.SubtreeCount == 0) {
    1179                       // for variables and latent variables get the value from variableValues
    1180                       var varName = n.Symbol.Name;
    1181                       var varIdx = Array.IndexOf(calculatedVariables, varName); // TODO: perf!
    1182                       if (varIdx < 0) throw new InvalidProgramException();
    1183                       var y_i = CVODES.NV_Get_Ith_S(y, (long)varIdx);
    1184                       nodeValues.Add(n, Tuple.Create(y_i, Vector.Zero)); // no gradient needed
    1185                     }
    1186                   }
     1203                for (int i = 0; i < calculatedVariables.Length; i++) {
     1204                  var y_i = CVODES.NV_Get_Ith_S(y, (long)i);
     1205                  nodeValues.SetVariableValue(calculatedVariables[i], y_i);
    11871206                }
    11881207                for (int i = 0; i < trees.Length; i++) {
    11891208                  var tree = trees[i];
    11901209                  var res_i = InterpretRec(tree.Root.GetSubtree(0).GetSubtree(0), nodeValues);
    1191                   CVODES.NV_Set_Ith_S(ydot, i, res_i.Item1);
     1210                  CVODES.NV_Set_Ith_S(ydot, i, res_i);
    11921211                }
    11931212                return 0;
     
    11981217      ISymbolicExpressionTree[] trees,
    11991218      string[] calculatedVariables,
    1200       double[] parameterValues) {
     1219      NodeValueLookup nodeValues) {
    12011220
    12021221      return (
     
    12101229        IntPtr tmp3 // N_Vector, optional (unused here)
    12111230      ) => {
    1212         // here we need to calculate partial derivatives for the calculated variables y
    1213         var nodeValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, Vector>>();
    1214         int pIdx = 0;
    1215         foreach (var tree in trees) {
    1216           foreach (var n in tree.IterateNodesPrefix()) {
    1217             if (IsConstantNode(n)) {
    1218               nodeValues.Add(n, Tuple.Create(parameterValues[pIdx], Vector.Zero)); // here we need a gradient over y which is zero for parameters
    1219               pIdx++;
    1220             } else if (n.SubtreeCount == 0) {
    1221               // for variables and latent variables we use values supplied in y and init gradient vectors accordingly
    1222               var varName = n.Symbol.Name;
    1223               var varIdx = Array.IndexOf(calculatedVariables, varName); // TODO: perf!
    1224               if (varIdx < 0) throw new InvalidProgramException();
    1225 
    1226               var y_i = CVODES.NV_Get_Ith_S(y, (long)varIdx);
    1227               var gArr = new double[CVODES.NV_LENGTH_S(y)]; // backing array
    1228               gArr[varIdx] = 1.0;
    1229               var g = new Vector(gArr);
    1230               nodeValues.Add(n, Tuple.Create(y_i, g));
    1231             }
    1232           }
    1233         }
    1234 
     1231        // int pIdx = 0;
     1232        // foreach (var tree in trees) {
     1233        //   foreach (var n in tree.IterateNodesPrefix()) {
     1234        //     if (IsConstantNode(n)) {
     1235        //       nodeValues.Add(n, Tuple.Create(parameterValues[pIdx], Vector.Zero)); // here we need a gradient over y which is zero for parameters
     1236        //       pIdx++;
     1237        //     } else if (n.SubtreeCount == 0) {
     1238        //       // for variables and latent variables we use values supplied in y and init gradient vectors accordingly
     1239        //       var varName = n.Symbol.Name;
     1240        //       var varIdx = Array.IndexOf(calculatedVariables, varName); // TODO: perf!
     1241        //       if (varIdx < 0) throw new InvalidProgramException();
     1242        //
     1243        //       var y_i = CVODES.NV_Get_Ith_S(y, (long)varIdx);
     1244        //       var gArr = new double[CVODES.NV_LENGTH_S(y)]; // backing array
     1245        //       gArr[varIdx] = 1.0;
     1246        //       var g = new Vector(gArr);
     1247        //       nodeValues.Add(n, Tuple.Create(y_i, g));
     1248        //     }
     1249        //   }
     1250        // }
     1251        for (int i = 0; i < calculatedVariables.Length; i++) {
     1252          var y_i = CVODES.NV_Get_Ith_S(y, (long)i);
     1253          nodeValues.SetVariableValue(calculatedVariables[i], y_i);
     1254        }
    12351255        for (int i = 0; i < trees.Length; i++) {
    12361256          var tree = trees[i];
    1237           var res = InterpretRec(tree.Root.GetSubtree(0).GetSubtree(0), nodeValues);
    1238           var g = res.Item2;
     1257          InterpretRec(tree.Root.GetSubtree(0).GetSubtree(0), nodeValues, out double z, out Vector dz);
    12391258          for (int j = 0; j < calculatedVariables.Length; j++) {
    1240             CVODES.SUNDenseMatrix_Set(Jac, i, j, g[j]);
     1259            CVODES.SUNDenseMatrix_Set(Jac, i, j, dz[j]);
    12411260          }
    12421261        }
     
    12491268    // must compute (∂f/∂y)s_i(t) + ∂f/∂p_i and store in ySdot.
    12501269    // Index i refers to parameters, dimensionality of matrix and vectors is number of equations
    1251     private static CVODES.CVSensRhsFn CreateSensitivityRhs(ISymbolicExpressionTree[] trees, string[] calculatedVariables, double[] parameterValues) {
     1270    private static CVODES.CVSensRhsFn CreateSensitivityRhs(ISymbolicExpressionTree[] trees, string[] calculatedVariables, NodeValueLookup nodeValues) {
    12521271      return (
    12531272              int Ns, // number of parameters
     
    12611280              IntPtr tmp2 // N_Vector, optional (unused here)
    12621281        ) => {
    1263           // here we need to calculate partial derivatives for the calculated variables y as well as for the parameters
    1264           var nodeValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, Vector>>();
    1265           var d = calculatedVariables.Length + parameterValues.Length; // dimensionality of gradient
    1266           // first collect variable values
    1267           foreach (var tree in trees) {
    1268             foreach (var n in tree.IterateNodesPrefix()) {
    1269               if (IsVariableNode(n)) {
    1270                 // for variables and latent variables we use values supplied in y and init gradient vectors accordingly
    1271                 var varName = n.Symbol.Name;
    1272                 var varIdx = Array.IndexOf(calculatedVariables, varName); // TODO: perf!
    1273                 if (varIdx < 0) throw new InvalidProgramException();
    1274 
    1275                 var y_i = CVODES.NV_Get_Ith_S(y, (long)varIdx);
    1276                 var gArr = new double[d]; // backing array
    1277                 gArr[varIdx] = 1.0;
    1278                 var g = new Vector(gArr);
    1279                 nodeValues.Add(n, Tuple.Create(y_i, g));
     1282
     1283          var tmpNodeValues = new NodeValueLookup(trees, variableGradient: true); // for df / dy calculation
     1284
     1285          // update variableValues based on integration results
     1286          for (int varIdx = 0; varIdx < calculatedVariables.Length; varIdx++) {
     1287            var yi = CVODES.NV_Get_Ith_S(y, varIdx);
     1288            var gArr = new double[Ns];
     1289            for (var pIdx = 0; pIdx < Ns; pIdx++) {
     1290              unsafe {
     1291                var yS_pi = *((IntPtr*)yS.ToPointer() + pIdx);
     1292                gArr[pIdx] = CVODES.NV_Get_Ith_S(yS_pi, varIdx);
    12801293              }
    12811294            }
    1282           }
    1283           // then collect constants
    1284           int pIdx = 0;
    1285           foreach (var tree in trees) {
    1286             foreach (var n in tree.IterateNodesPrefix()) {
    1287               if (IsConstantNode(n)) {
    1288                 var gArr = new double[d];
    1289                 gArr[calculatedVariables.Length + pIdx] = 1.0;
    1290                 var g = new Vector(gArr);
    1291                 nodeValues.Add(n, Tuple.Create(parameterValues[pIdx], g));
    1292                 pIdx++;
    1293               }
    1294             }
    1295           }
    1296           // gradient vector is [∂f/∂y_1, ∂f/∂y_2, ... ∂f/∂yN, ∂f/∂p_1 ... ∂f/∂p_K]
    1297 
    1298 
    1299           for (pIdx = 0; pIdx < Ns; pIdx++) {
     1295            nodeValues.SetVariableValue(calculatedVariables[varIdx], yi, new Vector(gArr));
     1296            tmpNodeValues.SetVariableValue(calculatedVariables[varIdx], yi, Vector.CreateIndicator(calculatedVariables.Length, varIdx));
     1297          }
     1298
     1299          for (int pIdx = 0; pIdx < Ns; pIdx++) {
    13001300            unsafe {
    13011301              var sDot_pi = *((IntPtr*)ySdot.ToPointer() + pIdx);
     
    13041304          }
    13051305
     1306
    13061307          for (int i = 0; i < trees.Length; i++) {
    13071308            var tree = trees[i];
    1308             var res = InterpretRec(tree.Root.GetSubtree(0).GetSubtree(0), nodeValues);
    1309             var g = res.Item2;
    1310 
    13111309
    13121310            // update ySdot = (∂f/∂y)s_i(t) + ∂f/∂p_i
    13131311
    1314             for (pIdx = 0; pIdx < Ns; pIdx++) {
     1312            // 1. interpret tree to calculate (∂f/∂y)
     1313            // we need a different nodeValue object for (∂f/∂y)
     1314            InterpretRec(tree.Root.GetSubtree(0).GetSubtree(0), tmpNodeValues, out double z1, out Vector df_dy);
     1315
     1316            // 2. interpret tree to calculate ∂f/∂p_i
     1317            InterpretRec(tree.Root.GetSubtree(0).GetSubtree(0), nodeValues, out double z, out Vector df_dp);
     1318
     1319            for (int pIdx = 0; pIdx < Ns; pIdx++) {
    13151320              unsafe {
    13161321                var sDot_pi = *((IntPtr*)ySdot.ToPointer() + pIdx);
     
    13211326                var p = 0.0;
    13221327                for (int yIdx = 0; yIdx < calculatedVariables.Length; yIdx++) {
    1323                   p += g[yIdx] * CVODES.NV_Get_Ith_S(s_pi, yIdx);
     1328                  p += df_dy[yIdx] * CVODES.NV_Get_Ith_S(s_pi, yIdx);
    13241329                }
    13251330                // + ∂f/∂p_i
    1326                 CVODES.NV_Set_Ith_S(sDot_pi, i, v + p + g[calculatedVariables.Length + pIdx]);
     1331                CVODES.NV_Set_Ith_S(sDot_pi, i, p + df_dp[pIdx]);
    13271332              }
    13281333            }
     
    13321337        };
    13331338    }
    1334     */
     1339
    13351340    #endregion
    13361341
     
    16571662
    16581663    private static double[] CalculateDifferences(double[] targetValues, double numericDifferencesSmoothing) {
     1664      return CalculateDifferencesSavitykzGolay(targetValues);
     1665    }
     1666
     1667    private static double[] CalculateDifferencesPenalizedSplines(double[] targetValues, double numericDifferencesSmoothing) {
    16591668      var x = Enumerable.Range(0, targetValues.Length).Select(i => (double)i).ToArray();
    16601669      alglib.spline1dfitpenalized(x, targetValues, targetValues.Length / 2, numericDifferencesSmoothing,
     
    16701679      return dy;
    16711680    }
     1681
     1682    private static readonly double[] sgCoeffMiddle = SavitzkyGolayCoefficients(3, 3, 1, 3);
     1683    private static readonly double[] sgCoeffStart = SavitzkyGolayCoefficients(0, 3, 1, 3);
     1684    private static readonly double[] sgCoeffEnd = SavitzkyGolayCoefficients(3, 0, 1, 3);
     1685    private static double[] CalculateDifferencesSavitykzGolay(double[] y) {
     1686      double[] dy = new double[y.Length];
     1687      for (int i = 3; i < y.Length - 3; i++) {
     1688        for (int j = -3; j <= 3; j++) {
     1689          dy[i] += y[i + j] * sgCoeffMiddle[j + 3];
     1690        }
     1691      }
     1692
     1693      // start
     1694      for (int i = 0; i < 3; i++) {
     1695        for (int j = 0; j <= 3; j++) {
     1696          dy[i] += y[i + j] * sgCoeffStart[j];
     1697        }
     1698      }
     1699
     1700      // end
     1701      for (int i = y.Length - 3; i < y.Length; i++) {
     1702        for (int j = -3; j <= 0; j++) {
     1703          dy[i] += y[i + j] * sgCoeffEnd[j + 3];
     1704        }
     1705      }
     1706
     1707      return dy;
     1708    }
     1709
     1710    /// <summary>
     1711    /// Calculates coefficients for Savitzky-Golay filtering. (Numerical Recipes, page 769), one important change is that the coefficients are returned in normal order instead of wraparound order
     1712    /// </summary>
     1713    /// <param name="nl">number of samples to the left</param>
     1714    /// <param name="nr">number of samples to the right</param>
     1715    /// <param name="ld">order of derivative (smoothing=0)</param>
     1716    /// <param name="order">order of the polynomial to fit</param>
     1717    /// <param name="c">resulting coefficients for convolution, in correct order (t-nl, ... t-1, t+0, t+1, ... t+nr)</param>
     1718    private static double[] SavitzkyGolayCoefficients(int nl, int nr, int ld, int order) {
     1719      int np = nl + nr + 1;
     1720
     1721      int j, k, imj, ipj, kk, mm;
     1722      double fac = 0;
     1723      double sum = 0;
     1724      if (nl < 0 || nr < 0 || ld > order || nl + nr < order) throw new ArgumentException();
     1725
     1726      double[,] a = new double[order + 1, order + 1];
     1727      double[] b = new double[order + 1];
     1728      var c = new double[np];
     1729
     1730      for (ipj = 0; ipj <= (order << 1); ipj++) {
     1731        sum = (ipj > 0 ? 0.0 : 1.0);
     1732        for (k = 1; k <= nr; k++) sum += Math.Pow((double)k, (double)ipj);
     1733        for (k = 1; k <= nl; k++) sum += Math.Pow((double)-k, (double)ipj);
     1734        mm = Math.Min(ipj, 2 * order - ipj);
     1735        for (imj = -mm; imj <= mm; imj += 2)
     1736          a[(ipj + imj) / 2, (ipj - imj) / 2] = sum;
     1737      }
     1738      for (j = 0; j < order + 1; j++) b[j] = 0;
     1739      b[ld] = 1.0;
     1740      alglib.densesolverreport rep;
     1741      int info;
     1742      double[] x = new double[b.Length];
     1743      alglib.rmatrixsolve(a, b.Length, b, out info, out rep, out x);
     1744
     1745      for (kk = 0; kk < np; kk++) c[kk] = 0.0;
     1746      for (k = -nl; k <= nr; k++) {
     1747        sum = x[0];
     1748        fac = 1.0;
     1749        for (mm = 1; mm <= order; mm++) sum += x[mm] * (fac *= k);
     1750        kk = k + nl;
     1751        c[kk] = sum;
     1752      }
     1753      return c;
     1754    }
     1755
    16721756
    16731757    private void InitAllParameters() {
     
    18221906      grammar.FinishedGrammarManipulation();
    18231907      return grammar;
    1824       // // whenever ProblemData is changed we create a new grammar with the necessary symbols
    1825       // var g = new SimpleSymbolicExpressionGrammar();
    1826       // var unaryFunc = new string[] { "sin", "cos", "sqr" };
    1827       // var binaryFunc = new string[] { "+", "-", "*", "%" };
    1828       // foreach (var func in unaryFunc) {
    1829       //   if (FunctionSet.CheckedItems.Any(ci => ci.Value.Value == func)) g.AddSymbol(func, 1, 1);
    1830       // }
    1831       // foreach (var func in binaryFunc) {
    1832       //   if (FunctionSet.CheckedItems.Any(ci => ci.Value.Value == func)) g.AddSymbol(func, 2, 2);
    1833       // }
    1834       //
    1835       // foreach (var variableName in ProblemData.AllowedInputVariables.Union(TargetVariables.CheckedItems.Select(i => i.Value.Value)))
    1836       //   g.AddTerminalSymbol(variableName);
    1837       //
    1838       // // generate symbols for numeric parameters for which the value is optimized using AutoDiff
    1839       // // we generate multiple symbols to balance the probability for selecting a numeric parameter in the generation of random trees
    1840       // var numericConstantsFactor = 2.0;
    1841       // for (int i = 0; i < numericConstantsFactor * (ProblemData.AllowedInputVariables.Count() + TargetVariables.CheckedItems.Count()); i++) {
    1842       //   g.AddTerminalSymbol("θ" + i); // numeric parameter for which the value is optimized using AutoDiff
    1843       // }
    1844       //
    1845       // // generate symbols for latent variables
    1846       // for (int i = 1; i <= NumberOfLatentVariables; i++) {
    1847       //   g.AddTerminalSymbol("λ" + i); // numeric parameter for which the value is optimized using AutoDiff
    1848       // }
    1849       //
    1850       // return g;
     1908
    18511909    }
    18521910    #endregion
     
    19211979      private readonly Vector[] constantGradientVectors;
    19221980
    1923       // private readonly Dictionary<int, ISymbolicExpressionTreeNode> paramIdx2node = new Dictionary<int, ISymbolicExpressionTreeNode>();
    19241981
    19251982      public double NodeValue(ISymbolicExpressionTreeNode node) => node2val[node].Item1;
    19261983      public Vector NodeGradient(ISymbolicExpressionTreeNode node) => node2val[node].Item2;
    19271984
    1928       public NodeValueLookup(ISymbolicExpressionTree[] trees) {
    1929 
     1985      public NodeValueLookup(ISymbolicExpressionTree[] trees, bool variableGradient = false) {
    19301986        this.constantNodes = trees.SelectMany(t => t.IterateNodesPrefix().OfType<ConstantTreeNode>()).ToArray();
    1931         constantGradientVectors = new Vector[constantNodes.Length];
    1932         for (int paramIdx = 0; paramIdx < constantNodes.Length; paramIdx++) {
    1933           constantGradientVectors[paramIdx] = Vector.CreateIndicator(length: constantNodes.Length, idx: paramIdx);
    1934 
    1935           var node = constantNodes[paramIdx];
    1936           node2val[node] = Tuple.Create(node.Value, constantGradientVectors[paramIdx]);
    1937         }
    1938 
    1939         foreach (var tree in trees) {
    1940           foreach (var node in tree.IterateNodesPrefix().Where(IsVariableNode)) {
    1941             var varName = GetVariableName(node);
    1942             if (!name2nodes.TryGetValue(varName, out List<ISymbolicExpressionTreeNode> nodes)) {
    1943               nodes = new List<ISymbolicExpressionTreeNode>();
    1944               name2nodes.Add(varName, nodes);
     1987        if (!variableGradient) {
     1988          constantGradientVectors = new Vector[constantNodes.Length];
     1989          for (int paramIdx = 0; paramIdx < constantNodes.Length; paramIdx++) {
     1990            constantGradientVectors[paramIdx] = Vector.CreateIndicator(length: constantNodes.Length, idx: paramIdx);
     1991
     1992            var node = constantNodes[paramIdx];
     1993            node2val[node] = Tuple.Create(node.Value, constantGradientVectors[paramIdx]);
     1994          }
     1995
     1996          foreach (var tree in trees) {
     1997            foreach (var node in tree.IterateNodesPrefix().Where(IsVariableNode)) {
     1998              var varName = GetVariableName(node);
     1999              if (!name2nodes.TryGetValue(varName, out List<ISymbolicExpressionTreeNode> nodes)) {
     2000                nodes = new List<ISymbolicExpressionTreeNode>();
     2001                name2nodes.Add(varName, nodes);
     2002              }
     2003              nodes.Add(node);
     2004              SetVariableValue(varName, 0.0);  // this value is updated in the prediction loop
    19452005            }
    1946             nodes.Add(node);
    1947             SetVariableValue(varName, 0.0);  // this value is updated in the prediction loop
     2006          }
     2007        }
     2008        else {
     2009          // variable gradient means we want to calculate the gradient over the target variables instead of parameters
     2010          for (int paramIdx = 0; paramIdx < constantNodes.Length; paramIdx++) {
     2011            var node = constantNodes[paramIdx];
     2012            node2val[node] = Tuple.Create(node.Value, Vector.Zero);
     2013          }
     2014
     2015          foreach (var tree in trees) {
     2016            foreach (var node in tree.IterateNodesPrefix().Where(IsVariableNode)) {
     2017              var varName = GetVariableName(node);
     2018              if (!name2nodes.TryGetValue(varName, out List<ISymbolicExpressionTreeNode> nodes)) {
     2019                nodes = new List<ISymbolicExpressionTreeNode>();
     2020                name2nodes.Add(varName, nodes);
     2021              }
     2022              nodes.Add(node);
     2023              SetVariableValue(varName, 0.0);  // this value is updated in the prediction loop
     2024            }
    19482025          }
    19492026        }
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/ProblemInstanceProvider.cs

    r16972 r16976  
    3535namespace HeuristicLab.Problems.DynamicalSystemsModelling {
    3636  public class ProblemInstanceProvider : ProblemInstanceProvider<Problem> {
     37    private static readonly NumberFormatInfo germanNumberFormat = CultureInfo.GetCultureInfo("de-DE").NumberFormat;
     38
    3739    public override string Name {
    3840      get { return "Dynamic Systems"; }
     
    6365      descriptorList.Add(ThreeSpeciesLotkaVolterra());
    6466      descriptorList.Add(VanDerPol());
     67      descriptorList.Add(Oscillator());
     68      descriptorList.Add(RealOscillator());
     69      descriptorList.Add(Pendulum());
     70      descriptorList.Add(RealPendulum());
     71      descriptorList.Add(DoubleOscillator());
     72      descriptorList.Add(RealDoubleOscillator());
     73      descriptorList.Add(DoublePendulum());
     74      descriptorList.Add(RealDoublePendulum());
     75
    6576      return descriptorList;
    6677    }
     
    7485        TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    7586        TestEpisodes = new IntRange[] { },
    76         FileName = "bacterial_1.csv"
     87        FileName = "bacterial_1.csv",
     88        NumberFormat = germanNumberFormat,
     89        Separator = ';'
    7790      };
    7891    }
     
    87100        TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    88101        TestEpisodes = new IntRange[] { },
    89         FileName = "bar_magnets_1.csv"
     102        FileName = "bar_magnets_1.csv",
     103        NumberFormat = germanNumberFormat,
     104        Separator = ';'
    90105      };
    91106    }
     
    97112        TargetVariables = new[] { "y1", "y2", "y3" },
    98113        InputVariables = new string[] { },
    99         TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    100         TestEpisodes = new IntRange[] { },
    101         FileName = "ChemicalReaction.csv"
     114        TrainingEpisodes = new IntRange[] { new IntRange(0, 101) },
     115        TestEpisodes = new IntRange[] { },
     116        FileName = "ChemicalReaction.csv",
     117        NumberFormat = germanNumberFormat,
     118        Separator = ';'
    102119      };
    103120    }
     
    109126        TargetVariables = new[] { "y1", "y2", "y3" },
    110127        InputVariables = new string[] { },
    111         TrainingEpisodes = new IntRange[] { new IntRange(0, 40) },
    112         TestEpisodes = new IntRange[] { },
    113         FileName = "E-CELL.csv"
     128        TrainingEpisodes = new IntRange[] { new IntRange(0, 41) },
     129        TestEpisodes = new IntRange[] { },
     130        FileName = "E-CELL.csv",
     131        NumberFormat = germanNumberFormat,
     132        Separator = ';'
    114133      };
    115134    }
     
    123142        TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    124143        TestEpisodes = new IntRange[] { },
    125         FileName = "Glider_1.csv"
     144        FileName = "Glider_1.csv",
     145        NumberFormat = germanNumberFormat,
     146        Separator = ';'
    126147      };
    127148    }
     
    134155        InputVariables = new string[] { },
    135156        TrainingEpisodes = new IntRange[] { new IntRange(0, 193) },
    136         TestEpisodes = new IntRange[] { },
    137         FileName = "LotkaVolterra.csv"
     157        TestEpisodes = new IntRange[] { new IntRange(193, 300) },
     158        FileName = "LotkaVolterra.csv",
     159        NumberFormat = germanNumberFormat,
     160        Separator = ';'
    138161      };
    139162    }
     
    147170        TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    148171        TestEpisodes = new IntRange[] { },
    149         FileName = "predator_prey_1.csv"
     172        FileName = "predator_prey_1.csv",
     173        NumberFormat = germanNumberFormat,
     174        Separator = ';'
    150175      };
    151176    }
     
    159184        TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    160185        TestEpisodes = new IntRange[] { },
    161         FileName = "shear_flow_1.csv"
     186        FileName = "shear_flow_1.csv",
     187        NumberFormat = germanNumberFormat,
     188        Separator = ';'
    162189      };
    163190    }
     
    171198        TrainingEpisodes = new IntRange[] { new IntRange(0, 31), new IntRange(31, 62), new IntRange(62, 93) },
    172199        TestEpisodes = new IntRange[] { },
    173         FileName = "S-System.csv"
     200        FileName = "S-System.csv",
     201        NumberFormat = germanNumberFormat,
     202        Separator = ';'
    174203      };
    175204    }
     
    184213        TrainingEpisodes = new IntRange[] { new IntRange(0, 100)},
    185214        TestEpisodes = new IntRange[] { },
    186         FileName = "ThreeLotkaVolterra.csv"
     215        FileName = "ThreeLotkaVolterra.csv",
     216        NumberFormat = germanNumberFormat,
     217        Separator = ';'
    187218      };
    188219    }
     
    197228        TrainingEpisodes = new IntRange[] { new IntRange(0, 100) },
    198229        TestEpisodes = new IntRange[] { },
    199         FileName = "van_der_pol_1.csv"
     230        FileName = "van_der_pol_1.csv",
     231        NumberFormat = germanNumberFormat,
     232        Separator = ';'
     233      };
     234    }
     235
     236    private DataDescriptor Oscillator() {
     237      return new DataDescriptor {
     238        Name = "Linear Oscillator (simulation)",
     239        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     240        TargetVariables = new[] { "x", "v" },
     241        InputVariables = new string[] { },
     242        TrainingEpisodes = new IntRange[] { new IntRange(0, 512) },
     243        TestEpisodes = new IntRange[] { },
     244        FileName = "linear_h_1_equidistant.txt",
     245        NumberFormat = germanNumberFormat,
     246        Separator = ';'
     247      };
     248    }
     249
     250    private DataDescriptor RealOscillator() {
     251      return new DataDescriptor {
     252        Name = "Linear Oscillator (motion-tracked)",
     253        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     254        TargetVariables = new[] { "x", "v" },
     255        InputVariables = new string[] { },
     256        TrainingEpisodes = new IntRange[] { new IntRange(0, 879) },
     257        TestEpisodes = new IntRange[] { },
     258        FileName = "real_linear_h_1_equidistant.txt",
     259        NumberFormat = germanNumberFormat,
     260        Separator = ';'
     261      };
     262    }
     263    private DataDescriptor Pendulum() {
     264      return new DataDescriptor {
     265        Name = "Pendulum (simulated)",
     266        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     267        TargetVariables = new[] { "theta", "omega", "v" },
     268        InputVariables = new string[] { },
     269        TrainingEpisodes = new IntRange[] { new IntRange(0, 502) },
     270        TestEpisodes = new IntRange[] { },
     271        FileName = "pendulum_h_1_equidistant.txt",
     272        NumberFormat = germanNumberFormat,
     273        Separator = ';'
     274      };
     275    }
     276    private DataDescriptor RealPendulum() {
     277      return new DataDescriptor {
     278        Name = "Pendulum (motion-tracked)",
     279        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     280        TargetVariables = new[] { "theta", "omega" },
     281        InputVariables = new string[] { },
     282        TrainingEpisodes = new IntRange[] { new IntRange(0, 568) },
     283        TestEpisodes = new IntRange[] { },
     284        FileName = "real_pend_h_1_equidistant.txt",
     285        NumberFormat = germanNumberFormat,
     286        Separator = ';'
     287      };
     288    }
     289    private DataDescriptor DoubleOscillator() {
     290      return new DataDescriptor {
     291        Name = "Double Oscillator (simulated)",
     292        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     293        TargetVariables = new[] { "x1", "x2", "v1", "v2" },
     294        InputVariables = new string[] { },
     295        TrainingEpisodes = new IntRange[] { new IntRange(0, 820) },
     296        TestEpisodes = new IntRange[] { },
     297        FileName = "double_linear_h_1_equidistant.txt",
     298        NumberFormat = germanNumberFormat,
     299        Separator = ';'
     300      };
     301    }
     302    private DataDescriptor RealDoubleOscillator() {
     303      return new DataDescriptor {
     304        Name = "Double Oscillator (motion-tracked)",
     305        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     306        TargetVariables = new[] { "x1", "x2", "v1", "v2" },
     307        InputVariables = new string[] { },
     308        TrainingEpisodes = new IntRange[] { new IntRange(0, 500) },
     309        TestEpisodes = new IntRange[] { },
     310        FileName = "real_double_linear_h_1_equidistant.txt",
     311        NumberFormat = germanNumberFormat,
     312        Separator = ';'
     313      };
     314    }
     315    private DataDescriptor DoublePendulum() {
     316      return new DataDescriptor {
     317        Name = "Double Pendulum (simulated)",
     318        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     319        TargetVariables = new[] { "theta1", "theta2", "omega1", "omega2" },
     320        InputVariables = new string[] { },
     321        TrainingEpisodes = new IntRange[] { new IntRange(0, 1355) },
     322        TestEpisodes = new IntRange[] {new IntRange(1355, 2660) },
     323        FileName = "double_pend_h_1_equidistant.txt",
     324        NumberFormat = germanNumberFormat,
     325        Separator = ';'
     326      };
     327    }
     328    private DataDescriptor RealDoublePendulum() {
     329      return new DataDescriptor {
     330        Name = "Double Pendulum (motion-tracked)",
     331        Description = "Publication: M. Schmidt, H. Lipson; Distilling Free-Form Natural Laws from Experimental Data, Science Apr 2009: Vol. 324, Issue 5923, pp. 81 - 85.",
     332        TargetVariables = new[] { "theta1", "theta2", "omega1", "omega2" },
     333        InputVariables = new string[] { },
     334        TrainingEpisodes = new IntRange[] { new IntRange(0, 886) },
     335        TestEpisodes = new IntRange[] {new IntRange(886, 1731) },
     336        FileName = "real_double_pend_h_1_equidistant.txt",
     337        NumberFormat = germanNumberFormat,
     338        Separator = ';'
    200339      };
    201340    }
     
    207346      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
    208347        var entry = instancesZipFile.GetEntry(descriptor.FileName);
    209         NumberFormatInfo numberFormat;
    210         DateTimeFormatInfo dateFormat;
    211         char separator;
    212         using (Stream stream = entry.Open()) {
    213           TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
    214         }
     348        NumberFormatInfo numberFormat = descriptor.NumberFormat;
     349        DateTimeFormatInfo dateFormat = System.Globalization.DateTimeFormatInfo.InvariantInfo ;
     350        char separator = descriptor.Separator;
     351        //using (Stream stream = entry.Open()) {
     352        //  TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
     353        //}
    215354
    216355        TableFileParser csvFileParser = new TableFileParser();
     
    221360        Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
    222361
    223 
     362        dataset.Name = descriptor.FileName;
     363        dataset.Description = descriptor.Description;
    224364        // using a RegressionProblemData is suboptimal here --> TODO introduce a new datatype and refactor the whole problem
    225365        var problemData = new RegressionProblemData(dataset, descriptor.InputVariables, descriptor.TargetVariables.First());
     366        problemData.Name = descriptor.Name;
     367        problemData.Description = descriptor.Description;
    226368        problemData.TrainingPartition.Start = 0;
    227369        problemData.TrainingPartition.End = 0;
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/SolutionView.cs

    r16660 r16976  
    9696        }
    9797
    98         var forecastPredValues =
    99   Enumerable.Repeat(double.NaN, predictionEpisode.End)
    100   .Concat(forecastPredictions.Select(pi => pi[i]))
    101   .Concat(Enumerable.Repeat(double.NaN, ds.Rows - predictionEpisode.End - forecastPredictions.Length))
    102   .ToArray();
     98        if (ds.Rows - predictionEpisode.End - forecastPredictions.Length > 0) {
     99          var forecastPredValues =
     100    Enumerable.Repeat(double.NaN, predictionEpisode.End)
     101    .Concat(forecastPredictions.Select(pi => pi[i]))
     102    .Concat(Enumerable.Repeat(double.NaN, ds.Rows - predictionEpisode.End - forecastPredictions.Length))
     103    .ToArray();
    103104
    104         var forecastRow = new DataRow(varName + " (forecast)", varName + " (forecast)", forecastPredValues);
    105         dt.Rows.Add(forecastRow);
     105          var forecastRow = new DataRow(varName + " (forecast)", varName + " (forecast)", forecastPredValues);
     106          dt.Rows.Add(forecastRow);
     107        }
    106108
    107109        var vizProp = new DataTableVisualProperties();
Note: See TracChangeset for help on using the changeset viewer.