MCPcopy Create free account
hub / github.com/bgrimstad/splinter / linspace

Function linspace

test/testingutilities.cpp:606–661  ·  view source on GitHub ↗

Enumerates all permutations

Source from the content-addressed store, hash-verified

604
605// Enumerates all permutations
606std::vector<std::vector<double>> linspace(std::vector<double> start, std::vector<double> end, std::vector<unsigned int> points)
607{
608 assert(start.size() == end.size() && end.size() == points.size());
609
610 size_t nDims = start.size();
611 size_t numPoints = 1;
612 for(size_t i = 0; i < nDims; i++) {
613 numPoints *= points.at(i);
614 }
615
616#ifndef NDEBUG
617 if(numPoints > 10000) {
618 std::cout << "Warning: Enumerating " << numPoints << " points." << std::endl;
619 }
620#endif // ifndef NDEBUG
621
622 auto result = std::vector<std::vector<double>>(numPoints);
623
624 auto dx = std::vector<double>(nDims);
625 auto it = std::vector<unsigned int>(nDims);
626 auto cur = std::vector<double>(nDims);
627
628 for(unsigned int i = 0; i < nDims; i++) {
629 cur.at(i) = start.at(i);
630 it.at(i) = 0;
631 dx.at(i) = (end.at(i) - start.at(i)) / (points.at(i) - 1);
632 }
633
634 size_t curDim = 0;
635 size_t i = 0;
636 // Add the start vector
637 result.at(i++) = std::vector<double>(start);
638 while(true) {
639 curDim = 0;
640 while(curDim < nDims && it.at(curDim)+1 >= points.at(curDim)) {
641 it.at(curDim) = 0;
642 cur.at(curDim) = start.at(curDim) + dx.at(curDim) * it.at(curDim);
643 curDim++;
644 }
645 // If we're unable to find a number that can be increased,
646 // it means were at the highest number
647 // (for 4 digits in decimal that is 9999)
648 if(curDim >= nDims) {
649 break;
650 }
651
652 it.at(curDim)++;
653 cur.at(curDim) = start.at(curDim) + dx.at(curDim) * it.at(curDim);
654
655 result.at(i++) = std::vector<double>(cur);
656 }
657
658 assert(i == numPoints);
659
660 return result;
661}
662
663std::vector<std::vector<double>> linspace(int dim, double start, double end, unsigned int points)

Callers 11

sampleTestFunctionFunction · 0.70
testKnotInsertionFunction · 0.70
compareFunctionsFunction · 0.70
compareFunctionValueFunction · 0.70
compareJacobianValueFunction · 0.70
checkHessianSymmetryFunction · 0.70
compareBSplinesFunction · 0.70
testApproximationFunction · 0.70
bspline.cppFile · 0.50
datatable.cppFile · 0.50
datatable.cppFile · 0.50

Calls

no outgoing calls

Tested by

no test coverage detected