1
0
octave-forge-tisean/tisean-drop-error_state-use.patch

3726 lines
134 KiB
Diff
Raw Normal View History

# HG changeset patch
# User Markus Mützel <markus.muetzel@gmx.de>
# Date 1638189809 -3600
# Mon Nov 29 13:43:29 2021 +0100
# Node ID e40a599d68cf3061d04a9dac30e36751ed20acb2
# Parent 71f2c8fde0c59f4942dd22da89bba162e8ae6c97
# Updated by Marius Schamschula <mps@macports.org>
# Date 2023-03-10
Remove usage of `error_state` (bug #61583).
* src/pcregexp.cc (many files): Remove usage of `error_state`. It was
unconditionally set to 0 since about 6 years ago and will finally be removed in
Octave 8.
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__boxcount__.cc
--- a/src/__boxcount__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__boxcount__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -194,89 +194,85 @@
octave_idx_type length=LENGTH-(maxembed-1)*DELAY;
- if ( ! error_state)
+ // Calculate output
+ double heps = EPSMAX*EPSFAKTOR;
+ octave_idx_type epsi_old = 0;
+ for (octave_idx_type k=0;k<EPSCOUNT;k++)
{
- // Calculate output
- double heps = EPSMAX*EPSFAKTOR;
- octave_idx_type epsi_old = 0;
- for (octave_idx_type k=0;k<EPSCOUNT;k++)
- {
+
+ octave_idx_type epsi_test;
+ do {
+ heps /= EPSFAKTOR;
+ epsi_test=(octave_idx_type)(1./heps);
+ } while (epsi_test <= epsi_old);
+
+ octave_idx_type epsi = epsi_test;
+ epsi_old = epsi;
+ deps[k] = heps;
+
+ std::vector <double> histo (maxembed * dimension, 0.0);
+ start_box(series, which_dims, histo, maxembed, dimension, DELAY,
+ length, epsi, Q);
- octave_idx_type epsi_test;
- do {
- heps /= EPSFAKTOR;
- epsi_test=(octave_idx_type)(1./heps);
- } while (epsi_test <= epsi_old);
+ if (Q != 1.0)
+ for (std::vector<double>::iterator it = histo.begin ();
+ it != histo.end (); it++)
+ *it = log(*it)/(1.0-Q);
+
+ histo_list.push_back (histo);
+ }
+
+ // Create and assign output
+ dim_vector dv (maxembed, dimension);
+ string_vector keys;
+ keys.append (std::string("dim"));
+ keys.append (std::string("entropy"));
+ octave_map output (dv, keys);
- octave_idx_type epsi = epsi_test;
- epsi_old = epsi;
- deps[k] = heps;
+ for (octave_idx_type i=0;i<maxembed*dimension;i++)
+ {
+ octave_scalar_map tmp (keys);
+ // old fprintf(fHq,"#component = %d embedding = %d\n",
+ // which_dims[i][0]+1, which_dims[i][1]+1);
+
+ tmp.setfield ("dim", which_dims[i][1]+1);
+
+ // Create entropy output
+ Matrix entropy_out (EPSCOUNT, 3);
- std::vector <double> histo (maxembed * dimension, 0.0);
- start_box(series, which_dims, histo, maxembed, dimension, DELAY,
- length, epsi, Q);
-
- if (Q != 1.0)
- for (std::vector<double>::iterator it = histo.begin ();
- it != histo.end (); it++)
- *it = log(*it)/(1.0-Q);
-
- histo_list.push_back (histo);
+ std::list<std::vector<double>>::const_iterator it_hist;
+ it_hist = histo_list.cbegin ();
+ for (octave_idx_type j=0;j<EPSCOUNT;j++)
+ {
+ if (i == 0)
+ {
+ // old fprintf(fHq,"%e %e %e\n",deps[j]*maxinterval,
+ // histo_el->hist[i],histo_el->hist[i]);
+ entropy_out(j,0) = deps[j]*maxinterval;
+ entropy_out(j,1) = (*it_hist)[i];
+ entropy_out(j,2) = (*it_hist)[i];
+ }
+ else
+ {
+ // old fprintf(fHq,"%e %e %e\n",deps[j]*maxinterval,
+ // histo_el->hist[i],
+ // histo_el->hist[i]-histo_el->hist[i-1]);
+ entropy_out(j,0) = deps[j]*maxinterval;
+ entropy_out(j,1) = (*it_hist)[i];
+ entropy_out(j,2) = (*it_hist)[i]
+ - (*it_hist)[i-1];
+ }
+ it_hist++;
}
- // Create and assign output
- dim_vector dv (maxembed, dimension);
- string_vector keys;
- keys.append (std::string("dim"));
- keys.append (std::string("entropy"));
- octave_map output (dv, keys);
-
- for (octave_idx_type i=0;i<maxembed*dimension;i++)
- {
- octave_scalar_map tmp (keys);
- // old fprintf(fHq,"#component = %d embedding = %d\n",
- // which_dims[i][0]+1, which_dims[i][1]+1);
-
- tmp.setfield ("dim", which_dims[i][1]+1);
-
- // Create entropy output
- Matrix entropy_out (EPSCOUNT, 3);
+ tmp.setfield ("entropy",entropy_out);
- std::list<std::vector<double>>::const_iterator it_hist;
- it_hist = histo_list.cbegin ();
- for (octave_idx_type j=0;j<EPSCOUNT;j++)
- {
- if (i == 0)
- {
- // old fprintf(fHq,"%e %e %e\n",deps[j]*maxinterval,
- // histo_el->hist[i],histo_el->hist[i]);
- entropy_out(j,0) = deps[j]*maxinterval;
- entropy_out(j,1) = (*it_hist)[i];
- entropy_out(j,2) = (*it_hist)[i];
- }
- else
- {
- // old fprintf(fHq,"%e %e %e\n",deps[j]*maxinterval,
- // histo_el->hist[i],
- // histo_el->hist[i]-histo_el->hist[i-1]);
- entropy_out(j,0) = deps[j]*maxinterval;
- entropy_out(j,1) = (*it_hist)[i];
- entropy_out(j,2) = (*it_hist)[i]
- - (*it_hist)[i-1];
- }
- it_hist++;
- }
+ output.assign (idx_vector(which_dims[i][1]),
+ idx_vector(which_dims[i][0]),
+ tmp);
+ }
- tmp.setfield ("entropy",entropy_out);
-
- output.assign (idx_vector(which_dims[i][1]),
- idx_vector(which_dims[i][0]),
- tmp);
- }
-
-
- retval(0) = output;
- }
+ retval(0) = output;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__c1__.cc
--- a/src//__c1__.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src//__c1__.cc 2023-03-09 18:58:35.000000000 -0600
@@ -78,65 +78,61 @@
octave_idx_type iverb = verbose;
- if (! error_state)
- {
+ octave_idx_type lines_read = input.rows (); //nmax in d1()
+ octave_idx_type columns_read = input.columns ();
- octave_idx_type lines_read = input.rows (); //nmax in d1()
- octave_idx_type columns_read = input.columns ();
-
- dim_vector dv (maxdim - mindim + 1, 1);
- string_vector keys;
- keys.append (std::string("dim"));
- keys.append (std::string("c1"));
- octave_map output (dv, keys);
-
- // Seed the rand() function for d1()
- F77_XFCN (rand, RAND, (sqrt(seed)));
-
- for (octave_idx_type m = mindim; m <= maxdim; m++)
- {
- octave_scalar_map tmp (keys);
- tmp.setfield ("dim", m);
-
- // Creat c1 output
- Matrix c1_out ((octave_idx_type) ((0 - log (1./(lines_read
- -(m-1) * delay)) +
- (log (2.) /resolution))
- / (log (2.) /resolution))
- , 2);
-
- double pr = 0.0;
- octave_idx_type current_row = 0;
- for (double pl = log (1./(lines_read - (m-1)*delay));
- pl <= 0.0; pl += log (2.) / resolution)
- {
- double pln = pl;
- double rln;
-
- F77_XFCN (d1, D1,
- (lines_read, columns_read, lines_read,
- input.fortran_vec (), delay, m, cmin,
- pr, pln, rln, tmin, kmax, iverb));
-
- if (pln != pr)
- {
- pr = pln;
- c1_out(current_row,0) = exp (rln);
- c1_out(current_row,1) = exp (pln);
- current_row += 1;
- }
-
- }
- // Resize output
- c1_out.resize (current_row, 2);
- tmp.setfield ("c1", c1_out);
-
- output.assign (idx_vector(m-mindim), tmp);
- }
-
- retval(0) = output;
- }
- }
- return retval;
+ dim_vector dv (maxdim - mindim + 1, 1);
+ string_vector keys;
+ keys.append (std::string("dim"));
+ keys.append (std::string("c1"));
+ octave_map output (dv, keys);
+
+ // Seed the rand() function for d1()
+ F77_XFCN (rand, RAND, (sqrt(seed)));
+
+ for (octave_idx_type m = mindim; m <= maxdim; m++)
+ {
+ octave_scalar_map tmp (keys);
+ tmp.setfield ("dim", m);
+
+ // Creat c1 output
+ Matrix c1_out ((octave_idx_type) ((0 - log (1./(lines_read
+ -(m-1) * delay)) +
+ (log (2.) /resolution))
+ / (log (2.) /resolution))
+ , 2);
+
+ double pr = 0.0;
+ octave_idx_type current_row = 0;
+ for (double pl = log (1./(lines_read - (m-1)*delay));
+ pl <= 0.0; pl += log (2.) / resolution)
+ {
+ double pln = pl;
+ double rln;
+
+ F77_XFCN (d1, D1,
+ (lines_read, columns_read, lines_read,
+ input.fortran_vec (), delay, m, cmin,
+ pr, pln, rln, tmin, kmax, iverb));
+
+ if (pln != pr)
+ {
+ pr = pln;
+ c1_out(current_row,0) = exp (rln);
+ c1_out(current_row,1) = exp (pln);
+ current_row += 1;
+ }
+
+ }
+ // Resize output
+ c1_out.resize (current_row, 2);
+ tmp.setfield ("c1", c1_out);
+
+ output.assign (idx_vector(m-mindim), tmp);
+ }
+
+ retval(0) = output;
+ }
+ return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__d2__.cc
--- a/src/__d2__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__d2__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -365,251 +365,247 @@
time_t lasttime;
time(&lasttime);
- if (! error_state)
+ bool imin_too_large = false;
+ bool pause_calc = false;
+ // Calculate the outputs
+ for (octave_idx_type n = 1 + counter; n < nmax && !imin_too_large
+ && !pause_calc; n++)
{
-
- bool imin_too_large = false;
- bool pause_calc = false;
- // Calculate the outputs
- for (octave_idx_type n = 1 + counter; n < nmax && !imin_too_large
- && !pause_calc; n++)
+ counter += 1;
+ bool smaller = 0;
+ octave_idx_type sn = scr[n-1];
+ double epsinv = 1.0 / EPSMAX;
+ octave_idx_type x,y;
+ if (DIM > 1)
{
- counter += 1;
- bool smaller = 0;
- octave_idx_type sn = scr[n-1];
- double epsinv = 1.0 / EPSMAX;
- octave_idx_type x,y;
- if (DIM > 1)
- {
- x=(octave_idx_type)(series[0][sn]*epsinv)&(NMAX-1);
- y=(octave_idx_type)(series[1][sn]*epsinv)&(NMAX-1);
- }
- else
- {
- x=(octave_idx_type)(series[0][sn]*epsinv)&(NMAX-1);
- y=(octave_idx_type)(series[0][sn+DELAY]*epsinv)&(NMAX-1);
- }
- list[sn]=box[x][y];
- box[x][y]=sn;
- listc1[sn]=boxc1[x];
- boxc1[x]=sn;
+ x=(octave_idx_type)(series[0][sn]*epsinv)&(NMAX-1);
+ y=(octave_idx_type)(series[1][sn]*epsinv)&(NMAX-1);
+ }
+ else
+ {
+ x=(octave_idx_type)(series[0][sn]*epsinv)&(NMAX-1);
+ y=(octave_idx_type)(series[0][sn+DELAY]*epsinv)&(NMAX-1);
+ }
+ list[sn]=box[x][y];
+ box[x][y]=sn;
+ listc1[sn]=boxc1[x];
+ boxc1[x]=sn;
- octave_idx_type i=imin;
- while (found[maxembed][i] >= MAXFOUND)
- {
- smaller=1;
- if (++i > (HOWOFTEN-1))
- break;
- }
- if (smaller)
- {
- imin=i;
- if (imin <= (HOWOFTEN-1))
- {
- EPSMAX = epsm[imin];
- double epsinv = 1.0/EPSMAX;
- for (octave_idx_type i1=0;i1<NMAX;i1++)
- {
- boxc1[i1]= -1;
- for (octave_idx_type j1=0;j1<NMAX;j1++)
- box[i1][j1]= -1;
- }
- for (octave_idx_type i1=0;i1<n;i1++)
- {
- sn=scr[i1];
- octave_idx_type x,y;
- if (DIM > 1)
- {
- x=(octave_idx_type)(series[0][sn]*epsinv)
- &(NMAX-1);
- y=(octave_idx_type)(series[1][sn]*epsinv)
- &(NMAX-1);
- }
- else
- {
- x=(octave_idx_type)(series[0][sn]*epsinv)
- &(NMAX-1);
- y=(octave_idx_type)(series[0][sn+DELAY]*epsinv)
- &(NMAX-1);
- }
- list[sn]=box[x][y];
- box[x][y]=sn;
- listc1[sn]=boxc1[x];
- boxc1[x]=sn;
- }
- }
- }
-
+ octave_idx_type i=imin;
+ while (found[maxembed][i] >= MAXFOUND)
+ {
+ smaller=1;
+ if (++i > (HOWOFTEN-1))
+ break;
+ }
+ if (smaller)
+ {
+ imin=i;
if (imin <= (HOWOFTEN-1))
{
- octave_idx_type lnorm=n;
- if (MINDIST > 0)
+ EPSMAX = epsm[imin];
+ double epsinv = 1.0/EPSMAX;
+ for (octave_idx_type i1=0;i1<NMAX;i1++)
{
- octave_idx_type sn=scr[n];
- octave_idx_type n1=(sn-MINDIST>=0)?sn-MINDIST:0;
- octave_idx_type n2=(sn+MINDIST<length-(EMBED-1)*DELAY)
- ?sn+MINDIST:length-(EMBED-1)*DELAY-1;
- for (octave_idx_type i1=n1;i1<=n2;i1++)
- if ((oscr[i1] < n))
- lnorm--;
+ boxc1[i1]= -1;
+ for (octave_idx_type j1=0;j1<NMAX;j1++)
+ box[i1][j1]= -1;
}
-
- if (EMBED*DIM > 1)
- make_c2_dim(series, found, list, box, DIM, imin, EPSMAX1,
- EPSMAX, EPSMIN, EMBED, DELAY, MINDIST,
- HOWOFTEN, scr[n]);
- make_c2_1(series, found, listc1, boxc1, imin, EPSMAX1,
- EPSMAX, EPSMIN, MINDIST, HOWOFTEN, scr[n]);
- for (octave_idx_type i=imin;i<HOWOFTEN;i++)
- norm[i] += (double)(lnorm);
- }
-
-
- // If any of the below occurs: pause or end.
- if (((time(NULL)-lasttime) > WHEN) || (n == (nmax-1)) ||
- (imin > (HOWOFTEN-1)) || (counter % it_pause == 0))
- {
- time(&lasttime);
-
- if (imin > (HOWOFTEN-1))
+ for (octave_idx_type i1=0;i1<n;i1++)
{
- // old exit(0);
- imin_too_large = true;
+ sn=scr[i1];
+ octave_idx_type x,y;
+ if (DIM > 1)
+ {
+ x=(octave_idx_type)(series[0][sn]*epsinv)
+ &(NMAX-1);
+ y=(octave_idx_type)(series[1][sn]*epsinv)
+ &(NMAX-1);
+ }
+ else
+ {
+ x=(octave_idx_type)(series[0][sn]*epsinv)
+ &(NMAX-1);
+ y=(octave_idx_type)(series[0][sn+DELAY]*epsinv)
+ &(NMAX-1);
+ }
+ list[sn]=box[x][y];
+ box[x][y]=sn;
+ listc1[sn]=boxc1[x];
+ boxc1[x]=sn;
}
- pause_calc = true;
}
}
- // Create vars output
- octave_scalar_map vars;
-
-
- // Create vars output
- // old fprintf(fstat,"Center points treated so far= %ld\n",n);
- vars.setfield ("treated", counter);
- // old fprintf(fstat,"Maximum epsilon in the moment= %e\n",
- // epsm[imin]);
- vars.setfield ("eps", epsm[imin]);
-
- if (counter < nmax - 1 && imin_too_large == false)
+ if (imin <= (HOWOFTEN-1))
{
- vars.setfield ("counter", counter);
- vars.setfield ("found", found_matrix);
- vars.setfield ("norm", norm_matrix);
- vars.setfield ("boxc1", boxc1_matrix);
- vars.setfield ("box", box_matrix);
- vars.setfield ("list", list_matrix);
- vars.setfield ("listc1", listc1_matrix);
- vars.setfield ("imin", imin);
- vars.setfield ("EPSMAX1",EPSMAX1);
- vars.setfield ("EPSMAX", EPSMAX);
- vars.setfield ("EPSMIN", EPSMIN);
- }
-
- // Create values output
- dim_vector dv (DIM * EMBED, 1);
- string_vector keys;
- keys.append (std::string("dim"));
- keys.append (std::string("c2"));
- keys.append (std::string("d2"));
- keys.append (std::string("h2"));
- octave_map values (dv, keys);
-
- for (octave_idx_type i=0;i<DIM*EMBED;i++)
- {
-
- octave_scalar_map tmp (keys);
-
- // old fprintf(fout,"#dim= %ld\n",i+1);
- tmp.setfield ("dim", i+1);
-
- // Allocate d2 output
- Matrix d2_out (HOWOFTEN - 1, 2);
- octave_idx_type d2_row = 0;
-
- // Allocate h2 output
- Matrix h2_out (HOWOFTEN, 2);
- octave_idx_type h2_row = 0;
-
- // Allocate c2 output
- Matrix c2_out (HOWOFTEN, 2);
- octave_idx_type c2_row = 0;
-
- double eps = EPSMAX1 * epsfactor;
-
- for (octave_idx_type j=0;j<HOWOFTEN;j++)
+ octave_idx_type lnorm=n;
+ if (MINDIST > 0)
{
- eps /= epsfactor;
+ octave_idx_type sn=scr[n];
+ octave_idx_type n1=(sn-MINDIST>=0)?sn-MINDIST:0;
+ octave_idx_type n2=(sn+MINDIST<length-(EMBED-1)*DELAY)
+ ?sn+MINDIST:length-(EMBED-1)*DELAY-1;
+ for (octave_idx_type i1=n1;i1<=n2;i1++)
+ if ((oscr[i1] < n))
+ lnorm--;
+ }
- // Calculate d2 output
- if ((j > 0) && (found[i][j] > 0.0)
- && (found[i][j-1] > 0.0))
- {
- // old fprintf(fout,"%e %e\n",eps,
- // log(found[i][j-1]/found[i][j]/norm[j-1]
- // *norm[j])
- // /log(epsfactor));
- d2_out(d2_row,0) = eps;
- d2_out(d2_row,1) = log(found[i][j-1]/found[i][j]
- /norm[j-1]*norm[j])
- /log(epsfactor);
- d2_row += 1;
- }
-
- // Calculate h2 output
- if (i < 1)
- {
- if (found[0][j] > 0.0)
- {
- // old fprintf(fout,"%e %e\n",eps,
- // -log(found[0][j]/norm[j]));
- h2_out(h2_row,0) = eps;
- h2_out(h2_row,1) = -log(found[0][j]/norm[j]);
- h2_row += 1;
- }
- }
- else
- {
- if ((found[i-1][j] > 0.0) && (found[i][j] > 0.0))
- {
- // old fprintf(fout,"%e %e\n",eps,
- // log(found[i-1][j]/found[i][j]));
- h2_out(h2_row,0) = eps;
- h2_out(h2_row,1) = log(found[i-1][j]
- /found[i][j]);
- h2_row += 1;
- }
- }
-
- // Calculate c2 output
- if (norm[j] > 0.0)
- {
- // old fprintf(fout,"%e %e\n",eps,
- // found[i][j]/norm[j]);
- c2_out(c2_row,0) = eps;
- c2_out(c2_row,1) = found[i][j]/norm[j];
- c2_row += 1;
- }
- }
- // Prepare d2 output
- d2_out.resize (d2_row, 2);
- tmp.setfield ("d2", d2_out);
- // Prepare h2 output
- h2_out.resize (h2_row, 2);
- tmp.setfield ("h2", h2_out);
- // Prepare c2 output
- c2_out.resize (c2_row, 2);
- tmp.setfield ("c2", c2_out);
-
- values.assign (idx_vector(i), tmp);
+ if (EMBED*DIM > 1)
+ make_c2_dim(series, found, list, box, DIM, imin, EPSMAX1,
+ EPSMAX, EPSMIN, EMBED, DELAY, MINDIST,
+ HOWOFTEN, scr[n]);
+ make_c2_1(series, found, listc1, boxc1, imin, EPSMAX1,
+ EPSMAX, EPSMIN, MINDIST, HOWOFTEN, scr[n]);
+ for (octave_idx_type i=imin;i<HOWOFTEN;i++)
+ norm[i] += (double)(lnorm);
}
- // Assign outputs
- retval(0) = values;
- retval(1) = vars;
+ // If any of the below occurs: pause or end.
+ if (((time(NULL)-lasttime) > WHEN) || (n == (nmax-1)) ||
+ (imin > (HOWOFTEN-1)) || (counter % it_pause == 0))
+ {
+ time(&lasttime);
+
+ if (imin > (HOWOFTEN-1))
+ {
+ // old exit(0);
+ imin_too_large = true;
+ }
+ pause_calc = true;
+ }
+ }
+
+ // Create vars output
+ octave_scalar_map vars;
+
+
+ // Create vars output
+ // old fprintf(fstat,"Center points treated so far= %ld\n",n);
+ vars.setfield ("treated", counter);
+ // old fprintf(fstat,"Maximum epsilon in the moment= %e\n",
+ // epsm[imin]);
+ vars.setfield ("eps", epsm[imin]);
+
+ if (counter < nmax - 1 && imin_too_large == false)
+ {
+ vars.setfield ("counter", counter);
+ vars.setfield ("found", found_matrix);
+ vars.setfield ("norm", norm_matrix);
+ vars.setfield ("boxc1", boxc1_matrix);
+ vars.setfield ("box", box_matrix);
+ vars.setfield ("list", list_matrix);
+ vars.setfield ("listc1", listc1_matrix);
+ vars.setfield ("imin", imin);
+ vars.setfield ("EPSMAX1",EPSMAX1);
+ vars.setfield ("EPSMAX", EPSMAX);
+ vars.setfield ("EPSMIN", EPSMIN);
}
+ // Create values output
+ dim_vector dv (DIM * EMBED, 1);
+ string_vector keys;
+ keys.append (std::string("dim"));
+ keys.append (std::string("c2"));
+ keys.append (std::string("d2"));
+ keys.append (std::string("h2"));
+ octave_map values (dv, keys);
+
+ for (octave_idx_type i=0;i<DIM*EMBED;i++)
+ {
+
+ octave_scalar_map tmp (keys);
+
+ // old fprintf(fout,"#dim= %ld\n",i+1);
+ tmp.setfield ("dim", i+1);
+
+ // Allocate d2 output
+ Matrix d2_out (HOWOFTEN - 1, 2);
+ octave_idx_type d2_row = 0;
+
+ // Allocate h2 output
+ Matrix h2_out (HOWOFTEN, 2);
+ octave_idx_type h2_row = 0;
+
+ // Allocate c2 output
+ Matrix c2_out (HOWOFTEN, 2);
+ octave_idx_type c2_row = 0;
+
+ double eps = EPSMAX1 * epsfactor;
+
+ for (octave_idx_type j=0;j<HOWOFTEN;j++)
+ {
+ eps /= epsfactor;
+
+ // Calculate d2 output
+ if ((j > 0) && (found[i][j] > 0.0)
+ && (found[i][j-1] > 0.0))
+ {
+ // old fprintf(fout,"%e %e\n",eps,
+ // log(found[i][j-1]/found[i][j]/norm[j-1]
+ // *norm[j])
+ // /log(epsfactor));
+ d2_out(d2_row,0) = eps;
+ d2_out(d2_row,1) = log(found[i][j-1]/found[i][j]
+ /norm[j-1]*norm[j])
+ /log(epsfactor);
+ d2_row += 1;
+ }
+
+ // Calculate h2 output
+ if (i < 1)
+ {
+ if (found[0][j] > 0.0)
+ {
+ // old fprintf(fout,"%e %e\n",eps,
+ // -log(found[0][j]/norm[j]));
+ h2_out(h2_row,0) = eps;
+ h2_out(h2_row,1) = -log(found[0][j]/norm[j]);
+ h2_row += 1;
+ }
+ }
+ else
+ {
+ if ((found[i-1][j] > 0.0) && (found[i][j] > 0.0))
+ {
+ // old fprintf(fout,"%e %e\n",eps,
+ // log(found[i-1][j]/found[i][j]));
+ h2_out(h2_row,0) = eps;
+ h2_out(h2_row,1) = log(found[i-1][j]
+ /found[i][j]);
+ h2_row += 1;
+ }
+ }
+
+ // Calculate c2 output
+ if (norm[j] > 0.0)
+ {
+ // old fprintf(fout,"%e %e\n",eps,
+ // found[i][j]/norm[j]);
+ c2_out(c2_row,0) = eps;
+ c2_out(c2_row,1) = found[i][j]/norm[j];
+ c2_row += 1;
+ }
+ }
+ // Prepare d2 output
+ d2_out.resize (d2_row, 2);
+ tmp.setfield ("d2", d2_out);
+ // Prepare h2 output
+ h2_out.resize (h2_row, 2);
+ tmp.setfield ("h2", h2_out);
+ // Prepare c2 output
+ c2_out.resize (c2_row, 2);
+ tmp.setfield ("c2", c2_out);
+
+ values.assign (idx_vector(i), tmp);
+ }
+
+
+ // Assign outputs
+ retval(0) = values;
+ retval(1) = vars;
}
+
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__delay__.cc
--- a/src/__delay__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__delay__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -60,56 +60,52 @@
OCTAVE_LOCAL_BUFFER (octave_idx_type, inddelay, alldim);
- if (! error_state)
- {
- octave_idx_type rundel=0;
- octave_idx_type runmdel=0;
-
- unsigned int delsum;
- for (octave_idx_type i = 0; i < indim; i++)
- {
- delsum = 0;
- inddelay[rundel++] = delsum;
-
- for (octave_idx_type j = 1; j < formatdelay(i); j++)
- {
- delsum += delaylist(runmdel++);
- inddelay[rundel++] = delsum;
- }
- }
-
- octave_idx_type maxemb = 0;
- for (octave_idx_type i = 0; i < alldim; i++)
- maxemb = (maxemb < inddelay[i])? inddelay[i] : maxemb;
+ octave_idx_type rundel=0;
+ octave_idx_type runmdel=0;
- octave_idx_type outdim = 0;
- for (octave_idx_type i = 0; i < indim; i++)
- outdim += formatdelay(i);
-
- octave_idx_type out_rows = (length > maxemb) ? length - maxemb : 0;
-
- Matrix series (out_rows, outdim);
- unsigned int embsum;
- for (octave_idx_type i = maxemb; i < length; i++)
- {
- rundel = 0;
- embsum = 0;
+ unsigned int delsum;
+ for (octave_idx_type i = 0; i < indim; i++)
+ {
+ delsum = 0;
+ inddelay[rundel++] = delsum;
- for (octave_idx_type j = 0; j < indim; j++)
- {
- octave_idx_type emb = formatdelay(j);
-
- for (octave_idx_type k = 0; k < emb; k++)
- series(i-maxemb, embsum+k) = data(i-inddelay[rundel++], j);
-
- // previously fprintf(stdout,"%e ",series[j][i-inddelay[rundel++]]);
- embsum += emb;
- }
- // previously fprintf(stdout,"\n");
+ for (octave_idx_type j = 1; j < formatdelay(i); j++)
+ {
+ delsum += delaylist(runmdel++);
+ inddelay[rundel++] = delsum;
}
- retval(0) = series;
}
+ octave_idx_type maxemb = 0;
+ for (octave_idx_type i = 0; i < alldim; i++)
+ maxemb = (maxemb < inddelay[i])? inddelay[i] : maxemb;
+
+ octave_idx_type outdim = 0;
+ for (octave_idx_type i = 0; i < indim; i++)
+ outdim += formatdelay(i);
+
+ octave_idx_type out_rows = (length > maxemb) ? length - maxemb : 0;
+
+ Matrix series (out_rows, outdim);
+ unsigned int embsum;
+ for (octave_idx_type i = maxemb; i < length; i++)
+ {
+ rundel = 0;
+ embsum = 0;
+
+ for (octave_idx_type j = 0; j < indim; j++)
+ {
+ octave_idx_type emb = formatdelay(j);
+
+ for (octave_idx_type k = 0; k < emb; k++)
+ series(i-maxemb, embsum+k) = data(i-inddelay[rundel++], j);
+
+ // previously fprintf(stdout,"%e ",series[j][i-inddelay[rundel++]]);
+ embsum += emb;
+ }
+ // previously fprintf(stdout,"\n");
+ }
+ retval(0) = series;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__false_nearest__.cc
--- a/src/__false_nearest__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__false_nearest__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -179,78 +179,75 @@
check_alloc(vcomp=(unsigned int*)malloc(sizeof(int)*(maxdim)));
check_alloc(vemb=(unsigned int*)malloc(sizeof(int)*(maxdim)));
- if ( ! error_state)
- {
- for (i=0;i<maxdim;i++) {
- if (comp == 1) {
- vcomp[i]=0;
- vemb[i]=i*delay;
- }
- else {
- vcomp[i]=i%comp;
- vemb[i]=(i/comp)*delay;
- }
- }
+ for (i=0;i<maxdim;i++) {
+ if (comp == 1) {
+ vcomp[i]=0;
+ vemb[i]=i*delay;
+ }
+ else {
+ vcomp[i]=i%comp;
+ vemb[i]=(i/comp)*delay;
+ }
+ }
- // Create output matrix
- Matrix output (maxemb-minemb+1, 4);
+ // Create output matrix
+ Matrix output (maxemb-minemb+1, 4);
- // Compute output
- for (emb=minemb;emb<=maxemb;emb++)
- {
- dim=emb*comp-1;
- epsilon=eps0;
- toolarge=0;
- alldone=0;
- donesofar=0;
- aveps=0.0;
- vareps=0.0;
- for (i=0;i<length;i++)
- nearest[i]=0;
- if (verbosity)
- octave_stdout << "Start for dimension=" << dim+1 << "\n";
- while (!alldone && (epsilon < 2.*varianz/rt)) {
- alldone=1;
- mmb(input, vcomp[dim],vemb[dim],epsilon);
- for (i=0;i<length-maxemb*delay;i++)
- if (!nearest[i]) {
- nearest[i]=find_nearest(input, i,dim,epsilon);
- alldone &= nearest[i];
- donesofar += (unsigned long)nearest[i];
- }
- if (verbosity)
- octave_stdout << "Found " << donesofar << " up to epsilon=" << \
- epsilon*inter << "\n";
- epsilon*=sqrt(2.0);
- if (!donesofar)
- eps0=epsilon;
- }
- if (donesofar == 0) {
- error_with_id ("Octave:tisean", "Not enough points found");
- }
- aveps *= (1./(double)donesofar);
- vareps *= (1./(double)donesofar);
+ // Compute output
+ for (emb=minemb;emb<=maxemb;emb++)
+ {
+ dim=emb*comp-1;
+ epsilon=eps0;
+ toolarge=0;
+ alldone=0;
+ donesofar=0;
+ aveps=0.0;
+ vareps=0.0;
+ for (i=0;i<length;i++)
+ nearest[i]=0;
+ if (verbosity)
+ octave_stdout << "Start for dimension=" << dim+1 << "\n";
+ while (!alldone && (epsilon < 2.*varianz/rt)) {
+ alldone=1;
+ mmb(input, vcomp[dim],vemb[dim],epsilon);
+ for (i=0;i<length-maxemb*delay;i++)
+ if (!nearest[i]) {
+ nearest[i]=find_nearest(input, i,dim,epsilon);
+ alldone &= nearest[i];
+ donesofar += (unsigned long)nearest[i];
+ }
+ if (verbosity)
+ octave_stdout << "Found " << donesofar << " up to epsilon=" << \
+ epsilon*inter << "\n";
+ epsilon*=sqrt(2.0);
+ if (!donesofar)
+ eps0=epsilon;
+ }
+ if (donesofar == 0) {
+ error_with_id ("Octave:tisean", "Not enough points found");
+ }
+ aveps *= (1./(double)donesofar);
+ vareps *= (1./(double)donesofar);
- // old fprintf(file,"%u %e %e %e\n",dim+1,(double)toolarge/(double)donesofar,
- // aveps*inter,sqrt(vareps)*inter);
- int id = emb-minemb;
- output(id,0) = dim + 1;
- output(id,1) = (double)toolarge/(double)donesofar;
- output(id,2) = aveps*inter;
- output(id,3) = sqrt(vareps)*inter;
- }
+ // old fprintf(file,"%u %e %e %e\n",dim+1,(double)toolarge/(double)donesofar,
+ // aveps*inter,sqrt(vareps)*inter);
+ int id = emb-minemb;
+ output(id,0) = dim + 1;
+ output(id,1) = (double)toolarge/(double)donesofar;
+ output(id,2) = aveps*inter;
+ output(id,3) = sqrt(vareps)*inter;
+ }
- delete[] series;
- delete[] list;
- delete[] nearest;
- for (i=0;i<BOX;i++)
- delete[] box[i];
- delete[] box;
+ delete[] series;
+ delete[] list;
+ delete[] nearest;
+ for (i=0;i<BOX;i++)
+ delete[] box[i];
+ delete[] box;
- for (i = 0; i < 4; i++)
- retval(i) = output.column(i);
- }
+ for (i = 0; i < 4; i++)
+ retval(i) = output.column(i);
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__ghkss__.cc
--- a/src/__ghkss__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__ghkss__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -203,42 +203,39 @@
OCTAVE_LOCAL_BUFFER (double, hav, comp);
OCTAVE_LOCAL_BUFFER (double, hsigma, comp);
- if ( ! error_state)
- {
- for (j=0;j<comp;j++)
- hav[j]=hsigma[j]=0.0;
+ for (j=0;j<comp;j++)
+ hav[j]=hsigma[j]=0.0;
- for (i=0;i<length;i++)
- for (j=0;j<comp;j++) {
- hav[j] += (help=delta[j][i]);
- hsigma[j] += help*help;
- }
+ for (i=0;i<length;i++)
+ for (j=0;j<comp;j++) {
+ hav[j] += (help=delta[j][i]);
+ hsigma[j] += help*help;
+ }
- for (j=0;j<comp;j++) {
- hav[j] /= length;
- hsigma[j]=sqrt(fabs(hsigma[j]/length-hav[j]*hav[j]));
- }
- if (verbosity) {
- for (i=0;i<comp;i++) {
- octave_stdout << "Average shift of component " << i+1 << " = "
- << hav[i]*d_max[i] << "\n";
- octave_stdout << "Average rms correction of comp. " << i+1 << " = "
- << hsigma[i]*d_max[i] << "\n\n";
- }
- }
- for (i=0;i<length;i++)
- for (j=0;j<comp;j++)
- series(i,j) -= delta[j][i];
+ for (j=0;j<comp;j++) {
+ hav[j] /= length;
+ hsigma[j]=sqrt(fabs(hsigma[j]/length-hav[j]*hav[j]));
+ }
+ if (verbosity) {
+ for (i=0;i<comp;i++) {
+ octave_stdout << "Average shift of component " << i+1 << " = "
+ << hav[i]*d_max[i] << "\n";
+ octave_stdout << "Average rms correction of comp. " << i+1 << " = "
+ << hsigma[i]*d_max[i] << "\n\n";
+ }
+ }
+ for (i=0;i<length;i++)
+ for (j=0;j<comp;j++)
+ series(i,j) -= delta[j][i];
- if (resize_eps) {
- mineps /= epsfac;
- if (verbosity)
- octave_stdout << "Reset minimal neighbourhood size to "
- << mineps*d_max_max << "\n";
- }
+ if (resize_eps) {
+ mineps /= epsfac;
+ if (verbosity)
+ octave_stdout << "Reset minimal neighbourhood size to "
+ << mineps*d_max_max << "\n";
+ }
- resize_eps=0;
- }
+ resize_eps=0;
}
DEFUN_DLD (__ghkss__, args, , HELPTEXT)
@@ -338,92 +335,90 @@
mat[i]=(double*)(matarray+dim*i);
check_alloc(hser=(double**)malloc(sizeof(double*)*comp));
- if ( ! error_state)
- {
- // Create output matrix
- Matrix output (length, comp);
+ // Create output matrix
+ Matrix output (length, comp);
- for (i=0;i<dim;i++) {
- index_comp[i]=i%comp;
- index_embed[i]=(i/comp)*delay;
- }
+ for (i=0;i<dim;i++) {
+ index_comp[i]=i%comp;
+ index_embed[i]=(i/comp)*delay;
+ }
- // Calculate the noise reduction
- resize_eps=0;
- for (iter=1;iter<=iterations;iter++)
- {
- for (i=0;i<length;i++) {
- ok[i]=0;
- for (j=0;j<dim;j++)
- corr[i][j]=0.0;
- for (j=0;j<comp;j++)
- delta[j][i]=0.0;
+ // Calculate the noise reduction
+ resize_eps=0;
+ for (iter=1;iter<=iterations;iter++)
+ {
+ for (i=0;i<length;i++) {
+ ok[i]=0;
+ for (j=0;j<dim;j++)
+ corr[i][j]=0.0;
+ for (j=0;j<comp;j++)
+ delta[j][i]=0.0;
+ }
+ epsilon=mineps;
+ all_done=0;
+ epscount=1;
+ allfound=0;
+ if (verbosity)
+ octave_stdout << "Starting iteration " << iter << "\n";
+ while(!all_done) {
+ mmb(input, epsilon);
+ all_done=1;
+ for (n=emb_offset;n<length;n++)
+ if (!ok[n]) {
+ nfound=fmn(input,n,epsilon);
+ if (nfound >= minn) {
+ make_correction(input,n,nfound);
+ ok[n]=epscount;
+ if (epscount == 1)
+ resize_eps=1;
+ allfound++;
}
- epsilon=mineps;
- all_done=0;
- epscount=1;
- allfound=0;
- if (verbosity)
- octave_stdout << "Starting iteration " << iter << "\n";
- while(!all_done) {
- mmb(input, epsilon);
- all_done=1;
- for (n=emb_offset;n<length;n++)
- if (!ok[n]) {
- nfound=fmn(input,n,epsilon);
- if (nfound >= minn) {
- make_correction(input,n,nfound);
- ok[n]=epscount;
- if (epscount == 1)
- resize_eps=1;
- allfound++;
+ else
+ all_done=0;
+ }
+ if (verbosity)
+ octave_stdout << "Corrected " << allfound << " points with epsilon= "
+ << epsilon*d_max_max << "\n";
+ if (std::isinf(epsilon*d_max_max))
+ {
+ error_with_id ("Octave:tisean", "cannot reduce noise on input data");
+ return retval;
+ }
+ epsilon *= epsfac;
+ epscount++;
+ }
+ if (verbosity)
+ octave_stdout << "Start evaluating the trend\n";
+
+ epsilon=mineps;
+ allfound=0;
+ for (i=1;i<epscount;i++) {
+ mmb(input,epsilon);
+ for (n=emb_offset;n<length;n++)
+ if (ok[n] == i) {
+ nfound=fmn(input,n,epsilon);
+ handle_trend(n,nfound);
+ allfound++;
+ }
+ if (verbosity)
+ octave_stdout << "Trend subtracted for " << allfound << " points with epsilon= "
+ << epsilon*d_max_max << "\n";
+ epsilon *= epsfac;
+ }
+ set_correction(input);
+
+ if (iter == iterations)
+ for (i=0;i<length;i++)
+ {
+ for (j=0;j<comp;j++)
+ {
+ // old fprintf(file,"%e ",series[j][i]*d_max[j]+d_min[j]);
+ output(i,j) = input(i,j)*d_max[j]+d_min[j];
}
- else
- all_done=0;
- }
- if (verbosity)
- octave_stdout << "Corrected " << allfound << " points with epsilon= "
- << epsilon*d_max_max << "\n";
- if (std::isinf(epsilon*d_max_max))
- {
- error_with_id ("Octave:tisean", "cannot reduce noise on input data");
- return retval;
- }
- epsilon *= epsfac;
- epscount++;
}
- if (verbosity)
- octave_stdout << "Start evaluating the trend\n";
+ }
+ retval(0) = output;
- epsilon=mineps;
- allfound=0;
- for (i=1;i<epscount;i++) {
- mmb(input,epsilon);
- for (n=emb_offset;n<length;n++)
- if (ok[n] == i) {
- nfound=fmn(input,n,epsilon);
- handle_trend(n,nfound);
- allfound++;
- }
- if (verbosity)
- octave_stdout << "Trend subtracted for " << allfound << " points with epsilon= "
- << epsilon*d_max_max << "\n";
- epsilon *= epsfac;
- }
- set_correction(input);
-
- if (iter == iterations)
- for (i=0;i<length;i++)
- {
- for (j=0;j<comp;j++)
- {
- // old fprintf(file,"%e ",series[j][i]*d_max[j]+d_min[j]);
- output(i,j) = input(i,j)*d_max[j]+d_min[j];
- }
- }
- }
- retval(0) = output;
- }
// Deallocate of all the memory
delete[] d_min;
delete[] d_max;
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lfo_ar__.cc
--- a/src/__lfo_ar__.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src/__lfo_ar__.cc 2023-03-10 05:42:42.000000000 -0600
@@ -168,12 +168,6 @@
Matrix solved_vec = mat.solve(vec);
double *solved_vec_arr = solved_vec.fortran_vec ();
- // If errors were raised, there is no sense in countinueing
- if (error_state)
- {
- return ;
- }
-
double cast=foreav[i];
for (octave_idx_type j=0;j<dim;j++) {
@@ -262,110 +256,100 @@
octave_idx_type clength=(CLENGTH <= LENGTH) ? CLENGTH-STEP : LENGTH-STEP;
- if ( ! error_state)
- {
-
- // Promote warnings connected with singular matrixes to errors
- set_warning_state ("Octave:nearly-singular-matrix","error");
- set_warning_state ("Octave:singular-matrix","error");
-
- // Estimate maximum possible output size
- octave_idx_type output_rows = (octave_idx_type)
- ((log(EPS1) - log(EPS0)) / log (EPSF));
- output_rows += 2;
-
- // Create output
- Matrix output (output_rows,dim+4);
- octave_idx_type count = 0;
-
- if (verbose)
- printf("\nStarting new dataset\n\n");
-
- for (double epsilon=EPS0;epsilon<EPS1*EPSF;epsilon*=EPSF)
- {
- if (verbose)
- {
- printf ("For epsilon = %e, the count = %d\n",
- epsilon,count);
- fflush (stdout);
- }
-
- long pfound=0;
- for (octave_idx_type i=0;i<dim;i++)
- error_array[i]=hrms[i]=hav[i]=0.0;
- double avfound=0.0;
- make_multi_box(series,box,list,LENGTH-STEP,NMAX,dim,
- embed,delay,epsilon);
- for (octave_idx_type i=(embed-1)*delay;i<clength;i++)
- {
- for (octave_idx_type j=0;j<dim;j++)
- hser[j] = series[j] + i;
-
- octave_idx_type actfound;
- actfound=find_multi_neighbors(series,box,list,hser,NMAX,
- dim,embed,delay, epsilon,
- hfound);
- actfound=exclude_interval(actfound,i-causal+1,
- i+causal+(embed-1) *delay-1,
- hfound,found);
- if (actfound > 2*(dim*embed+1))
- {
- make_fit (series, found, error_array,
- i,dim, embed, delay, STEP, actfound);
- // Checking if the fit was correct
- // If any errors were raised: end function
- if (error_state)
- {
- return retval;
- }
- pfound++;
- avfound += (double)(actfound-1);
- for (octave_idx_type j=0;j<dim;j++)
- {
- hrms[j] += series[j][i+STEP] * series[j][i+STEP];
- hav[j] += series[j][i+STEP];
- }
- }
- }
- if (pfound > 1)
- {
- double sumerror=0.0;
- for (octave_idx_type j=0;j<dim;j++)
- {
- hav[j] /= pfound;
- hrms[j]=sqrt(fabs(hrms[j]/(pfound-1)-hav[j]*hav[j]*pfound
- /(pfound-1)));
- error_array[j]=sqrt(error_array[j]/pfound)/hrms[j];
- sumerror += error_array[j];
- }
-
-
- // old fprintf(stdout,"%e %e ",epsilon*interval,
- // sumerror/(double)dim);
- output(count, 0) = epsilon*interval;
- output(count, 1) = sumerror/(double)dim;
- for (octave_idx_type j=0;j<dim;j++)
- {
- //old fprintf(stdout,"%e ",error_array[j]);
- output(count, 2 + j) = error_array[j];
- }
- // old fprintf(stdout,"%e %e\n",(double)pfound
- // /(clength-(embed-1)*delay),
- // avfound/pfound);
- output(count, 2 + dim) = (double)pfound
- /(clength-(embed-1)*delay);
- output(count, 2 + dim + 1) = avfound/pfound;
-
- count += 1;
- }
- }
- // Resize output to fit actual results instead of
- // an educated guess
- // if count == 0 then the output will be an 0x4+dim matrix
- output.resize (count, dim + 4);
+ // Promote warnings connected with singular matrixes to errors
+ set_warning_state ("Octave:nearly-singular-matrix","error");
+ set_warning_state ("Octave:singular-matrix","error");
+
+ // Estimate maximum possible output size
+ octave_idx_type output_rows = (octave_idx_type)
+ ((log(EPS1) - log(EPS0)) / log (EPSF));
+ output_rows += 2;
+
+ // Create output
+ Matrix output (output_rows,dim+4);
+ octave_idx_type count = 0;
+
+ if (verbose)
+ printf("\nStarting new dataset\n\n");
+
+ for (double epsilon=EPS0;epsilon<EPS1*EPSF;epsilon*=EPSF)
+ {
+ if (verbose)
+ {
+ printf ("For epsilon = %e, the count = %d\n",
+ epsilon,count);
+ fflush (stdout);
+ }
+
+ long pfound=0;
+ for (octave_idx_type i=0;i<dim;i++)
+ error_array[i]=hrms[i]=hav[i]=0.0;
+ double avfound=0.0;
+ make_multi_box(series,box,list,LENGTH-STEP,NMAX,dim,
+ embed,delay,epsilon);
+ for (octave_idx_type i=(embed-1)*delay;i<clength;i++)
+ {
+ for (octave_idx_type j=0;j<dim;j++)
+ hser[j] = series[j] + i;
+
+ octave_idx_type actfound;
+ actfound=find_multi_neighbors(series,box,list,hser,NMAX,
+ dim,embed,delay, epsilon,
+ hfound);
+ actfound=exclude_interval(actfound,i-causal+1,
+ i+causal+(embed-1) *delay-1,
+ hfound,found);
+ if (actfound > 2*(dim*embed+1))
+ {
+ make_fit (series, found, error_array,
+ i,dim, embed, delay, STEP, actfound);
+ pfound++;
+ avfound += (double)(actfound-1);
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+ hrms[j] += series[j][i+STEP] * series[j][i+STEP];
+ hav[j] += series[j][i+STEP];
+ }
+ }
+ }
+ if (pfound > 1)
+ {
+ double sumerror=0.0;
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+ hav[j] /= pfound;
+ hrms[j]=sqrt(fabs(hrms[j]/(pfound-1)-hav[j]*hav[j]*pfound
+ /(pfound-1)));
+ error_array[j]=sqrt(error_array[j]/pfound)/hrms[j];
+ sumerror += error_array[j];
+ }
+
+
+ // old fprintf(stdout,"%e %e ",epsilon*interval,
+ // sumerror/(double)dim);
+ output(count, 0) = epsilon*interval;
+ output(count, 1) = sumerror/(double)dim;
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+ //old fprintf(stdout,"%e ",error_array[j]);
+ output(count, 2 + j) = error_array[j];
+ }
+ // old fprintf(stdout,"%e %e\n",(double)pfound
+ // /(clength-(embed-1)*delay),
+ // avfound/pfound);
+ output(count, 2 + dim) = (double)pfound
+ /(clength-(embed-1)*delay);
+ output(count, 2 + dim + 1) = avfound/pfound;
+
+ count += 1;
+ }
+ }
+ // Resize output to fit actual results instead of
+ // an educated guess
+ // if count == 0 then the output will be an 0x4+dim matrix
+ output.resize (count, dim + 4);
- retval(0) = output;
- }
- }
+ retval(0) = output;
+ }
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lfo_run__.cc
--- a/src/__lfo_run__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__lfo_run__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -226,13 +226,6 @@
Matrix solved_vec = mat.solve (vec);
double *solved_vec_arr = solved_vec.fortran_vec ();
- // If errors were raised (a singular matrix was encountered),
- // there is no sense in countinuing
- if (error_state)
- {
- return ;
- }
-
newcast[i]=foreav[i];
for (octave_idx_type j=0;j<dim;j++) {
for (octave_idx_type j1=0;j1<embed;j1++) {
@@ -330,87 +323,76 @@
for (octave_idx_type i=0;i<hdim;i++)
cast[i][j]=series[j][LENGTH-hdim+i];
- if ( ! error_state)
- {
-
- // Promote warnings connected with singular matrixes to errors
- set_warning_state ("Octave:nearly-singular-matrix","error");
- set_warning_state ("Octave:singular-matrix","error");
+ // Promote warnings connected with singular matrixes to errors
+ set_warning_state ("Octave:nearly-singular-matrix","error");
+ set_warning_state ("Octave:singular-matrix","error");
- // Calculate the maximum epsilon that makes sense
- // On the basis of 'i' and 'j' from put_in_boxes ()
- NDArray input_max = input.max ();
- double maximum_epsilon = (input_max(0) > input_max(dim-1))
- ? input_max(0) : input_max(dim-1);
- maximum_epsilon *= EPSF;
+ // Calculate the maximum epsilon that makes sense
+ // On the basis of 'i' and 'j' from put_in_boxes ()
+ NDArray input_max = input.max ();
+ double maximum_epsilon = (input_max(0) > input_max(dim-1))
+ ? input_max(0) : input_max(dim-1);
+ maximum_epsilon *= EPSF;
- // Create output
- Matrix output (FLENGTH, dim);
- for (octave_idx_type i=0;i<FLENGTH;i++)
+ // Create output
+ Matrix output (FLENGTH, dim);
+ for (octave_idx_type i=0;i<FLENGTH;i++)
+ {
+ bool done=0;
+ double epsilon=EPS0/EPSF;
+ while (!done)
{
- bool done=0;
- double epsilon=EPS0/EPSF;
- while (!done)
+ // If epsilon became too large
+ // there is no sense in continuing
+ if (epsilon > maximum_epsilon)
{
- // If epsilon became too large
- // there is no sense in continuing
- if (epsilon > maximum_epsilon)
+ error_with_id ("Octave:tisean", "The neighbourhood size"
+ " became too large during search,"
+ " no sense continuing");
+ return retval;
+ }
+
+ epsilon*=EPSF;
+ put_in_boxes(series, LENGTH, list, box, epsilon, dim, embed,
+ DELAY);
+ octave_idx_type actfound;
+ actfound=hfind_neighbors (series, cast, found, list, box,
+ epsilon, dim, embed, DELAY);
+ if (actfound >= MINN)
+ {
+ if (!do_zeroth)
+ make_fit(series, cast, found, dim, embed, DELAY,
+ actfound, newcast);
+ else
+ make_zeroth(series, found, dim, actfound,newcast);
+
+ for (octave_idx_type j=0;j<dim;j++)
{
- error_with_id ("Octave:tisean", "The neighbourhood size"
- " became too large during search,"
- " no sense continuing");
- return retval;
+ // old printf("%e ",newcast[j]*interval[j]+min_array[j]);
+ output(i,j) = newcast[j]*interval[j]+min_array[j];
}
- epsilon*=EPSF;
- put_in_boxes(series, LENGTH, list, box, epsilon, dim, embed,
- DELAY);
- octave_idx_type actfound;
- actfound=hfind_neighbors (series, cast, found, list, box,
- epsilon, dim, embed, DELAY);
- if (actfound >= MINN)
+ done=1;
+ for (octave_idx_type j=0;j<dim;j++)
{
- if (!do_zeroth)
- make_fit(series, cast, found, dim, embed, DELAY,
- actfound, newcast);
- else
- make_zeroth(series, found, dim, actfound,newcast);
-
- // Checking if the fit was correct
- // If any errors were raised: end function
- if (error_state)
+ // If this occurs there is no sense to continue
+ if ((newcast[j] > 2.0) || (newcast[j] < -1.0))
{
+ error_with_id("Octave:tisean","forecast failed, "
+ "escaping data region");
return retval;
}
-
- for (octave_idx_type j=0;j<dim;j++)
- {
- // old printf("%e ",newcast[j]*interval[j]+min_array[j]);
- output(i,j) = newcast[j]*interval[j]+min_array[j];
- }
-
- done=1;
- for (octave_idx_type j=0;j<dim;j++)
- {
- // If this occurs there is no sense to continue
- if ((newcast[j] > 2.0) || (newcast[j] < -1.0))
- {
- error_with_id("Octave:tisean","forecast failed, "
- "escaping data region");
- return retval;
- }
- }
- double *swap=cast[0];
- for (octave_idx_type j=0;j<hdim-1;j++)
- cast[j]=cast[j+1];
- cast[hdim-1]=swap;
- for (octave_idx_type j=0;j<dim;j++)
- cast[hdim-1][j]=newcast[j];
}
+ double *swap=cast[0];
+ for (octave_idx_type j=0;j<hdim-1;j++)
+ cast[j]=cast[j+1];
+ cast[hdim-1]=swap;
+ for (octave_idx_type j=0;j<dim;j++)
+ cast[hdim-1][j]=newcast[j];
}
}
- retval(0) = output;
}
+ retval(0) = output;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lyap_k__.cc
--- a/src/__lyap_k__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__lyap_k__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -211,70 +211,67 @@
eps_fak=pow(epsmax/epsmin,1.0/(double)(epscount-1));
- if (! error_state)
+ // Calculate exponents
+ dim_vector dv (epscount ,((int)maxdim-(int)mindim + 1));
+ string_vector keys;
+ keys.append (std::string("eps"));
+ keys.append (std::string("dim"));
+ keys.append (std::string("exp"));
+ octave_map output (dv,keys);
+
+ for (octave_idx_type l=0;l<epscount;l++)
{
- // Calculate exponents
- dim_vector dv (epscount ,((int)maxdim-(int)mindim + 1));
- string_vector keys;
- keys.append (std::string("eps"));
- keys.append (std::string("dim"));
- keys.append (std::string("exp"));
- octave_map output (dv,keys);
-
- for (octave_idx_type l=0;l<epscount;l++)
+ double epsilon=epsmin*pow(eps_fak,(double)l);
+ for (octave_idx_type i=0;i<maxdim-1;i++)
+ for (octave_idx_type j=0;j<=maxiter;j++) {
+ count[i][j]=0;
+ lyap[i][j]=0.0;
+ }
+ put_in_boxes(series, liste, box, length, maxdim, delay, maxiter,
+ epsilon);
+ for (octave_idx_type i=0;i<reference;i++)
{
- double epsilon=epsmin*pow(eps_fak,(double)l);
- for (octave_idx_type i=0;i<maxdim-1;i++)
- for (octave_idx_type j=0;j<=maxiter;j++) {
- count[i][j]=0;
- lyap[i][j]=0.0;
- }
- put_in_boxes(series, liste, box, length, maxdim, delay, maxiter,
- epsilon);
- for (octave_idx_type i=0;i<reference;i++)
- {
- lfind_neighbors(series, lfound, found, liste, box, window,
- maxdim, delay, i,epsilon);
- iterate_points(series, lyap, count, lfound, found,
- maxdim, mindim, delay, maxiter, i);
- }
+ lfind_neighbors(series, lfound, found, liste, box, window,
+ maxdim, delay, i,epsilon);
+ iterate_points(series, lyap, count, lfound, found,
+ maxdim, mindim, delay, maxiter, i);
+ }
- if (verbose)
- printf("epsilon= %e\n",epsilon*max_val);
- // Assign output
- for (octave_idx_type i=mindim-2;i<maxdim-1;i++)
- {
+ if (verbose)
+ printf("epsilon= %e\n",epsilon*max_val);
+ // Assign output
+ for (octave_idx_type i=mindim-2;i<maxdim-1;i++)
+ {
- // old fprintf(fout,"#epsilon= %e dim= %d\n",
- // epsilon*max_val,i+2);
- octave_scalar_map tmp (keys);
- tmp.setfield ("eps", epsilon*max_val);
- tmp.setfield ("dim", i+2);
+ // old fprintf(fout,"#epsilon= %e dim= %d\n",
+ // epsilon*max_val,i+2);
+ octave_scalar_map tmp (keys);
+ tmp.setfield ("eps", epsilon*max_val);
+ tmp.setfield ("dim", i+2);
- // Create matrix for the exponent data
- Matrix lyap_exp (maxiter + 1,3);
- octave_idx_type counter = 0;
- for (octave_idx_type j=0;j<=maxiter;j++)
- if (count[i][j])
- {
- // old fprintf(fout,"%d %e %ld\n",j,
- // lyap[i][j]/count[i][j],count[i][j]);
+ // Create matrix for the exponent data
+ Matrix lyap_exp (maxiter + 1,3);
+ octave_idx_type counter = 0;
+ for (octave_idx_type j=0;j<=maxiter;j++)
+ if (count[i][j])
+ {
+ // old fprintf(fout,"%d %e %ld\n",j,
+ // lyap[i][j]/count[i][j],count[i][j]);
- lyap_exp(counter, 0) = j;
- lyap_exp(counter, 1) = lyap[i][j]/count[i][j];
- lyap_exp(counter, 2) = count[i][j];
- counter += 1;
- }
- // Resize output to fit actual number of found exponents
- lyap_exp.resize(counter, 3);
- tmp.setfield ("exp", lyap_exp);
- output.assign(idx_vector(l),idx_vector(i-(int)(mindim-2)),
- tmp);
- }
+ lyap_exp(counter, 0) = j;
+ lyap_exp(counter, 1) = lyap[i][j]/count[i][j];
+ lyap_exp(counter, 2) = count[i][j];
+ counter += 1;
+ }
+ // Resize output to fit actual number of found exponents
+ lyap_exp.resize(counter, 3);
+ tmp.setfield ("exp", lyap_exp);
+ output.assign(idx_vector(l),idx_vector(i-(int)(mindim-2)),
+ tmp);
}
- // Assign output
- retval(0) = output;
}
+ // Assign output
+ retval(0) = output;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lyap_r__.cc
--- a/src/__lyap_r__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__lyap_r__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -167,64 +167,60 @@
octave_idx_type maxlength=length-delay*(dim-1)-steps-1-mindist;
bool alldone=0;
- if (! error_state)
+ // Calculate the maximum epsilon that makes sense
+ // On the basis of 'i' and 'j' from put_in_boxes ()
+ NDArray input_max = input.max ();
+ double maximum_epsilon = (input_max(0) > input_max(dim-1))
+ ? input_max(0) : input_max(dim-1);
+ maximum_epsilon *= 1.1;
+
+ // Calculate lyapunov exponents
+ for (double eps=eps0;!alldone;eps*=1.1)
{
- // Calculate the maximum epsilon that makes sense
- // On the basis of 'i' and 'j' from put_in_boxes ()
- NDArray input_max = input.max ();
- double maximum_epsilon = (input_max(0) > input_max(dim-1))
- ? input_max(0) : input_max(dim-1);
- maximum_epsilon *= 1.1;
-
- // Calculate lyapunov exponents
- for (double eps=eps0;!alldone;eps*=1.1)
+ // If epsilon became too large
+ // there is no sense in continuing
+ if (eps > maximum_epsilon)
{
-
- // If epsilon became too large
- // there is no sense in continuing
- if (eps > maximum_epsilon)
- {
- error_with_id ("Octave:tisean", "The neighbourhood size"
- " became too large during search,"
- " no sense continuing");
- return retval;
- }
-
- put_in_boxes(series, box, list, eps, length, dim, delay, steps);
- alldone=1;
- for (octave_idx_type n=0;n<=maxlength;n++)
- {
- if (!done[n])
- done[n]=make_iterate(series, box, list, found, lyap, eps,
- length, dim, delay, steps, mindist,
- n);
- alldone &= done[n];
- }
- if (verbose)
- printf("epsilon: %e already found: %ld\n",eps*max_val,
- found[0]);
+ error_with_id ("Octave:tisean", "The neighbourhood size"
+ " became too large during search,"
+ " no sense continuing");
+ return retval;
}
- // Create output
- Matrix output (steps+1, 2);
- octave_idx_type count = 0;
- for (octave_idx_type i=0;i<=steps;i++)
- if (found[i])
- {
- // old fprintf(file,"%d %e\n",i,lyap[i]/found[i]/2.0);
- output(count,0) = i;
- output(count,1) = lyap[i]/found[i]/2.0;
- count += 1;
- }
+ put_in_boxes(series, box, list, eps, length, dim, delay, steps);
+ alldone=1;
+ for (octave_idx_type n=0;n<=maxlength;n++)
+ {
+ if (!done[n])
+ done[n]=make_iterate(series, box, list, found, lyap, eps,
+ length, dim, delay, steps, mindist,
+ n);
+ alldone &= done[n];
+ }
+ if (verbose)
+ printf("epsilon: %e already found: %ld\n",eps*max_val,
+ found[0]);
+ }
- // Resize output to match number of found points
- if (count < output.numel ())
- output.resize (count, 2);
+ // Create output
+ Matrix output (steps+1, 2);
+ octave_idx_type count = 0;
+ for (octave_idx_type i=0;i<=steps;i++)
+ if (found[i])
+ {
+ // old fprintf(file,"%d %e\n",i,lyap[i]/found[i]/2.0);
+ output(count,0) = i;
+ output(count,1) = lyap[i]/found[i]/2.0;
+ count += 1;
+ }
- // Assign output
- retval(0) = output;
- }
+ // Resize output to match number of found points
+ if (count < output.numel ())
+ output.resize (count, 2);
+
+ // Assign output
+ retval(0) = output;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lyap_spec__.cc
--- a/src/__lyap_spec__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__lyap_spec__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -220,13 +220,6 @@
Matrix solved = mat.solve (vec);
double *solved_arr = solved.fortran_vec ();
- // If errors were raised (a singular matrix was encountered),
- // there is no sense in countinuing
- if (error_state)
- {
- return ;
- }
-
double new_vec = solved_arr[0];
for (octave_idx_type i=1;i<=alldim;i++)
dynamics[d][i-1] = solved_arr[i];
@@ -419,149 +412,138 @@
}
// end old indexes = make_multi_index();
- if (!error_state)
- {
-
- // Promote warnings connected with singular matrixes to errors
- set_warning_state ("Octave:nearly-singular-matrix","error");
- set_warning_state ("Octave:singular-matrix","error");
+ // Promote warnings connected with singular matrixes to errors
+ set_warning_state ("Octave:nearly-singular-matrix","error");
+ set_warning_state ("Octave:singular-matrix","error");
- // Prepare data for running first time
- if (count == 0)
- {
- averr_matrix.fill (0.0);
+ // Prepare data for running first time
+ if (count == 0)
+ {
+ averr_matrix.fill (0.0);
- if (epsset)
- epsmin /= maxinterval;
+ if (epsset)
+ epsmin /= maxinterval;
- // old rnd_init(0x098342L);
- TISEAN_rand generator (0x098342L);
- for (octave_idx_type i=0;i<10000;i++)
- generator.rnd_long();
- for (octave_idx_type i=0;i<alldim;i++) {
- factor[i]=0.0;
- for (octave_idx_type j=0;j<alldim;j++)
- delta[i][j] = (double)generator.rnd_long()
- / (double)std::numeric_limits<octave_idx_type>
- ::max ();
- }
- gram_schmidt(alldim, delta,lfactor);
+ // old rnd_init(0x098342L);
+ TISEAN_rand generator (0x098342L);
+ for (octave_idx_type i=0;i<10000;i++)
+ generator.rnd_long();
+ for (octave_idx_type i=0;i<alldim;i++) {
+ factor[i]=0.0;
+ for (octave_idx_type j=0;j<alldim;j++)
+ delta[i][j] = (double)generator.rnd_long()
+ / (double)std::numeric_limits<octave_idx_type>
+ ::max ();
+ }
+ gram_schmidt(alldim, delta,lfactor);
- avneig = 0.0;
- aveps = 0.0;
- }
+ avneig = 0.0;
+ aveps = 0.0;
+ }
- // Create output
- Matrix lyap_exp (1, 1 + alldim);
- time_t lasttime;
- time(&lasttime);
- bool pause_calc = false;
- for (octave_idx_type i = count + (EMBED-1) * DELAY;
- i < ITERATIONS && !pause_calc; i++)
+ // Create output
+ Matrix lyap_exp (1, 1 + alldim);
+ time_t lasttime;
+ time(&lasttime);
+ bool pause_calc = false;
+ for (octave_idx_type i = count + (EMBED-1) * DELAY;
+ i < ITERATIONS && !pause_calc; i++)
+ {
+ count++;
+ make_dynamics(series, box, indexes, epsmin, epsset, EPSSTEP,
+ EMBED, MINNEIGHBORS, LENGTH, DIMENSION, count,
+ avneig, aveps, dynamics, averr, i);
+ make_iteration(DIMENSION, alldim, dynamics, delta);
+ gram_schmidt(alldim, delta,lfactor);
+ for (octave_idx_type j=0;j<alldim;j++) {
+ factor[j] += log(lfactor[j])/(double)DELAY;
+ }
+
+ if (((time(NULL)-lasttime) > OUT) || (i == (ITERATIONS-1))
+ || (count % it_pause == 0) )
{
- count++;
- make_dynamics(series, box, indexes, epsmin, epsset, EPSSTEP,
- EMBED, MINNEIGHBORS, LENGTH, DIMENSION, count,
- avneig, aveps, dynamics, averr, i);
- // If there was an error
- // (matrix singularity or not enough neighbors)
- // No sense continuing
- if (error_state)
+ time(&lasttime);
+
+ // Create spectrum output
+ // old fprintf(stdout,"%ld ",count);
+ lyap_exp(0,0) = count;
+ for (octave_idx_type j=0;j<alldim;j++)
{
- return retval;
+ // old fprintf(stdout,"%e ",factor[j]/count);
+ lyap_exp(0, 1+j) = factor[j]/count;
}
- make_iteration(DIMENSION, alldim, dynamics, delta);
- gram_schmidt(alldim, delta,lfactor);
- for (octave_idx_type j=0;j<alldim;j++) {
- factor[j] += log(lfactor[j])/(double)DELAY;
- }
- if (((time(NULL)-lasttime) > OUT) || (i == (ITERATIONS-1))
- || (count % it_pause == 0) )
- {
- time(&lasttime);
-
- // Create spectrum output
- // old fprintf(stdout,"%ld ",count);
- lyap_exp(0,0) = count;
- for (octave_idx_type j=0;j<alldim;j++)
- {
- // old fprintf(stdout,"%e ",factor[j]/count);
- lyap_exp(0, 1+j) = factor[j]/count;
- }
+ pause_calc = true;
+ }
+ }
- pause_calc = true;
- }
- }
-
- // Create pause output
- if (count < (ITERATIONS - (EMBED-1)*DELAY))
- {
- octave_scalar_map pause_vars;
- pause_vars.setfield ("averr", averr_matrix);
- pause_vars.setfield ("delta", delta_matrix);
- pause_vars.setfield ("count", count);
- pause_vars.setfield ("avneig", avneig);
- pause_vars.setfield ("aveps", aveps);
- pause_vars.setfield ("epsmin", epsmin);
- retval(0) = lyap_exp;
- retval(1) = pause_vars;
- }
+ // Create pause output
+ if (count < (ITERATIONS - (EMBED-1)*DELAY))
+ {
+ octave_scalar_map pause_vars;
+ pause_vars.setfield ("averr", averr_matrix);
+ pause_vars.setfield ("delta", delta_matrix);
+ pause_vars.setfield ("count", count);
+ pause_vars.setfield ("avneig", avneig);
+ pause_vars.setfield ("aveps", aveps);
+ pause_vars.setfield ("epsmin", epsmin);
+ retval(0) = lyap_exp;
+ retval(1) = pause_vars;
+ }
- // Create final output
- if (count == (ITERATIONS - (EMBED-1)*DELAY))
- {
- double dim=0.0;
- octave_idx_type i;
- for (i=0;i<alldim;i++) {
- dim += factor[i];
- if (dim < 0.0)
- break;
- }
- if (i < alldim)
- dim=i+(dim-factor[i])/fabs(factor[i]);
- else
- dim=alldim;
+ // Create final output
+ if (count == (ITERATIONS - (EMBED-1)*DELAY))
+ {
+ double dim=0.0;
+ octave_idx_type i;
+ for (i=0;i<alldim;i++) {
+ dim += factor[i];
+ if (dim < 0.0)
+ break;
+ }
+ if (i < alldim)
+ dim=i+(dim-factor[i])/fabs(factor[i]);
+ else
+ dim=alldim;
- // Create output pars
- octave_scalar_map pars;
+ // Create output pars
+ octave_scalar_map pars;
- // Create rel_err
- Matrix rel_err (1, DIMENSION);
- // old fprintf(stdout,"#Average relative forecast errors:= ");
- for (octave_idx_type i=0;i<DIMENSION;i++)
- {
- // old fprintf(stdout,"%e ",sqrt(averr[i]/count)/var[i]);
- rel_err(0,i) = sqrt(averr[i]/count)/var[i];
- }
- pars.setfield ("rel_err", rel_err);
+ // Create rel_err
+ Matrix rel_err (1, DIMENSION);
+ // old fprintf(stdout,"#Average relative forecast errors:= ");
+ for (octave_idx_type i=0;i<DIMENSION;i++)
+ {
+ // old fprintf(stdout,"%e ",sqrt(averr[i]/count)/var[i]);
+ rel_err(0,i) = sqrt(averr[i]/count)/var[i];
+ }
+ pars.setfield ("rel_err", rel_err);
- // Create abs_err
- Matrix abs_err (1, DIMENSION);
- // old fprintf(stdout,"#Average absolute forecast errors:= ");
- for (octave_idx_type i=0;i<DIMENSION;i++)
- {
- // old fprintf(stdout,"%e ",sqrt(averr[i]/count)
- // *interval[i]);
- abs_err(0,i) = sqrt(averr[i]/count)*interval[i];
- }
- pars.setfield ("abs_err", abs_err);
+ // Create abs_err
+ Matrix abs_err (1, DIMENSION);
+ // old fprintf(stdout,"#Average absolute forecast errors:= ");
+ for (octave_idx_type i=0;i<DIMENSION;i++)
+ {
+ // old fprintf(stdout,"%e ",sqrt(averr[i]/count)
+ // *interval[i]);
+ abs_err(0,i) = sqrt(averr[i]/count)*interval[i];
+ }
+ pars.setfield ("abs_err", abs_err);
- // old fprintf(stdout,"#Average Neighborhood Size= %e\n",
- // aveps*maxinterval/count);
- pars.setfield ("nsize", aveps*maxinterval/count);
-
- // old fprintf(stdout,"#Average num. of neighbors= %e\n",
- // avneig/count);
- pars.setfield ("nno", avneig/count);
+ // old fprintf(stdout,"#Average Neighborhood Size= %e\n",
+ // aveps*maxinterval/count);
+ pars.setfield ("nsize", aveps*maxinterval/count);
- // old fprintf(stdout,"#estimated KY-Dimension= %f\n",dim);
- pars.setfield ("ky_dim", dim);
+ // old fprintf(stdout,"#Average num. of neighbors= %e\n",
+ // avneig/count);
+ pars.setfield ("nno", avneig/count);
- // Assign output
- retval(0) = lyap_exp;
- retval(1) = pars;
- }
+ // old fprintf(stdout,"#estimated KY-Dimension= %f\n",dim);
+ pars.setfield ("ky_dim", dim);
+
+ // Assign output
+ retval(0) = lyap_exp;
+ retval(1) = pars;
}
}
return retval;
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lzo_gm__.cc
--- a/src/__lzo_gm__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__lzo_gm__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -110,92 +110,89 @@
MArray<octave_idx_type> box (dim_vector(NMAX,NMAX));
- if ( ! error_state)
- {
- // Estimate maximum possible output size
- octave_idx_type output_rows = (octave_idx_type)
- ((log(EPS1) - log(EPS0)) / log (EPSF));
- output_rows += 2;
+ // Estimate maximum possible output size
+ octave_idx_type output_rows = (octave_idx_type)
+ ((log(EPS1) - log(EPS0)) / log (EPSF));
+ output_rows += 2;
- // Create output
- Matrix output (output_rows,dim+4);
- octave_idx_type count = 0;
+ // Create output
+ Matrix output (output_rows,dim+4);
+ octave_idx_type count = 0;
- for (double epsilon=EPS0;epsilon<EPS1*EPSF;epsilon*=EPSF)
+ for (double epsilon=EPS0;epsilon<EPS1*EPSF;epsilon*=EPSF)
+ {
+ long pfound=0;
+ for (octave_idx_type i=0;i<dim;i++)
+ error_array[i]=hrms[i]=hav[i]=0.0;
+ double avfound=0.0;
+
+ make_multi_box(input,box,list,LENGTH-STEP,NMAX,dim,
+ embed,delay,epsilon);
+ for (octave_idx_type i=(embed-1)*delay;i<clength;i++)
{
- long pfound=0;
- for (octave_idx_type i=0;i<dim;i++)
- error_array[i]=hrms[i]=hav[i]=0.0;
- double avfound=0.0;
-
- make_multi_box(input,box,list,LENGTH-STEP,NMAX,dim,
- embed,delay,epsilon);
- for (octave_idx_type i=(embed-1)*delay;i<clength;i++)
+ for (octave_idx_type j=0;j<dim;j++)
{
- for (octave_idx_type j=0;j<dim;j++)
- {
- // old hser[j]=series[j]+i;
- hser[j] = input.fortran_vec() + j * LENGTH + i;
- }
- octave_idx_type actfound;
- actfound = find_multi_neighbors(input,box,list,hser,
- NMAX,dim,embed,delay,
- epsilon,hfound);
- actfound = exclude_interval(actfound,i-causal+1,
- i+causal+(embed-1)*delay-1,
- hfound,found);
- if (actfound > 2*(dim*embed+1))
- {
- make_fit (input, dim, i, actfound, STEP, found,
- error_array);
- pfound++;
- avfound += (double)(actfound-1);
- for (octave_idx_type j=0;j<dim;j++) {
- hrms[j] += input(i+STEP,j) * input(i+STEP,j);
- hav[j] += input(i+STEP,j);
- }
- }
+ // old hser[j]=series[j]+i;
+ hser[j] = input.fortran_vec() + j * LENGTH + i;
}
- if (pfound > 1)
+ octave_idx_type actfound;
+ actfound = find_multi_neighbors(input,box,list,hser,
+ NMAX,dim,embed,delay,
+ epsilon,hfound);
+ actfound = exclude_interval(actfound,i-causal+1,
+ i+causal+(embed-1)*delay-1,
+ hfound,found);
+ if (actfound > 2*(dim*embed+1))
{
- double sumerror=0.0;
- for (octave_idx_type j=0;j<dim;j++)
- {
- hav[j] /= pfound;
- hrms[j]=sqrt(fabs(hrms[j]/(pfound-1)-hav[j]*hav[j]
- * pfound/(pfound-1)));
- error_array[j]=sqrt(error_array[j]/pfound)/hrms[j];
- sumerror += error_array[j];
- }
-
- // Write output
- // old fprintf(stdout,"%e %e ",epsilon*interval,sumerror/(double)dim);
- output(count, 0) = epsilon * interval;
- output(count, 1) = sumerror / (double) dim;
- for (octave_idx_type j=0;j<dim;j++)
- {
- // old fprintf(stdout,"%e ",error_array[j]);
- output(count, 2 + j) = error_array[j];
+ make_fit (input, dim, i, actfound, STEP, found,
+ error_array);
+ pfound++;
+ avfound += (double)(actfound-1);
+ for (octave_idx_type j=0;j<dim;j++) {
+ hrms[j] += input(i+STEP,j) * input(i+STEP,j);
+ hav[j] += input(i+STEP,j);
}
-
- // old fprintf(stdout,"%e %e\n",(double)pfound/(clength-(embed-1)*delay),
- // avfound/pfound);
- output(count,2 + dim) = (double)pfound /
- (clength-(embed-1)*delay);
- output(count,2 + dim + 1) = avfound/pfound;
-
- count += 1;
}
}
+ if (pfound > 1)
+ {
+ double sumerror=0.0;
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+ hav[j] /= pfound;
+ hrms[j]=sqrt(fabs(hrms[j]/(pfound-1)-hav[j]*hav[j]
+ * pfound/(pfound-1)));
+ error_array[j]=sqrt(error_array[j]/pfound)/hrms[j];
+ sumerror += error_array[j];
+ }
- // Resize output to fit actual results instead of
- // an educated guess
- // if count == 0 then the output will be an 0x4+dim matrix
- output.resize (count, dim + 4);
+ // Write output
+ // old fprintf(stdout,"%e %e ",epsilon*interval,sumerror/(double)dim);
+ output(count, 0) = epsilon * interval;
+ output(count, 1) = sumerror / (double) dim;
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+ // old fprintf(stdout,"%e ",error_array[j]);
+ output(count, 2 + j) = error_array[j];
+ }
+
+// old fprintf(stdout,"%e %e\n",(double)pfound/(clength-(embed-1)*delay),
+// avfound/pfound);
+ output(count,2 + dim) = (double)pfound /
+ (clength-(embed-1)*delay);
+ output(count,2 + dim + 1) = avfound/pfound;
- retval(0) = output;
+ count += 1;
+ }
+ }
- }
+ // Resize output to fit actual results instead of
+ // an educated guess
+ // if count == 0 then the output will be an 0x4+dim matrix
+ output.resize (count, dim + 4);
+
+ retval(0) = output;
+
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lzo_run__.cc
--- a/src/__lzo_run__.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src/__lzo_run__.cc 2023-03-09 19:11:14.000000000 -0600
@@ -209,90 +209,87 @@
MArray<octave_idx_type> box (dim_vector(NMAX,NMAX));
- if ( ! error_state)
- {
- for (octave_idx_type j=0;j<dim;j++)
- for (octave_idx_type i=0;i<hdim;i++)
- cast[i][j]=input(LENGTH-hdim+i,j);
-
- // old indexes=make_multi_index(dim,embed,DELAY);
-
- octave_idx_type alldim=dim * embed;
-
- MArray<octave_idx_type> indexes (dim_vector (alldim, 2));
- for (octave_idx_type i=0;i<alldim;i++)
- {
- indexes(i,0)=i%dim;
- indexes(i,1)=(i/dim)*DELAY;
- }
-
- // end old index = make_multi_index();
-
- // old rnd_init(seed);
- TISEAN_rand generator (seed);
-
- double epsilon0=EPS0/EPSF;
-
- if (setnoise)
- Q /= 100.0;
-
- Matrix output (FLENGTH, dim);
- octave_idx_type row_count = 0;
- octave_idx_type count = 1;
- for (octave_idx_type i=0;i<FLENGTH;i++)
- {
- bool done=0;
- double epsilon;
- if (setsort)
- epsilon= epsilon0/((double)count*EPSF);
- else
- epsilon=epsilon0;
- while (!done) {
- epsilon*=EPSF;
- put_in_boxes(input, box, list, epsilon,(embed-1)*DELAY);
- octave_idx_type actfound=hfind_neighbors(input, indexes, box,
- list, cast, found,
- epsilon,
- (embed-1) * DELAY);
- if (actfound >= MINN) {
- if (setsort) {
- epsilon0 += epsilon;
- count++;
- sort(input, found, abstand, cast, actfound, (embed-1)*DELAY);
- actfound=MINN;
- }
- make_zeroth(input, generator, setnoise, var, Q, found,
- actfound, newcast);
-
- for (octave_idx_type j=0;j<dim-1;j++)
- {
- // old printf("%e ",newcast[j]*interval[j]+min[j]);
- output(row_count, j) = newcast[j]*interval[j]+min[j];
- }
- // old printf("%e\n",newcast[dim-1]*interval[dim-1]+min[dim-1]);
- output(row_count, dim-1) = newcast[dim-1]*interval[dim-1]
- + min[dim-1];
- row_count += 1;
-
- done=1;
- double *swap=cast[0];
- for (octave_idx_type j=0;j<hdim-1;j++)
- cast[j]=cast[j+1];
- cast[hdim-1]=swap;
- for (octave_idx_type j=0;j<dim;j++)
- cast[hdim-1][j]=newcast[j];
- }
- }
- }
-
- if (row_count != 0)
- {
- output.resize (row_count, dim);
- retval(0) = output;
- }
- else
- retval(0) = Matrix (0,0);
- }
- }
+ for (octave_idx_type j=0;j<dim;j++)
+ for (octave_idx_type i=0;i<hdim;i++)
+ cast[i][j]=input(LENGTH-hdim+i,j);
+
+ // old indexes=make_multi_index(dim,embed,DELAY);
+
+ octave_idx_type alldim=dim * embed;
+
+ MArray<octave_idx_type> indexes (dim_vector (alldim, 2));
+ for (octave_idx_type i=0;i<alldim;i++)
+ {
+ indexes(i,0)=i%dim;
+ indexes(i,1)=(i/dim)*DELAY;
+ }
+
+ // end old index = make_multi_index();
+
+ // old rnd_init(seed);
+ TISEAN_rand generator (seed);
+
+ double epsilon0=EPS0/EPSF;
+
+ if (setnoise)
+ Q /= 100.0;
+
+ Matrix output (FLENGTH, dim);
+ octave_idx_type row_count = 0;
+ octave_idx_type count = 1;
+ for (octave_idx_type i=0;i<FLENGTH;i++)
+ {
+ bool done=0;
+ double epsilon;
+ if (setsort)
+ epsilon= epsilon0/((double)count*EPSF);
+ else
+ epsilon=epsilon0;
+ while (!done) {
+ epsilon*=EPSF;
+ put_in_boxes(input, box, list, epsilon,(embed-1)*DELAY);
+ octave_idx_type actfound=hfind_neighbors(input, indexes, box,
+ list, cast, found,
+ epsilon,
+ (embed-1) * DELAY);
+ if (actfound >= MINN) {
+ if (setsort) {
+ epsilon0 += epsilon;
+ count++;
+ sort(input, found, abstand, cast, actfound, (embed-1)*DELAY);
+ actfound=MINN;
+ }
+ make_zeroth(input, generator, setnoise, var, Q, found,
+ actfound, newcast);
+
+ for (octave_idx_type j=0;j<dim-1;j++)
+ {
+ // old printf("%e ",newcast[j]*interval[j]+min[j]);
+ output(row_count, j) = newcast[j]*interval[j]+min[j];
+ }
+ // old printf("%e\n",newcast[dim-1]*interval[dim-1]+min[dim-1]);
+ output(row_count, dim-1) = newcast[dim-1]*interval[dim-1]
+ + min[dim-1];
+ row_count += 1;
+
+ done=1;
+ double *swap=cast[0];
+ for (octave_idx_type j=0;j<hdim-1;j++)
+ cast[j]=cast[j+1];
+ cast[hdim-1]=swap;
+ for (octave_idx_type j=0;j<dim;j++)
+ cast[hdim-1][j]=newcast[j];
+ }
+ }
+ }
+
+ if (row_count != 0)
+ {
+ output.resize (row_count, dim);
+ retval(0) = output;
+ }
+ else
+ retval(0) = Matrix (0,0);
+ }
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__lzo_test__.cc
--- a/src/__lzo_test__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__lzo_test__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -150,93 +150,90 @@
MArray<octave_idx_type> box (dim_vector(NMAX, NMAX));
// Compute forecast error
- if ( ! error_state)
- {
- for (octave_idx_type i=0;i<LENGTH;i++)
- done[i]=0;
+ for (octave_idx_type i=0;i<LENGTH;i++)
+ done[i]=0;
+
+ bool alldone = false;
+ if (epsset)
+ EPS0 /= interval;
- bool alldone = false;
- if (epsset)
- EPS0 /= interval;
+ double epsilon = EPS0 / EPSF;
- double epsilon = EPS0 / EPSF;
+ if (!clengthset)
+ CLENGTH=LENGTH;
+ octave_idx_type clength = ((CLENGTH*refstep+STEP) <= LENGTH)
+ ? CLENGTH : (LENGTH-STEP)/refstep;
- if (!clengthset)
- CLENGTH=LENGTH;
- octave_idx_type clength = ((CLENGTH*refstep+STEP) <= LENGTH)
- ? CLENGTH : (LENGTH-STEP)/refstep;
+ // Compute estimates
+ octave_idx_type actfound;
+ octave_idx_type hi;
+ while (!alldone) {
+ alldone=1;
+ epsilon*=EPSF;
+ make_multi_box(input,box,list,LENGTH-(long)STEP,NMAX,dim,
+ embed,DELAY,epsilon);
+ for (octave_idx_type i=(embed-1)*DELAY;i<clength;i++)
+ if (!done[i]) {
+ hi=i*refstep;
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+// old hser[j]=series[j]+hi;
+ hser[j] = input.fortran_vec() + j * LENGTH + hi;
+ }
+ actfound=find_multi_neighbors(input,box,list,hser,NMAX,
+ dim,embed,DELAY,epsilon,hfound);
+ actfound=exclude_interval(actfound,hi-(long)causal+1,
+ hi+causal+(embed-1)*DELAY-1,hfound,found);
+ if (actfound >= MINN)
+ {
+ if (setsort)
+ {
+ sort(input, found, abstand, embed, DELAY, MINN,
+ actfound, hser);
+ actfound=MINN;
+ }
+ for (octave_idx_type j=1;j<=STEP;j++) {
+ make_fit(input,dim,hi,actfound,j,found,error_array,diffs);
+ }
+ done[i]=1;
+ }
+ alldone &= done[i];
+ }
+ }
- // Compute estimates
- octave_idx_type actfound;
- octave_idx_type hi;
- while (!alldone) {
- alldone=1;
- epsilon*=EPSF;
- make_multi_box(input,box,list,LENGTH-(long)STEP,NMAX,dim,
- embed,DELAY,epsilon);
- for (octave_idx_type i=(embed-1)*DELAY;i<clength;i++)
- if (!done[i]) {
+ // Create relative forecast error output
+ Matrix rel_forecast_err (STEP, dim + 1);
+ for (octave_idx_type i=0;i<STEP;i++)
+ {
+ rel_forecast_err(i,0) = i + 1;
+ for (octave_idx_type j=0;j<dim;j++)
+ {
+ // old fprintf(stdout,"%e ",
+ // sqrt(error[j][i]/(clength-(embed-1)*DELAY))/rms[j]);
+ rel_forecast_err(i,j+1) = sqrt(error_array(i,j)
+ /(clength-(embed-1)*DELAY))/rms[j];
+ }
+ }
+
+ // Create individual forecast error output
+ Matrix ind_forecast_err (1,1);
+ if (nargout > 1)
+ {
+ ind_forecast_err.resize(clength - (embed-1)*DELAY, dim);
+ for (octave_idx_type i=(embed-1)*DELAY;i<clength;i++)
+ {
hi=i*refstep;
for (octave_idx_type j=0;j<dim;j++)
{
-// old hser[j]=series[j]+hi;
- hser[j] = input.fortran_vec() + j * LENGTH + hi;
- }
- actfound=find_multi_neighbors(input,box,list,hser,NMAX,
- dim,embed,DELAY,epsilon,hfound);
- actfound=exclude_interval(actfound,hi-(long)causal+1,
- hi+causal+(embed-1)*DELAY-1,hfound,found);
- if (actfound >= MINN)
- {
- if (setsort)
- {
- sort(input, found, abstand, embed, DELAY, MINN,
- actfound, hser);
- actfound=MINN;
- }
- for (octave_idx_type j=1;j<=STEP;j++) {
- make_fit(input,dim,hi,actfound,j,found,error_array,diffs);
- }
- done[i]=1;
- }
- alldone &= done[i];
- }
- }
-
- // Create relative forecast error output
- Matrix rel_forecast_err (STEP, dim + 1);
- for (octave_idx_type i=0;i<STEP;i++)
- {
- rel_forecast_err(i,0) = i + 1;
- for (octave_idx_type j=0;j<dim;j++)
- {
-// old fprintf(stdout,"%e ",
-// sqrt(error[j][i]/(clength-(embed-1)*DELAY))/rms[j]);
- rel_forecast_err(i,j+1) = sqrt(error_array(i,j)
- /(clength-(embed-1)*DELAY))/rms[j];
+ // old fprintf(stdout,"%e ",diffs[j][hi]*hinter[j]);
+ ind_forecast_err(i-(embed-1)*DELAY,j) = \
+ diffs(hi,j)*hinter[j];
}
}
+ }
- // Create individual forecast error output
- Matrix ind_forecast_err (1,1);
- if (nargout > 1)
- {
- ind_forecast_err.resize(clength - (embed-1)*DELAY, dim);
- for (octave_idx_type i=(embed-1)*DELAY;i<clength;i++)
- {
- hi=i*refstep;
- for (octave_idx_type j=0;j<dim;j++)
- {
-// old fprintf(stdout,"%e ",diffs[j][hi]*hinter[j]);
- ind_forecast_err(i-(embed-1)*DELAY,j) = \
- diffs(hi,j)*hinter[j];
- }
- }
- }
-
- retval(0) = rel_forecast_err;
- retval(1) = ind_forecast_err;
- }
+ retval(0) = rel_forecast_err;
+ retval(1) = ind_forecast_err;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__poincare__.cc
--- a/src/__poincare__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__poincare__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -129,19 +129,16 @@
- if ( ! error_state)
- {
- Matrix output (out_size, embdim);
+ Matrix output (out_size, embdim);
- octave_idx_type count = poincare (input.fortran_vec(),
- input.numel(), embdim,
- delay, comp, where, direction,
- output);
- // Resize output to fit sections found
- output.resize (count, embdim);
+ octave_idx_type count = poincare (input.fortran_vec(),
+ input.numel(), embdim,
+ delay, comp, where, direction,
+ output);
+ // Resize output to fit sections found
+ output.resize (count, embdim);
- retval(0) = output;
- }
+ retval(0) = output;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__polynom__.cc
--- a/src/__polynom__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__polynom__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -222,88 +222,79 @@
make_coding(coding_vec,N,N,DIM-1,1,0);
octave_idx_type *coding = coding_vec.data();
- if (! error_state)
- {
- // Promote warnings connected with singular matrixes to errors
- set_warning_state ("Octave:nearly-singular-matrix","error");
- set_warning_state ("Octave:singular-matrix","error");
-
- // Make the fit
- make_fit (series, coding, results, INSAMPLE, N, DIM, DELAY,
- maxencode, pars);
+ // Promote warnings connected with singular matrixes to errors
+ set_warning_state ("Octave:nearly-singular-matrix","error");
+ set_warning_state ("Octave:singular-matrix","error");
+
+ // Make the fit
+ make_fit (series, coding, results, INSAMPLE, N, DIM, DELAY,
+ maxencode, pars);
+
+ // Create outputs
- // If error encountered during the fit there is no sense to continue
- if (error_state)
- {
- return retval;
- }
+ // Create output that contains the number of free parameters
+ // old fprintf(file,"#number of free parameters= %d\n\n",pars);
+ octave_idx_type free_par = pars;
- // Create outputs
+ // Create output that contains the norm used for the fit
+ // old fprintf(file,"#used norm for the fit= %e\n",std_dev);
+ double fit_norm = std_dev;
- // Create output that contains the number of free parameters
- // old fprintf(file,"#number of free parameters= %d\n\n",pars);
- octave_idx_type free_par = pars;
-
- // Create output that contains the norm used for the fit
- // old fprintf(file,"#used norm for the fit= %e\n",std_dev);
- double fit_norm = std_dev;
-
- // Create coefficients output
- Matrix coeffs (pars, DIM + 1);
- for (octave_idx_type j=0;j<pars;j++)
+ // Create coefficients output
+ Matrix coeffs (pars, DIM + 1);
+ for (octave_idx_type j=0;j<pars;j++)
+ {
+ decode(N,opar,DIM-1,coding[j],maxencode);
+ octave_idx_type sumpar=0;
+ for (octave_idx_type k=0;k<DIM;k++)
{
- decode(N,opar,DIM-1,coding[j],maxencode);
- octave_idx_type sumpar=0;
- for (octave_idx_type k=0;k<DIM;k++)
- {
- sumpar += opar[k];
- // old fprintf(file,"%d ",opar[k]);
- coeffs(j, k) = opar[k];
- }
- // old fprintf(file,"%e\n",results[j]
- // /pow(std_dev,(double)(sumpar-1)));
- coeffs(j,DIM) = results[j]/pow(std_dev,(double)(sumpar-1));
-
+ sumpar += opar[k];
+ // old fprintf(file,"%d ",opar[k]);
+ coeffs(j, k) = opar[k];
}
+ // old fprintf(file,"%e\n",results[j]
+ // /pow(std_dev,(double)(sumpar-1)));
+ coeffs(j,DIM) = results[j]/pow(std_dev,(double)(sumpar-1));
- // Create sample error
- // 1st element of sample_error is the insample error
- // 2nd element of sample_error is the out of sample error (if exists)
- NDArray sample_err (dim_vector (1,1));
+ }
+
+ // Create sample error
+ // 1st element of sample_error is the insample error
+ // 2nd element of sample_error is the out of sample error (if exists)
+ NDArray sample_err (dim_vector (1,1));
- // old in_error = make_error((unsigned long)0,INSAMPLE)
- // fprintf(file,"#average insample error= %e\n",
- // sqrt(in_error)*std_dev);
- sample_err(0) = sqrt(make_error(series, coding, results, N, DIM,
- DELAY, maxencode, pars,
- 0,INSAMPLE))
+ // old in_error = make_error((unsigned long)0,INSAMPLE)
+ // fprintf(file,"#average insample error= %e\n",
+ // sqrt(in_error)*std_dev);
+ sample_err(0) = sqrt(make_error(series, coding, results, N, DIM,
+ DELAY, maxencode, pars,
+ 0,INSAMPLE))
+ * std_dev;
+
+ if (INSAMPLE < LENGTH)
+ {
+ // old out_error=make_error(INSAMPLE,LENGTH);
+ // fprintf(file,"#average out of sample error= %e\n",
+ // sqrt(out_error)*std_dev);
+ sample_err.resize (dim_vector (2,1));
+ sample_err(1) = sqrt (make_error (series, coding, results, N,
+ DIM, DELAY, maxencode, pars,
+ INSAMPLE, LENGTH))
* std_dev;
-
- if (INSAMPLE < LENGTH)
- {
- // old out_error=make_error(INSAMPLE,LENGTH);
- // fprintf(file,"#average out of sample error= %e\n",
- // sqrt(out_error)*std_dev);
- sample_err.resize (dim_vector (2,1));
- sample_err(1) = sqrt (make_error (series, coding, results, N,
- DIM, DELAY, maxencode, pars,
- INSAMPLE, LENGTH))
- * std_dev;
- }
+ }
- // Create forecast
- NDArray forecast (dim_vector (0,0));
- if (CLENGTH > 0)
- make_cast(forecast, series, coding, results, LENGTH, CLENGTH, N,
- DIM, DELAY, maxencode, pars, std_dev);
+ // Create forecast
+ NDArray forecast (dim_vector (0,0));
+ if (CLENGTH > 0)
+ make_cast(forecast, series, coding, results, LENGTH, CLENGTH, N,
+ DIM, DELAY, maxencode, pars, std_dev);
- // Assign outputs
- retval(0) = free_par;
- retval(1) = fit_norm;
- retval(2) = coeffs;
- retval(3) = sample_err;
- retval(4) = forecast;
- }
+ // Assign outputs
+ retval(0) = free_par;
+ retval(1) = fit_norm;
+ retval(2) = coeffs;
+ retval(3) = sample_err;
+ retval(4) = forecast;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__rbf__.cc
--- a/src/__rbf__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__rbf__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -152,169 +152,161 @@
for (octave_idx_type j=0;j<DIM;j++)
center[i][j]=series[(DIM-1)*DELAY-j*DELAY+(i*cstep)/(CENTER-1)];
- if (! error_state)
- {
+ // Promote warnings connected with singular matrixes to errors
+ set_warning_state ("Octave:nearly-singular-matrix","error");
+ set_warning_state ("Octave:singular-matrix","error");
- // Promote warnings connected with singular matrixes to errors
- set_warning_state ("Octave:nearly-singular-matrix","error");
- set_warning_state ("Octave:singular-matrix","error");
-
- // Calculate coefficients
- if (setdrift)
- drift(CENTER, DIM, center);
- varianz=avdistance(CENTER, DIM, center);
+ // Calculate coefficients
+ if (setdrift)
+ drift(CENTER, DIM, center);
+ varianz=avdistance(CENTER, DIM, center);
- // old make_fit();
- Matrix mat (CENTER + 1, CENTER + 1);
- OCTAVE_LOCAL_BUFFER (double *, mat_arr, CENTER + 1);
- for (octave_idx_type i=0;i <CENTER + 1;i++)
- mat_arr[i]=mat.fortran_vec () + (CENTER + 1) * i;
+ // old make_fit();
+ Matrix mat (CENTER + 1, CENTER + 1);
+ OCTAVE_LOCAL_BUFFER (double *, mat_arr, CENTER + 1);
+ for (octave_idx_type i=0;i <CENTER + 1;i++)
+ mat_arr[i]=mat.fortran_vec () + (CENTER + 1) * i;
- for (octave_idx_type i=0;i<=CENTER;i++) {
- coefs_arr[i]=0.0;
- for (octave_idx_type j=0;j<=CENTER;j++)
- mat_arr[i][j]=0.0;
- }
+ for (octave_idx_type i=0;i<=CENTER;i++) {
+ coefs_arr[i]=0.0;
+ for (octave_idx_type j=0;j<=CENTER;j++)
+ mat_arr[i][j]=0.0;
+ }
- OCTAVE_LOCAL_BUFFER (double, hcen, CENTER);
+ OCTAVE_LOCAL_BUFFER (double, hcen, CENTER);
- for (octave_idx_type n=(DIM-1)*DELAY;n<INSAMPLE-STEP;n++) {
- octave_idx_type nst=n+STEP;
- for (octave_idx_type i=0;i<CENTER;i++)
- hcen[i]=rbf(DELAY, DIM, varianz, &series[n],center[i]);
- coefs_arr[0] += series[nst];
- mat_arr[0][0] += 1.0;
- for (octave_idx_type i=1;i<=CENTER;i++)
- mat_arr[i][0] += hcen[i-1];
- for (octave_idx_type i=1;i<=CENTER;i++) {
- double h = hcen[i-1];
- coefs_arr[i] += series[nst] * h;
- for (octave_idx_type j=1;j<=i;j++)
- mat_arr[i][j] += h*hcen[j-1];
- }
- }
-
- double h=(double)(INSAMPLE-STEP-(DIM-1)*DELAY);
- for (octave_idx_type i=0;i<=CENTER;i++) {
- coefs_arr[i] /= h;
- for (octave_idx_type j=0;j<=i;j++) {
- mat_arr[i][j] /= h;
- mat_arr[j][i]=mat_arr[i][j];
- }
- }
+ for (octave_idx_type n=(DIM-1)*DELAY;n<INSAMPLE-STEP;n++) {
+ octave_idx_type nst=n+STEP;
+ for (octave_idx_type i=0;i<CENTER;i++)
+ hcen[i]=rbf(DELAY, DIM, varianz, &series[n],center[i]);
+ coefs_arr[0] += series[nst];
+ mat_arr[0][0] += 1.0;
+ for (octave_idx_type i=1;i<=CENTER;i++)
+ mat_arr[i][0] += hcen[i-1];
+ for (octave_idx_type i=1;i<=CENTER;i++) {
+ double h = hcen[i-1];
+ coefs_arr[i] += series[nst] * h;
+ for (octave_idx_type j=1;j<=i;j++)
+ mat_arr[i][j] += h*hcen[j-1];
+ }
+ }
+
+ double h=(double)(INSAMPLE-STEP-(DIM-1)*DELAY);
+ for (octave_idx_type i=0;i<=CENTER;i++) {
+ coefs_arr[i] /= h;
+ for (octave_idx_type j=0;j<=i;j++) {
+ mat_arr[i][j] /= h;
+ mat_arr[j][i]=mat_arr[i][j];
+ }
+ }
- // old solvele(mat_arr,coefs_arr, CENTER+1);
- coefs = mat.solve(coefs);
- coefs_arr = coefs.fortran_vec ();// coefs takes up new memory space
+ // old solvele(mat_arr,coefs_arr, CENTER+1);
+ coefs = mat.solve(coefs);
+ coefs_arr = coefs.fortran_vec ();// coefs takes up new memory space
- // If solving the matrix generated errors do not continue
- if (error_state)
- return retval;
-
- // end make_fit()
+ // end make_fit()
- // Create outputs
-
- // Create centers
- Matrix centers (CENTER, DIM);
- for (octave_idx_type i=0;i<CENTER;i++)
- for (octave_idx_type j=0;j<DIM;j++)
- {
- // old fprintf(stdout," %e",center[i][j]*interval+min_val);
- centers(i,j) = center[i][j]*interval+min_val;
- }
+ // Create outputs
- // Create variance
- // old fprintf(stdout,"#variance= %e\n",varianz*interval);
- double variance_val = varianz*interval;
-
- // Create coefficients
- NDArray coeff (dim_vector(CENTER +1, 1));
- // old fprintf(stdout,"#%e\n",coefs[0]*interval+min_val);
- coeff(0) = coefs_arr[0]*interval+min_val;
- for (octave_idx_type i=1;i<=CENTER;i++)
+ // Create centers
+ Matrix centers (CENTER, DIM);
+ for (octave_idx_type i=0;i<CENTER;i++)
+ for (octave_idx_type j=0;j<DIM;j++)
{
- // old fprintf(stdout,"#%e\n",coefs[i]*interval);
- coeff(i) = coefs_arr[i]*interval;
+ // old fprintf(stdout," %e",center[i][j]*interval+min_val);
+ centers(i,j) = center[i][j]*interval+min_val;
}
- // Calculate insample error
- double sigma = 0.0;
- av = 0.0;
- for (octave_idx_type i=0;i<INSAMPLE;i++) {
+ // Create variance
+ // old fprintf(stdout,"#variance= %e\n",varianz*interval);
+ double variance_val = varianz*interval;
+
+ // Create coefficients
+ NDArray coeff (dim_vector(CENTER +1, 1));
+ // old fprintf(stdout,"#%e\n",coefs[0]*interval+min_val);
+ coeff(0) = coefs_arr[0]*interval+min_val;
+ for (octave_idx_type i=1;i<=CENTER;i++)
+ {
+ // old fprintf(stdout,"#%e\n",coefs[i]*interval);
+ coeff(i) = coefs_arr[i]*interval;
+ }
+
+ // Calculate insample error
+ double sigma = 0.0;
+ av = 0.0;
+ for (octave_idx_type i=0;i<INSAMPLE;i++) {
+ av += series[i];
+ sigma += series[i]*series[i];
+ }
+ av /= INSAMPLE;
+ sigma=sqrt(fabs(sigma/INSAMPLE-av*av));
+
+ // Create sample error
+ // 1st element of sample_error is the insample error
+ // 2nd element of sample_error is the out of sample error (if exists)
+ NDArray sample_error (dim_vector(1,1));
+ // old oldfprintf(stdout,"#insample error= %e\n",
+ // forecast_error(0LU,INSAMPLE)/sigma);
+ sample_error(0) = forecast_error(series, center, coefs_arr, CENTER,
+ DELAY, DIM, STEP, varianz,
+ 0,INSAMPLE)
+ / sigma;
+
+ if (INSAMPLE < LENGTH)
+ {
+ // Calculate out of sample error
+ av=sigma=0.0;
+ for (octave_idx_type i=INSAMPLE;i<LENGTH;i++) {
av += series[i];
sigma += series[i]*series[i];
}
- av /= INSAMPLE;
- sigma=sqrt(fabs(sigma/INSAMPLE-av*av));
-
- // Create sample error
- // 1st element of sample_error is the insample error
- // 2nd element of sample_error is the out of sample error (if exists)
- NDArray sample_error (dim_vector(1,1));
- // old oldfprintf(stdout,"#insample error= %e\n",
- // forecast_error(0LU,INSAMPLE)/sigma);
- sample_error(0) = forecast_error(series, center, coefs_arr, CENTER,
- DELAY, DIM, STEP, varianz,
- 0,INSAMPLE)
- / sigma;
+ av /= (LENGTH-INSAMPLE);
+ sigma=sqrt(fabs(sigma/(LENGTH-INSAMPLE)-av*av));
- if (INSAMPLE < LENGTH)
- {
- // Calculate out of sample error
- av=sigma=0.0;
- for (octave_idx_type i=INSAMPLE;i<LENGTH;i++) {
- av += series[i];
- sigma += series[i]*series[i];
- }
- av /= (LENGTH-INSAMPLE);
- sigma=sqrt(fabs(sigma/(LENGTH-INSAMPLE)-av*av));
+ // old fprintf(stdout,"#out of sample error= %e\n",
+ // forecast_error(INSAMPLE,LENGTH)/sigma);
+ sample_error.resize (dim_vector(2,1));
+ sample_error(1) = forecast_error(series, center, coefs_arr,
+ CENTER, DELAY, DIM, STEP,
+ varianz, INSAMPLE, LENGTH)
+ / sigma;
+ }
- // old fprintf(stdout,"#out of sample error= %e\n",
- // forecast_error(INSAMPLE,LENGTH)/sigma);
- sample_error.resize (dim_vector(2,1));
- sample_error(1) = forecast_error(series, center, coefs_arr,
- CENTER, DELAY, DIM, STEP,
- varianz, INSAMPLE, LENGTH)
- / sigma;
- }
+ // Create forecast if MAKECAST == true
+ NDArray forecast (dim_vector (0,0));
+ if (MAKECAST)
+ {
+ // old make_cast ();
+
+ forecast.resize(dim_vector(CLENGTH,1));
+
+ octave_idx_type dim=(DIM-1)*DELAY;
- // Create forecast if MAKECAST == true
- NDArray forecast (dim_vector (0,0));
- if (MAKECAST)
- {
- // old make_cast ();
-
- forecast.resize(dim_vector(CLENGTH,1));
-
- octave_idx_type dim=(DIM-1)*DELAY;
-
- OCTAVE_LOCAL_BUFFER (double, cast, dim + 1);
- for (octave_idx_type i=0;i<=dim;i++)
- cast[i]=series[LENGTH-1-dim+i];
+ OCTAVE_LOCAL_BUFFER (double, cast, dim + 1);
+ for (octave_idx_type i=0;i<=dim;i++)
+ cast[i]=series[LENGTH-1-dim+i];
- for (octave_idx_type n=0;n<CLENGTH;n++)
- {
- double new_el=coefs_arr[0];
- for (octave_idx_type i=1;i<=CENTER;i++)
- new_el += coefs_arr[i]*rbf(DELAY,DIM,varianz,&cast[dim],
- center[i-1]);
- // old fprintf(out,"%e\n",new_el*interval+min_val);
- forecast(n) = new_el*interval+min_val;
- for (octave_idx_type i=0;i<dim;i++)
- cast[i]=cast[i+1];
- cast[dim]=new_el;
- }
+ for (octave_idx_type n=0;n<CLENGTH;n++)
+ {
+ double new_el=coefs_arr[0];
+ for (octave_idx_type i=1;i<=CENTER;i++)
+ new_el += coefs_arr[i]*rbf(DELAY,DIM,varianz,&cast[dim],
+ center[i-1]);
+ // old fprintf(out,"%e\n",new_el*interval+min_val);
+ forecast(n) = new_el*interval+min_val;
+ for (octave_idx_type i=0;i<dim;i++)
+ cast[i]=cast[i+1];
+ cast[dim]=new_el;
}
+ }
- // Create output
- retval(0) = centers;
- retval(1) = variance_val; // variance;
- retval(2) = coeff;
- retval(3) = sample_error; // sample error [in sample; out of sample];
- retval(4) = forecast; // forecast values;
- }
+ // Create output
+ retval(0) = centers;
+ retval(1) = variance_val; // variance;
+ retval(2) = coeff;
+ retval(3) = sample_error; // sample error [in sample; out of sample];
+ retval(4) = forecast; // forecast values;
}
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__surrogates__.cc
--- a/src/__surrogates__.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src/__surrogates__.cc 2023-03-09 19:13:16.000000000 -0600
@@ -63,35 +63,30 @@
octave_idx_type ispec = args(3).idx_type_value ();
double seed = args(4).double_value ();
- if (! error_state)
- {
+ octave_idx_type nmaxp = input.rows ();
+ octave_idx_type mcmax = input.columns ();
- octave_idx_type nmaxp = input.rows ();
- octave_idx_type mcmax = input.columns ();
-
- Cell surro_data (dim_vector (nsur,1));
- Matrix surro_tmp (input.dims ());
- Matrix pars (nsur, 2);
-
- for (octave_idx_type i = 0; i < nsur; i++)
- {
- octave_idx_type it_tmp;
- double rel_discrepency_tmp;
-
- F77_XFCN (ts_surrogates, TS_SURROGATES,
- (input.fortran_vec (), nmaxp, mcmax, imax, ispec,
- seed, surro_tmp.fortran_vec (), it_tmp,
- rel_discrepency_tmp));
-
- surro_data(i) = surro_tmp;
- pars(i,0) = it_tmp;
- pars(i,1) = rel_discrepency_tmp;
- }
-
- retval(0) = surro_data;
- retval(1) = pars;
- }
-
- }
+ Cell surro_data (dim_vector (nsur,1));
+ Matrix surro_tmp (input.dims ());
+ Matrix pars (nsur, 2);
+
+ for (octave_idx_type i = 0; i < nsur; i++)
+ {
+ octave_idx_type it_tmp;
+ double rel_discrepency_tmp;
+
+ F77_XFCN (ts_surrogates, TS_SURROGATES,
+ (input.fortran_vec (), nmaxp, mcmax, imax, ispec,
+ seed, surro_tmp.fortran_vec (), it_tmp,
+ rel_discrepency_tmp));
+
+ surro_data(i) = surro_tmp;
+ pars(i,0) = it_tmp;
+ pars(i,1) = rel_discrepency_tmp;
+ }
+
+ retval(0) = surro_data;
+ retval(1) = pars;
+ }
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__upo__.cc
--- a/src/__upo__.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src/__upo__.cc 2023-03-09 19:15:03.000000000 -0600
@@ -74,31 +74,26 @@
int icen = args(9).int_value();
-
- if (! error_state)
- {
-
- int lines_read = in_out1.numel();
- // Generating output vectors with estimated lengths
- // The extra length (+1) is to store the actual lengths
- NDArray olens (dim_vector (icen+1,1));
- NDArray orbit_data (dim_vector ( (icen*20<lines_read?\
- icen*20:lines_read)+1, 1));
- NDArray acc (dim_vector (icen+1,1));
- NDArray stability (dim_vector (icen+1,1));
-
- F77_XFCN (ts_upo, TS_UPO,
- (m, eps, frac,teq, tdis, h, tacc, iper,icen, lines_read,
- in_out1.fortran_vec(), olens.fortran_vec(),
- orbit_data.fortran_vec(), orbit_data.numel(),
- acc.fortran_vec(), stability.fortran_vec()));
-
-
- retval(0) = olens;
- retval(1) = orbit_data;
- retval(2) = acc;
- retval(3) = stability;
- }
- }
+ int lines_read = in_out1.numel();
+ // Generating output vectors with estimated lengths
+ // The extra length (+1) is to store the actual lengths
+ NDArray olens (dim_vector (icen+1,1));
+ NDArray orbit_data (dim_vector ( (icen*20<lines_read?\
+ icen*20:lines_read)+1, 1));
+ NDArray acc (dim_vector (icen+1,1));
+ NDArray stability (dim_vector (icen+1,1));
+
+ F77_XFCN (ts_upo, TS_UPO,
+ (m, eps, frac,teq, tdis, h, tacc, iper,icen, lines_read,
+ in_out1.fortran_vec(), olens.fortran_vec(),
+ orbit_data.fortran_vec(), orbit_data.numel(),
+ acc.fortran_vec(), stability.fortran_vec()));
+
+
+ retval(0) = olens;
+ retval(1) = orbit_data;
+ retval(2) = acc;
+ retval(3) = stability;
+ }
return retval;
}
diff -r 71f2c8fde0c5 -r e40a599d68cf src/__xzero__.cc
--- a/src/__xzero__.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/__xzero__.cc Mon Nov 29 13:43:29 2021 +0100
@@ -111,38 +111,35 @@
double epsilon=EPS0/EPSF;
octave_idx_type clength=(CLENGTH <= LENGTH) ? CLENGTH-STEP : LENGTH-STEP;
- if (! error_state)
+ // Calculate fit
+ while (!alldone) {
+ alldone=1;
+ epsilon*=EPSF;
+ make_box(series1,box,list,LENGTH-STEP,NMAX,DIM,DELAY,epsilon);
+ for (octave_idx_type i=(DIM-1)*DELAY;i<clength;i++)
+ if (!done[i]) {
+ octave_idx_type actfound;
+ actfound=find_neighbors(series1,box,list,series2+i,LENGTH,NMAX,
+ DIM,DELAY,epsilon,found);
+ if (actfound >= MINN) {
+ for (octave_idx_type j=1;j<=STEP;j++)
+ error_array[j-1] += make_fit (series1, series2, found,
+ i,actfound,j);
+ done[i]=1;
+ }
+ alldone &= done[i];
+ }
+ }
+
+ // Create output
+ Matrix output (STEP,1);
+ for (octave_idx_type i=0;i<STEP;i++)
{
- // Calculate fit
- while (!alldone) {
- alldone=1;
- epsilon*=EPSF;
- make_box(series1,box,list,LENGTH-STEP,NMAX,DIM,DELAY,epsilon);
- for (octave_idx_type i=(DIM-1)*DELAY;i<clength;i++)
- if (!done[i]) {
- octave_idx_type actfound;
- actfound=find_neighbors(series1,box,list,series2+i,LENGTH,NMAX,
- DIM,DELAY,epsilon,found);
- if (actfound >= MINN) {
- for (octave_idx_type j=1;j<=STEP;j++)
- error_array[j-1] += make_fit (series1, series2, found,
- i,actfound,j);
- done[i]=1;
- }
- alldone &= done[i];
- }
- }
-
- // Create output
- Matrix output (STEP,1);
- for (octave_idx_type i=0;i<STEP;i++)
- {
-// old fprintf(stdout,"%lu %e\n",i+1,
-// sqrt(error_array[i]/(clength-(DIM-1)*DELAY))/rms2);
- output(i,0) = sqrt(error_array[i]/(clength-(DIM-1)*DELAY))/rms2;
- }
- retval(0) = output;
+ // old fprintf(stdout,"%lu %e\n",i+1,
+ // sqrt(error_array[i]/(clength-(DIM-1)*DELAY))/rms2);
+ output(i,0) = sqrt(error_array[i]/(clength-(DIM-1)*DELAY))/rms2;
}
+ retval(0) = output;
}
return retval;
diff -r 71f2c8fde0c5 -r e40a599d68cf src/lazy.cc
--- a/src/lazy.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src/lazy.cc 2023-03-09 19:16:23.000000000 -0600
@@ -133,36 +133,33 @@
"Number of iterations (IMAX) must be a positive "
"integer");
- if (! error_state)
- {
- // If vector is in 1 row: transpose (we will transpose the output to fit)
- transposed = 0;
-
- if ((rows == 1) && (cols > 1))
- {
- transposed = 1;
- in_out1 = in_out1.transpose();
- }
-
- int lines_read = in_out1.numel();
- NDArray in_out2 (Matrix (lines_read, 1));
-
- F77_XFCN (ts_lazy, TS_LAZY,
- (m, rv, imax, lines_read,
- in_out1.fortran_vec(), in_out2.fortran_vec()));
-
- // Transpose the output to resemble the input
- if (transposed)
- {
- in_out1 = in_out1.transpose();
- in_out2 = in_out2.transpose();
- }
-
- retval(0) = in_out1;
- retval(1) = in_out2;
- }
- }
- return retval;
+ // If vector is in 1 row: transpose (we will transpose the output to fit)
+ transposed = 0;
+
+ if ((rows == 1) && (cols > 1))
+ {
+ transposed = 1;
+ in_out1 = in_out1.transpose();
+ }
+
+ int lines_read = in_out1.numel();
+ NDArray in_out2 (Matrix (lines_read, 1));
+
+ F77_XFCN (ts_lazy, TS_LAZY,
+ (m, rv, imax, lines_read,
+ in_out1.fortran_vec(), in_out2.fortran_vec()));
+
+ // Transpose the output to resemble the input
+ if (transposed)
+ {
+ in_out1 = in_out1.transpose();
+ in_out2 = in_out2.transpose();
+ }
+
+ retval(0) = in_out1;
+ retval(1) = in_out2;
+ }
+ return retval;
}
/*
diff -r 71f2c8fde0c5 -r e40a599d68cf src/mutual.cc
--- a/src/mutual.cc Mon Aug 26 12:51:20 2019 -0400
+++ b/src/mutual.cc Mon Nov 29 13:43:29 2021 +0100
@@ -193,60 +193,57 @@
int32NDArray h2 (dim_vector(partitions, partitions));
OCTAVE_LOCAL_BUFFER (long, array, length);
- if (! error_state)
- {
- // Load array
+ // Load array
- // Rescale data and load array
- // NOTE: currently supports only vectors so (dim == 1) always
- if (dim == 1){
- double mint, interval;
- rescale_data(input,0,length,&mint,&interval);
+ // Rescale data and load array
+ // NOTE: currently supports only vectors so (dim == 1) always
+ if (dim == 1){
+ double mint, interval;
+ rescale_data(input,0,length,&mint,&interval);
- for (octave_idx_type i=0;i<length;i++)
- if (input(i,0) < 1.0)
- array[i]=(long)(input(i,0)*(double)partitions);
- else
- array[i]=partitions-1;
- }
+ for (octave_idx_type i=0;i<length;i++)
+ if (input(i,0) < 1.0)
+ array[i]=(long)(input(i,0)*(double)partitions);
+ else
+ array[i]=partitions-1;
+ }
- double shannon = make_cond_entropy (0, h1, h11, h2, array, length,
- partitions);
- if (corrlength >= (long)length)
- corrlength=length-1;
+ double shannon = make_cond_entropy (0, h1, h11, h2, array, length,
+ partitions);
+ if (corrlength >= (long)length)
+ corrlength=length-1;
- // Construct the output
- Matrix delay (corrlength+1,1);
- // To save memory
- int minf_len = 1;
+ // Construct the output
+ Matrix delay (corrlength+1,1);
+ // To save memory
+ int minf_len = 1;
- if (nargout > 1)
- minf_len = corrlength+1;
- Matrix mutual_inf (minf_len,1);
+ if (nargout > 1)
+ minf_len = corrlength+1;
+ Matrix mutual_inf (minf_len,1);
- // Assign output
- delay(0,0) = 0;
- mutual_inf(0,0) = shannon;
- for (octave_idx_type tau=1;tau<=corrlength;tau++) {
+ // Assign output
+ delay(0,0) = 0;
+ mutual_inf(0,0) = shannon;
+ for (octave_idx_type tau=1;tau<=corrlength;tau++) {
- // fprintf(stdout,"%ld %e %e\n",tau,condent,condent/log((double)partitions));
- delay(tau,0) = tau;
- if (nargout > 1)
- {
- mutual_inf(tau,0) = make_cond_entropy(tau, h1, h11, h2, array,
- length, partitions);
- }
+ // fprintf(stdout,"%ld %e %e\n",tau,condent,condent/log((double)partitions));
+ delay(tau,0) = tau;
+ if (nargout > 1)
+ {
+ mutual_inf(tau,0) = make_cond_entropy(tau, h1, h11, h2, array,
+ length, partitions);
}
+ }
- if (transposed)
- {
- delay = delay.transpose();
- if (nargout > 1)
- mutual_inf = mutual_inf.transpose();
- }
- retval(0) = delay;
- retval(1) = mutual_inf;
+ if (transposed)
+ {
+ delay = delay.transpose();
+ if (nargout > 1)
+ mutual_inf = mutual_inf.transpose();
}
+ retval(0) = delay;
+ retval(1) = mutual_inf;
}
return retval;
}
--- a/src/__lfo_test__.cc.orig 2015-08-14 17:25:52.000000000 -0500
+++ b/src/__lfo_test__.cc 2023-03-09 19:39:33.000000000 -0600
@@ -212,13 +212,6 @@
Matrix solved_vec = mat.solve (vec);
double *solved_vec_arr = solved_vec.fortran_vec ();
- // If errors were raised (a singular matrix was encountered),
- // there is no sense in countinueing
- if (error_state)
- {
- return ;
- }
-
newcast[i]=foreav[i];
for (octave_idx_type j=0;j<DIM;j++) {
octave_idx_type hcj=indexes[0][j];
@@ -332,90 +325,80 @@
for (octave_idx_type i=0;i<COMP;i++)
error_array[i]=0.0;
- if ( ! error_state)
- {
-
- // Promote warnings connected with singular matrixes to errors
- set_warning_state ("Octave:nearly-singular-matrix","error");
- set_warning_state ("Octave:singular-matrix","error");
-
- // Calculate the maximum epsilon that makes sense
- // On the basis of 'i' and 'j' from put_in_boxes ()
- NDArray input_max = input.max ();
- double maximum_epsilon = (input_max(0) > input_max(COMP-1))
- ? input_max(0) : input_max(COMP-1);
- maximum_epsilon *= EPSF;
-
- // Calculate output
- bool alldone=0;
- while (!alldone) {
- alldone=1;
-
- // If epsilon became too large there is no sense in continuing
- if (epsilon > maximum_epsilon)
- {
- error_with_id ("Octave:tisean", "The neighbourhood size became"
- " too large during search, no sense"
- " continuing");
- return retval;
- }
- epsilon*=EPSF;
- put_in_boxes(series, LENGTH, STEP, COMP, hdim, epsilon, list, box);
- for (octave_idx_type i=(EMBED-1)*DELAY;i<clength;i++)
- if (!done[i])
- {
-
- octave_idx_type actfound;
- actfound=hfind_neighbors(series, indexes, COMP, hdim, DIM,
- epsilon, hfound, list, box, i);
- actfound=exclude_interval(actfound,i-causal+1,
- i+causal+(EMBED-1)*DELAY-1,hfound,found);
- if (actfound > MINN)
- {
- make_fit(series, indexes, found, STEP, DIM, COMP,
- actfound,i,newcast);
- // Checking if the fit was correct
- // If any errors were raised: end function
- if (error_state)
- {
- return retval;
- }
- for (octave_idx_type j=0;j<COMP;j++)
- error_array[j] += sqr(newcast[j]-series[j][i+STEP]);
-
- for (octave_idx_type j=0;j<COMP;j++)
- individual[j][i]=(newcast[j]-series[j][i+STEP])
- *interval[j];
- done[i]=1;
- }
- alldone &= done[i];
- }
- }
-
- double norm=((double)clength-(double)((EMBED-1)*DELAY));
-
- // Create relative forecast error output
- Matrix rel (COMP, 1);
- for (octave_idx_type i=0;i<COMP;i++)
- {
- // old fprintf(stdout,"# %e\n",sqrt(error_array[i]/norm)/rms[i]);
- rel(i,0) = sqrt(error_array[i]/norm)/rms[i];
- }
-
- // Create individual forecast error output
- Matrix ind (clength - (EMBED-1)*DELAY,COMP);
- for (octave_idx_type i=(EMBED-1)*DELAY;i<clength;i++)
- {
- for (octave_idx_type j=0;j<COMP;j++)
- {
- // old fprintf(stdout,"%e ",individual[j][i]);
- ind(i-(EMBED-1)*DELAY, j) = individual[j][i];
- }
- }
-
- retval(0) = rel;
- retval(1) = ind;
- }
- }
+ // Promote warnings connected with singular matrixes to errors
+ set_warning_state ("Octave:nearly-singular-matrix","error");
+ set_warning_state ("Octave:singular-matrix","error");
+
+ // Calculate the maximum epsilon that makes sense
+ // On the basis of 'i' and 'j' from put_in_boxes ()
+ NDArray input_max = input.max ();
+ double maximum_epsilon = (input_max(0) > input_max(COMP-1))
+ ? input_max(0) : input_max(COMP-1);
+ maximum_epsilon *= EPSF;
+
+ // Calculate output
+ bool alldone=0;
+ while (!alldone) {
+ alldone=1;
+
+ // If epsilon became too large there is no sense in continuing
+ if (epsilon > maximum_epsilon)
+ {
+ error_with_id ("Octave:tisean", "The neighbourhood size became"
+ " too large during search, no sense"
+ " continuing");
+ return retval;
+ }
+ epsilon*=EPSF;
+ put_in_boxes(series, LENGTH, STEP, COMP, hdim, epsilon, list, box);
+ for (octave_idx_type i=(EMBED-1)*DELAY;i<clength;i++)
+ if (!done[i])
+ {
+
+ octave_idx_type actfound;
+ actfound=hfind_neighbors(series, indexes, COMP, hdim, DIM,
+ epsilon, hfound, list, box, i);
+ actfound=exclude_interval(actfound,i-causal+1,
+ i+causal+(EMBED-1)*DELAY-1,hfound,found);
+ if (actfound > MINN)
+ {
+ make_fit(series, indexes, found, STEP, DIM, COMP,
+ actfound,i,newcast);
+ for (octave_idx_type j=0;j<COMP;j++)
+ error_array[j] += sqr(newcast[j]-series[j][i+STEP]);
+
+ for (octave_idx_type j=0;j<COMP;j++)
+ individual[j][i]=(newcast[j]-series[j][i+STEP])
+ *interval[j];
+ done[i]=1;
+ }
+ alldone &= done[i];
+ }
+ }
+
+ double norm=((double)clength-(double)((EMBED-1)*DELAY));
+
+ // Create relative forecast error output
+ Matrix rel (COMP, 1);
+ for (octave_idx_type i=0;i<COMP;i++)
+ {
+ // old fprintf(stdout,"# %e\n",sqrt(error_array[i]/norm)/rms[i]);
+ rel(i,0) = sqrt(error_array[i]/norm)/rms[i];
+ }
+
+ // Create individual forecast error output
+ Matrix ind (clength - (EMBED-1)*DELAY,COMP);
+ for (octave_idx_type i=(EMBED-1)*DELAY;i<clength;i++)
+ {
+ for (octave_idx_type j=0;j<COMP;j++)
+ {
+ // old fprintf(stdout,"%e ",individual[j][i]);
+ ind(i-(EMBED-1)*DELAY, j) = individual[j][i];
+ }
+ }
+
+ retval(0) = rel;
+ retval(1) = ind;
+ }
return retval;
}