81 lines
2.0 KiB
Plaintext
81 lines
2.0 KiB
Plaintext
@q $Id: t_polynomial.cweb 1210 2007-03-19 21:38:49Z kamenik $ @>
|
|
@q Copyright 2004, Ondra Kamenik @>
|
|
|
|
@ Start of {\tt t\_polynomial.cpp} file.
|
|
|
|
@c
|
|
#include "t_polynomial.h"
|
|
#include "kron_prod.h"
|
|
|
|
@<|PowerProvider::getNext| unfolded code@>;
|
|
@<|PowerProvider::getNext| folded code@>;
|
|
@<|PowerProvider| destructor code@>;
|
|
@<|UTensorPolynomial| constructor conversion code@>;
|
|
@<|FTensorPolynomial| constructor conversion code@>;
|
|
|
|
|
|
@ This method constructs unfolded |ut| of higher dimension, deleting
|
|
the previous.
|
|
|
|
@<|PowerProvider::getNext| unfolded code@>=
|
|
const URSingleTensor& PowerProvider::getNext(const URSingleTensor* dummy)
|
|
{
|
|
if (ut) {
|
|
URSingleTensor* ut_new = new URSingleTensor(nv, ut->dimen()+1);
|
|
KronProd::kronMult(ConstVector(origv), ConstVector(ut->getData()), ut_new->getData());
|
|
delete ut;
|
|
ut = ut_new;
|
|
} else {
|
|
ut = new URSingleTensor(nv, 1);
|
|
ut->getData() = origv;
|
|
}
|
|
return *ut;
|
|
}
|
|
|
|
@ This method just constructs next unfolded |ut| and creates folded
|
|
|ft|.
|
|
|
|
@<|PowerProvider::getNext| folded code@>=
|
|
const FRSingleTensor& PowerProvider::getNext(const FRSingleTensor* dummy)
|
|
{
|
|
getNext(ut);
|
|
if (ft)
|
|
delete ft;
|
|
ft = new FRSingleTensor(*ut);
|
|
return *ft;
|
|
}
|
|
|
|
@
|
|
@<|PowerProvider| destructor code@>=
|
|
PowerProvider::~PowerProvider()
|
|
{
|
|
if (ut)
|
|
delete ut;
|
|
if (ft)
|
|
delete ft;
|
|
}
|
|
|
|
@ Clear.
|
|
@<|UTensorPolynomial| constructor conversion code@>=
|
|
UTensorPolynomial::UTensorPolynomial(const FTensorPolynomial& fp)
|
|
: TensorPolynomial<UFSTensor, UGSTensor, URSingleTensor>(fp.nrows(), fp.nvars())
|
|
{
|
|
for (FTensorPolynomial::const_iterator it = fp.begin();
|
|
it != fp.end(); ++it) {
|
|
insert(new UFSTensor(*((*it).second)));
|
|
}
|
|
}
|
|
|
|
@ Clear.
|
|
@<|FTensorPolynomial| constructor conversion code@>=
|
|
FTensorPolynomial::FTensorPolynomial(const UTensorPolynomial& up)
|
|
: TensorPolynomial<FFSTensor, FGSTensor, FRSingleTensor>(up.nrows(), up.nvars())
|
|
{
|
|
for (UTensorPolynomial::const_iterator it = up.begin();
|
|
it != up.end(); ++it) {
|
|
insert(new FFSTensor(*((*it).second)));
|
|
}
|
|
}
|
|
|
|
@ End of {\tt t\_polynomial.cpp} file.
|