diff --git a/Makefile b/Makefile index 0dd68743680321e38d4a27eeaa586a16fb2d62a7..c4eb8a2e389cd3b3ed536f6d9081240de5774406 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,19 @@ CC=g++ -CFLAGS=-I. -Wall \ --fpermissive -lpthread -std=c++11 -I~/.progs/armadillo-6.400.3/include -DARMA_DONT_USE_WRAPPER -larmadillo #-llapack -lblas +CFLAGS = -g -O2 -Wall -W -pedantic-errors +# Change the following to include current directory to armadillo.../include: +CFLAGS += -Wmissing-braces -Wparentheses -Wold-style-cast -I/home/martinka/miscellaneous/armadillo-6.400.3/include -DARMA_DONT_USE_WRAPPER -lblas -llapack +CFLAGS += -std=c++11 LFLAGS=-lrt -#LIBS=-lm -llapack -lblas -OBJSTATIC = traj2dmp.o file2mat.o\ -optpart.o solver.o cvxgen/matrix_support.o cvxgen/util.o cvxgen/ldl.o cuttraj.o dmp.o +LIBS=-lm -llapack -lblas +OBJSTATIC = traj2dmp.o plotMat3.o plotgnu3.o\ +optpart.o cvxgen/solver.o cvxgen/matrix_support.o cvxgen/util.o cvxgen/ldl.o cuttraj.o dmp.o all: example_main %: %.c $(CC) -o $@ $(CFLAGS) $^ $(LIBS) -%.o: %.cpp $(DEPS) +%.o: %.cc $(DEPS) $(CC) $(CFLAGS) -c -o $@ $< diff --git a/cuttraj.cc b/cuttraj.cc index 8a7767a7319346471abf0f3ec494f1030e987197..03ee964aa66a4e2271a74bfa60dcdbbf64397b2b 100644 --- a/cuttraj.cc +++ b/cuttraj.cc @@ -33,7 +33,6 @@ void cuttraj(const mat& evalTraj, const mat& corrTraj, mat& traj1, mat& traj2) { mat dist2cutnew = dists.col(cutnew); double mindist2cutnew = as_scalar(min(dist2cutnew)); - cout << mindist2cutnew << endl; double cutold = as_scalar(find(dist2cutnew == mindist2cutnew, 1, "first")) + 1; diff --git a/dmp.cc b/dmp.cc index 5ac0f125f3dac86a905433a1f3e100153d0361d1..dcf109ab44a91fabc3e313126a368052d7f7d932 100644 --- a/dmp.cc +++ b/dmp.cc @@ -4,7 +4,19 @@ using namespace arma; using namespace std; -Dmp::Dmp(mat w, mat g, double t) : weights(w), goal(g), tau(t) {} +Dmp::Dmp(mat w, mat g, double t) : weights(w), goal(g), tau(t) { + nDims = w.n_cols; + x = ones<mat>(nDims,1); + v = zeros<mat>(nDims,1); + z = zeros<mat>(nDims,1); + int n_rfs = w.n_rows; // number of weight functions + mat arr = linspace<mat>(0, 1, n_rfs)*0.5; + c = (1+alpha_z/2*arr)%exp(-alpha_z/2*arr); + D = pow((diff(c)*0.55),2); + mat Dlast(1,1); + Dlast = D(D.n_rows - 1); + D = 1/join_vert(D, Dlast); +} mat Dmp::getW() const { return weights; @@ -18,8 +30,8 @@ double Dmp::getT() const { return tau; } -void Dmp::setG(mat g) { - goal = g; +void Dmp::setG(mat gIn) { + goal = gIn; } void Dmp::setT(double t) { @@ -27,12 +39,12 @@ void Dmp::setT(double t) { } Dmp& Dmp::doubleSpeed() { - tau = tau/2; + tau = 2*tau; return *this; } Dmp& Dmp::speedupTimes(int x) { - tau = tau/x; + tau = x*tau; return *this; } @@ -46,3 +58,68 @@ ostream& operator<<(ostream& os, const Dmp& dmp) { return os; } +void Dmp::resetState() { + firstSample = true; + x = ones<mat>(nDims,1); + v = zeros<mat>(nDims,1); + z = zeros<mat>(nDims,1); + g = zeros<mat>(nDims,1); +} + + +mat Dmp::getVel(const mat& posIn, const double& dt) { + mat pos = posIn.t(); + if (firstSample) { + g = pos; + firstSample = false; + } + mat vel = zeros(nDims,1); + + for (int j = 0; j < nDims; ++j) { + //mat psi = zeros(d.n_rows, d.n_cols); + mat psi = exp(-0.5*pow((x(j)-c),2) % D); + double f = as_scalar(sum(v(j)*weights.col(j)%psi)/sum(psi+1.e-10)); + // Differential equations + double vd = (alpha_v*(beta_v*(0-x(j))-v(j)))*tau; + double xd = v(j)*tau; + double zd = (alpha_z*(beta_z*(g(j)-pos(j))-z(j))+f)*tau; + double yd = z(j)*tau; + double gd = alpha_g*(goal(j)-g(j)); + // State update: + x(j) = xd*dt+x(j); + v(j) = vd*dt+v(j); + z(j) = zd*dt+z(j); + g(j) = gd*dt+g(j); + vel(j) = yd; + + } + return vel.t(); +} + + +/* +for j = 1:7 + psi = exp(-0.5*((x(j)-c).^2).*D); + f = sum(v(j)*w(:,j).*psi)/sum(psi+1.e-10); + + + + % The dynamical systems: + vd = (alpha_v*(beta_v*(0-x(j))-v(j)))*tau; + xd = v(j)*tau; + + zd = (alpha_z*(beta_z*(g(j)-yact(j))-z(j))+f)*tau; + + yd = z(j)*tau; + + gd = alpha_g*(G(j)-g(j)); + + % State update: + x(j) = xd*dt+x(j); + v(j) = vd*dt+v(j); + z(j) = zd*dt+z(j); + g(j) = gd*dt+g(j); + yrefd(j) = yd; +end +*/ + diff --git a/dmp.h b/dmp.h index cd9b3ed8f446ffe6c0c37e9f74b7269198f1f46a..d91cf1678f5923bf5fe0002fcbf0130be3eb8a15 100644 --- a/dmp.h +++ b/dmp.h @@ -17,11 +17,12 @@ public: void setT(double t); Dmp& doubleSpeed(); Dmp& speedupTimes(int x); + mat getVel(const mat& pos, const double& dt); + void resetState(); private: mat weights; mat goal; double tau; - //new, to be integrated: string ID; string GroupID; @@ -38,6 +39,21 @@ private: string startTolerance; string endTolerance; string goalObject; + //////////////////////////////////////////// + int nDims; + bool firstSample = true; + mat x; + mat v; + mat z; + mat g; + mat c; + mat D; + double alpha_g = 12.5; + double alpha_v = 25; + double alpha_z = 25; + double beta_v = 6.25; + //double beta_z = 6.25; + double beta_z = 8; }; ostream& operator<<(ostream& os, const Dmp& dmp); diff --git a/example_main b/example_main index fd588890afddf3387fbeb937215f2e805064a2a9..f36e2e93a3d3d0788b25dc52f982b3cba17ed331 100755 Binary files a/example_main and b/example_main differ diff --git a/example_main.cc b/example_main.cc index ea5472a6ae79a1d799f1976ff9c5c90c433cddd0..a7f78f1ff62b41fd1abd365fa2d8d234a2a2964a 100644 --- a/example_main.cc +++ b/example_main.cc @@ -3,7 +3,6 @@ #include "traj2dmp.h" #include "optpart.h" #include "cuttraj.h" -#include "file2mat.h" #include <vector> #include <netdb.h> #include <string.h> @@ -12,6 +11,8 @@ #include "dmp.h" #include <unistd.h> #include <armadillo> +#include "plotMat3.h" + using namespace std; @@ -21,23 +22,12 @@ using namespace arma; int main(int argc, char *argv[]) { // Initialize original trajectories: - double dt = 0.200; // 5 Hz sampling rate, in this example - //mat yDef; - //file2mat("yDef.txt",yDef); - //cout << yDef << endl; - //cout << yDef.n_rows << endl; - cout << "hej" << endl; - mat yDef = ones<mat>(10,3); - cout << "hej" << endl; - mat yCorr = ones<mat>(10,3); - yCorr = yCorr*2; - - //mat yCorr = file2mat("yCorr.txt"); - - cout << "hej" << endl; - cout << yCorr.n_rows << endl; - - + double dt = 0.040; // 25 Hz sampling rate, in this example + mat yDef; + yDef.load("yDef.txt", raw_ascii); + mat yCorr; + yCorr.load("yCorr.txt", raw_ascii); + int nDims = yDef.n_cols; // Number of trajectory dimensions mat yDefKeep; // kept part of deficient trajectory mat yCorrKeep; // kept part of corrective trajectory @@ -45,30 +35,56 @@ int main(int argc, char *argv[]) { cuttraj(yDef, yCorr, yDefKeep, yCorrKeep); //Determine which part of trajectories to keep cout << "cuttraj done " << endl; - cout << yDefKeep << endl; - cout << yDef.n_rows << endl; - cout << yDefKeep.n_rows << endl; // extrapolate/intrapolate to length 100 (for CVXGEN solver): vec x = linspace<vec>(0,1,yDefKeep.n_rows); - cout << "hej " << endl; + mat xx = linspace<vec>(0,1,100); mat yDefKeepExtrap; - cout << "hej " << endl; - mat yMod = zeros(100, yDefKeep.n_cols); + mat yMod = zeros(100, nDims); // loop over dimensions j and solve optimization problem: cout << "extrap done " << endl; - for (int j = 0; j < yDef.n_cols; ++j) { + for (int j = 0; j < nDims; ++j) { interp1(x, yDefKeep.col(j), xx, yDefKeepExtrap); yMod.col(j) = optpart(yDefKeepExtrap, yCorrKeep.col(j)); } - cout << "optimization done " << endl; - - Dmp resDmp1 = traj2dmp(yMod, dt*yMod.n_rows/yMod.n_rows).speedupTimes(1); - + cout << "optimization done " << endl; + + Dmp resDmp1 = traj2dmp(yMod, dt*yDefKeep.n_rows/yMod.n_rows).speedupTimes(1); Dmp resDmp2 = traj2dmp(yCorrKeep, dt).speedupTimes(1); cout << "First resulting DMP: " << endl << resDmp1 << endl; cout << "Second resulting DMP: " << endl << resDmp2 << endl; - + + + int simSamples1 = 500; + mat yRes1 = yDef.row(0); + mat vel = zeros(1,nDims); + mat yResNext = zeros(1,nDims); + for (int i = 0; i < simSamples1; ++i) { // Simulate trajectory from resDmp1 + vel = resDmp1.getVel(yRes1.row(yRes1.n_rows-1), dt); + for (int j = 0; j < nDims; ++j) { + yResNext(j) = yRes1(yRes1.n_rows-1,j) + vel(j) * dt; + } + yRes1 = join_vert(yRes1, yResNext); + } + + mat yRes2 = yCorrKeep.row(0); + for (int i = 0; i < simSamples1; ++i) { // Simulate trajectory from resDmp2 + vel = resDmp2.getVel(yRes2.row(yRes2.n_rows-1), dt); + for (int j = 0; j < nDims; ++j) { + yResNext(j) = yRes2(yRes2.n_rows-1,j) + vel(j) * dt; + } + yRes2 = join_vert(yRes2, yResNext); + } + + + cout << "Start plotting" << endl; + plotMat3(yDef, "Deficient trajectory"); + plotMat3(yCorr, "Corrective trajectory"); + plotMat3(yMod, "Modified trajectory"); + plotMat3(yRes1, "Resulting trajectory part 1"); + plotMat3(yRes2, "Resulting trajectory part 2"); + } + diff --git a/file2mat.cc b/file2mat.cc deleted file mode 100644 index 28c6da79f49203caa3f02d4659d8d42332ef1344..0000000000000000000000000000000000000000 --- a/file2mat.cc +++ /dev/null @@ -1,29 +0,0 @@ -#include "cuttraj.h" -#include <iostream> -#include <armadillo> - -using namespace arma; -using namespace std; - - -void file2mat(const string& filename, mat& y) { - mat yTemp; - yTemp.load(filename, raw_ascii); - - - y = zeros<mat>(yTemp.n_rows, yTemp.n_cols); - - - double dTemp; - for (int i = 0; i < y.n_rows; ++i) { - for (int j = 0; j < y.n_cols; ++j) { - dTemp = yTemp(i,j); - y(i,j) = dTemp; - } - } - cout << y.n_rows << endl; - cout << y.n_cols << endl; - - y = ones<mat>(yTemp.n_rows, yTemp.n_cols); - -} diff --git a/file2mat.h b/file2mat.h deleted file mode 100644 index f5253e68313eb35daa74000d102f847ce84a5009..0000000000000000000000000000000000000000 --- a/file2mat.h +++ /dev/null @@ -1,9 +0,0 @@ -#include <armadillo> -using namespace arma; -#ifndef FILE2MAT_H -#define FILE2MAT_H -using namespace std; -using namespace arma; -void file2mat(const string& filename, mat& y); - -#endif diff --git a/optpart.cc b/optpart.cc index 32df4acdad7cd05b608f3540e103ce6652947048..7025be58f03b7b45aae89c2268a7bf31b51884ed 100644 --- a/optpart.cc +++ b/optpart.cc @@ -6,7 +6,7 @@ /* Description: Basic test harness for solver.c. */ -#include "solver.h" +#include "cvxgen/solver.h" #include "optpart.h" #include <iostream> #include <armadillo> @@ -19,16 +19,12 @@ Settings settings; mat optpart(const mat& traj1, const mat& traj2) { - set_defaults(); - setup_indexing(); - load_default_data(traj1, traj2); - - settings.verbose = 1; + set_defaults(); + setup_indexing(); + load_default_data(traj1, traj2); solve(); - mat restraj = zeros<mat>(100,1); for (int i = 1; i < 101; ++i) { - //cout << *vars.x[i] << endl; restraj(i-1) = *vars.x[i]; } return restraj; @@ -37,8 +33,7 @@ void load_default_data(const mat& traj1, const mat& traj2) { for (int i = 1; i < 101; ++i) { params.traj1[i][0] = traj1(i-1); } - //cout << "hej" << endl; - params.lambda[0] = 10^12; + params.lambda[0] = 10000; params.traj2_first[0] = traj2[0]; params.traj2_second[0] = traj2[1]; } diff --git a/optpart.h b/optpart.h index 0c707cc20b56f6097e1b1c05170f216caeefb400..9d7f11e6eb34e1eee7feb0b9ec6fee36709a2d69 100644 --- a/optpart.h +++ b/optpart.h @@ -6,7 +6,7 @@ /* Filename: testsolver.c. */ /* Description: Basic test harness for solver.c. */ -#include "solver.h" +#include "cvxgen/solver.h" #include <iostream> #include <armadillo> using namespace arma; diff --git a/solver.c b/solver.c deleted file mode 100644 index 8c990bcd863205e7a95d2348e4abd011c4ed9e71..0000000000000000000000000000000000000000 --- a/solver.c +++ /dev/null @@ -1,692 +0,0 @@ -/* Produced by CVXGEN, 2016-01-17 08:15:52 -0500. */ -/* CVXGEN is Copyright (C) 2006-2012 Jacob Mattingley, jem@cvxgen.com. */ -/* The code in this file is Copyright (C) 2006-2012 Jacob Mattingley. */ -/* CVXGEN, or solvers produced by CVXGEN, cannot be used for commercial */ -/* applications without prior written permission from Jacob Mattingley. */ - -/* Filename: solver.c. */ -/* Description: Main solver file. */ -#include "solver.h" -double eval_gap(void) { - int i; - double gap; - gap = 0; - for (i = 0; i < 0; i++) - gap += work.z[i]*work.s[i]; - return gap; -} -void set_defaults(void) { - settings.resid_tol = 1e-6; - settings.eps = 1e-4; - settings.max_iters = 25; - settings.refine_steps = 1; - settings.s_init = 1; - settings.z_init = 1; - settings.debug = 0; - settings.verbose = 1; - settings.verbose_refinement = 0; - settings.better_start = 1; - settings.kkt_reg = 1e-7; -} -void setup_pointers(void) { - work.y = work.x + 198; - work.s = work.x + 298; - work.z = work.x + 298; - vars.x_1 = work.x + 98; - vars.x_2 = work.x + 99; - vars.x_3 = work.x + 100; - vars.x_4 = work.x + 101; - vars.x_5 = work.x + 102; - vars.x_6 = work.x + 103; - vars.x_7 = work.x + 104; - vars.x_8 = work.x + 105; - vars.x_9 = work.x + 106; - vars.x_10 = work.x + 107; - vars.x_11 = work.x + 108; - vars.x_12 = work.x + 109; - vars.x_13 = work.x + 110; - vars.x_14 = work.x + 111; - vars.x_15 = work.x + 112; - vars.x_16 = work.x + 113; - vars.x_17 = work.x + 114; - vars.x_18 = work.x + 115; - vars.x_19 = work.x + 116; - vars.x_20 = work.x + 117; - vars.x_21 = work.x + 118; - vars.x_22 = work.x + 119; - vars.x_23 = work.x + 120; - vars.x_24 = work.x + 121; - vars.x_25 = work.x + 122; - vars.x_26 = work.x + 123; - vars.x_27 = work.x + 124; - vars.x_28 = work.x + 125; - vars.x_29 = work.x + 126; - vars.x_30 = work.x + 127; - vars.x_31 = work.x + 128; - vars.x_32 = work.x + 129; - vars.x_33 = work.x + 130; - vars.x_34 = work.x + 131; - vars.x_35 = work.x + 132; - vars.x_36 = work.x + 133; - vars.x_37 = work.x + 134; - vars.x_38 = work.x + 135; - vars.x_39 = work.x + 136; - vars.x_40 = work.x + 137; - vars.x_41 = work.x + 138; - vars.x_42 = work.x + 139; - vars.x_43 = work.x + 140; - vars.x_44 = work.x + 141; - vars.x_45 = work.x + 142; - vars.x_46 = work.x + 143; - vars.x_47 = work.x + 144; - vars.x_48 = work.x + 145; - vars.x_49 = work.x + 146; - vars.x_50 = work.x + 147; - vars.x_51 = work.x + 148; - vars.x_52 = work.x + 149; - vars.x_53 = work.x + 150; - vars.x_54 = work.x + 151; - vars.x_55 = work.x + 152; - vars.x_56 = work.x + 153; - vars.x_57 = work.x + 154; - vars.x_58 = work.x + 155; - vars.x_59 = work.x + 156; - vars.x_60 = work.x + 157; - vars.x_61 = work.x + 158; - vars.x_62 = work.x + 159; - vars.x_63 = work.x + 160; - vars.x_64 = work.x + 161; - vars.x_65 = work.x + 162; - vars.x_66 = work.x + 163; - vars.x_67 = work.x + 164; - vars.x_68 = work.x + 165; - vars.x_69 = work.x + 166; - vars.x_70 = work.x + 167; - vars.x_71 = work.x + 168; - vars.x_72 = work.x + 169; - vars.x_73 = work.x + 170; - vars.x_74 = work.x + 171; - vars.x_75 = work.x + 172; - vars.x_76 = work.x + 173; - vars.x_77 = work.x + 174; - vars.x_78 = work.x + 175; - vars.x_79 = work.x + 176; - vars.x_80 = work.x + 177; - vars.x_81 = work.x + 178; - vars.x_82 = work.x + 179; - vars.x_83 = work.x + 180; - vars.x_84 = work.x + 181; - vars.x_85 = work.x + 182; - vars.x_86 = work.x + 183; - vars.x_87 = work.x + 184; - vars.x_88 = work.x + 185; - vars.x_89 = work.x + 186; - vars.x_90 = work.x + 187; - vars.x_91 = work.x + 188; - vars.x_92 = work.x + 189; - vars.x_93 = work.x + 190; - vars.x_94 = work.x + 191; - vars.x_95 = work.x + 192; - vars.x_96 = work.x + 193; - vars.x_97 = work.x + 194; - vars.x_98 = work.x + 195; - vars.x_99 = work.x + 196; - vars.x_100 = work.x + 197; -} -void setup_indexed_params(void) { - /* In CVXGEN, you can say */ - /* parameters */ - /* A[i] (5,3), i=1..4 */ - /* end */ - /* This function sets up A[2] to be a pointer to A_2, which is a length-15 */ - /* vector of doubles. */ - /* If you access parameters that you haven't defined in CVXGEN, the result */ - /* is undefined. */ - params.traj1[1] = params.traj1_1; - params.traj1[2] = params.traj1_2; - params.traj1[3] = params.traj1_3; - params.traj1[4] = params.traj1_4; - params.traj1[5] = params.traj1_5; - params.traj1[6] = params.traj1_6; - params.traj1[7] = params.traj1_7; - params.traj1[8] = params.traj1_8; - params.traj1[9] = params.traj1_9; - params.traj1[10] = params.traj1_10; - params.traj1[11] = params.traj1_11; - params.traj1[12] = params.traj1_12; - params.traj1[13] = params.traj1_13; - params.traj1[14] = params.traj1_14; - params.traj1[15] = params.traj1_15; - params.traj1[16] = params.traj1_16; - params.traj1[17] = params.traj1_17; - params.traj1[18] = params.traj1_18; - params.traj1[19] = params.traj1_19; - params.traj1[20] = params.traj1_20; - params.traj1[21] = params.traj1_21; - params.traj1[22] = params.traj1_22; - params.traj1[23] = params.traj1_23; - params.traj1[24] = params.traj1_24; - params.traj1[25] = params.traj1_25; - params.traj1[26] = params.traj1_26; - params.traj1[27] = params.traj1_27; - params.traj1[28] = params.traj1_28; - params.traj1[29] = params.traj1_29; - params.traj1[30] = params.traj1_30; - params.traj1[31] = params.traj1_31; - params.traj1[32] = params.traj1_32; - params.traj1[33] = params.traj1_33; - params.traj1[34] = params.traj1_34; - params.traj1[35] = params.traj1_35; - params.traj1[36] = params.traj1_36; - params.traj1[37] = params.traj1_37; - params.traj1[38] = params.traj1_38; - params.traj1[39] = params.traj1_39; - params.traj1[40] = params.traj1_40; - params.traj1[41] = params.traj1_41; - params.traj1[42] = params.traj1_42; - params.traj1[43] = params.traj1_43; - params.traj1[44] = params.traj1_44; - params.traj1[45] = params.traj1_45; - params.traj1[46] = params.traj1_46; - params.traj1[47] = params.traj1_47; - params.traj1[48] = params.traj1_48; - params.traj1[49] = params.traj1_49; - params.traj1[50] = params.traj1_50; - params.traj1[51] = params.traj1_51; - params.traj1[52] = params.traj1_52; - params.traj1[53] = params.traj1_53; - params.traj1[54] = params.traj1_54; - params.traj1[55] = params.traj1_55; - params.traj1[56] = params.traj1_56; - params.traj1[57] = params.traj1_57; - params.traj1[58] = params.traj1_58; - params.traj1[59] = params.traj1_59; - params.traj1[60] = params.traj1_60; - params.traj1[61] = params.traj1_61; - params.traj1[62] = params.traj1_62; - params.traj1[63] = params.traj1_63; - params.traj1[64] = params.traj1_64; - params.traj1[65] = params.traj1_65; - params.traj1[66] = params.traj1_66; - params.traj1[67] = params.traj1_67; - params.traj1[68] = params.traj1_68; - params.traj1[69] = params.traj1_69; - params.traj1[70] = params.traj1_70; - params.traj1[71] = params.traj1_71; - params.traj1[72] = params.traj1_72; - params.traj1[73] = params.traj1_73; - params.traj1[74] = params.traj1_74; - params.traj1[75] = params.traj1_75; - params.traj1[76] = params.traj1_76; - params.traj1[77] = params.traj1_77; - params.traj1[78] = params.traj1_78; - params.traj1[79] = params.traj1_79; - params.traj1[80] = params.traj1_80; - params.traj1[81] = params.traj1_81; - params.traj1[82] = params.traj1_82; - params.traj1[83] = params.traj1_83; - params.traj1[84] = params.traj1_84; - params.traj1[85] = params.traj1_85; - params.traj1[86] = params.traj1_86; - params.traj1[87] = params.traj1_87; - params.traj1[88] = params.traj1_88; - params.traj1[89] = params.traj1_89; - params.traj1[90] = params.traj1_90; - params.traj1[91] = params.traj1_91; - params.traj1[92] = params.traj1_92; - params.traj1[93] = params.traj1_93; - params.traj1[94] = params.traj1_94; - params.traj1[95] = params.traj1_95; - params.traj1[96] = params.traj1_96; - params.traj1[97] = params.traj1_97; - params.traj1[98] = params.traj1_98; - params.traj1[99] = params.traj1_99; - params.traj1[100] = params.traj1_100; -} -void setup_indexed_optvars(void) { - /* In CVXGEN, you can say */ - /* variables */ - /* x[i] (5), i=2..4 */ - /* end */ - /* This function sets up x[3] to be a pointer to x_3, which is a length-5 */ - /* vector of doubles. */ - /* If you access variables that you haven't defined in CVXGEN, the result */ - /* is undefined. */ - vars.x[1] = vars.x_1; - vars.x[2] = vars.x_2; - vars.x[3] = vars.x_3; - vars.x[4] = vars.x_4; - vars.x[5] = vars.x_5; - vars.x[6] = vars.x_6; - vars.x[7] = vars.x_7; - vars.x[8] = vars.x_8; - vars.x[9] = vars.x_9; - vars.x[10] = vars.x_10; - vars.x[11] = vars.x_11; - vars.x[12] = vars.x_12; - vars.x[13] = vars.x_13; - vars.x[14] = vars.x_14; - vars.x[15] = vars.x_15; - vars.x[16] = vars.x_16; - vars.x[17] = vars.x_17; - vars.x[18] = vars.x_18; - vars.x[19] = vars.x_19; - vars.x[20] = vars.x_20; - vars.x[21] = vars.x_21; - vars.x[22] = vars.x_22; - vars.x[23] = vars.x_23; - vars.x[24] = vars.x_24; - vars.x[25] = vars.x_25; - vars.x[26] = vars.x_26; - vars.x[27] = vars.x_27; - vars.x[28] = vars.x_28; - vars.x[29] = vars.x_29; - vars.x[30] = vars.x_30; - vars.x[31] = vars.x_31; - vars.x[32] = vars.x_32; - vars.x[33] = vars.x_33; - vars.x[34] = vars.x_34; - vars.x[35] = vars.x_35; - vars.x[36] = vars.x_36; - vars.x[37] = vars.x_37; - vars.x[38] = vars.x_38; - vars.x[39] = vars.x_39; - vars.x[40] = vars.x_40; - vars.x[41] = vars.x_41; - vars.x[42] = vars.x_42; - vars.x[43] = vars.x_43; - vars.x[44] = vars.x_44; - vars.x[45] = vars.x_45; - vars.x[46] = vars.x_46; - vars.x[47] = vars.x_47; - vars.x[48] = vars.x_48; - vars.x[49] = vars.x_49; - vars.x[50] = vars.x_50; - vars.x[51] = vars.x_51; - vars.x[52] = vars.x_52; - vars.x[53] = vars.x_53; - vars.x[54] = vars.x_54; - vars.x[55] = vars.x_55; - vars.x[56] = vars.x_56; - vars.x[57] = vars.x_57; - vars.x[58] = vars.x_58; - vars.x[59] = vars.x_59; - vars.x[60] = vars.x_60; - vars.x[61] = vars.x_61; - vars.x[62] = vars.x_62; - vars.x[63] = vars.x_63; - vars.x[64] = vars.x_64; - vars.x[65] = vars.x_65; - vars.x[66] = vars.x_66; - vars.x[67] = vars.x_67; - vars.x[68] = vars.x_68; - vars.x[69] = vars.x_69; - vars.x[70] = vars.x_70; - vars.x[71] = vars.x_71; - vars.x[72] = vars.x_72; - vars.x[73] = vars.x_73; - vars.x[74] = vars.x_74; - vars.x[75] = vars.x_75; - vars.x[76] = vars.x_76; - vars.x[77] = vars.x_77; - vars.x[78] = vars.x_78; - vars.x[79] = vars.x_79; - vars.x[80] = vars.x_80; - vars.x[81] = vars.x_81; - vars.x[82] = vars.x_82; - vars.x[83] = vars.x_83; - vars.x[84] = vars.x_84; - vars.x[85] = vars.x_85; - vars.x[86] = vars.x_86; - vars.x[87] = vars.x_87; - vars.x[88] = vars.x_88; - vars.x[89] = vars.x_89; - vars.x[90] = vars.x_90; - vars.x[91] = vars.x_91; - vars.x[92] = vars.x_92; - vars.x[93] = vars.x_93; - vars.x[94] = vars.x_94; - vars.x[95] = vars.x_95; - vars.x[96] = vars.x_96; - vars.x[97] = vars.x_97; - vars.x[98] = vars.x_98; - vars.x[99] = vars.x_99; - vars.x[100] = vars.x_100; -} -void setup_indexing(void) { - setup_pointers(); - setup_indexed_params(); - setup_indexed_optvars(); -} -void set_start(void) { - int i; - for (i = 0; i < 198; i++) - work.x[i] = 0; - for (i = 0; i < 100; i++) - work.y[i] = 0; - for (i = 0; i < 0; i++) - work.s[i] = (work.h[i] > 0) ? work.h[i] : settings.s_init; - for (i = 0; i < 0; i++) - work.z[i] = settings.z_init; -} -double eval_objv(void) { - int i; - double objv; - /* Borrow space in work.rhs. */ - multbyP(work.rhs, work.x); - objv = 0; - for (i = 0; i < 198; i++) - objv += work.x[i]*work.rhs[i]; - objv *= 0.5; - for (i = 0; i < 198; i++) - objv += work.q[i]*work.x[i]; - objv += work.quad_309377593344[0]+work.quad_170383695872[0]+work.quad_112192413696[0]+work.quad_271369404416[0]+work.quad_974379421696[0]+work.quad_880958541824[0]+work.quad_572094451712[0]+work.quad_789148684288[0]+work.quad_448304680960[0]+work.quad_196635672576[0]+work.quad_489733091328[0]+work.quad_802233995264[0]+work.quad_865562517504[0]+work.quad_910621253632[0]+work.quad_321513025536[0]+work.quad_997344780288[0]+work.quad_448780910592[0]+work.quad_115901485056[0]+work.quad_782888361984[0]+work.quad_609463140352[0]+work.quad_88437858304[0]+work.quad_984663347200[0]+work.quad_230162866176[0]+work.quad_416382242816[0]+work.quad_380873158656[0]+work.quad_556464291840[0]+work.quad_266292043776[0]+work.quad_970572640256[0]+work.quad_39497891840[0]+work.quad_701607514112[0]+work.quad_181586403328[0]+work.quad_260463075328[0]+work.quad_382856859648[0]+work.quad_199224414208[0]+work.quad_511656841216[0]+work.quad_171214155776[0]+work.quad_70639910912[0]+work.quad_463249276928[0]+work.quad_244412502016[0]+work.quad_258282409984[0]+work.quad_321028120576[0]+work.quad_30674518016[0]+work.quad_824505257984[0]+work.quad_484111179776[0]+work.quad_675570683904[0]+work.quad_386911121408[0]+work.quad_932702867456[0]+work.quad_274526810112[0]+work.quad_96616189952[0]+work.quad_711864590336[0]+work.quad_200392192000[0]+work.quad_150270558208[0]+work.quad_598460686336[0]+work.quad_831592636416[0]+work.quad_874189471744[0]+work.quad_632352092160[0]+work.quad_969116119040[0]+work.quad_610911072256[0]+work.quad_606707699712[0]+work.quad_449159319552[0]+work.quad_700922720256[0]+work.quad_911067136000[0]+work.quad_304706789376[0]+work.quad_530900680704[0]+work.quad_307691851776[0]+work.quad_875119529984[0]+work.quad_330167877632[0]+work.quad_106008100864[0]+work.quad_586821791744[0]+work.quad_62270459904[0]+work.quad_705160380416[0]+work.quad_566627430400[0]+work.quad_833211822080[0]+work.quad_28799266816[0]+work.quad_442252132352[0]+work.quad_713742774272[0]+work.quad_447903891456[0]+work.quad_655034785792[0]+work.quad_576686788608[0]+work.quad_288749699072[0]+work.quad_866096066560[0]+work.quad_345799389184[0]+work.quad_335292588032[0]+work.quad_292534816768[0]+work.quad_832380674048[0]+work.quad_934938374144[0]+work.quad_265476059136[0]+work.quad_478224822272[0]+work.quad_901249572864[0]+work.quad_216942473216[0]+work.quad_227493912576[0]+work.quad_458072092672[0]+work.quad_912331198464[0]+work.quad_307004768256[0]+work.quad_284125421568[0]+work.quad_704038281216[0]+work.quad_401987686400[0]+work.quad_592084643840[0]+work.quad_8875266048[0]+work.quad_270270570496[0]; - return objv; -} -void fillrhs_aff(void) { - int i; - double *r1, *r2, *r3, *r4; - r1 = work.rhs; - r2 = work.rhs + 198; - r3 = work.rhs + 198; - r4 = work.rhs + 198; - /* r1 = -A^Ty - G^Tz - Px - q. */ - multbymAT(r1, work.y); - multbymGT(work.buffer, work.z); - for (i = 0; i < 198; i++) - r1[i] += work.buffer[i]; - multbyP(work.buffer, work.x); - for (i = 0; i < 198; i++) - r1[i] -= work.buffer[i] + work.q[i]; - /* r2 = -z. */ - for (i = 0; i < 0; i++) - r2[i] = -work.z[i]; - /* r3 = -Gx - s + h. */ - multbymG(r3, work.x); - for (i = 0; i < 0; i++) - r3[i] += -work.s[i] + work.h[i]; - /* r4 = -Ax + b. */ - multbymA(r4, work.x); - for (i = 0; i < 100; i++) - r4[i] += work.b[i]; -} -void fillrhs_cc(void) { - int i; - double *r2; - double *ds_aff, *dz_aff; - double mu; - double alpha; - double sigma; - double smu; - double minval; - r2 = work.rhs + 198; - ds_aff = work.lhs_aff + 198; - dz_aff = work.lhs_aff + 198; - mu = 0; - for (i = 0; i < 0; i++) - mu += work.s[i]*work.z[i]; - /* Don't finish calculating mu quite yet. */ - /* Find min(min(ds./s), min(dz./z)). */ - minval = 0; - for (i = 0; i < 0; i++) - if (ds_aff[i] < minval*work.s[i]) - minval = ds_aff[i]/work.s[i]; - for (i = 0; i < 0; i++) - if (dz_aff[i] < minval*work.z[i]) - minval = dz_aff[i]/work.z[i]; - /* Find alpha. */ - if (-1 < minval) - alpha = 1; - else - alpha = -1/minval; - sigma = 0; - for (i = 0; i < 0; i++) - sigma += (work.s[i] + alpha*ds_aff[i])* - (work.z[i] + alpha*dz_aff[i]); - sigma /= mu; - sigma = sigma*sigma*sigma; - /* Finish calculating mu now. */ - smu = sigma*mu; - /* Fill-in the rhs. */ - for (i = 0; i < 198; i++) - work.rhs[i] = 0; - for (i = 198; i < 298; i++) - work.rhs[i] = 0; - for (i = 0; i < 0; i++) - r2[i] = work.s_inv[i]*(smu - ds_aff[i]*dz_aff[i]); -} -void refine(double *target, double *var) { - int i, j; - double *residual = work.buffer; - double norm2; - double *new_var = work.buffer2; - for (j = 0; j < settings.refine_steps; j++) { - norm2 = 0; - matrix_multiply(residual, var); - for (i = 0; i < 298; i++) { - residual[i] = residual[i] - target[i]; - norm2 += residual[i]*residual[i]; - } -#ifndef ZERO_LIBRARY_MODE - if (settings.verbose_refinement) { - if (j == 0) - printf("Initial residual before refinement has norm squared %.6g.\n", norm2); - else - printf("After refinement we get squared norm %.6g.\n", norm2); - } -#endif - /* Solve to find new_var = KKT \ (target - A*var). */ - ldl_solve(residual, new_var); - /* Update var += new_var, or var += KKT \ (target - A*var). */ - for (i = 0; i < 298; i++) { - var[i] -= new_var[i]; - } - } -#ifndef ZERO_LIBRARY_MODE - if (settings.verbose_refinement) { - /* Check the residual once more, but only if we're reporting it, since */ - /* it's expensive. */ - norm2 = 0; - matrix_multiply(residual, var); - for (i = 0; i < 298; i++) { - residual[i] = residual[i] - target[i]; - norm2 += residual[i]*residual[i]; - } - if (j == 0) - printf("Initial residual before refinement has norm squared %.6g.\n", norm2); - else - printf("After refinement we get squared norm %.6g.\n", norm2); - } -#endif -} -double calc_ineq_resid_squared(void) { - /* Calculates the norm ||-Gx - s + h||. */ - double norm2_squared; - int i; - /* Find -Gx. */ - multbymG(work.buffer, work.x); - /* Add -s + h. */ - for (i = 0; i < 0; i++) - work.buffer[i] += -work.s[i] + work.h[i]; - /* Now find the squared norm. */ - norm2_squared = 0; - for (i = 0; i < 0; i++) - norm2_squared += work.buffer[i]*work.buffer[i]; - return norm2_squared; -} -double calc_eq_resid_squared(void) { - /* Calculates the norm ||-Ax + b||. */ - double norm2_squared; - int i; - /* Find -Ax. */ - multbymA(work.buffer, work.x); - /* Add +b. */ - for (i = 0; i < 100; i++) - work.buffer[i] += work.b[i]; - /* Now find the squared norm. */ - norm2_squared = 0; - for (i = 0; i < 100; i++) - norm2_squared += work.buffer[i]*work.buffer[i]; - return norm2_squared; -} -void better_start(void) { - /* Calculates a better starting point, using a similar approach to CVXOPT. */ - /* Not yet speed optimized. */ - int i; - double *x, *s, *z, *y; - double alpha; - work.block_33[0] = -1; - /* Make sure sinvz is 1 to make hijacked KKT system ok. */ - for (i = 0; i < 0; i++) - work.s_inv_z[i] = 1; - fill_KKT(); - ldl_factor(); - fillrhs_start(); - /* Borrow work.lhs_aff for the solution. */ - ldl_solve(work.rhs, work.lhs_aff); - /* Don't do any refinement for now. Precision doesn't matter too much. */ - x = work.lhs_aff; - s = work.lhs_aff + 198; - z = work.lhs_aff + 198; - y = work.lhs_aff + 198; - /* Just set x and y as is. */ - for (i = 0; i < 198; i++) - work.x[i] = x[i]; - for (i = 0; i < 100; i++) - work.y[i] = y[i]; - /* Now complete the initialization. Start with s. */ - /* Must have alpha > max(z). */ - alpha = -1e99; - for (i = 0; i < 0; i++) - if (alpha < z[i]) - alpha = z[i]; - if (alpha < 0) { - for (i = 0; i < 0; i++) - work.s[i] = -z[i]; - } else { - alpha += 1; - for (i = 0; i < 0; i++) - work.s[i] = -z[i] + alpha; - } - /* Now initialize z. */ - /* Now must have alpha > max(-z). */ - alpha = -1e99; - for (i = 0; i < 0; i++) - if (alpha < -z[i]) - alpha = -z[i]; - if (alpha < 0) { - for (i = 0; i < 0; i++) - work.z[i] = z[i]; - } else { - alpha += 1; - for (i = 0; i < 0; i++) - work.z[i] = z[i] + alpha; - } -} -void fillrhs_start(void) { - /* Fill rhs with (-q, 0, h, b). */ - int i; - double *r1, *r2, *r3, *r4; - r1 = work.rhs; - r2 = work.rhs + 198; - r3 = work.rhs + 198; - r4 = work.rhs + 198; - for (i = 0; i < 198; i++) - r1[i] = -work.q[i]; - for (i = 0; i < 0; i++) - r2[i] = 0; - for (i = 0; i < 0; i++) - r3[i] = work.h[i]; - for (i = 0; i < 100; i++) - r4[i] = work.b[i]; -} -long solve(void) { - int i; - int iter; - double *dx, *ds, *dy, *dz; - double minval; - double alpha; - work.converged = 0; - setup_pointers(); - pre_ops(); -#ifndef ZERO_LIBRARY_MODE - if (settings.verbose) - printf("iter objv gap |Ax-b| |Gx+s-h| step\n"); -#endif - fillq(); - fillh(); - fillb(); - if (settings.better_start) - better_start(); - else - set_start(); - for (iter = 0; iter < settings.max_iters; iter++) { - for (i = 0; i < 0; i++) { - work.s_inv[i] = 1.0 / work.s[i]; - work.s_inv_z[i] = work.s_inv[i]*work.z[i]; - } - work.block_33[0] = 0; - fill_KKT(); - ldl_factor(); - /* Affine scaling directions. */ - fillrhs_aff(); - ldl_solve(work.rhs, work.lhs_aff); - refine(work.rhs, work.lhs_aff); - /* Centering plus corrector directions. */ - fillrhs_cc(); - ldl_solve(work.rhs, work.lhs_cc); - refine(work.rhs, work.lhs_cc); - /* Add the two together and store in aff. */ - for (i = 0; i < 298; i++) - work.lhs_aff[i] += work.lhs_cc[i]; - /* Rename aff to reflect its new meaning. */ - dx = work.lhs_aff; - ds = work.lhs_aff + 198; - dz = work.lhs_aff + 198; - dy = work.lhs_aff + 198; - /* Find min(min(ds./s), min(dz./z)). */ - minval = 0; - for (i = 0; i < 0; i++) - if (ds[i] < minval*work.s[i]) - minval = ds[i]/work.s[i]; - for (i = 0; i < 0; i++) - if (dz[i] < minval*work.z[i]) - minval = dz[i]/work.z[i]; - /* Find alpha. */ - if (-0.99 < minval) - alpha = 1; - else - alpha = -0.99/minval; - /* Update the primal and dual variables. */ - for (i = 0; i < 198; i++) - work.x[i] += alpha*dx[i]; - for (i = 0; i < 0; i++) - work.s[i] += alpha*ds[i]; - for (i = 0; i < 0; i++) - work.z[i] += alpha*dz[i]; - for (i = 0; i < 100; i++) - work.y[i] += alpha*dy[i]; - work.gap = eval_gap(); - work.eq_resid_squared = calc_eq_resid_squared(); - work.ineq_resid_squared = calc_ineq_resid_squared(); -#ifndef ZERO_LIBRARY_MODE - if (settings.verbose) { - work.optval = eval_objv(); - printf("%3d %10.3e %9.2e %9.2e %9.2e % 6.4f\n", - iter+1, work.optval, work.gap, sqrt(work.eq_resid_squared), - sqrt(work.ineq_resid_squared), alpha); - } -#endif - /* Test termination conditions. Requires optimality, and satisfied */ - /* constraints. */ - if ( (work.gap < settings.eps) - && (work.eq_resid_squared <= settings.resid_tol*settings.resid_tol) - && (work.ineq_resid_squared <= settings.resid_tol*settings.resid_tol) - ) { - work.converged = 1; - work.optval = eval_objv(); - return iter+1; - } - } - return iter; -} diff --git a/solver.h b/solver.h deleted file mode 100644 index 56b08df97f6adb69d57563020c7357ea567db650..0000000000000000000000000000000000000000 --- a/solver.h +++ /dev/null @@ -1,540 +0,0 @@ -/* Produced by CVXGEN, 2016-01-17 08:15:56 -0500. */ -/* CVXGEN is Copyright (C) 2006-2012 Jacob Mattingley, jem@cvxgen.com. */ -/* The code in this file is Copyright (C) 2006-2012 Jacob Mattingley. */ -/* CVXGEN, or solvers produced by CVXGEN, cannot be used for commercial */ -/* applications without prior written permission from Jacob Mattingley. */ - -/* Filename: solver.h. */ -/* Description: Header file with relevant definitions. */ -#ifndef SOLVER_H -#define SOLVER_H -/* Uncomment the next line to remove all library dependencies. */ -/*#define ZERO_LIBRARY_MODE */ -#ifdef MATLAB_MEX_FILE -/* Matlab functions. MATLAB_MEX_FILE will be defined by the mex compiler. */ -/* If you are not using the mex compiler, this functionality will not intrude, */ -/* as it will be completely disabled at compile-time. */ -#include "mex.h" -#else -#ifndef ZERO_LIBRARY_MODE -#include <stdio.h> -#endif -#endif -/* Space must be allocated somewhere (testsolver.c, csolve.c or your own */ -/* program) for the global variables vars, params, work and settings. */ -/* At the bottom of this file, they are externed. */ -#ifndef ZERO_LIBRARY_MODE -#include <math.h> -#define pm(A, m, n) printmatrix(#A, A, m, n, 1) -#endif - -#include <armadillo> -using namespace arma; -typedef struct Params_t { - double traj1_1[1]; - double traj1_2[1]; - double traj1_3[1]; - double traj1_4[1]; - double traj1_5[1]; - double traj1_6[1]; - double traj1_7[1]; - double traj1_8[1]; - double traj1_9[1]; - double traj1_10[1]; - double traj1_11[1]; - double traj1_12[1]; - double traj1_13[1]; - double traj1_14[1]; - double traj1_15[1]; - double traj1_16[1]; - double traj1_17[1]; - double traj1_18[1]; - double traj1_19[1]; - double traj1_20[1]; - double traj1_21[1]; - double traj1_22[1]; - double traj1_23[1]; - double traj1_24[1]; - double traj1_25[1]; - double traj1_26[1]; - double traj1_27[1]; - double traj1_28[1]; - double traj1_29[1]; - double traj1_30[1]; - double traj1_31[1]; - double traj1_32[1]; - double traj1_33[1]; - double traj1_34[1]; - double traj1_35[1]; - double traj1_36[1]; - double traj1_37[1]; - double traj1_38[1]; - double traj1_39[1]; - double traj1_40[1]; - double traj1_41[1]; - double traj1_42[1]; - double traj1_43[1]; - double traj1_44[1]; - double traj1_45[1]; - double traj1_46[1]; - double traj1_47[1]; - double traj1_48[1]; - double traj1_49[1]; - double traj1_50[1]; - double traj1_51[1]; - double traj1_52[1]; - double traj1_53[1]; - double traj1_54[1]; - double traj1_55[1]; - double traj1_56[1]; - double traj1_57[1]; - double traj1_58[1]; - double traj1_59[1]; - double traj1_60[1]; - double traj1_61[1]; - double traj1_62[1]; - double traj1_63[1]; - double traj1_64[1]; - double traj1_65[1]; - double traj1_66[1]; - double traj1_67[1]; - double traj1_68[1]; - double traj1_69[1]; - double traj1_70[1]; - double traj1_71[1]; - double traj1_72[1]; - double traj1_73[1]; - double traj1_74[1]; - double traj1_75[1]; - double traj1_76[1]; - double traj1_77[1]; - double traj1_78[1]; - double traj1_79[1]; - double traj1_80[1]; - double traj1_81[1]; - double traj1_82[1]; - double traj1_83[1]; - double traj1_84[1]; - double traj1_85[1]; - double traj1_86[1]; - double traj1_87[1]; - double traj1_88[1]; - double traj1_89[1]; - double traj1_90[1]; - double traj1_91[1]; - double traj1_92[1]; - double traj1_93[1]; - double traj1_94[1]; - double traj1_95[1]; - double traj1_96[1]; - double traj1_97[1]; - double traj1_98[1]; - double traj1_99[1]; - double traj1_100[1]; - double lambda[1]; - double traj2_first[1]; - double traj2_second[1]; - double *traj1[101]; -} Params; -typedef struct Vars_t { - double *x_1; /* 1 rows. */ - double *x_2; /* 1 rows. */ - double *x_3; /* 1 rows. */ - double *x_4; /* 1 rows. */ - double *x_5; /* 1 rows. */ - double *x_6; /* 1 rows. */ - double *x_7; /* 1 rows. */ - double *x_8; /* 1 rows. */ - double *x_9; /* 1 rows. */ - double *x_10; /* 1 rows. */ - double *x_11; /* 1 rows. */ - double *x_12; /* 1 rows. */ - double *x_13; /* 1 rows. */ - double *x_14; /* 1 rows. */ - double *x_15; /* 1 rows. */ - double *x_16; /* 1 rows. */ - double *x_17; /* 1 rows. */ - double *x_18; /* 1 rows. */ - double *x_19; /* 1 rows. */ - double *x_20; /* 1 rows. */ - double *x_21; /* 1 rows. */ - double *x_22; /* 1 rows. */ - double *x_23; /* 1 rows. */ - double *x_24; /* 1 rows. */ - double *x_25; /* 1 rows. */ - double *x_26; /* 1 rows. */ - double *x_27; /* 1 rows. */ - double *x_28; /* 1 rows. */ - double *x_29; /* 1 rows. */ - double *x_30; /* 1 rows. */ - double *x_31; /* 1 rows. */ - double *x_32; /* 1 rows. */ - double *x_33; /* 1 rows. */ - double *x_34; /* 1 rows. */ - double *x_35; /* 1 rows. */ - double *x_36; /* 1 rows. */ - double *x_37; /* 1 rows. */ - double *x_38; /* 1 rows. */ - double *x_39; /* 1 rows. */ - double *x_40; /* 1 rows. */ - double *x_41; /* 1 rows. */ - double *x_42; /* 1 rows. */ - double *x_43; /* 1 rows. */ - double *x_44; /* 1 rows. */ - double *x_45; /* 1 rows. */ - double *x_46; /* 1 rows. */ - double *x_47; /* 1 rows. */ - double *x_48; /* 1 rows. */ - double *x_49; /* 1 rows. */ - double *x_50; /* 1 rows. */ - double *x_51; /* 1 rows. */ - double *x_52; /* 1 rows. */ - double *x_53; /* 1 rows. */ - double *x_54; /* 1 rows. */ - double *x_55; /* 1 rows. */ - double *x_56; /* 1 rows. */ - double *x_57; /* 1 rows. */ - double *x_58; /* 1 rows. */ - double *x_59; /* 1 rows. */ - double *x_60; /* 1 rows. */ - double *x_61; /* 1 rows. */ - double *x_62; /* 1 rows. */ - double *x_63; /* 1 rows. */ - double *x_64; /* 1 rows. */ - double *x_65; /* 1 rows. */ - double *x_66; /* 1 rows. */ - double *x_67; /* 1 rows. */ - double *x_68; /* 1 rows. */ - double *x_69; /* 1 rows. */ - double *x_70; /* 1 rows. */ - double *x_71; /* 1 rows. */ - double *x_72; /* 1 rows. */ - double *x_73; /* 1 rows. */ - double *x_74; /* 1 rows. */ - double *x_75; /* 1 rows. */ - double *x_76; /* 1 rows. */ - double *x_77; /* 1 rows. */ - double *x_78; /* 1 rows. */ - double *x_79; /* 1 rows. */ - double *x_80; /* 1 rows. */ - double *x_81; /* 1 rows. */ - double *x_82; /* 1 rows. */ - double *x_83; /* 1 rows. */ - double *x_84; /* 1 rows. */ - double *x_85; /* 1 rows. */ - double *x_86; /* 1 rows. */ - double *x_87; /* 1 rows. */ - double *x_88; /* 1 rows. */ - double *x_89; /* 1 rows. */ - double *x_90; /* 1 rows. */ - double *x_91; /* 1 rows. */ - double *x_92; /* 1 rows. */ - double *x_93; /* 1 rows. */ - double *x_94; /* 1 rows. */ - double *x_95; /* 1 rows. */ - double *x_96; /* 1 rows. */ - double *x_97; /* 1 rows. */ - double *x_98; /* 1 rows. */ - double *x_99; /* 1 rows. */ - double *x_100; /* 1 rows. */ - double *t_01; /* 1 rows. */ - double *t_02; /* 1 rows. */ - double *t_03; /* 1 rows. */ - double *t_04; /* 1 rows. */ - double *t_05; /* 1 rows. */ - double *t_06; /* 1 rows. */ - double *t_07; /* 1 rows. */ - double *t_08; /* 1 rows. */ - double *t_09; /* 1 rows. */ - double *t_10; /* 1 rows. */ - double *t_11; /* 1 rows. */ - double *t_12; /* 1 rows. */ - double *t_13; /* 1 rows. */ - double *t_14; /* 1 rows. */ - double *t_15; /* 1 rows. */ - double *t_16; /* 1 rows. */ - double *t_17; /* 1 rows. */ - double *t_18; /* 1 rows. */ - double *t_19; /* 1 rows. */ - double *t_20; /* 1 rows. */ - double *t_21; /* 1 rows. */ - double *t_22; /* 1 rows. */ - double *t_23; /* 1 rows. */ - double *t_24; /* 1 rows. */ - double *t_25; /* 1 rows. */ - double *t_26; /* 1 rows. */ - double *t_27; /* 1 rows. */ - double *t_28; /* 1 rows. */ - double *t_29; /* 1 rows. */ - double *t_30; /* 1 rows. */ - double *t_31; /* 1 rows. */ - double *t_32; /* 1 rows. */ - double *t_33; /* 1 rows. */ - double *t_34; /* 1 rows. */ - double *t_35; /* 1 rows. */ - double *t_36; /* 1 rows. */ - double *t_37; /* 1 rows. */ - double *t_38; /* 1 rows. */ - double *t_39; /* 1 rows. */ - double *t_40; /* 1 rows. */ - double *t_41; /* 1 rows. */ - double *t_42; /* 1 rows. */ - double *t_43; /* 1 rows. */ - double *t_44; /* 1 rows. */ - double *t_45; /* 1 rows. */ - double *t_46; /* 1 rows. */ - double *t_47; /* 1 rows. */ - double *t_48; /* 1 rows. */ - double *t_49; /* 1 rows. */ - double *t_50; /* 1 rows. */ - double *t_51; /* 1 rows. */ - double *t_52; /* 1 rows. */ - double *t_53; /* 1 rows. */ - double *t_54; /* 1 rows. */ - double *t_55; /* 1 rows. */ - double *t_56; /* 1 rows. */ - double *t_57; /* 1 rows. */ - double *t_58; /* 1 rows. */ - double *t_59; /* 1 rows. */ - double *t_60; /* 1 rows. */ - double *t_61; /* 1 rows. */ - double *t_62; /* 1 rows. */ - double *t_63; /* 1 rows. */ - double *t_64; /* 1 rows. */ - double *t_65; /* 1 rows. */ - double *t_66; /* 1 rows. */ - double *t_67; /* 1 rows. */ - double *t_68; /* 1 rows. */ - double *t_69; /* 1 rows. */ - double *t_70; /* 1 rows. */ - double *t_71; /* 1 rows. */ - double *t_72; /* 1 rows. */ - double *t_73; /* 1 rows. */ - double *t_74; /* 1 rows. */ - double *t_75; /* 1 rows. */ - double *t_76; /* 1 rows. */ - double *t_77; /* 1 rows. */ - double *t_78; /* 1 rows. */ - double *t_79; /* 1 rows. */ - double *t_80; /* 1 rows. */ - double *t_81; /* 1 rows. */ - double *t_82; /* 1 rows. */ - double *t_83; /* 1 rows. */ - double *t_84; /* 1 rows. */ - double *t_85; /* 1 rows. */ - double *t_86; /* 1 rows. */ - double *t_87; /* 1 rows. */ - double *t_88; /* 1 rows. */ - double *t_89; /* 1 rows. */ - double *t_90; /* 1 rows. */ - double *t_91; /* 1 rows. */ - double *t_92; /* 1 rows. */ - double *t_93; /* 1 rows. */ - double *t_94; /* 1 rows. */ - double *t_95; /* 1 rows. */ - double *t_96; /* 1 rows. */ - double *t_97; /* 1 rows. */ - double *t_98; /* 1 rows. */ - double *x[101]; -} Vars; -typedef struct Workspace_t { - double *h; - double *s_inv; - double *s_inv_z; - double b[100]; - double q[198]; - double rhs[298]; - double x[298]; - double *s; - double *z; - double *y; - double lhs_aff[298]; - double lhs_cc[298]; - double buffer[298]; - double buffer2[298]; - double KKT[593]; - double L[493]; - double d[298]; - double v[298]; - double d_inv[298]; - double gap; - double optval; - double ineq_resid_squared; - double eq_resid_squared; - double block_33[1]; - /* Pre-op symbols. */ - double quad_309377593344[1]; - double quad_170383695872[1]; - double quad_112192413696[1]; - double quad_271369404416[1]; - double quad_974379421696[1]; - double quad_880958541824[1]; - double quad_572094451712[1]; - double quad_789148684288[1]; - double quad_448304680960[1]; - double quad_196635672576[1]; - double quad_489733091328[1]; - double quad_802233995264[1]; - double quad_865562517504[1]; - double quad_910621253632[1]; - double quad_321513025536[1]; - double quad_997344780288[1]; - double quad_448780910592[1]; - double quad_115901485056[1]; - double quad_782888361984[1]; - double quad_609463140352[1]; - double quad_88437858304[1]; - double quad_984663347200[1]; - double quad_230162866176[1]; - double quad_416382242816[1]; - double quad_380873158656[1]; - double quad_556464291840[1]; - double quad_266292043776[1]; - double quad_970572640256[1]; - double quad_39497891840[1]; - double quad_701607514112[1]; - double quad_181586403328[1]; - double quad_260463075328[1]; - double quad_382856859648[1]; - double quad_199224414208[1]; - double quad_511656841216[1]; - double quad_171214155776[1]; - double quad_70639910912[1]; - double quad_463249276928[1]; - double quad_244412502016[1]; - double quad_258282409984[1]; - double quad_321028120576[1]; - double quad_30674518016[1]; - double quad_824505257984[1]; - double quad_484111179776[1]; - double quad_675570683904[1]; - double quad_386911121408[1]; - double quad_932702867456[1]; - double quad_274526810112[1]; - double quad_96616189952[1]; - double quad_711864590336[1]; - double quad_200392192000[1]; - double quad_150270558208[1]; - double quad_598460686336[1]; - double quad_831592636416[1]; - double quad_874189471744[1]; - double quad_632352092160[1]; - double quad_969116119040[1]; - double quad_610911072256[1]; - double quad_606707699712[1]; - double quad_449159319552[1]; - double quad_700922720256[1]; - double quad_911067136000[1]; - double quad_304706789376[1]; - double quad_530900680704[1]; - double quad_307691851776[1]; - double quad_875119529984[1]; - double quad_330167877632[1]; - double quad_106008100864[1]; - double quad_586821791744[1]; - double quad_62270459904[1]; - double quad_705160380416[1]; - double quad_566627430400[1]; - double quad_833211822080[1]; - double quad_28799266816[1]; - double quad_442252132352[1]; - double quad_713742774272[1]; - double quad_447903891456[1]; - double quad_655034785792[1]; - double quad_576686788608[1]; - double quad_288749699072[1]; - double quad_866096066560[1]; - double quad_345799389184[1]; - double quad_335292588032[1]; - double quad_292534816768[1]; - double quad_832380674048[1]; - double quad_934938374144[1]; - double quad_265476059136[1]; - double quad_478224822272[1]; - double quad_901249572864[1]; - double quad_216942473216[1]; - double quad_227493912576[1]; - double quad_458072092672[1]; - double quad_912331198464[1]; - double quad_307004768256[1]; - double quad_284125421568[1]; - double quad_704038281216[1]; - double quad_401987686400[1]; - double quad_592084643840[1]; - double quad_8875266048[1]; - double quad_270270570496[1]; - int converged; -} Workspace; -typedef struct Settings_t { - double resid_tol; - double eps; - int max_iters; - int refine_steps; - int better_start; - /* Better start obviates the need for s_init and z_init. */ - double s_init; - double z_init; - int verbose; - /* Show extra details of the iterative refinement steps. */ - int verbose_refinement; - int debug; - /* For regularization. Minimum value of abs(D_ii) in the kkt D factor. */ - double kkt_reg; -} Settings; -extern Vars vars; -extern Params params; -extern Workspace work; -extern Settings settings; -/* Function definitions in ldl.c: */ -void ldl_solve(double *target, double *var); -void ldl_factor(void); -double check_factorization(void); -void matrix_multiply(double *result, double *source); -double check_residual(double *target, double *multiplicand); -void fill_KKT(void); - -/* Function definitions in matrix_support.c: */ -void multbymA(double *lhs, double *rhs); -void multbymAT(double *lhs, double *rhs); -void multbymG(double *lhs, double *rhs); -void multbymGT(double *lhs, double *rhs); -void multbyP(double *lhs, double *rhs); -void fillq(void); -void fillh(void); -void fillb(void); -void pre_ops(void); - -/* Function definitions in solver.c: */ -double eval_gap(void); -void set_defaults(void); -void setup_pointers(void); -void setup_indexed_params(void); -void setup_indexed_optvars(void); -void setup_indexing(void); -void set_start(void); -double eval_objv(void); -void fillrhs_aff(void); -void fillrhs_cc(void); -void refine(double *target, double *var); -double calc_ineq_resid_squared(void); -double calc_eq_resid_squared(void); -void better_start(void); -void fillrhs_start(void); -long solve(void); - -/* Function definitions in testsolver.c: */ -int main(int argc, char **argv); -void load_default_data(const mat& traj1, const mat& traj2); - -/* Function definitions in util.c: */ -void tic(void); -float toc(void); -float tocq(void); -void printmatrix(char *name, double *A, int m, int n, int sparse); -double unif(double lower, double upper); -float ran1(long*idum, int reset); -float randn_internal(long *idum, int reset); -double randn(void); -void reset_rand(void); - -#endif diff --git a/traj2dmp.cc b/traj2dmp.cc index 6b2ef24cef76bc09bc5ba0921b40727a8b98281f..efc056b61583da861b65e8752b3665036bb64a9b 100644 --- a/traj2dmp.cc +++ b/traj2dmp.cc @@ -13,15 +13,16 @@ mat smartDiff(const mat& inMat) { //now supports col vecs only } Dmp traj2dmp(const mat& trajectory, const double& dt) { - + int nbrDims = trajectory.n_cols; // Number of dimensions double tau;; - mat g = zeros<mat>(7,1); - mat w = zeros<mat>(15,7); + mat g = zeros<mat>(nbrDims,1); + mat w = zeros<mat>(15,nbrDims); static double alpha_g = 12.5; static double alpha_v = 25; static double alpha_z = 25; static double beta_v = 6.25; - static double beta_z = 6.25; + //static double beta_z = 6.25; + static double beta_z = 8; static double n_rfs = 15; // number of weight functions mat arr = linspace<mat>(0, 1, n_rfs)*0.5; mat c = (1+alpha_z/2*arr)%exp(-alpha_z/2*arr); @@ -31,7 +32,7 @@ Dmp traj2dmp(const mat& trajectory, const double& dt) { D = 1/join_vert(D, Dlast); - for (int j = 0; j < trajectory.n_cols; ++j) { + for (int j = 0; j < nbrDims; ++j) { mat T = trajectory.col(j); mat TD = smartDiff(T)/dt; mat TDD = smartDiff(TD)/dt; @@ -74,7 +75,8 @@ Dmp traj2dmp(const mat& trajectory, const double& dt) { mat sxtd = sum(((V%Ft)*ones(1,c.n_rows))%PSI).t(); w.col(j) = sxtd/(sx2+1.e-10); } - tau = trajectory.n_rows * dt; + tau = 0.5 / (trajectory.n_rows * dt); return Dmp(w, g, tau); } + diff --git a/yCorr.txt b/yCorr.txt index 3f4185c3cbb91b37bded6169227d02896fd85333..1fa85dd452fed8d7e04e9e301ed70d54e7f16b99 100644 --- a/yCorr.txt +++ b/yCorr.txt @@ -1,76 +1,360 @@ - 3.0223695e+02 -3.9834919e+01 -2.0297419e+02 - 3.0223591e+02 -3.9835325e+01 -2.0297487e+02 - 3.0223686e+02 -3.9832731e+01 -2.0297521e+02 - 3.0223692e+02 -3.9834239e+01 -2.0297520e+02 - 3.0223657e+02 -3.9834502e+01 -2.0297487e+02 - 3.0223689e+02 -3.9834719e+01 -2.0297465e+02 - 3.0223708e+02 -3.9834659e+01 -2.0297420e+02 - 3.0223711e+02 -3.9834843e+01 -2.0297545e+02 - 3.0223638e+02 -3.9834673e+01 -2.0297430e+02 - 3.0223525e+02 -3.9835508e+01 -2.0297332e+02 - 3.0223721e+02 -3.9833826e+01 -2.0297526e+02 - 3.0224879e+02 -3.9822272e+01 -2.0298614e+02 - 3.0223990e+02 -3.9829889e+01 -2.0297635e+02 - 3.0237299e+02 -3.9899177e+01 -2.0283473e+02 - 3.0349354e+02 -4.0989845e+01 -2.0087493e+02 - 3.0380491e+02 -4.1538497e+01 -1.9983147e+02 - 3.0416867e+02 -4.1684898e+01 -1.9870055e+02 - 3.0418522e+02 -4.0523534e+01 -1.9825814e+02 - 3.0503675e+02 -4.1026825e+01 -1.9523339e+02 - 3.0510448e+02 -4.1000287e+01 -1.9390557e+02 - 3.0526585e+02 -3.8165719e+01 -1.9025976e+02 - 3.0460684e+02 -3.6666290e+01 -1.8461684e+02 - 3.0489587e+02 -3.5777473e+01 -1.7983821e+02 - 3.0458161e+02 -3.3167132e+01 -1.7710945e+02 - 3.0398068e+02 -2.9601744e+01 -1.7398172e+02 - 3.0272250e+02 -2.5806459e+01 -1.7204405e+02 - 3.0211820e+02 -2.5272499e+01 -1.7205352e+02 - 3.0183699e+02 -2.5026116e+01 -1.7250083e+02 - 3.0209857e+02 -2.4415831e+01 -1.7427006e+02 - 3.0249621e+02 -2.4170410e+01 -1.7598460e+02 - 3.0175846e+02 -2.6807308e+01 -1.7736552e+02 - 3.0210448e+02 -2.7008256e+01 -1.8170757e+02 - 3.0257423e+02 -2.8706595e+01 -1.8470767e+02 - 3.0138933e+02 -2.8727643e+01 -1.8820684e+02 - 3.0229662e+02 -2.8698888e+01 -1.9049696e+02 - 3.0168589e+02 -3.0408833e+01 -1.9155020e+02 - 3.0073978e+02 -3.0545191e+01 -1.9295977e+02 - 3.0105268e+02 -2.9967830e+01 -1.9488827e+02 - 3.0128969e+02 -2.8819625e+01 -1.9731451e+02 - 3.0152293e+02 -2.9056384e+01 -1.9773305e+02 - 3.0292551e+02 -2.8930579e+01 -1.9894957e+02 - 3.0282002e+02 -2.9994016e+01 -1.9935546e+02 - 3.0183690e+02 -2.9714251e+01 -2.0109038e+02 - 3.0155707e+02 -3.0923319e+01 -2.0111282e+02 - 3.0114863e+02 -3.1262125e+01 -2.0161330e+02 - 3.0080948e+02 -3.1330917e+01 -2.0199235e+02 - 3.0066369e+02 -3.1904731e+01 -2.0230181e+02 - 3.0089914e+02 -3.2239725e+01 -2.0257610e+02 - 3.0086561e+02 -3.1910751e+01 -2.0378762e+02 - 3.0126695e+02 -3.2142638e+01 -2.0411564e+02 - 3.0170184e+02 -3.2050087e+01 -2.0456446e+02 - 3.0142283e+02 -3.2177461e+01 -2.0513109e+02 - 3.0050868e+02 -3.2393142e+01 -2.0609014e+02 - 2.9994504e+02 -3.2161979e+01 -2.0740855e+02 - 2.9986788e+02 -3.2332645e+01 -2.0759383e+02 - 2.9952583e+02 -3.2648627e+01 -2.0849387e+02 - 2.9985118e+02 -3.2264215e+01 -2.1134744e+02 - 3.0033634e+02 -3.2168657e+01 -2.1179252e+02 - 3.0065482e+02 -3.2054062e+01 -2.1209720e+02 - 3.0105754e+02 -3.1678614e+01 -2.1257322e+02 - 3.0118408e+02 -3.1253063e+01 -2.1317607e+02 - 3.0135382e+02 -3.1052778e+01 -2.1352918e+02 - 3.0125728e+02 -3.1329922e+01 -2.1393510e+02 - 3.0074174e+02 -3.1504056e+01 -2.1459154e+02 - 3.0066282e+02 -3.1426728e+01 -2.1549018e+02 - 3.0100472e+02 -3.1193307e+01 -2.1647271e+02 - 3.0054018e+02 -3.1543460e+01 -2.1851332e+02 - 3.0066610e+02 -3.1176024e+01 -2.1964827e+02 - 3.0095334e+02 -3.1299501e+01 -2.1974256e+02 - 3.0136688e+02 -3.1178770e+01 -2.2002438e+02 - 3.0155365e+02 -3.1113655e+01 -2.2031908e+02 - 3.0198413e+02 -3.0930672e+01 -2.2081381e+02 - 3.0232691e+02 -3.0838242e+01 -2.2156517e+02 - 3.0253697e+02 -3.0778464e+01 -2.2211745e+02 - 3.0276447e+02 -3.0753085e+01 -2.2316257e+02 - 3.0294690e+02 -3.0679013e+01 -2.2429655e+02 + 4.3605988e+02 -6.7619013e+01 -2.4550054e+02 + 4.3606081e+02 -6.7615225e+01 -2.4549979e+02 + 4.3606090e+02 -6.7616406e+01 -2.4549926e+02 + 4.3605886e+02 -6.7616217e+01 -2.4550194e+02 + 4.3606006e+02 -6.7619367e+01 -2.4550061e+02 + 4.3605941e+02 -6.7616390e+01 -2.4550051e+02 + 4.3605941e+02 -6.7618121e+01 -2.4550117e+02 + 4.3606003e+02 -6.7617203e+01 -2.4550038e+02 + 4.3605939e+02 -6.7618223e+01 -2.4550052e+02 + 4.3605933e+02 -6.7618592e+01 -2.4550104e+02 + 4.3606036e+02 -6.7618074e+01 -2.4549795e+02 + 4.3605990e+02 -6.7617547e+01 -2.4550052e+02 + 4.3606019e+02 -6.7614628e+01 -2.4550018e+02 + 4.3605966e+02 -6.7617531e+01 -2.4550162e+02 + 4.3605823e+02 -6.7619106e+01 -2.4550301e+02 + 4.3605839e+02 -6.7618217e+01 -2.4550310e+02 + 4.3606094e+02 -6.7617744e+01 -2.4549946e+02 + 4.3605980e+02 -6.7616020e+01 -2.4550110e+02 + 4.3605917e+02 -6.7620927e+01 -2.4550279e+02 + 4.3606006e+02 -6.7617227e+01 -2.4550049e+02 + 4.3605987e+02 -6.7619014e+01 -2.4550063e+02 + 4.3605993e+02 -6.7614385e+01 -2.4549944e+02 + 4.3605894e+02 -6.7619588e+01 -2.4550128e+02 + 4.3607628e+02 -6.7660451e+01 -2.4548194e+02 + 4.3608962e+02 -6.7694019e+01 -2.4546488e+02 + 4.3608972e+02 -6.7691529e+01 -2.4546631e+02 + 4.3608885e+02 -6.7690711e+01 -2.4546788e+02 + 4.3609051e+02 -6.7693604e+01 -2.4546605e+02 + 4.3608902e+02 -6.7691013e+01 -2.4546678e+02 + 4.3608831e+02 -6.7695123e+01 -2.4546922e+02 + 4.3609029e+02 -6.7693803e+01 -2.4546547e+02 + 4.3608767e+02 -6.7696083e+01 -2.4546889e+02 + 4.3608919e+02 -6.7694221e+01 -2.4546807e+02 + 4.3608888e+02 -6.7695031e+01 -2.4546915e+02 + 4.3608852e+02 -6.7690927e+01 -2.4546819e+02 + 4.3608944e+02 -6.7695656e+01 -2.4546782e+02 + 4.3609005e+02 -6.7689771e+01 -2.4546571e+02 + 4.3608936e+02 -6.7695146e+01 -2.4546808e+02 + 4.3608942e+02 -6.7695456e+01 -2.4546636e+02 + 4.3609018e+02 -6.7693278e+01 -2.4546503e+02 + 4.3609139e+02 -6.7693090e+01 -2.4546280e+02 + 4.3609106e+02 -6.7692733e+01 -2.4546511e+02 + 4.3609070e+02 -6.7691824e+01 -2.4546380e+02 + 4.3609023e+02 -6.7693077e+01 -2.4546251e+02 + 4.3609165e+02 -6.7696469e+01 -2.4545627e+02 + 4.3609223e+02 -6.7694318e+01 -2.4545757e+02 + 4.3609033e+02 -6.7694969e+01 -2.4546006e+02 + 4.3609168e+02 -6.7696258e+01 -2.4545757e+02 + 4.3609462e+02 -6.7694137e+01 -2.4545434e+02 + 4.3609503e+02 -6.7702260e+01 -2.4545431e+02 + 4.3609700e+02 -6.7705858e+01 -2.4545343e+02 + 4.3610132e+02 -6.7726055e+01 -2.4544761e+02 + 4.3616497e+02 -6.7881866e+01 -2.4537644e+02 + 4.3623984e+02 -6.8073951e+01 -2.4528919e+02 + 4.3626126e+02 -6.8124503e+01 -2.4526542e+02 + 4.3629900e+02 -6.8230802e+01 -2.4522412e+02 + 4.3641881e+02 -6.8539642e+01 -2.4508818e+02 + 4.3655002e+02 -6.8878403e+01 -2.4493589e+02 + 4.3665956e+02 -6.9157974e+01 -2.4481106e+02 + 4.3680204e+02 -6.9532447e+01 -2.4464552e+02 + 4.3700604e+02 -7.0062758e+01 -2.4441018e+02 + 4.3723692e+02 -7.0629976e+01 -2.4405025e+02 + 4.3745276e+02 -7.0876607e+01 -2.4313999e+02 + 4.3764455e+02 -7.0954967e+01 -2.4208196e+02 + 4.3778063e+02 -7.0993802e+01 -2.4125888e+02 + 4.3789328e+02 -7.1104861e+01 -2.4073629e+02 + 4.3793746e+02 -7.1169331e+01 -2.4057396e+02 + 4.3795223e+02 -7.1202150e+01 -2.4052049e+02 + 4.3794428e+02 -7.1189597e+01 -2.4049388e+02 + 4.3794056e+02 -7.1205183e+01 -2.4049563e+02 + 4.3793520e+02 -7.1214725e+01 -2.4048081e+02 + 4.3794438e+02 -7.1279566e+01 -2.4043753e+02 + 4.3793022e+02 -7.1551078e+01 -2.4040192e+02 + 4.3783439e+02 -7.1868868e+01 -2.4043284e+02 + 4.3772817e+02 -7.2214586e+01 -2.4050302e+02 + 4.3765516e+02 -7.2419774e+01 -2.4054675e+02 + 4.3762785e+02 -7.2492960e+01 -2.4050207e+02 + 4.3761670e+02 -7.2481231e+01 -2.4039291e+02 + 4.3762435e+02 -7.2542074e+01 -2.4016308e+02 + 4.3770229e+02 -7.2824700e+01 -2.3992245e+02 + 4.3778919e+02 -7.3225683e+01 -2.3973844e+02 + 4.3776226e+02 -7.3338957e+01 -2.3956653e+02 + 4.3771858e+02 -7.3275548e+01 -2.3907586e+02 + 4.3770184e+02 -7.2901370e+01 -2.3805057e+02 + 4.3769303e+02 -7.2469084e+01 -2.3697582e+02 + 4.3758744e+02 -7.2256074e+01 -2.3610730e+02 + 4.3748367e+02 -7.2500519e+01 -2.3596512e+02 + 4.3728555e+02 -7.3072209e+01 -2.3614562e+02 + 4.3709358e+02 -7.3418075e+01 -2.3626432e+02 + 4.3697462e+02 -7.3743222e+01 -2.3619639e+02 + 4.3691095e+02 -7.3750641e+01 -2.3576467e+02 + 4.3687527e+02 -7.3651451e+01 -2.3514997e+02 + 4.3683923e+02 -7.3753493e+01 -2.3481500e+02 + 4.3678663e+02 -7.4063214e+01 -2.3469873e+02 + 4.3672447e+02 -7.4508593e+01 -2.3462010e+02 + 4.3669359e+02 -7.4824563e+01 -2.3448497e+02 + 4.3667374e+02 -7.5032032e+01 -2.3406589e+02 + 4.3661055e+02 -7.4954784e+01 -2.3309387e+02 + 4.3660905e+02 -7.4830989e+01 -2.3232538e+02 + 4.3656857e+02 -7.4698109e+01 -2.3162142e+02 + 4.3650661e+02 -7.4695751e+01 -2.3104395e+02 + 4.3641653e+02 -7.4795227e+01 -2.3092178e+02 + 4.3617606e+02 -7.4862809e+01 -2.3068826e+02 + 4.3604971e+02 -7.4777756e+01 -2.2984775e+02 + 4.3604007e+02 -7.4753749e+01 -2.2868407e+02 + 4.3597193e+02 -7.4546014e+01 -2.2744058e+02 + 4.3603815e+02 -7.4461440e+01 -2.2651740e+02 + 4.3610014e+02 -7.4529802e+01 -2.2613006e+02 + 4.3618403e+02 -7.4754566e+01 -2.2600595e+02 + 4.3630603e+02 -7.5093506e+01 -2.2584363e+02 + 4.3637316e+02 -7.5266973e+01 -2.2572408e+02 + 4.3638057e+02 -7.5275438e+01 -2.2566746e+02 + 4.3638473e+02 -7.5255586e+01 -2.2560551e+02 + 4.3638556e+02 -7.5240383e+01 -2.2558155e+02 + 4.3639186e+02 -7.5232213e+01 -2.2556426e+02 + 4.3639581e+02 -7.5220019e+01 -2.2555305e+02 + 4.3639892e+02 -7.5209182e+01 -2.2554928e+02 + 4.3641403e+02 -7.5153524e+01 -2.2553834e+02 + 4.3643851e+02 -7.5071635e+01 -2.2552278e+02 + 4.3647081e+02 -7.4967233e+01 -2.2549856e+02 + 4.3655044e+02 -7.4706268e+01 -2.2543898e+02 + 4.3667000e+02 -7.4304602e+01 -2.2535351e+02 + 4.3682311e+02 -7.3799970e+01 -2.2523648e+02 + 4.3704173e+02 -7.3411246e+01 -2.2504696e+02 + 4.3739680e+02 -7.3510148e+01 -2.2482338e+02 + 4.3767729e+02 -7.3555828e+01 -2.2468040e+02 + 4.3786108e+02 -7.3393541e+01 -2.2476718e+02 + 4.3798703e+02 -7.3089456e+01 -2.2489794e+02 + 4.3816613e+02 -7.2815749e+01 -2.2529385e+02 + 4.3838522e+02 -7.2552412e+01 -2.2599695e+02 + 4.3858922e+02 -7.2238666e+01 -2.2628347e+02 + 4.3876455e+02 -7.2074280e+01 -2.2636488e+02 + 4.3895018e+02 -7.1935247e+01 -2.2639859e+02 + 4.3930574e+02 -7.1847381e+01 -2.2642521e+02 + 4.3964662e+02 -7.1712967e+01 -2.2657483e+02 + 4.3984794e+02 -7.1320402e+01 -2.2680812e+02 + 4.4005134e+02 -7.0913760e+01 -2.2707746e+02 + 4.4030856e+02 -7.0640746e+01 -2.2762879e+02 + 4.4067022e+02 -7.0443799e+01 -2.2826565e+02 + 4.4119066e+02 -7.0585318e+01 -2.2888245e+02 + 4.4178430e+02 -7.0645601e+01 -2.2940340e+02 + 4.4236276e+02 -7.0674022e+01 -2.2980610e+02 + 4.4294527e+02 -7.0442735e+01 -2.3009266e+02 + 4.4327663e+02 -6.9913969e+01 -2.3016691e+02 + 4.4353320e+02 -6.9412747e+01 -2.3042787e+02 + 4.4383510e+02 -6.9135953e+01 -2.3096591e+02 + 4.4410977e+02 -6.9064410e+01 -2.3111094e+02 + 4.4433897e+02 -6.9107651e+01 -2.3097396e+02 + 4.4446520e+02 -6.9037109e+01 -2.3111772e+02 + 4.4462202e+02 -6.9067297e+01 -2.3193858e+02 + 4.4480255e+02 -6.8904959e+01 -2.3285547e+02 + 4.4503807e+02 -6.8580409e+01 -2.3384480e+02 + 4.4522354e+02 -6.8292194e+01 -2.3456304e+02 + 4.4538496e+02 -6.7980820e+01 -2.3488799e+02 + 4.4559498e+02 -6.7787902e+01 -2.3526606e+02 + 4.4587147e+02 -6.7754636e+01 -2.3559870e+02 + 4.4599055e+02 -6.7842588e+01 -2.3605457e+02 + 4.4601376e+02 -6.8004810e+01 -2.3663200e+02 + 4.4603502e+02 -6.8107554e+01 -2.3695877e+02 + 4.4608729e+02 -6.7986758e+01 -2.3700851e+02 + 4.4615918e+02 -6.7791622e+01 -2.3705662e+02 + 4.4627401e+02 -6.7457552e+01 -2.3708261e+02 + 4.4646556e+02 -6.7196789e+01 -2.3717902e+02 + 4.4686351e+02 -6.6992311e+01 -2.3731733e+02 + 4.4722026e+02 -6.6628141e+01 -2.3744638e+02 + 4.4747009e+02 -6.6275285e+01 -2.3771029e+02 + 4.4760340e+02 -6.6071448e+01 -2.3806835e+02 + 4.4776849e+02 -6.6194495e+01 -2.3865237e+02 + 4.4798479e+02 -6.6412726e+01 -2.3906429e+02 + 4.4816220e+02 -6.6549757e+01 -2.3920418e+02 + 4.4824454e+02 -6.6469248e+01 -2.3930417e+02 + 4.4833660e+02 -6.6373442e+01 -2.3946839e+02 + 4.4845855e+02 -6.6416625e+01 -2.4002734e+02 + 4.4859287e+02 -6.6410307e+01 -2.4057024e+02 + 4.4876690e+02 -6.6252178e+01 -2.4069958e+02 + 4.4900502e+02 -6.6099802e+01 -2.4107743e+02 + 4.4926655e+02 -6.6056307e+01 -2.4177172e+02 + 4.4939053e+02 -6.5802197e+01 -2.4189089e+02 + 4.4944599e+02 -6.5625890e+01 -2.4185673e+02 + 4.4951250e+02 -6.5422623e+01 -2.4187590e+02 + 4.4961608e+02 -6.5142314e+01 -2.4202101e+02 + 4.4971000e+02 -6.5006159e+01 -2.4258829e+02 + 4.4976810e+02 -6.4990343e+01 -2.4321976e+02 + 4.4980650e+02 -6.4907210e+01 -2.4329551e+02 + 4.4985126e+02 -6.4904801e+01 -2.4325957e+02 + 4.5003806e+02 -6.5042080e+01 -2.4306774e+02 + 4.5014779e+02 -6.5085592e+01 -2.4298232e+02 + 4.5016420e+02 -6.5056378e+01 -2.4306015e+02 + 4.5019751e+02 -6.4993114e+01 -2.4309654e+02 + 4.5024177e+02 -6.4932666e+01 -2.4316069e+02 + 4.5029559e+02 -6.4999220e+01 -2.4358632e+02 + 4.5040785e+02 -6.5140239e+01 -2.4446254e+02 + 4.5045477e+02 -6.5260783e+01 -2.4515952e+02 + 4.5054164e+02 -6.5343620e+01 -2.4573588e+02 + 4.5066904e+02 -6.5289829e+01 -2.4595720e+02 + 4.5092975e+02 -6.5235677e+01 -2.4575296e+02 + 4.5120911e+02 -6.5452009e+01 -2.4563379e+02 + 4.5145537e+02 -6.5649030e+01 -2.4562097e+02 + 4.5166232e+02 -6.5923641e+01 -2.4562678e+02 + 4.5173865e+02 -6.6131787e+01 -2.4584357e+02 + 4.5186987e+02 -6.6185771e+01 -2.4610758e+02 + 4.5209398e+02 -6.5988142e+01 -2.4621076e+02 + 4.5236034e+02 -6.5825738e+01 -2.4627123e+02 + 4.5260724e+02 -6.5678796e+01 -2.4637867e+02 + 4.5285430e+02 -6.5578953e+01 -2.4664594e+02 + 4.5299803e+02 -6.5410539e+01 -2.4698862e+02 + 4.5303097e+02 -6.5340672e+01 -2.4723311e+02 + 4.5305562e+02 -6.5264636e+01 -2.4728045e+02 + 4.5306594e+02 -6.5247004e+01 -2.4732519e+02 + 4.5306405e+02 -6.5264496e+01 -2.4742607e+02 + 4.5304472e+02 -6.5397836e+01 -2.4782421e+02 + 4.5301322e+02 -6.5620756e+01 -2.4845155e+02 + 4.5299279e+02 -6.5809958e+01 -2.4919277e+02 + 4.5299431e+02 -6.5890315e+01 -2.4967726e+02 + 4.5301099e+02 -6.5888175e+01 -2.4996206e+02 + 4.5303029e+02 -6.5875616e+01 -2.5027983e+02 + 4.5303933e+02 -6.5921322e+01 -2.5072798e+02 + 4.5305895e+02 -6.5882937e+01 -2.5099112e+02 + 4.5308636e+02 -6.5804778e+01 -2.5109610e+02 + 4.5310461e+02 -6.5751077e+01 -2.5113044e+02 + 4.5311672e+02 -6.5712112e+01 -2.5116566e+02 + 4.5312965e+02 -6.5681314e+01 -2.5123475e+02 + 4.5312968e+02 -6.5677515e+01 -2.5154169e+02 + 4.5317532e+02 -6.5612120e+01 -2.5207506e+02 + 4.5327657e+02 -6.5284186e+01 -2.5216013e+02 + 4.5330303e+02 -6.5190016e+01 -2.5216508e+02 + 4.5331565e+02 -6.5155558e+01 -2.5216246e+02 + 4.5333801e+02 -6.5080263e+01 -2.5217843e+02 + 4.5336334e+02 -6.4999102e+01 -2.5218027e+02 + 4.5337978e+02 -6.4940435e+01 -2.5218500e+02 + 4.5338259e+02 -6.4937747e+01 -2.5220608e+02 + 4.5338485e+02 -6.4934983e+01 -2.5220713e+02 + 4.5338358e+02 -6.4933019e+01 -2.5220869e+02 + 4.5338219e+02 -6.4931190e+01 -2.5221045e+02 + 4.5338271e+02 -6.4934712e+01 -2.5220752e+02 + 4.5337501e+02 -6.4951187e+01 -2.5221272e+02 + 4.5336891e+02 -6.4951670e+01 -2.5221831e+02 + 4.5336754e+02 -6.4944503e+01 -2.5221621e+02 + 4.5336443e+02 -6.4935635e+01 -2.5221662e+02 + 4.5336564e+02 -6.4936344e+01 -2.5221407e+02 + 4.5336670e+02 -6.4938077e+01 -2.5221080e+02 + 4.5336610e+02 -6.4940106e+01 -2.5221049e+02 + 4.5336498e+02 -6.4937594e+01 -2.5221181e+02 + 4.5336420e+02 -6.4939112e+01 -2.5221336e+02 + 4.5336439e+02 -6.4935320e+01 -2.5221199e+02 + 4.5336260e+02 -6.4936576e+01 -2.5221503e+02 + 4.5336522e+02 -6.4935999e+01 -2.5221241e+02 + 4.5336555e+02 -6.4934017e+01 -2.5221204e+02 + 4.5336550e+02 -6.4931021e+01 -2.5221162e+02 + 4.5336551e+02 -6.4931536e+01 -2.5221021e+02 + 4.5336492e+02 -6.4929382e+01 -2.5221042e+02 + 4.5336590e+02 -6.4931413e+01 -2.5221013e+02 + 4.5336506e+02 -6.4930182e+01 -2.5221022e+02 + 4.5336695e+02 -6.4927169e+01 -2.5220452e+02 + 4.5336485e+02 -6.4925919e+01 -2.5221042e+02 + 4.5336693e+02 -6.4930863e+01 -2.5220815e+02 + 4.5336578e+02 -6.4928643e+01 -2.5220895e+02 + 4.5336597e+02 -6.4929302e+01 -2.5220874e+02 + 4.5336549e+02 -6.4930967e+01 -2.5220982e+02 + 4.5336576e+02 -6.4930669e+01 -2.5220952e+02 + 4.5336596e+02 -6.4928373e+01 -2.5220802e+02 + 4.5336710e+02 -6.4929208e+01 -2.5220647e+02 + 4.5336471e+02 -6.4925760e+01 -2.5220930e+02 + 4.5336641e+02 -6.4926177e+01 -2.5220759e+02 + 4.5336555e+02 -6.4930922e+01 -2.5220799e+02 + 4.5336629e+02 -6.4928618e+01 -2.5220860e+02 + 4.5336688e+02 -6.4931693e+01 -2.5220755e+02 + 4.5336692e+02 -6.4928975e+01 -2.5220785e+02 + 4.5336553e+02 -6.4931582e+01 -2.5220955e+02 + 4.5336633e+02 -6.4927163e+01 -2.5220832e+02 + 4.5336762e+02 -6.4930368e+01 -2.5220499e+02 + 4.5336652e+02 -6.4932318e+01 -2.5220990e+02 + 4.5336615e+02 -6.4924892e+01 -2.5220680e+02 + 4.5336600e+02 -6.4929465e+01 -2.5220808e+02 + 4.5336667e+02 -6.4933060e+01 -2.5220833e+02 + 4.5336776e+02 -6.4924386e+01 -2.5220619e+02 + 4.5336541e+02 -6.4929126e+01 -2.5220871e+02 + 4.5336640e+02 -6.4929148e+01 -2.5220556e+02 + 4.5336650e+02 -6.4928535e+01 -2.5220549e+02 + 4.5336726e+02 -6.4927171e+01 -2.5220615e+02 + 4.5336645e+02 -6.4928644e+01 -2.5220648e+02 + 4.5336676e+02 -6.4926939e+01 -2.5220672e+02 + 4.5336697e+02 -6.4928301e+01 -2.5220619e+02 + 4.5336641e+02 -6.4926327e+01 -2.5220830e+02 + 4.5336658e+02 -6.4932604e+01 -2.5220413e+02 + 4.5336556e+02 -6.4928771e+01 -2.5220757e+02 + 4.5336742e+02 -6.4927043e+01 -2.5220484e+02 + 4.5336694e+02 -6.4926921e+01 -2.5220639e+02 + 4.5336574e+02 -6.4923366e+01 -2.5220614e+02 + 4.5336533e+02 -6.4924804e+01 -2.5220769e+02 + 4.5336668e+02 -6.4924963e+01 -2.5220547e+02 + 4.5336515e+02 -6.4923417e+01 -2.5220751e+02 + 4.5336700e+02 -6.4924754e+01 -2.5220582e+02 + 4.5336668e+02 -6.4927534e+01 -2.5220372e+02 + 4.5336741e+02 -6.4923318e+01 -2.5220340e+02 + 4.5336659e+02 -6.4924670e+01 -2.5220548e+02 + 4.5336720e+02 -6.4924474e+01 -2.5219705e+02 + 4.5336549e+02 -6.4922881e+01 -2.5220140e+02 + 4.5336509e+02 -6.4918678e+01 -2.5220039e+02 + 4.5336770e+02 -6.4921534e+01 -2.5219675e+02 + 4.5336648e+02 -6.4925208e+01 -2.5219926e+02 + 4.5336584e+02 -6.4921114e+01 -2.5219988e+02 + 4.5336751e+02 -6.4918846e+01 -2.5219674e+02 + 4.5336594e+02 -6.4917603e+01 -2.5219816e+02 + 4.5336560e+02 -6.4921296e+01 -2.5219954e+02 + 4.5336629e+02 -6.4920930e+01 -2.5219812e+02 + 4.5336559e+02 -6.4921054e+01 -2.5219831e+02 + 4.5336810e+02 -6.4920005e+01 -2.5219735e+02 + 4.5336553e+02 -6.4919440e+01 -2.5219734e+02 + 4.5336640e+02 -6.4918152e+01 -2.5219746e+02 + 4.5336676e+02 -6.4921776e+01 -2.5219585e+02 + 4.5336739e+02 -6.4918274e+01 -2.5219608e+02 + 4.5336405e+02 -6.4918037e+01 -2.5219984e+02 + 4.5336633e+02 -6.4923198e+01 -2.5219886e+02 + 4.5336529e+02 -6.4920268e+01 -2.5219931e+02 + 4.5336546e+02 -6.4919335e+01 -2.5219925e+02 + 4.5336606e+02 -6.4921074e+01 -2.5219906e+02 + 4.5336718e+02 -6.4920141e+01 -2.5219649e+02 + 4.5336657e+02 -6.4917883e+01 -2.5219460e+02 + 4.5336583e+02 -6.4919618e+01 -2.5219775e+02 + 4.5336623e+02 -6.4921718e+01 -2.5219752e+02 + 4.5336597e+02 -6.4920605e+01 -2.5219816e+02 + 4.5336714e+02 -6.4917770e+01 -2.5219728e+02 + 4.5336662e+02 -6.4920252e+01 -2.5219703e+02 + 4.5336580e+02 -6.4922223e+01 -2.5219848e+02 + 4.5336538e+02 -6.4921635e+01 -2.5220007e+02 + 4.5336691e+02 -6.4921705e+01 -2.5219757e+02 + 4.5336630e+02 -6.4922936e+01 -2.5219934e+02 + 4.5336482e+02 -6.4920539e+01 -2.5219872e+02 + 4.5336667e+02 -6.4922156e+01 -2.5219829e+02 + 4.5336591e+02 -6.4917084e+01 -2.5219986e+02 + 4.5336753e+02 -6.4919667e+01 -2.5219760e+02 + 4.5336635e+02 -6.4918881e+01 -2.5219815e+02 + 4.5336594e+02 -6.4919811e+01 -2.5219675e+02 + 4.5336655e+02 -6.4921335e+01 -2.5219609e+02 + 4.5336441e+02 -6.4918611e+01 -2.5220002e+02 + 4.5336576e+02 -6.4920603e+01 -2.5219826e+02 + 4.5336648e+02 -6.4919723e+01 -2.5219704e+02 + 4.5336552e+02 -6.4919398e+01 -2.5219813e+02 + 4.5336494e+02 -6.4919208e+01 -2.5219808e+02 + 4.5336595e+02 -6.4919125e+01 -2.5219804e+02 + 4.5336656e+02 -6.4919787e+01 -2.5219698e+02 + 4.5336628e+02 -6.4918607e+01 -2.5219646e+02 + 4.5336514e+02 -6.4919659e+01 -2.5219885e+02 + 4.5336388e+02 -6.4919170e+01 -2.5220170e+02 + 4.5336823e+02 -6.4921747e+01 -2.5219482e+02 + 4.5336515e+02 -6.4921390e+01 -2.5219951e+02 + 4.5336608e+02 -6.4920417e+01 -2.5219756e+02 + 4.5336644e+02 -6.4919597e+01 -2.5219705e+02 + 4.5336648e+02 -6.4918769e+01 -2.5219702e+02 + 4.5336669e+02 -6.4917250e+01 -2.5219616e+02 + 4.5336492e+02 -6.4921413e+01 -2.5219793e+02 + 4.5336470e+02 -6.4922470e+01 -2.5220019e+02 + 4.5336628e+02 -6.4922024e+01 -2.5219810e+02 + 4.5336534e+02 -6.4920044e+01 -2.5220037e+02 + 4.5336703e+02 -6.4920123e+01 -2.5219776e+02 + 4.5336494e+02 -6.4917917e+01 -2.5219985e+02 + 4.5336670e+02 -6.4920167e+01 -2.5219724e+02 + 4.5336595e+02 -6.4921194e+01 -2.5219805e+02 + 4.5336595e+02 -6.4921194e+01 -2.5219805e+02 diff --git a/yDef.txt b/yDef.txt index ea67eebcdd31437cb45dbfa0ba0eae44683c2aba..aef346ddc8c35422e36e0850f42193b1df3cea9e 100644 --- a/yDef.txt +++ b/yDef.txt @@ -1,44 +1,241 @@ - 3.2768525e+02 7.8363243e+01 -8.5946192e+01 - 3.2774126e+02 7.8335016e+01 -8.5837661e+01 - 3.2779447e+02 7.8308290e+01 -8.5750800e+01 - 3.2783042e+02 7.8299708e+01 -8.5704856e+01 - 3.2784690e+02 7.8300467e+01 -8.5686742e+01 - 3.2785531e+02 7.8311779e+01 -8.5685360e+01 - 3.2786113e+02 7.8312944e+01 -8.5679364e+01 - 3.2786538e+02 7.8311501e+01 -8.5674790e+01 - 3.2784013e+02 7.8106486e+01 -8.5776253e+01 - 3.2549070e+02 6.9241715e+01 -9.3386761e+01 - 3.2021972e+02 5.0200306e+01 -1.0814421e+02 - 3.1480022e+02 2.8189001e+01 -1.2433614e+02 - 3.1139499e+02 9.3181056e+00 -1.4142745e+02 - 3.0932249e+02 -5.9714685e+00 -1.5852857e+02 - 3.0765599e+02 -1.8951405e+01 -1.7256487e+02 - 3.0577346e+02 -2.8161469e+01 -1.8451982e+02 - 3.0425340e+02 -3.3984474e+01 -1.9393052e+02 - 3.0324620e+02 -3.7471751e+01 -2.0013148e+02 - 3.0252194e+02 -3.9213062e+01 -2.0329289e+02 - 3.0230601e+02 -3.9907045e+01 -2.0398257e+02 - 3.0222986e+02 -3.9907444e+01 -2.0404027e+02 - 3.0206323e+02 -3.9716149e+01 -2.0395877e+02 - 3.0200094e+02 -3.9636141e+01 -2.0372995e+02 - 3.0202264e+02 -3.9665638e+01 -2.0349725e+02 - 3.0210856e+02 -3.9767849e+01 -2.0324613e+02 - 3.0215245e+02 -3.9823732e+01 -2.0310492e+02 - 3.0218207e+02 -3.9837033e+01 -2.0304172e+02 - 3.0221128e+02 -3.9839423e+01 -2.0299456e+02 - 3.0222661e+02 -3.9839144e+01 -2.0296808e+02 - 3.0223228e+02 -3.9840421e+01 -2.0295388e+02 - 3.0223492e+02 -3.9839228e+01 -2.0294787e+02 - 3.0224060e+02 -3.9837916e+01 -2.0294521e+02 - 3.0224135e+02 -3.9835714e+01 -2.0294698e+02 - 3.0224117e+02 -3.9834511e+01 -2.0294841e+02 - 3.0224059e+02 -3.9835500e+01 -2.0295001e+02 - 3.0223719e+02 -3.9836645e+01 -2.0295103e+02 - 3.0223875e+02 -3.9834847e+01 -2.0295698e+02 - 3.0223426e+02 -3.9834094e+01 -2.0296371e+02 - 3.0222926e+02 -3.9835312e+01 -2.0296789e+02 - 3.0223012e+02 -3.9836794e+01 -2.0296991e+02 - 3.0223208e+02 -3.9837415e+01 -2.0297179e+02 - 3.0223656e+02 -3.9835058e+01 -2.0297407e+02 - 3.0223670e+02 -3.9835128e+01 -2.0297373e+02 - 3.0223695e+02 -3.9834919e+01 -2.0297419e+02 + 3.1891354e+02 -1.8728151e+02 -1.1170299e+02 + 3.1893083e+02 -1.8716699e+02 -1.1176664e+02 + 3.1905090e+02 -1.8682610e+02 -1.1185550e+02 + 3.1961230e+02 -1.8610299e+02 -1.1156605e+02 + 3.2056792e+02 -1.8510694e+02 -1.1089480e+02 + 3.2165550e+02 -1.8379752e+02 -1.1034154e+02 + 3.2255946e+02 -1.8244033e+02 -1.1016678e+02 + 3.2340125e+02 -1.8088006e+02 -1.1030512e+02 + 3.2439132e+02 -1.7897202e+02 -1.1066604e+02 + 3.2554385e+02 -1.7654090e+02 -1.1109324e+02 + 3.2675391e+02 -1.7402735e+02 -1.1158615e+02 + 3.2789717e+02 -1.7164232e+02 -1.1204024e+02 + 3.2903201e+02 -1.6942593e+02 -1.1259538e+02 + 3.3017807e+02 -1.6718421e+02 -1.1332037e+02 + 3.3128794e+02 -1.6504778e+02 -1.1451571e+02 + 3.3260614e+02 -1.6280632e+02 -1.1579368e+02 + 3.3405841e+02 -1.6049640e+02 -1.1700134e+02 + 3.3556899e+02 -1.5817293e+02 -1.1794644e+02 + 3.3711541e+02 -1.5588773e+02 -1.1908081e+02 + 3.3867670e+02 -1.5367180e+02 -1.2025212e+02 + 3.4007586e+02 -1.5172772e+02 -1.2140439e+02 + 3.4132246e+02 -1.4979438e+02 -1.2247257e+02 + 3.4250441e+02 -1.4792186e+02 -1.2334300e+02 + 3.4363371e+02 -1.4596341e+02 -1.2404606e+02 + 3.4470245e+02 -1.4394426e+02 -1.2462320e+02 + 3.4580692e+02 -1.4204775e+02 -1.2510434e+02 + 3.4696467e+02 -1.4026670e+02 -1.2580829e+02 + 3.4816573e+02 -1.3832741e+02 -1.2675058e+02 + 3.4954010e+02 -1.3659561e+02 -1.2784336e+02 + 3.5114943e+02 -1.3503251e+02 -1.2916562e+02 + 3.5302662e+02 -1.3350077e+02 -1.3072422e+02 + 3.5491513e+02 -1.3198197e+02 -1.3242468e+02 + 3.5681460e+02 -1.3042521e+02 -1.3420711e+02 + 3.5865915e+02 -1.2884798e+02 -1.3630404e+02 + 3.6042164e+02 -1.2698679e+02 -1.3819228e+02 + 3.6255136e+02 -1.2526188e+02 -1.4030053e+02 + 3.6470897e+02 -1.2301685e+02 -1.4220202e+02 + 3.6680134e+02 -1.2102569e+02 -1.4406875e+02 + 3.6881174e+02 -1.1890852e+02 -1.4582428e+02 + 3.7075315e+02 -1.1725604e+02 -1.4774741e+02 + 3.7253025e+02 -1.1572531e+02 -1.4957755e+02 + 3.7422953e+02 -1.1429259e+02 -1.5131268e+02 + 3.7596558e+02 -1.1276607e+02 -1.5287091e+02 + 3.7767464e+02 -1.1093115e+02 -1.5435644e+02 + 3.7931836e+02 -1.0877285e+02 -1.5576237e+02 + 3.8107894e+02 -1.0680911e+02 -1.5738644e+02 + 3.8293294e+02 -1.0474051e+02 -1.5945289e+02 + 3.8463643e+02 -1.0278821e+02 -1.6176530e+02 + 3.8633218e+02 -1.0109875e+02 -1.6439861e+02 + 3.8829733e+02 -9.9466592e+01 -1.6705065e+02 + 3.9017610e+02 -9.7941644e+01 -1.6979108e+02 + 3.9194780e+02 -9.6612437e+01 -1.7278456e+02 + 3.9378020e+02 -9.5183225e+01 -1.7600718e+02 + 3.9566172e+02 -9.3757972e+01 -1.7876817e+02 + 3.9740142e+02 -9.2412597e+01 -1.8095401e+02 + 3.9911721e+02 -9.1129826e+01 -1.8305519e+02 + 4.0061914e+02 -8.9918681e+01 -1.8488156e+02 + 4.0188646e+02 -8.9164347e+01 -1.8676272e+02 + 4.0305545e+02 -8.8848863e+01 -1.8892092e+02 + 4.0424969e+02 -8.8613330e+01 -1.9100387e+02 + 4.0534858e+02 -8.8229997e+01 -1.9287830e+02 + 4.0632823e+02 -8.7726501e+01 -1.9470230e+02 + 4.0724704e+02 -8.7038748e+01 -1.9655798e+02 + 4.0821602e+02 -8.6080628e+01 -1.9829472e+02 + 4.0927366e+02 -8.4713935e+01 -1.9982436e+02 + 4.1042879e+02 -8.3218124e+01 -2.0145505e+02 + 4.1167345e+02 -8.2148658e+01 -2.0302699e+02 + 4.1292177e+02 -8.1277123e+01 -2.0469670e+02 + 4.1403515e+02 -8.0208125e+01 -2.0613284e+02 + 4.1485726e+02 -7.8996168e+01 -2.0727110e+02 + 4.1580176e+02 -7.7119201e+01 -2.0816282e+02 + 4.1684022e+02 -7.4845934e+01 -2.0897035e+02 + 4.1783898e+02 -7.2706888e+01 -2.0982845e+02 + 4.1876650e+02 -7.0912010e+01 -2.1082105e+02 + 4.1969826e+02 -6.9463347e+01 -2.1233966e+02 + 4.2056962e+02 -6.8366317e+01 -2.1418368e+02 + 4.2130398e+02 -6.7636017e+01 -2.1583291e+02 + 4.2195103e+02 -6.7167187e+01 -2.1727470e+02 + 4.2254508e+02 -6.6753775e+01 -2.1864673e+02 + 4.2319482e+02 -6.6350748e+01 -2.2015068e+02 + 4.2403678e+02 -6.6147252e+01 -2.2175327e+02 + 4.2492634e+02 -6.6152170e+01 -2.2329521e+02 + 4.2560610e+02 -6.6066465e+01 -2.2473186e+02 + 4.2609805e+02 -6.5892533e+01 -2.2584835e+02 + 4.2676071e+02 -6.5633425e+01 -2.2637709e+02 + 4.2776172e+02 -6.5384700e+01 -2.2670184e+02 + 4.2853003e+02 -6.5178877e+01 -2.2708663e+02 + 4.2922178e+02 -6.5576389e+01 -2.2767038e+02 + 4.2979196e+02 -6.6375911e+01 -2.2853653e+02 + 4.3025529e+02 -6.7372405e+01 -2.2953308e+02 + 4.3072220e+02 -6.8357599e+01 -2.3041329e+02 + 4.3109125e+02 -6.9396674e+01 -2.3177585e+02 + 4.3135069e+02 -7.0183411e+01 -2.3342212e+02 + 4.3145496e+02 -7.0763862e+01 -2.3515335e+02 + 4.3158644e+02 -7.1120084e+01 -2.3669190e+02 + 4.3180940e+02 -7.1099745e+01 -2.3804487e+02 + 4.3210437e+02 -7.0762651e+01 -2.3912818e+02 + 4.3243401e+02 -7.0236159e+01 -2.4014555e+02 + 4.3266302e+02 -6.9749489e+01 -2.4065923e+02 + 4.3278414e+02 -6.9589115e+01 -2.4098668e+02 + 4.3291125e+02 -6.9607442e+01 -2.4131286e+02 + 4.3314207e+02 -6.9509703e+01 -2.4155115e+02 + 4.3347486e+02 -6.9265854e+01 -2.4205434e+02 + 4.3408956e+02 -6.9123747e+01 -2.4346268e+02 + 4.3456727e+02 -6.8838695e+01 -2.4566541e+02 + 4.3533932e+02 -6.8458596e+01 -2.4545104e+02 + 4.3564500e+02 -6.7923964e+01 -2.4560567e+02 + 4.3576521e+02 -6.7609935e+01 -2.4580167e+02 + 4.3580495e+02 -6.7530955e+01 -2.4582379e+02 + 4.3581609e+02 -6.7538741e+01 -2.4581776e+02 + 4.3581788e+02 -6.7551044e+01 -2.4582894e+02 + 4.3581780e+02 -6.7551321e+01 -2.4582860e+02 + 4.3581858e+02 -6.7558663e+01 -2.4582781e+02 + 4.3581880e+02 -6.7558672e+01 -2.4582929e+02 + 4.3581780e+02 -6.7559466e+01 -2.4582964e+02 + 4.3581662e+02 -6.7560176e+01 -2.4583029e+02 + 4.3581472e+02 -6.7565913e+01 -2.4583085e+02 + 4.3580951e+02 -6.7560573e+01 -2.4583328e+02 + 4.3580930e+02 -6.7563355e+01 -2.4583210e+02 + 4.3580824e+02 -6.7555368e+01 -2.4582887e+02 + 4.3580447e+02 -6.7549170e+01 -2.4582739e+02 + 4.3580387e+02 -6.7545448e+01 -2.4581980e+02 + 4.3580292e+02 -6.7507055e+01 -2.4574121e+02 + 4.3580066e+02 -6.7460679e+01 -2.4565955e+02 + 4.3579670e+02 -6.7465795e+01 -2.4567355e+02 + 4.3579544e+02 -6.7463781e+01 -2.4567402e+02 + 4.3579469e+02 -6.7458020e+01 -2.4567534e+02 + 4.3579323e+02 -6.7464697e+01 -2.4567675e+02 + 4.3579197e+02 -6.7461963e+01 -2.4567842e+02 + 4.3579134e+02 -6.7461141e+01 -2.4567689e+02 + 4.3579109e+02 -6.7460871e+01 -2.4567780e+02 + 4.3578997e+02 -6.7461057e+01 -2.4567906e+02 + 4.3578925e+02 -6.7462137e+01 -2.4568226e+02 + 4.3578900e+02 -6.7459409e+01 -2.4568143e+02 + 4.3578748e+02 -6.7460407e+01 -2.4568326e+02 + 4.3578710e+02 -6.7457437e+01 -2.4568291e+02 + 4.3578523e+02 -6.7461951e+01 -2.4568494e+02 + 4.3578571e+02 -6.7457928e+01 -2.4568505e+02 + 4.3578330e+02 -6.7460604e+01 -2.4568863e+02 + 4.3578277e+02 -6.7458609e+01 -2.4568836e+02 + 4.3578339e+02 -6.7460146e+01 -2.4568897e+02 + 4.3578274e+02 -6.7458170e+01 -2.4568962e+02 + 4.3578126e+02 -6.7459094e+01 -2.4568913e+02 + 4.3577934e+02 -6.7460117e+01 -2.4569243e+02 + 4.3578105e+02 -6.7456988e+01 -2.4569184e+02 + 4.3577862e+02 -6.7459970e+01 -2.4569347e+02 + 4.3577901e+02 -6.7457212e+01 -2.4569214e+02 + 4.3577890e+02 -6.7459156e+01 -2.4569432e+02 + 4.3577916e+02 -6.7458260e+01 -2.4569370e+02 + 4.3577554e+02 -6.7458675e+01 -2.4569669e+02 + 4.3577592e+02 -6.7460535e+01 -2.4569724e+02 + 4.3577372e+02 -6.7458688e+01 -2.4569921e+02 + 4.3577428e+02 -6.7460392e+01 -2.4569918e+02 + 4.3577363e+02 -6.7456143e+01 -2.4569930e+02 + 4.3577065e+02 -6.7458383e+01 -2.4570303e+02 + 4.3577376e+02 -6.7458344e+01 -2.4569907e+02 + 4.3577221e+02 -6.7456988e+01 -2.4570162e+02 + 4.3576949e+02 -6.7456470e+01 -2.4570427e+02 + 4.3576902e+02 -6.7457412e+01 -2.4570491e+02 + 4.3576956e+02 -6.7456951e+01 -2.4570597e+02 + 4.3576600e+02 -6.7456040e+01 -2.4571012e+02 + 4.3576758e+02 -6.7459513e+01 -2.4570760e+02 + 4.3576451e+02 -6.7454782e+01 -2.4571175e+02 + 4.3576250e+02 -6.7455322e+01 -2.4571464e+02 + 4.3576054e+02 -6.7458992e+01 -2.4571726e+02 + 4.3574604e+02 -6.7454507e+01 -2.4573285e+02 + 4.3573953e+02 -6.7451781e+01 -2.4573959e+02 + 4.3574076e+02 -6.7453630e+01 -2.4573929e+02 + 4.3573893e+02 -6.7455818e+01 -2.4574138e+02 + 4.3573923e+02 -6.7454150e+01 -2.4574054e+02 + 4.3573797e+02 -6.7454532e+01 -2.4574392e+02 + 4.3574037e+02 -6.7454929e+01 -2.4574027e+02 + 4.3573931e+02 -6.7453694e+01 -2.4573992e+02 + 4.3573694e+02 -6.7452049e+01 -2.4574454e+02 + 4.3573957e+02 -6.7451242e+01 -2.4574089e+02 + 4.3573839e+02 -6.7453348e+01 -2.4574196e+02 + 4.3573915e+02 -6.7453863e+01 -2.4574118e+02 + 4.3573992e+02 -6.7453302e+01 -2.4574059e+02 + 4.3574046e+02 -6.7453773e+01 -2.4574076e+02 + 4.3573868e+02 -6.7453345e+01 -2.4574184e+02 + 4.3573982e+02 -6.7455406e+01 -2.4574053e+02 + 4.3573860e+02 -6.7453154e+01 -2.4574143e+02 + 4.3573991e+02 -6.7454674e+01 -2.4573887e+02 + 4.3573895e+02 -6.7454196e+01 -2.4574100e+02 + 4.3573977e+02 -6.7455402e+01 -2.4574080e+02 + 4.3574030e+02 -6.7453936e+01 -2.4574001e+02 + 4.3573837e+02 -6.7452793e+01 -2.4574261e+02 + 4.3573838e+02 -6.7453245e+01 -2.4574207e+02 + 4.3574031e+02 -6.7452732e+01 -2.4574102e+02 + 4.3573832e+02 -6.7451854e+01 -2.4574003e+02 + 4.3573941e+02 -6.7454453e+01 -2.4574046e+02 + 4.3573984e+02 -6.7454896e+01 -2.4574056e+02 + 4.3573970e+02 -6.7453315e+01 -2.4574009e+02 + 4.3574005e+02 -6.7455884e+01 -2.4574111e+02 + 4.3573815e+02 -6.7454666e+01 -2.4574192e+02 + 4.3573707e+02 -6.7454055e+01 -2.4574280e+02 + 4.3574013e+02 -6.7452342e+01 -2.4574037e+02 + 4.3574018e+02 -6.7455222e+01 -2.4573857e+02 + 4.3574094e+02 -6.7450721e+01 -2.4573902e+02 + 4.3573836e+02 -6.7455710e+01 -2.4574234e+02 + 4.3573724e+02 -6.7453171e+01 -2.4574204e+02 + 4.3573889e+02 -6.7454377e+01 -2.4573994e+02 + 4.3573854e+02 -6.7452820e+01 -2.4574064e+02 + 4.3573755e+02 -6.7451119e+01 -2.4574343e+02 + 4.3573786e+02 -6.7452755e+01 -2.4574275e+02 + 4.3573934e+02 -6.7456613e+01 -2.4573994e+02 + 4.3573778e+02 -6.7452892e+01 -2.4574307e+02 + 4.3573969e+02 -6.7455067e+01 -2.4573908e+02 + 4.3573933e+02 -6.7453814e+01 -2.4574122e+02 + 4.3573944e+02 -6.7455847e+01 -2.4574002e+02 + 4.3573937e+02 -6.7454909e+01 -2.4574136e+02 + 4.3574107e+02 -6.7453451e+01 -2.4573877e+02 + 4.3573823e+02 -6.7452979e+01 -2.4574259e+02 + 4.3573903e+02 -6.7452894e+01 -2.4574148e+02 + 4.3573889e+02 -6.7453996e+01 -2.4574040e+02 + 4.3573969e+02 -6.7452094e+01 -2.4574215e+02 + 4.3573783e+02 -6.7454377e+01 -2.4574367e+02 + 4.3573862e+02 -6.7455455e+01 -2.4574125e+02 + 4.3573936e+02 -6.7453288e+01 -2.4573863e+02 + 4.3573775e+02 -6.7454846e+01 -2.4574375e+02 + 4.3573904e+02 -6.7456352e+01 -2.4574211e+02 + 4.3573920e+02 -6.7455135e+01 -2.4574146e+02 + 4.3573767e+02 -6.7455317e+01 -2.4574373e+02 + 4.3573828e+02 -6.7453405e+01 -2.4574279e+02 + 4.3574018e+02 -6.7454657e+01 -2.4573844e+02 + 4.3573972e+02 -6.7455281e+01 -2.4573956e+02 + 4.3573989e+02 -6.7452902e+01 -2.4573908e+02 + 4.3573949e+02 -6.7455714e+01 -2.4574086e+02 + 4.3573863e+02 -6.7455536e+01 -2.4574159e+02 + 4.3573896e+02 -6.7455015e+01 -2.4574176e+02 + 4.3573797e+02 -6.7456343e+01 -2.4574161e+02 + 4.3573963e+02 -6.7456408e+01 -2.4574075e+02 + 4.3573924e+02 -6.7453925e+01 -2.4573962e+02 + 4.3574031e+02 -6.7455286e+01 -2.4573983e+02 + 4.3573819e+02 -6.7453162e+01 -2.4574155e+02 + 4.3573800e+02 -6.7453586e+01 -2.4574168e+02 + 4.3573925e+02 -6.7453055e+01 -2.4574153e+02 + 4.3573919e+02 -6.7452946e+01 -2.4573986e+02 + 4.3574134e+02 -6.7452017e+01 -2.4573906e+02 + 4.3573936e+02 -6.7455111e+01 -2.4574056e+02 + 4.3573936e+02 -6.7455111e+01 -2.4574056e+02