The procedure for doing a weighted B-spline interpolation is not too different from the unweighted case. I'll use the same point set in the docs, and add a weight vector that gives higher weight to the second and fifth points:
pts = {{1., 2.}, {0., 1.}, {2., 0.}, {2., 2.}, {3., 3.}, {5., 2.}};
wts = {1, 4, 1, 1, 4, 1};
Here again is Lee's algorithm, which I'll use this time to perform chord-length parametrization:
parametrizeCurve[pts_ /; MatrixQ[pts, NumericQ], a : (_?NumericQ) : 1/2] :=
FoldList[Plus, 0, Normalize[(Norm /@ Differences[pts])^a, Total]];
tvals = parametrizeCurve[pts, 1];
Set up the knots for a cubic NURBS, and the basis function matrix:
m = 3;
knots = Join[ConstantArray[0, m + 1], MovingAverage[ArrayPad[tvals, -1], m],
ConstantArray[1, m + 1]];
bas = Table[BSplineBasis[{m, knots}, j - 1, tvals[[i]]],
{i, Length[pts]}, {j, Length[pts]}];
Up to this point, the proceedings have been exactly the same as with the unweighted case. For comparison purposes, let's generate the unweighted control points:
cn = LinearSolve[bas, pts];
Now, spot the differences between the previous snippet and the following snippet for the weighted control points:
cw = LinearSolve[bas, bas.wts pts]/wts;
Now, let's show the points along with the unweighted (red) curve and the weighted (blue) curve:
Graphics[{{Red, BSplineCurve[cn, SplineDegree -> m, SplineKnots -> knots]},
{Blue, BSplineCurve[cw, SplineDegree -> m, SplineKnots -> knots,
SplineWeights -> wts]},
{Green, AbsolutePointSize[6], Point[pts]}},
PlotRange -> {{-1, 6}, {-1, 13/4}}]
Note the sharper turns in the blue curve. You should now be able to see why weighted interpolations are in fact not that commonly done.