38 numRows(nRows), numCols(nCols), theVec(nRows * nCols) {
42 numRows(aMatrix.numRows), numCols(aMatrix.numCols), theVec(
58 theVec.resize(nRows * nCols);
93 std::cout <<
" VMatrix: " <<
numRows <<
"*" <<
numCols << std::endl;
97 std::cout << std::endl << std::setw(4) <<
i <<
","
98 << std::setw(4) <<
j <<
"-" << std::setw(4)
101 std::cout << std::setw(13) <<
theVec[numCols *
i +
j];
104 std::cout << std::endl << std::endl;
110 for (
unsigned int i = 0;
i < this->
numRows; ++
i) {
112 for (
unsigned int j = 0;
j < this->
numCols; ++
j) {
113 sum +=
theVec[numCols *
i +
j] * aVector(
j);
125 for (
unsigned int j = 0;
j < aMatrix.
numCols; ++
j) {
128 sum +=
theVec[numCols *
i +
k] * aMatrix(
k,
j);
141 aResult(
i,
j) =
theVec[numCols *
i +
j] + aMatrix(
i,
j);
149 if (
this != &aMatrix) {
165 numRows(nRows), theVec((nRows * nRows + nRows) / 2) {
177 theVec.resize((nRows * nRows + nRows) / 2);
190 std::cout <<
" VSymMatrix: " <<
numRows <<
"*" <<
numRows << std::endl;
192 for (
unsigned int j = 0;
j <=
i; ++
j) {
194 std::cout << std::endl << std::setw(4) <<
i <<
","
195 << std::setw(4) <<
j <<
"-" << std::setw(4)
198 std::cout << std::setw(13) <<
theVec[(
i *
i +
i) / 2 +
j];
201 std::cout << std::endl << std::endl;
208 for (
unsigned int j = 0;
j <=
i; ++
j) {
220 for (
unsigned int j = 0;
j <
i; ++
j) {
221 aResult(
j) +=
theVec[(i * i +
i) / 2 +
j] * aVector(i);
222 aResult(i) +=
theVec[(i * i +
i) / 2 +
j] * aVector(
j);
232 for (
unsigned int l = 0; l < nCol; ++l) {
234 aResult(
i, l) =
theVec[(
i *
i +
i) / 2 +
i] * aMatrix(
i, l);
235 for (
unsigned int j = 0;
j <
i; ++
j) {
236 aResult(
j, l) +=
theVec[(i * i +
i) / 2 +
j] * aMatrix(i, l);
237 aResult(i, l) +=
theVec[(i * i +
i) / 2 +
j] * aMatrix(
j, l);
247 numRows(nRows), theVec(nRows) {
251 numRows(aVector.numRows), theVec(aVector.theVec) {
275 std::memcpy(&aResult.
theVec[0], &
theVec[start],
sizeof(
double) * len);
286 sizeof(
double) * aVector.
numRows);
299 std::cout <<
" VVector: " <<
numRows << std::endl;
303 std::cout << std::endl << std::setw(4) <<
i <<
"-" << std::setw(4)
306 std::cout << std::setw(13) <<
theVec[
i];
308 std::cout << std::endl << std::endl;
322 if (
this != &aVector) {
350 const double eps = 1.0E-10;
352 std::vector<int>
next(aSize);
353 std::vector<double> diag(aSize);
357 for (
int i = 1;
i <= nSize; ++
i) {
359 diag[
i - 1] = fabs(
theVec[(
i *
i +
i) / 2 - 1]);
361 next[aSize - 1] = -1;
363 unsigned int nrank = 0;
364 for (
int i = 1;
i <= nSize; ++
i) {
373 int jj = (j * j +
j) / 2 - 1;
374 if (fabs(
theVec[jj]) > std::max(fabs(vkk), eps * diag[j - 1])) {
384 int kk = (k * k +
k) / 2 - 1;
388 next[last - 1] = next[k - 1];
397 for (
int m = 1;
m <= nSize; ++
m) {
412 for (
int l = 1; l <= k - 1; ++l) {
419 for (
int l = k + 1; l <=
m; ++l) {
425 for (
int l = 1; l <=
m; ++l) {
434 for (
int m = 1;
m <= nSize; ++
m) {
435 if (next[
m - 1] >= 0) {
436 int kk = (
m *
m -
m) / 2 - 1;
437 for (
int n = 1;
n <= nSize; ++
n) {
438 if (next[
n - 1] >= 0) {
447 for (
int ij = 0; ij < (nSize * nSize + nSize) / 2; ++ij) {