Реализация алгоритма прямого поиска на С++
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
}
}
}
Этоя моя попытка реализовать алгоритм со скриншота для метода с постоянным шагом. Я только начинаю изучать программирование. Помогите, мне, пожалуйста, разобраться со следующими ошибками:
- отсутствует оператор "+", соответствующий этим операндам;
- отсутствует оператор "-", соответствующий этим операндам;
- отсутствует оператор "*", соответствующий этим операндам.