ublas/examples/tensor/simple_expressions.cpp
2019-02-25 17:05:02 +01:00

64 lines
1.7 KiB
C++

//
// Copyright (c) 2018-2019, Cem Bassoy, cem.bassoy@gmail.com
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// The authors gratefully acknowledge the support of
// Fraunhofer IOSB, Ettlingen, Germany
//
#include <boost/numeric/ublas/tensor.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/vector.hpp>
#include <ostream>
int main()
{
using namespace boost::numeric::ublas;
using tensorf = tensor<float>;
using matrixf = matrix<float>;
using vectorf = vector<float>;
auto A = tensorf{3,4,2};
auto B = A = 2;
// Calling overloaded operators
// and using simple tensor expression templates.
if( A != (B+1) )
A += 2*B - 1;
// formatted output
std::cout << "% --------------------------- " << std::endl;
std::cout << "% --------------------------- " << std::endl << std::endl;
std::cout << "A=" << A << ";" << std::endl << std::endl;
auto n = shape{3,4};
auto D = matrixf(n[0],n[1],1);
auto e = vectorf(n[1],1);
auto f = vectorf(n[0],2);
// Calling constructor with
// vector expression templates
tensorf C = 2*f;
// formatted output
std::cout << "% --------------------------- " << std::endl;
std::cout << "% --------------------------- " << std::endl << std::endl;
std::cout << "C=" << C << ";" << std::endl << std::endl;
// Calling overloaded operators
// and mixing simple tensor and matrix expression templates
tensorf F = 3*C + 4*prod(2*D,e);
// formatted output
std::cout << "% --------------------------- " << std::endl;
std::cout << "% --------------------------- " << std::endl << std::endl;
std::cout << "F=" << F << ";" << std::endl << std::endl;
}