We vermoeden dat de grootheid $$y$$ (op kleine fouten na) lineair afhangt van een reeks parameters $$x_0, ... , x_{M-1}$$. Om de relatie tussen $$y$$ en de parameters $$x_0, ..., x_{M-1}$$ elegant te beschrijven, construeren we een kolomvector $$\mathbf{u}$$ als
$$ \begin{align} \mathbf{u} &= \begin{bmatrix} 1 \\ x_{0} \\ x_{1} \\ \vdots \\ x_{M-1} \end{bmatrix} \end{align} $$
zodat de relatie tussen $$\mathbf{y}$$ en de parameters $$x_0, ... ,x_{M-1}$$ kan genoteerd worden als:
$$ y = \sum_{i=0}^{M} b_i u_i = \mathbf{b^T u}$$

Om de kolomvector $$\mathbf{b}$$ ($$M+1$$ dimensies) te construeren, maken we gebruik van een reeks van $$N$$ gegevens. Voor elk meetpunt beschikken we dus over de parameters $$x_0, ..., x_{M-1}$$ (en dus de vector $$\mathbf{u}$$) en een bijhorende $$y$$-waarde. We noteren de vector die hoort bij het gegeven met rangnummer $$i$$ als $$\mathbf{u}_i$$ en de bijhorende $$y$$-waarde als $$y_i$$. $$ $$

We vinden de kolomvector $$\mathbf{b}$$ als volgt:

Schrijf de functie lineair_fit() met als argumenten

Het resultaat van de functie is een 1D NumPy-rij die de vector $$\mathbf{b}$$ voorstelt. $$ $$

Voorbeeld

Merk op dat het Dodonascript je resultaat omzet naar een lijst. Het resultaat van je functie moet wel degelijk een 1D NumPy-rij zijn. De numerieke waarden worden ook afgekapt op 4 decimalen.

lineair_fit([np.array([0.2, 5.6]), np.array([5.3, -6.0]), np.array([9.2, 7.8]), np.array([-0.9, 6.0]), np.array([-9.3, -3.4]), np.array([2.8, -0.1]), np.array([3.4, 6.2]), np.array([-9.3, -5.7]), np.array([0.2, -4.3]), np.array([-9.3, 0.9])], np.array([32.8, -4.800000000000001, 79.8, 30.4, -50.2, 14.7, 48.6, -61.7, -16.7, -28.700000000000003]))
#[4.0, 4.0, 4.9999]
format_p(lineair_fit([np.array([-1.0, -1.5]), np.array([5.7, 9.9]), np.array([0.7, 6.0]), np.array([-6.6, -7.7]), np.array([-3.3, 1.3]), np.array([-7.2, -4.0]), np.array([-7.6, 3.1]), np.array([-5.6, -8.2])], np.array([7.0, -15.8, -8.0, 19.4, 1.4, 12.0, -2.2, 20.4]))
#[4.0, 0.0, -2.0]