Реализация алгоритма прямого поиска на С++

double F(std::vector<double> A)
{
    count_f += 1;
    return (100 * (A[0] * A[0] - A[1]) * (A[0] * A[0] - A[1]) + (A[0] - 1) * (A[0] - 1));//1 12
}
double my_norm(std::vector<double>A)
{
    return (sqrt(A[0] * A[0] + A[1] * A[1]));
}
std::vector<double> hook_jeeves_method(std::vector<double> x01, double epsilon) {
    int k = 1;
    int j = 1;
    int n = 2;
    int ak = 2;
    int gamma = 2;
    int e[2] = {
        (1, 0),
        (0, 1)
    };
    std::vector<double> b = {1, 1};
    std::vector<double> x0 = x01;
    std::vector<std::vector<double>> x;
    std::vector<std::vector<std::vector<double>>> x1;
    x1[j][k] = x0;
    std::vector<std::vector<double>> x2;
    x2[k] = x0;
    std::vector<std::vector<double>> f;
    f[j][k] = F(x0);//
    std::vector<std::vector<double>> fp;
    fp[j][k] = F(x1[j][k] + b[j] * e[j]);//
    std::vector<std::vector<double>> fm;
    fm[j][k] = F(x1[j][k] - b[j] * e[j]);//
    while(true)
    {
        if ((fp[j][k] < f[j][k]) && (fp[j][k] <= fm[j][k]))
        {
            x1[j + 1][k] = x1[j][k] + b[j] * e[j];
        }
        else if ((fm[j][k] < f[j][k]) && (fm[j][k] < fp[j][k]))
        {
            x1[j + 1][k] = x1[j][k] - b[j] * e[j];
        }
        else
        {
            x1[j + 1][k] = x1[j][k];
        }
        if (j >= n)
        {
            if (x1[n + 1][k] != x2[k])
            {
                if (my_norm(x1[n + 1][k] - x2[k]) < epsilon)
                {
                    return x[k - 1];
                }
                else
                {
                    x2[k + 1] = x1[n + 1][k];
                    x[k] = x2[k] + ak * (x2[k + 1] - x2[k]);
                    j = 1;
                    x2[k + 1] = x[k];
                    x1[j][k + 1] = x2[k + 1];
                    f[j][k + 1] = F(x[k]);//
                    k = k + 1;//to 1
                }
            }
            else
            {
                b[j] = b[j] / gamma;
                j = 1;
                x1[j][k] = x2[k];
                f[j][k] = F(x2[k]);//to 1//
            }
        }
        else
        {
            j = j + 1;//to 1
        }
    }
}

Этоя моя попытка реализовать алгоритм со скриншота для метода с постоянным шагом. Я только начинаю изучать программирование. Помогите, мне, пожалуйста, разобраться со следующими ошибками:

  1. отсутствует оператор "+", соответствующий этим операндам;
  2. отсутствует оператор "-", соответствующий этим операндам;
  3. отсутствует оператор "*", соответствующий этим операндам.


Ответы (0 шт):