53 std::vector<double> &res_
57 vector<Int4> intervals(0);
61 throw error(
"Error in alp_reg::find_tetta_general\n",4);
66 double h=(b_-a_)/n_partition_;
68 for(
i=0;
i<n_partition_;
i++)
73 a_+
i*h,func_pointer_);
76 res_.push_back(a_+
i*h);
92 res_.push_back(a_+(
i+1)*h);
95 if((x1*x2<0)&&(
fabs(x1)>=eps_&&
fabs(x2)>=eps_))
97 intervals.push_back(
i);
101 for(
i=0;
i<(
Int4)intervals.size();
i++)
107 a_+(1+intervals[
i])*h,
112 sort(res_.begin(),res_.end());
127 throw error(
"Error in alp_reg::find_single_tetta_general\n",4);
154 double x12=(x1+x2)/2;
185 Int4 number_of_elements_)
188 if(number_of_elements_<=0)
190 throw error(
"Unexpected error",4);
194 double average_error=0;
196 for(
i=0;
i<number_of_elements_;
i++)
200 throw error(
"Error in the regression is less than 0",4);
203 average_error+=errors_[
i];
206 average_error/=(double)number_of_elements_;
216 error_eps=average_error;
220 for(
i=0;
i<number_of_elements_;
i++)
224 errors_[
i]=error_eps;
231 Int4 number_of_elements_,
235 bool cut_right_tail_,
239 double &beta0_error_,
240 double &beta1_error_,
243 bool &res_was_calculated_)
246 if(number_of_elements_<2)
248 throw error(
"Unexpected error\n",4);
257 Int4 k1_start,k1_end;
258 Int4 k2_start,k2_end;
260 if(cut_left_tail_&&cut_right_tail_)
263 k1_end=number_of_elements_-1;
266 k2_end=number_of_elements_-1;
271 if(cut_left_tail_&&!cut_right_tail_)
274 k1_end=number_of_elements_-1;
276 k2_start=number_of_elements_-1;
277 k2_end=number_of_elements_-1;
282 if(!cut_left_tail_&&cut_right_tail_)
288 k2_end=number_of_elements_-1;
295 k2_start=number_of_elements_-1;
296 k2_end=number_of_elements_-1;
302 Int4 k1_opt=0,k2_opt=0;
304 double func_opt=DBL_MAX;
307 double beta0_opt_error=0;
308 double beta1_opt_error=0;
313 res_was_calculated_=
false;
316 for(k1=k1_start;k1<=k1_end;k1++)
321 double beta0_opt_tmp,beta1_opt_tmp,beta0_opt_error_tmp,beta1_opt_error_tmp;
322 bool res_was_calculated;
338 if(
tmp<func_opt&&res_was_calculated)
341 beta0_opt=beta0_opt_tmp;
342 beta1_opt=beta1_opt_tmp;
343 beta0_opt_error=beta0_opt_error_tmp;
344 beta1_opt_error=beta1_opt_error_tmp;
347 res_was_calculated_=
true;
356 if(res_was_calculated_)
360 beta0_error_=beta0_opt_error;
361 beta1_error_=beta1_opt_error;
372 Int4 number_of_elements_,
377 double &beta0_error_,
378 double &beta1_error_,
379 bool &res_was_calculated_)
392 for(
i=0;
i<number_of_elements_;
i++)
396 double tmp=1.0/(errors_[
i]*errors_[
i]);
399 a12+=(double)(k_start_+
i)*
tmp;
400 a22+=(double)((k_start_+
i)*(k_start_+
i))*
tmp;
402 y1_error+=
tmp*
tmp*errors_[
i]*errors_[
i];
403 y2+=(double)(k_start_+
i)*values_[
i]*
tmp;
404 y2_error+=(double)(k_start_+
i)*(double)(k_start_+
i)*
tmp*
tmp*errors_[
i]*errors_[
i];
414 double den=a11*a22-a21*a12;
417 res_was_calculated_=
false;
422 res_was_calculated_=
true;
425 beta0_=(y1*a22-a12*y2)/den;
426 beta1_=(a11*y2-a21*y1)/den;
428 beta0_error_=sqrt(y1_error*y1_error*a22*a22+a12*a12*y2_error*y2_error)/den;
429 beta1_error_=sqrt(a11*a11*y2_error*y2_error+a21*a21*y1_error*y1_error)/den;
433 for(
i=0;
i<number_of_elements_;
i++)
437 double tmp=(beta0_+beta1_*(
i+k_start_)-values_[
i])/errors_[
i];
447 Int4 number_of_elements_,
451 bool cut_right_tail_,
455 double &beta0_error_,
459 bool &res_was_calculated_)
468 Int4 k1_start,k1_end;
469 Int4 k2_start,k2_end;
471 if(cut_left_tail_&&cut_right_tail_)
474 k1_end=number_of_elements_-1;
477 k2_end=number_of_elements_-1;
482 if(cut_left_tail_&&!cut_right_tail_)
485 k1_end=number_of_elements_-1;
487 k2_start=number_of_elements_-1;
488 k2_end=number_of_elements_-1;
493 if(!cut_left_tail_&&cut_right_tail_)
499 k2_end=number_of_elements_-1;
506 k2_start=number_of_elements_-1;
507 k2_end=number_of_elements_-1;
513 Int4 k1_opt = 0, k2_opt = 0;
515 double func_opt=DBL_MAX;
516 double beta0_opt = 0.0;
517 double beta0_opt_error = 0.0;
521 res_was_calculated_=
false;
524 for(k1=k1_start;k1<=k1_end;k1++)
529 double beta0_opt_tmp,beta1_opt_tmp,beta0_opt_error_tmp,beta1_opt_error_tmp;
530 bool res_was_calculated;
532 beta1_opt_tmp=beta1_;
533 beta1_opt_error_tmp=beta1_error_;
547 if(
tmp<func_opt&&res_was_calculated)
550 beta0_opt=beta0_opt_tmp;
551 beta0_opt_error=beta0_opt_error_tmp;
554 res_was_calculated_=
true;
560 if(res_was_calculated_)
563 beta0_error_=beta0_opt_error;
574 Int4 number_of_elements_,
579 double &beta0_error_,
581 bool &res_was_calculated_)
590 for(
i=0;
i<number_of_elements_;
i++)
594 double tmp=1.0/(errors_[
i]*errors_[
i]);
597 y1+=(values_[
i]-(double)(k_start_+
i)*beta1_)*
tmp;
598 double error_tmp=errors_[
i]*errors_[
i]+(double)(k_start_+
i)*(double)(k_start_+
i)*beta1_error_*beta1_error_;
599 y1_error+=
tmp*
tmp*error_tmp;
603 y1_error=sqrt(y1_error);
605 double eps=1e-10*
fabs(a11);
610 res_was_calculated_=
false;
615 res_was_calculated_=
true;
620 beta0_error_=y1_error/den;
624 for(
i=0;
i<number_of_elements_;
i++)
628 double tmp=(beta0_+beta1_*(
i+k_start_)-values_[
i])/errors_[
i];
641 if(v1_error_>=1e100||v1_<=0)
654 if(v1_error_>=1e100||v1_<0)
674 if(v1_error_>=1e100||v2_error_>=1e100)
684 if(v1_==0&&v1_error_==0)
691 if(((v2_+v2_error_)*v2_<=0))
693 double a3=(v1_+v1_error_)/(v2_-v2_error_);
694 double a4=(v1_-v1_error_)/(v2_-v2_error_);
698 if(((v2_-v2_error_)*v2_<=0))
700 double a1=(v1_+v1_error_)/(v2_+v2_error_);
701 double a2=(v1_-v1_error_)/(v2_+v2_error_);
706 double a1=(v1_+v1_error_)/(v2_+v2_error_);
707 double a2=(v1_-v1_error_)/(v2_+v2_error_);
708 double a3=(v1_+v1_error_)/(v2_-v2_error_);
709 double a4=(v1_-v1_error_)/(v2_-v2_error_);
720 if(v1_error_>=1e100||v2_error_>=1e100)
725 double a1=(v1_+v1_error_)*(v2_+v2_error_);
726 double a2=(v1_-v1_error_)*(v2_+v2_error_);
727 double a3=(v1_+v1_error_)*(v2_-v2_error_);
728 double a4=(v1_-v1_error_)*(v2_-v2_error_);
742 if(v1_error_>=1e100||v2_error_>=1e100)
747 return sqrt(v1_error_*v1_error_+v2_error_*v2_error_);
754 vector<double> array_vect(dim_);
758 array_vect[
i]=array_[
i];
760 sort(array_vect.begin(),array_vect.end());
764 return 0.5*(array_vect[k-1]+array_vect[k]);
769 return array_vect[k];
784 throw error(
"Unexpected error\n",4);
787 bool ee_error_flag=
false;
788 error ee_error(
"",0);
796 remove_flag=
new bool[dim];
808 vector<pair<double,Int4> > array_vect(dim);
813 P.first=-
fabs(values[
i]-med_val);
818 sort(array_vect.begin(),array_vect.end());
820 for(
i=0;
i<N_points;
i++)
822 remove_flag[array_vect[
i].second]=
false;
835 res/=(double)(dim-N_points);
848 ee_error=
error(
"Internal error in the program\n",4);
855 delete[]remove_flag;remove_flag=
NULL;
static double round(const double &x_)
static T Tmax(T i_, T j_)
static T Tmin(T i_, T j_)
static void assert_mem(void *pointer_)
static double sqrt_for_errors(double x_)
static double function_for_robust_regression_sum_with_cut_LSM_beta1_is_defined(double *values_, double *errors_, Int4 number_of_elements_, Int4 k_start_, double c_, double &beta0_, double beta1_, double &beta0_error_, double beta1_error_, bool &res_was_calculated_)
static double error_of_the_product(double v1_, double v1_error_, double v2_, double v2_error_)
static double error_of_the_sum(double v1_, double v1_error_, double v2_, double v2_error_)
static double median(Int4 dim_, double *array_)
static void robust_regression_sum_with_cut_LSM(Int4 min_length_, Int4 number_of_elements_, double *values_, double *errors_, bool cut_left_tail_, bool cut_right_tail_, double y_, double &beta0_, double &beta1_, double &beta0_error_, double &beta1_error_, Int4 &k1_opt_, Int4 &k2_opt_, bool &res_was_calculated_)
static double robust_sum(double *values, Int4 dim, Int4 N_points, bool *&remove_flag)
static double error_of_the_lg(double v1_, double v1_error_)
static double error_of_the_sqrt(double v1_, double v1_error_)
static double function_for_robust_regression_sum_with_cut_LSM(double *values_, double *errors_, Int4 number_of_elements_, Int4 k_start_, double c_, double &beta0_, double &beta1_, double &beta0_error_, double &beta1_error_, bool &res_was_calculated_)
static void robust_regression_sum_with_cut_LSM_beta1_is_defined(Int4 min_length_, Int4 number_of_elements_, double *values_, double *errors_, bool cut_left_tail_, bool cut_right_tail_, double y_, double &beta0_, double beta1_, double &beta0_error_, double beta1_error_, Int4 &k1_opt_, Int4 &k2_opt_, bool &res_was_calculated_)
static void find_tetta_general(function_type *func_, void *func_pointer_, double a_, double b_, Int4 n_partition_, double eps_, std::vector< double > &res_)
static void correction_of_errors(double *errors_, Int4 number_of_elements_)
static double error_of_the_ratio(double v1_, double v1_error_, double v2_, double v2_error_)
static double find_single_tetta_general(function_type *func_, void *func_pointer_, double a_, double b_, double eps_)
int32_t Int4
4-byte (32-bit) signed integer
#define P(a, b, c, d, k, s, t)
constexpr auto sort(_Init &&init)
double function_type(double x_, void *func_number_)