Есть работающий код с использованием буста.Нужно избавитьс от буста и сохранить работоспособность.
У меня появилась проблема.
vector<double> p(spaceSize);
Negate(GradF(x),p);
void Negate(vector<double> x, vector<double> y)
{
for ( int i=0; i<x.size() ; i++)
y[i]=-x[i];
}
В Negate первый параметр подается правильно, в самом Negate y присваивается правильно,но на выходе p как было нулевым вектором, так и осталось.
Суть в том,что есть градиент некоторой функции,например.
vector<double> GradF1(vector<double> x)
{
vector<double> res(x.size() );
res[0] = 2 * (x[0] - 5) * ( (x[1] - 4) * (x[1] - 4) + 1);
res[1] = 2 * (x[1] - 4) * ( (x[0] - 5) * (x[0] - 5) + 1);
return res;
}
Мне надо переписать отричательный градиент в другую переменную.Размерности совпадают ,тут проблем нет.
А теперь самое главное,если я меняю
vector<double> Negate(vector<double> x)
{
vector<double> res(x.size() );
for ( int i=0; i<x.size() ; i++)
res[i]=-x[i];
return res;
}
.......
for (int i=0;i<x.size();i++)
p[i]=Negate(GradF(x))[i];
То все нормально,и опять таки,если я делаю процедуру Copy
void Copy(vector<double> x, vector<double> y)
{
for ( int i=0; i<x.size() ; i++)
y[i]=x[i];
}
И вызываю ее, как Copy(Negate(GradF(x)),p); то опять таки нифига не работает.Да и, исправив все на циклы в коде, в результате я получил абсолютно идентичный результат,что и с использованием Буста, но данное поведение меня просто убило.В Билдере тоже самое, но он хотябы мне сообщил о делении на ноль,а VS так кушал))