void EigenVectors::InitArray(DArray &darr, int size) const { if(!darr.empty()) { darr.clear(); } darr.reserve(size); for(int i = 0; i < size; ++i) { darr.push_back(0.); } }
void Legendre::ExtractPolynomial(DArray &dArray) { double val; int i, k; bool needAlloc = (dArray.size() != nn); if(needAlloc) { dArray.clear(); dArray.reserve(nn); } for(i = 0; i < nn; ++i) { k = i / 2; val = (i % 2) ? nFunction[0][k].c : nFunction[0][k].x; if(needAlloc) { dArray.push_back(val); } else { dArray[i] = val; } } }
void Legendre::FindPolynomial(DArray &dArray) { DMatrix dMatrix; dMatrix.reserve(nn); dArray.clear(); dArray.reserve(nn); //double dbg[6] = { -.7746, .5556, 0., .8889, .7746, .5556 }; for(int i = 0; i < nn; ++i) { double rat = static_cast<double>(i + 1) / static_cast<double>(nn); dArray.push_back((i % 2) ? 1. - fabs(dArray[i - 1]) / (ul - ll) * 2. : (ll + (ul - ll) * rat)); //dArray.push_back(rat); //dArray.push_back(dbg[i]); cerr << "Initially " << i << ": " << dArray[i] << endl; dMatrix.push_back(dIntegrals); } do { Increment(dMatrix, dArray); SolveSytem(dMatrix, dArray); } while(ComputeError(dArray) > precision); ExtractPolynomial(dArray); }