For the non-rational B-spline curve of degree $p$, its derivative is a $p-1$ degree non-rational curve. where, the new control points is $Q_i$. $$Q_i=p \frac{P_{i+1}-P_i}{u_{i+p+1}-u_{i+1}}$$ I think the built-in `f = BSplineFunction[2D-points]; f'` just returns a non-rational curve. For the rational curve: $$C^w(u)=\frac{\sum_{i=0}^n N_{i,p}(u)w_iP_i}{\sum_{i=0}^n N_{i,p}(u)w_i}=\frac{A(u)}{w(u)}$$ where, $P_i=\{x_i, y_i\}$(2D curve) or $P_i=\{x_i, y_i,z_i\}$(3D curve). Then $$\left[{C^w}(u)\right]'=\left[\frac{A(u)}{w(u)}\right]'=\frac{A'(u)w(u)-A(u)w'(u)}{w^2(u)}$$ ---- I will write a full answer when I have a laptop. Now I just using a smart-phone. BSplineDer[pts_, wgts_, {deg_, knots_}][u_?NumericQ] := Module[{n, coeff, ptsW, newPw, newWgts, newKnots, Au, wu, AuDer, wuDer}, n = Length@pts - 1; coeff = Piecewise[{{deg/(knots[[# + 2 + deg]] - knots[[# + 2]]), knots[[# + 2 + deg]] != knots[[# + 2]]}}] & /@ Range[0, n - 1]; ptsW = pts wgts; (*compute the new ctrl-points,weights and knots*) newPw = Differences[ptsW] coeff; newWgts = Differences[wgts] coeff; newKnots = ArrayPad[knots, -1]; (*calculate the A(u) and w(u)*) Au = BSplineFunction[ptsW, SplineDegree -> deg, SplineKnots -> knots][u]; wu = BSplineFunction[wgts, SplineDegree -> deg, SplineKnots -> knots][u]; (*calculate the derivative of A(u) and w(u)*) AuDer = BSplineFunction[newPw, SplineDegree -> deg - 1, SplineKnots -> newKnots][u]; wuDer = BSplineFunction[newWgts, SplineDegree -> deg - 1, SplineKnots -> newKnots][u]; (*using the NURBS curve derivative formula*) (wu AuDer - wuDer Au)/wu^2 ] ###TEST pts = {{1, 1}, {2, 3}, {3, -1}, {4, 1}, {5, 0}}; wgts = {1, 2, 3, 4, 5}; knots = {0, 0, 0, 0, 0.5, 1, 1, 1, 1}; f = BSplineFunction[pts, SplineDegree -> 3, SplineWeights -> {1, 2, 3, 4, 5}] Show[ {ParametricPlot[f[t], {t, 0, 1}], Graphics[ {Red, Dashed, Arrowheads[0.03], Table[Arrow[{f[t], f[t] + BSplineDer[pts, wgts, {3, knots}][t]/7}], {t, 0, 1, 0.1}]}], ListPlot[f /@ Range[0, 1, 0.1], PlotStyle -> Directive[Black, PointSize[Medium]]]}, PlotRange -> All, Axes -> False ] ![enter image description here][1] [1]: https://i.sstatic.net/8yyEs.png