void linear_kernel_search (long double &x0, long double &y0, long double &z0, long double &p1, long double &p2, long double &p3, std::vector< RVec > x, long double epsi) {
long double FX = 0, FX0 = 0, FY0 = 0, FZ0 = 0, FP1 = 0, FP2 = 0, FP3 = 0;
- long double L1, L2, L3, L4, L5, L6;
+ long double L0;
//int count = 0;
while (true) {
FX = Fx(x0, y0, z0, p1, p2, p3, x);
FP2 = fp2(x0, y0, z0, p1, p2, p3, x);
FP3 = fp3(x0, y0, z0, p1, p2, p3, x);
- L1 = 1;
- while (Fx(x0 - L1 * FX0, y0, z0, p1, p2, p3, x) - FX > 0) {
- L1 /= 2;
- if (x0 - L1 * FX0 < epsi) {
- L1 = 0;
+ L0 = 1;
+ while (Fx(x0 - L0 * FX0, y0 - L0 * FY0, z0 - L0 * FZ0, p1 - L0 * FP1, p2 - L0 * FP2, p3 - L0 * FP3, x) - FX > 0) {
+ L0 /= 2;
+ if ((x0 - L0 * FX0 < epsi) && (y0 - L0 * FY0 < epsi) && (z0 - L0 * FZ0 < epsi) && (p1 - L0 * FP1 < epsi) && (p2 - L0 * FP2 < epsi) && (p3 - L0 * FP3 < epsi)) {
+ L0 = 0;
}
}
- std::cout << FX - Fx(x0 - L1 * FX0, y0, z0, p1, p2, p3, x) << " ";
- L2 = 1;
- while (Fx(x0, y0 - L2 * FY0, z0, p1, p2, p3, x) - FX > 0) {
- L2 /= 2;
- if (y0 - L2 * FY0 < epsi) {
- L2 = 0;
- }
- }
- std::cout << FX - Fx(x0, y0 - L2 * FY0, z0, p1, p2, p3, x) << " ";
- L3 = 1;
- while (Fx(x0, y0, z0 - L3 * FZ0, p1, p2, p3, x) - FX > 0) {
- L3 /= 2;
- if (z0 - L3 * FZ0 < epsi) {
- L3 = 0;
- }
- }
- std::cout << FX - Fx(x0, y0, z0 - L3 * FZ0, p1, p2, p3, x) << " ";
- L4 = 1;
- while (Fx(x0, y0, z0, p1 - L4 * FP1, p2, p3, x) - FX > 0) {
- L4 /= 2;
- if (p1 - L4 * FP1 < epsi) {
- L4 = 0;
- }
- }
- std::cout << FX - Fx(x0, y0, z0, p1 - L4 * FP1, p2, p3, x) << " ";
- L5 = 1;
- while (Fx(x0, y0, z0, p1, p2 - L5 * FP2, p3, x) - FX > 0) {
- L5 /= 2;
- if (p2 - L5 * FP2 < epsi) {
- L5 = 0;
- }
- }
- std::cout << FX - Fx(x0, y0, z0, p1, p2 - L5 * FP2, p3, x) << " ";
- L6 = 1;
- while (Fx(x0, y0, z0, p1, p2, p3 - L6 * FP3, x) - FX > 0) {
- L6 /= 2;
- if (p3 - L6 * FP3 < epsi) {
- L6 = 0;
- }
- }
- std::cout << FX - Fx(x0, y0, z0, p1, p2, p3 - L6 * FP3, x) << " ";
- std::cout << FX - Fx(x0 - L1 * FX0, y0 - L2 * FY0, z0 - L3 * FZ0, p1 - L4 * FP1, p2 - L5 * FP2, p3 - L6 * FP3, x) << "\n";
- if (FX - Fx(x0 - L1 * FX0, y0 - L2 * FY0, z0 - L3 * FZ0, p1 - L4 * FP1, p2 - L5 * FP2, p3 - L6 * FP3, x) > epsi) {
- x0 -= L1 * FX0;
- y0 -= L2 * FY0;
- z0 -= L3 * FZ0;
- p1 -= L4 * FP1;
- p2 -= L5 * FP2;
- p3 -= L6 * FP3;
+
+ std::cout << FX - Fx(x0 - L0 * FX0, y0 - L0 * FY0, z0 - L0 * FZ0, p1 - L0 * FP1, p2 - L0 * FP2, p3 - L0 * FP3, x) << "\n";
+ if (FX - Fx(x0 - L0 * FX0, y0 - L0 * FY0, z0 - L0 * FZ0, p1 - L0 * FP1, p2 - L0 * FP2, p3 - L0 * FP3, x) > epsi) {
+ x0 -= L0 * FX0;
+ y0 -= L0 * FY0;
+ z0 -= L0 * FZ0;
+ p1 -= L0 * FP1;
+ p2 -= L0 * FP2;
+ p3 -= L0 * FP3;
} else {
break;
}