示例#1
0
vector_d
get_simplex(double lambda, 
           const vector_d& c) {
  using stan::math::inv_logit;
  int K = c.size() + 1;
  vector_d theta(K);
  theta(0) = 1.0 - inv_logit(lambda - c(0));
  for (int k = 1; k < (K - 1); ++k)
    theta(k) = inv_logit(lambda - c(k - 1)) - inv_logit(lambda - c(k));
  theta(K-1) = inv_logit(lambda - c(K-2)); // - 0.0
  return theta;
}
示例#2
0
//---------------------------------------------------------------------
//                    Calculate Runoff Coefficient
//---------------------------------------------------------------------
double model_tools::CalcRunoffCoeff(vector_d &streamflow, vector_d &precipitation)
{
	// calculate runoff coefficient as stated in:
	// Kokkonen, T. S. et al. (2003).
	double sum_flow = 0;
	double sum_pcp  = 0;

	for (unsigned int i = 0; i < streamflow.size(); i++)
	{
		sum_flow += streamflow[i];
		sum_pcp  += precipitation[i];
	}
	return (sum_flow / sum_pcp * 100);
}
示例#3
0
double model_tools::CalcEfficiency(vector_d &obs, vector_d &sim)
{
	int		i;

	int nvals = obs.size();
	double sum_obsminsim_2	= 0.0;
	double sum_obsminmean_2 = 0.0;
	double mean_obs			= 0.0;
	//double sum_obs			= 0.0; // sum of observed discharge

	// calculate mean of observed time series
	for (i = 0; i < nvals; i++)
		mean_obs += obs[i] / nvals;
	
	for (i = 0; i < nvals; i++)
	{
		sum_obsminsim_2 += pow(obs[i] - sim[i], 2.0);
		sum_obsminmean_2 += pow(obs[i] - mean_obs, 2.0);
	}
	
	return (1 - sum_obsminsim_2 / sum_obsminmean_2);
}
示例#4
0
//---------------------------------------------------------------------
vector_d model_tools::mmday_to_m3s(vector_d &mmday, vector_d &m3s, double area)
{
	for (unsigned int i = 0; i < m3s.size(); i++)
		m3s[i] = mmday[i] * area / 86.4;
	return(m3s);
}
示例#5
0
//---------------------------------------------------------------------
vector_d model_tools::m3s_to_mmday(vector_d &m3s, vector_d &mmday, double area)
{
	for (unsigned int i = 0; i < m3s.size(); i++)
		mmday[i] = m3s[i] * 86.4 / area;
	return(mmday);
}