本文整理汇总了C++中Simplex::QuitCase方法的典型用法代码示例。如果您正苦于以下问题:C++ Simplex::QuitCase方法的具体用法?C++ Simplex::QuitCase怎么用?C++ Simplex::QuitCase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Simplex
的用法示例。
在下文中一共展示了Simplex::QuitCase方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: simplex_min
Point MainWindow::simplex_min(Simplex &smplx, double eps) { //number of simplex vertexes: N_DIM + 1
const double alpha = 1.0;
const double beta = 0.5;
const double gamma = 2.0;
double theta;
double f_l, f_g, f_h, f_c, f_reflected;
Point::n = N_DIM;
unsigned iter=0;
while(!smplx.QuitCase(smplx, eps))
{
sort_simplex(smplx);
f_l = func(smplx.get_l());
f_g = func(smplx.get_g());
f_h = func(smplx.get_h());
// Point a = (smplx.get_c()*(1 + alpha)); Point b = (smplx.get_h() * alpha);
// smplx.set_reflected(a - b);
Point a = (smplx.get_c()*(1 + alpha)) - (smplx.get_h() * alpha);
smplx.set_reflected(a); //test reflection
f_reflected = func(smplx.get_reflected());
if (f_l < f_reflected && f_reflected < f_g) theta = alpha;
if (f_reflected <= f_l) theta = gamma;
if (f_g <= f_reflected && f_reflected < f_h)
theta = beta;
else if(f_reflected >= f_h) theta = -beta;
Point temp = smplx.get_h() + (smplx.get_c() - smplx.get_h())*(1 + theta);
smplx.set_vertex_h(temp);
++iter;
if (iter > 1000)
{
qDebug()<<"x="<<smplx.get_h().coord[0];
qDebug()<<"y="<<smplx.get_h().coord[1];
break;
}
// smplx.set_vertex_h(smplx.get_h() + (smplx.get_c() - smplx.get_h())*(1 + theta));
}
return smplx.get_l();
}