[sdpb] 36/233: Now reading bilinearBasisPols and samplePoints from input file

Tobias Hansen thansen at moszumanska.debian.org
Thu Mar 9 04:06:15 UTC 2017


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository sdpb.

commit c182ab24a5a7e54ce1669a2e23d6900c8b9dc7bb
Author: David Simmons-Duffin <dsd at athena.sns.ias.edu>
Date:   Sat Jul 26 16:00:35 2014 -0400

    Now reading bilinearBasisPols and samplePoints from input file
---
 main.cpp | 51 ++++++++++++++++++++++++++-------------------------
 1 file changed, 26 insertions(+), 25 deletions(-)

diff --git a/main.cpp b/main.cpp
index 247e5ac..ce5cbff 100644
--- a/main.cpp
+++ b/main.cpp
@@ -948,34 +948,30 @@ public:
 
 };
 
-Vector naturalNumbers(int n) {
-  Vector xs(n);
-  for (int i = 0; i < n; i++)
-    xs[i] = Real(i+1);
-  return xs;
-}
-
-Matrix monomialAlgebraBasis(int d1, int d, const Vector &xs, bool halfShift) {
-  Matrix basisMatrix(d1+1, d+1);
-  for (int k = 0; k < d+1; k++) {
-    Real x = xs[k];
-    
-    Real xToTheN = 1;
-    if (halfShift)
-      xToTheN = sqrt(x);
-
-    for (int n = 0; n < d1+1; n++) {
-      basisMatrix.set(n, k, xToTheN);
-      xToTheN *= x;
+Matrix basisAtSamplePoints(int basisSize, int numPoints, bool withSqrt,
+                           const vector<Polynomial> &basisPols,
+                           const Vector &samplePoints) {
+  Matrix m(basisSize, numPoints);
+  for (int k = 0; k < numPoints; k++) {
+    Real x = samplePoints[k];
+    Real sqrtX = sqrt(x);
+
+    for (int n = 0; n < basisSize; n++) {
+      if (withSqrt)
+        m.set(n, k, basisPols[n](x)*sqrtX);
+      else
+        m.set(n, k, basisPols[n](x));
     }
   }
-  return basisMatrix;
+
+  return m;
 }
 
 SDP bootstrapSDP(const Vector &objective,
                  const Vector &normalization,
                  const vector<PolynomialVectorMatrix> &positiveMatrixPols,
-                 const Vector &xs) {
+                 const vector<Polynomial> &bilinearBasisPols,
+                 const Vector &polynomialSamplePoints) {
   SDP sdp;
   sdp.objective = objective;
 
@@ -1014,11 +1010,15 @@ SDP bootstrapSDP(const Vector &objective,
     vector<int> blocks;
 
     blocks.push_back(sdp.bilinearBases.size());
-    sdp.bilinearBases.push_back(monomialAlgebraBasis(delta1, degree, xs, false));
+    sdp.bilinearBases.push_back(basisAtSamplePoints(delta1+1, degree+1, false,
+                                                    bilinearBasisPols,
+                                                    polynomialSamplePoints));
 
     if (delta2 >= 0) {
       blocks.push_back(sdp.bilinearBases.size());
-      sdp.bilinearBases.push_back(monomialAlgebraBasis(delta2, degree, xs, true));
+      sdp.bilinearBases.push_back(basisAtSamplePoints(delta2+1, degree+1, true,
+                                                      bilinearBasisPols,
+                                                      polynomialSamplePoints));
     }
 
     sdp.blocks.push_back(blocks);
@@ -1026,7 +1026,7 @@ SDP bootstrapSDP(const Vector &objective,
     for (int s = 0; s < m->cols; s++) {
       for (int r = 0; r <= s; r++) {
         for (int k = 0; k <= degree; k++, p++) {
-          const Real xk = xs[k];
+          const Real xk = polynomialSamplePoints[k];
           for (unsigned int n = 0; n < sdp.objective.size(); n++)
             sdp.polMatrixValues.set(p, n, -(*m->get(r,s))[n](xk));
         }
@@ -1094,7 +1094,8 @@ SDP parseBootstrapSDP(XMLElement *sdpXml) {
                       parseMany("polynomialVectorMatrix",
                                 parsePolynomialVectorMatrix,
                                 sdpXml->FirstChildElement("positiveMatrixPols")),
-                      naturalNumbers(100));
+                      parsePolynomialVector(sdpXml->FirstChildElement("bilinearBasisPols")->FirstChildElement("polynomialVector")),
+                      parseVector(sdpXml->FirstChildElement("polynomialSamplePoints")->FirstChildElement("vector")));
 }
 
 SDP readBootstrapSDP(const path sdpFile) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/sdpb.git



More information about the debian-science-commits mailing list