Program Listing for File micp_test1.cpp¶
↰ Return to documentation for file (ellip/micp_test1.cpp)
#include "ellipsoid.hpp"
#include <iostream>
struct micp1
{
using Vec = std::valarray<double>;
Info4EM<Vec> operator()(const Vec& x0)
{
Vec x = x0;
x[0] = round(x0[0]); // nearest x0[0]
Vec a(x0.size());
double f;
/* C++98 style:
double ga1[] = {1.1, 1.0};
g = Vec(ga1, 2);
f = (g * x).sum() + 3.3;
if (f > 0.0) {
Info4Ellipsoid<Vec> res = {false, x, g, f};
return res;
}
*/
a = {1.1, 1.0};
f = (a * x).sum() + 3.3;
if (f > 0.0)
return {false, a, f, x};
a = {-3.0, 2.0};
f = (a * x).sum() + 5.5;
if (f > 0.0)
return {false, a, f, x};
a = {1.1, 2, 2};
Vec z = x - a;
return {true, 2.0 * z, (z * z).sum(), x};
}
};
int main()
{
/* C++98 styly:
typedef std::valarray<double> Vec;
*/
using Vec = std::valarray<double>;
micp1 P;
Vec x = {0.0, 0.0};
Vec bx(x.size()); // for output
double bf; // for output
ellipsoid E(x, 40.0);
STATUS status = ellipsoid_dc(E, P, bx, bf, 100, 1e-4);
if (status == FOUND)
{
std::cout << "(" << bx[0] << ", " << bx[1] << ")" << std::endl;
std::cout << bf << std::endl;
}
}