AZIP
Пользователи-
Количество публикаций
6 -
Зарегистрирован
-
Посещение
Репутация
0 НовичекО AZIP
-
Звание
Новичок
-
Проблема решена!) Я как-то криво вводил данные в матрицу _А (слишком намудрил))): void Analiser::SetFeatures(int col) { int step = _A->step/sizeof(double); double *data = _A->data.db; double *dataA = _B->data.db; for (int i=0;i<10;i++) { cvmSet(_A,i,col,cvmGet(_B,i,0)); //(data+step*i)[col]=(dataA+step*i)[0]; //!! Вот тут и была проблема } } Как говорится, нужно быть по-проще))Еще раз благодарю Вас)
-
Это опять я) нашел кое-кую багу: CvMat* ATA = cvCreateMat(2,2,CV_64FC1); cvMatMul(AT,_A,ATA); после этого умножения, в [АТА] ОЧЕНЬ болшие числа 3.9406234902248240e+133... может я не правильно создаю матрицы?(( В исходных матрицах числа порядка 0,01...1.0
-
Литературу не смогу... просто вот так вот сели и решили)) может поможет скрин с екселя.... http://dl.dropbox.com/u/66127184/screen.PNG а пока буду разбиратся(
-
Спасибо, может уже и не по теме..но есть и второй вариант решения)(соответственно тоже безуспешый, хотя в Excell даная модель работала...) //Transpose [A] matrix CvMat* AT = cvCreateMat(2,10,CV_64FC1); cvTranspose(_A,AT); ////Multiply [At] x [A] CvMat* ATA = cvCreateMat(2,2,CV_64FC1); cvMatMul(AT,_A,ATA); //Multiply [At] x CvMat* ATB = cvCreateMat(2,1,CV_64FC1); cvMatMul(AT,_B,ATB); //Invert [AtxA] matrix CvMat* ATAi = cvCreateMat(2,2,CV_64FC1); cvInvert(ATA,ATAi); //Finally, [AtxA]^-1 x [AtxB] CvMat* RES = cvCreateMat(2,1,CV_64FC1); cvMatMul(ATAi,ATB,RES); В результате 0.00 и 0.00 Простите, что сколько вопросов) но может еще есть надежа?)
-
Привет всем. Делаю проект по распознаванию эмоций и наткнулся на проблему. Нужно решить систему уравнений: CvMat *_A, *_B, *_X; _A= cvCreateMat(10,2,CV_64FC1); _B = cvCreateMat(10,1,CV_64FC1); _X = cvCreateMat(10,1,CV_64FC1); Данные ввожу таким вот путем: double *data = _B->data.db; (data)[0] = EyeWidth()/b; (data)[1] = EyeHeight()/b; ... Функции EyeWidth() и т.д. возвращают нормальные double значения. Матрица _А, в первой колонке коефициенты для одно емоции, в второй - другой (тоесть, они не могут быть одинаковыми): int step = _A->step/sizeof(double); double *data = _A->data.db; double *dataA = _B->data.db; for (int i=0;i<10;i++) { (data+step*i)[col]=(dataA+step*i)[0]; } Собственно решение: CvMat* RES = cvCreateMat(2,1,CV_64FC1); cvSolve(_A,_B,RES,CV_LU); double *data = RES->data.db; _happy=(data)[0]; _sad=(data)[1]; _happy і _sad возвращают одинаковые значение -1.4216995963440653e-068 (или что-то в этом роде). Подскажите, пожалуйста, что я сделал не так? Может дело в методе решения? Очень нужно ( Заранее спасибо всем.