<jupyter_start><jupyter_text>Przetestuj zaimplementowaną metodę porównując wyniki uzyskane z jej pomocą z wynikami zwracanymi przez funkcję biblioteczną. W testach wykorzystaj 4-5 macierzy losowych o różnym rozmiarze.<jupyter_code>def test_QR_factor(n=3, max_val=1000000):
    A = np.random.randint(max_val, size=(n,n))
    Q, R = Gram_Schmidt_QR(A)
    return np.all(np.isclose(np.eye(n), Q.T @ Q)) and np.all(np.isclose(A, Q @ R))
test_QR_factor()
test_QR_factor(10)
test_QR_factor(100)
test_QR_factor(400)
test_QR_factor(1000)<jupyter_output><empty_output><jupyter_text>Wygeneruj 30-50 przykładowych macierzy 8×8 o różnym wskaźniku uwarunkowania (stosunek największej do najmniejszej wartości osobliwej). Wykorzystaj w tym celu SVD oraz biblioteczną funkcję realizującą dekompozycję QR (potrzebne będą dwie losowe macierze ortogonalne oraz diagonalna macierz odpowiednio szybko malejących wartości osobliwych).  Zadanie 2: Rozwiązywanie układów równań metodą QRNapisz funkcję rozwiązującą nadokreślony układ równań liniowych metodą QR. Następniewykorzystaj ją do rozwiązania problemu aproksymacji średniokwadratowej dla zbiorupunktów podanego tabeli poniżej. Przyjmij model postaci:f(x) = α0 + α1x + α2x^2Przedstaw wizualizację uzyskanego wyniku (punkty oraz funkcja aproksymująca f).<jupyter_code>x = np.array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5])
y = np.array([2, 7, 9, 12, 13, 14, 14, 13, 10, 8, 4])
A = np.array([np.ones(len(x)), x, np.vectorize(lambda x: x*x)(x)]).T
A
Q, R = np.linalg.qr(A)
b = y.T
res = np.linalg.solve(R, Q.T @ b)
def f(x, res):
    return x + res[0] + res[1] * x + res[2] * x ** 2
y2 = [f(z, res) for z in x]
plt.scatter(x,y)
plt.plot(x,y2)
plt.show()<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup