level1_real_impl.h
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5 //
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 
10 #include "common.h"
11 
12 // computes the sum of magnitudes of all vector elements or, for a complex vector x, the sum
13 // res = |Rex1| + |Imx1| + |Rex2| + |Imx2| + ... + |Rexn| + |Imxn|, where x is a vector of order n
15 {
16 // std::cerr << "_asum " << *n << " " << *incx << "\n";
17 
18  Scalar* x = reinterpret_cast<Scalar*>(px);
19 
20  if(*n<=0) return 0;
21 
22  if(*incx==1) return make_vector(x,*n).cwiseAbs().sum();
23  else return make_vector(x,*n,std::abs(*incx)).cwiseAbs().sum();
24 }
25 
26 // computes a vector-vector dot product.
28 {
29 // std::cerr << "_dot " << *n << " " << *incx << " " << *incy << "\n";
30 
31  if(*n<=0) return 0;
32 
33  Scalar* x = reinterpret_cast<Scalar*>(px);
34  Scalar* y = reinterpret_cast<Scalar*>(py);
35 
36  if(*incx==1 && *incy==1) return (make_vector(x,*n).cwiseProduct(make_vector(y,*n))).sum();
37  else if(*incx>0 && *incy>0) return (make_vector(x,*n,*incx).cwiseProduct(make_vector(y,*n,*incy))).sum();
38  else if(*incx<0 && *incy>0) return (make_vector(x,*n,-*incx).reverse().cwiseProduct(make_vector(y,*n,*incy))).sum();
39  else if(*incx>0 && *incy<0) return (make_vector(x,*n,*incx).cwiseProduct(make_vector(y,*n,-*incy).reverse())).sum();
40  else if(*incx<0 && *incy<0) return (make_vector(x,*n,-*incx).reverse().cwiseProduct(make_vector(y,*n,-*incy).reverse())).sum();
41  else return 0;
42 }
43 
44 // computes the Euclidean norm of a vector.
45 // FIXME
47 {
48 // std::cerr << "_nrm2 " << *n << " " << *incx << "\n";
49  if(*n<=0) return 0;
50 
51  Scalar* x = reinterpret_cast<Scalar*>(px);
52 
53  if(*incx==1) return make_vector(x,*n).stableNorm();
54  else return make_vector(x,*n,std::abs(*incx)).stableNorm();
55 }
56 
58 {
59 // std::cerr << "_rot " << *n << " " << *incx << " " << *incy << "\n";
60  if(*n<=0) return 0;
61 
62  Scalar* x = reinterpret_cast<Scalar*>(px);
63  Scalar* y = reinterpret_cast<Scalar*>(py);
64  Scalar c = *reinterpret_cast<Scalar*>(pc);
65  Scalar s = *reinterpret_cast<Scalar*>(ps);
66 
69 
72 
76 
77 
78  return 0;
79 }
80 
81 /*
82 // performs rotation of points in the modified plane.
83 int EIGEN_BLAS_FUNC(rotm)(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *param)
84 {
85  Scalar* x = reinterpret_cast<Scalar*>(px);
86  Scalar* y = reinterpret_cast<Scalar*>(py);
87 
88  // TODO
89 
90  return 0;
91 }
92 
93 // computes the modified parameters for a Givens rotation.
94 int EIGEN_BLAS_FUNC(rotmg)(RealScalar *d1, RealScalar *d2, RealScalar *x1, RealScalar *x2, RealScalar *param)
95 {
96  // TODO
97 
98  return 0;
99 }
100 */
s
RealScalar s
Definition: level1_cplx_impl.h:104
asum
RealScalar EIGEN_BLAS_FUNC() asum(int *n, RealScalar *px, int *incx)
Definition: level1_real_impl.h:14
RealScalar
NumTraits< Scalar >::Real RealScalar
Definition: common.h:85
Scalar
SCALAR Scalar
Definition: common.h:84
rvx
Reverse< StridedVectorType > rvx(vx)
Eigen::JacobiRotation
Rotation given by a cosine-sine pair.
Definition: ForwardDeclarations.h:263
rot
int EIGEN_BLAS_FUNC() rot(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pc, RealScalar *ps)
Definition: level1_real_impl.h:57
dot
Scalar EIGEN_BLAS_FUNC() dot(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition: level1_real_impl.h:27
EIGEN_BLAS_FUNC
#define EIGEN_BLAS_FUNC(X)
Definition: common.h:161
make_vector
Map< Matrix< T, Dynamic, 1 >, 0, InnerStride< Dynamic > > make_vector(T *data, int size, int incr)
Definition: common.h:115
abs
EIGEN_DEVICE_FUNC const EIGEN_STRONG_INLINE AbsReturnType abs() const
Definition: ArrayCwiseUnaryOps.h:43
incy
int RealScalar int RealScalar int * incy
Definition: level1_cplx_impl.h:97
vy
StridedVectorType vy(make_vector(y, *n, std::abs(*incy)))
rvy
Reverse< StridedVectorType > rvy(vy)
x
Scalar * x
Definition: level1_cplx_impl.h:89
Eigen::Reverse
Expression of the reverse of a vector or matrix.
Definition: Reverse.h:63
incx
RealScalar RealScalar int * incx
Definition: level1_cplx_impl.h:29
nrm2
Scalar EIGEN_BLAS_FUNC() nrm2(int *n, RealScalar *px, int *incx)
Definition: level1_real_impl.h:46
Eigen::Map
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:94
pc
int RealScalar int RealScalar int RealScalar * pc
Definition: level1_cplx_impl.h:97
y
Scalar * y
Definition: level1_cplx_impl.h:102
c
RealScalar c
Definition: level1_cplx_impl.h:103
common.h
ps
int RealScalar int RealScalar int RealScalar RealScalar * ps
Definition: level1_cplx_impl.h:98
Eigen::internal::apply_rotation_in_the_plane
void apply_rotation_in_the_plane(DenseBase< VectorX > &xpr_x, DenseBase< VectorY > &xpr_y, const JacobiRotation< OtherScalar > &j)
Definition: Jacobi.h:432
py
int RealScalar int RealScalar * py
Definition: level1_cplx_impl.h:97
n
PlainMatrixType mat * n
Definition: eigenvalues.cpp:41
vx
StridedVectorType vx(make_vector(x, *n, std::abs(*incx)))
px
RealScalar RealScalar * px
Definition: level1_cplx_impl.h:28


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:52