Продукт Armadillo Dot C++

В настоящее время я использую Ubuntu code::blocks и сталкиваюсь с несколькими проблемами при попытке выполнить линейную алгебру.

в настройках компилятора>каталоги поиска>компилятор у меня есть "/usr/include"

и в настройках компилятора> каталоги поиска> компоновщик у меня есть «/user/lib»

мои liblapack-dev, libblas-dev, libboost-dev, libarmadillo-dev устанавливаются через apt-get

я прокомментировал, какая часть кода дает мне ошибку. без сложной части кода мой код работает нормально, поэтому я думаю, что у меня нормально установлен броненосец? так почему я не могу получить доступ ко всем его функциям?

#include <iostream>
#include <armadillo>
using namespace arma;
using namespace std;
int main()
{
    mat A;
    A<<1<<2<<endr<<3<<4;
    cout<<A;
    vec e=A.col(0);
    vec r=A.col(1);
    cout<<endl<<e<<endl<<r<<endl;//works perfectly up to here
    //if only there was not more of these codes
    cout<<e*r<<endl;//doesnt work from here anymore
    float y=dot(A,A);//from here on i get the error message:
    cout<<y<<endl;//'wrapper_ddot_' is not defined
    double z=as_scalar(e*r);//and wrapper_blas.hpp file opens
    double t=dot(e,r);
    cout<<z<<endl;//and points me to line 185
    return 0;//with an error
}

person maxsieg    schedule 18.11.2017    source источник


Ответы (1)


В коде есть ошибка. Вы используете e*r, но они оба 2x1, поэтому вам нужно транспонировать e как e.t()*r, чтобы получить продукт 1x1. У вас также есть та же проблема тремя строками ниже. Если вы установили Armadillo с помощью apt-get, обычно нет необходимости добавлять библиотеки blas/lapack. Достаточно использовать флаг -larmadillo для компоновщика.

person Claes Rolen    schedule 19.11.2017
comment
Я только что попробовал ваше решение, но оно все равно не сработало, выдав ту же ошибку: /. даже при комментировании всех остальных. Я видел пару уроков, хотя люди используют эти функции без транспонирования. Спасибо хоть - person maxsieg; 19.11.2017
comment
на самом деле, какую команду вы даете компоновщику? я только что видел, как некоторые другие используют g++ -O2 -o armadillo_example armadillo_example.cpp -larmadillo для компоновщика, но вы меняете каталог в файлы проекта при этом и используете ваш проект для ссылки на него каждый раз? - person maxsieg; 19.11.2017
comment
Если вы используете code::blocks, вам нужно всего лишь добавить «-larmadillo» в разделе «Настройки компоновщика->Другие параметры компоновщика». Упомянутый вами пример командной строки также должен работать. - person Claes Rolen; 19.11.2017
comment
ОМФГ МАГИЯ ЭТО РАБОТАЕТ! СПАСИБО, БРО! - person maxsieg; 19.11.2017