25 #include <QtCore/QString>
43 std::cerr <<
"WARNING: SgUtMatrix& SgUtMatrix::operator= (const SgUtMatrix&):"
44 <<
" ranges of matrices " <<
"are different (rows): " <<
NRow_ <<
" and "
47 std::cerr <<
"WARNING: SgUtMatrix& SgUtMatrix::operator= (const SgUtMatrix&):"
48 <<
" ranges of matrices " <<
"are different (columns): " <<
NCol_ <<
" and "
52 double **w=
B_, **q=R.
B_;
54 for (
unsigned int i=0; i<N; i++,w++,q++)
55 memcpy((
void*)(*w), (
const void*)(*q), (i+1)*
sizeof(
double));
73 std::cerr <<
"WARNING: SgVector operator*(const SgUtMatrix&, const SgVector&): "
74 <<
"incompatible ranges of matrix (" << R.
nCol()
75 <<
") and vector (" << V.
n() <<
")\n";
79 double *x=X.
B_, **r=R.
B_, *v=V.
B_;
81 for (j=0; j<X.
N_; j++,r++)
82 for (*x=0.0,i=j; i<R.
NCol_; i++)
83 *x += *(*(r+j)+i)**(v+i);
101 std::cerr <<
"WARNING: SgUtMatrix operator~(const SgUtMatrix&): R[0,0] is zero.\n";
103 for (
unsigned int j=1; j<R.
n(); j++)
107 for (
unsigned int k=0; k<j; k++)
110 for (
unsigned int i=k; i<j; i++)
116 std::cerr <<
"WARNING: SgUtMatrix operator~(const SgUtMatrix&): R[j,j] is zero, j="
128 std::cerr <<
"WARNING: SgMatrix calcProduct_mat_x_mat(const SgUtMatrix& R1, "
129 <<
"const SgMatrix& M2): matrix size mismatch.\n";
132 unsigned int N=std::min(R1.
nCol(), M2.
nRow()), i, j, l;
133 unsigned int NRow=R1.
nRow(), NCol=M2.
nCol();
145 for (j=0; j<NCol; j++)
146 for (i=0; i<NRow; i++)
170 std::cerr <<
"WARNING: SgVector& solveEquation(const SgUtMatrix&, SgVector&,"
171 "const SgVector&): incompatible ranges of vectors.\n";
173 std::cerr <<
"WARNING: SgVector& solveEquation(const SgUtMatrix&, SgVector&,"
174 "const SgVector&): incompatible ranges of vector and matrix.\n";
176 unsigned int i, j, n=x.
n()-1;
185 std::cerr <<
"WARNING: SgVector& solveEquation(const SgUtMatrix& R, SgVector& x,"
186 <<
" const SgVector& z): division by zero caused by R[0,0]==0.\n";
190 for (j=i, s=0.0; j<x.
n(); j++)
195 std::cerr <<
"WARNING: SgVector& solveEquation(const SgUtMatrix& R, SgVector& x,"
196 <<
" const SgVector& z): division by zero caused by R[j,j]==0, j="
211 for (i=0; i<R.
nRow(); i++)
216 str.sprintf(
" %.6g", 0.0);
217 s << qPrintable(str);
219 for (j=i; j<R.
nCol(); j++)
222 s << qPrintable(str);
229 for (j=0; j<R.
nCol(); j++)
231 s << i <<
" " << j <<
" " << R.
getElement(i,j) <<
"\n";
std::ostream & operator<<(std::ostream &s, const SgUtMatrix &R)
SgVector & solveEquation(const SgUtMatrix &R, SgVector &x, const SgVector &z)
SgMatrix calcProduct_mat_x_mat(const SgUtMatrix &R1, const SgMatrix &M2)
SgUtMatrix operator~(const SgUtMatrix &R)
SgVector operator*(const SgUtMatrix &R, const SgVector &V)
unsigned int NCol_
An number of columns in a matrix.
unsigned int nRow() const
void setElement(unsigned int i, unsigned int j, double d)
double getElement(unsigned int i, unsigned int j) const
double ** B_
A pointer on a pointer of a first element of the matrix.
unsigned int nCol() const
unsigned int NRow_
An number of rows in a matrix.
SgUtMatrix & operator=(const SgUtMatrix &R)
double getElement(unsigned int i, unsigned int j) const
double * B_
A pointer on a first element of the vector.
double getElement(unsigned int i) const
unsigned int N_
An number of elements in a vector (dimension).