![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Krjuger |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Уже более практическая часть проблемы.
Есть работающий код с использованием буста.Нужно избавитьс от буста и сохранить работоспособность. У меня появилась проблема.
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 так кушал)) Сообщение отредактировано: Krjuger - 10.11.2011 22:43 |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 4:52 |