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
N
1D NumPy-rijen x
met elk M
> 0 elementen y
met N
elementen Het resultaat van de functie is een 1D NumPy-rij die de vector $$\mathbf{b}$$ voorstelt. $$ $$
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]