IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Избавление от Boost'a.
Krjuger
сообщение 10.11.2011 21:50
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Уже более практическая часть проблемы.
Есть работающий код с использованием буста.Нужно избавитьс от буста и сохранить работоспособность.
У меня появилась проблема.

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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 10.11.2011 22:29
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Вектор Y уже заполнен чем-нибудь?

// Если да, то:
void Negate(vector<double>& x, vector<double>& y)
{
transform(x.begin(), x.end(), y.begin(), negate<double>());
}
// если нет - то так:
void Negate(vector<double>& x, vector<double>& y)
{
// #include <iterators> для back_inserter-а
transform(x.begin(), x.end(), back_inserter(y), negate<double>());
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 30.07.2025 21:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"