rowvec dF2du(unsigned row, irowvec causes, const DataPairs &data, const gmat &sigma, vec u){ // Attaining variance covariance matrix etc. (conditional on u) vmat cond_sig = sigma(causes); vec cond_mean = cond_sig.proj*u; rowvec alp = data.alpha_get(row, causes); rowvec gam = data.gamma_get(row, causes); colvec alpgam = alp.t() - gam.t(); double cdf = pn(alpgam, cond_mean, cond_sig.vcov); vec ll = sqrt(diagvec(cond_sig.vcov)); mat Lambda = diagmat(ll); mat iLambda = diagmat(1/ll); mat R = iLambda*cond_sig.vcov*iLambda; mat LR = Lambda*R; double r = R(0,1); vec ytilde = iLambda*(alpgam - cond_mean); vecmat D = Dbvn(ytilde(0),ytilde(1),r); mat M = -LR*D.V; vec dcdfdu = trans(cond_sig.proj)*cond_sig.inv*M; rowvec dF2du_1 = data.dpiduMarg_get(row, causes(0), 0)*data.piMarg_get(row, causes(1), 1)*cdf ; rowvec dF2du_2 = data.dpiduMarg_get(row, causes(1), 1)*data.piMarg_get(row, causes(0), 0)*cdf; vec dF2du_3 = data.piMarg_get(row, causes(0), 0)*data.piMarg_get(row, causes(1), 1)*dcdfdu; rowvec dF2du = dF2du_1 + dF2du_2 + dF2du_3.t(); return(dF2du); };
void SetImage::pave(const IntervalVector& x, double epsilon) { Linside.clear(); Lboundary.clear(); PdcImageSubset p_fin(f,x,p_in); assert(x.size()==n); stack<IntervalVector> Ldomain; IntervalVector xtilde(n); IntervalVector ytilde(n); LargestFirst lf(epsilon); Ldomain.push(x); while (! Ldomain.empty()) { xtilde = Ldomain.top(); Ldomain.pop(); c_out.contract(xtilde); if (xtilde.is_empty()) { continue; } // use natural extension ytilde=f.eval_vector(xtilde); // improve with centered form ytilde&=f.eval_vector(xtilde.mid())+f.jacobian(xtilde)*(xtilde-xtilde.mid()); if (p_in.test(xtilde)==YES && p_fin.test(cart_prod(xtilde,ytilde))==YES) Linside.push_back(ytilde); else if (xtilde.max_diam()<=epsilon) Lboundary.push_back(ytilde); else { pair<IntervalVector,IntervalVector> boxes=lf.bisect(xtilde); Ldomain.push(boxes.first); Ldomain.push(boxes.second); } } }