{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Part 7\n", "\n", "Sperimentazione numerica relativa ai metodi diretti per la risoluzione di sistemi lineari. Saranno impiegate le funzioni per la fattorizzazione LU precedentemente definite nella parte 5." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "addpath (\"./functions\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matrix equation solver\n", "\n", "Risolve l'equazione matriciale $AX = B$.\n", "\n", " [X] = matrix_eq_solver(A, B)\n", " \n", "### Note di funzionamento\n", "\n", "Data la matrice:\n", "\n", " C = [1 2 6; 4 3 3]\n", "\n", "applica `C(:,3)`, ovvero taglia la i-esima colonna della matrice per ricondursi al sistema lineare $AX = B$. Perciò risolve $n$ sistemi lineari per trovare la matrice inversa. Si tratta di un metodo per la risoluzione di sistemi lineari inefficiente in quanto estremamente costoso.\n", "\n", " [X] = matrix_eq_solver(A, B)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "function [X] = matrix_eq_solver(A, B)\n", "\n", "[~, n] = size(B);\n", "[L, U, P] = gauss_partial(A);\n", "\n", "Y = zeros(n);\n", "X = zeros(n);\n", "\n", "for i = 1:n\n", " Y(:,i) = lsolve(L, P * B(:, i));\n", " X(:,i) = usolve(U, Y(:, i));\n", "end\n", "\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 1" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "A = [1 2 3; 0 0 1; 1 3 5];\n", "b = [6; 1; 9];\n", "A_1 = [1 1 0 3; 2 1 -1 1; -1 2 3 -1; 3 -1 -1 2];\n", "b_1 = [5; 3; 3; 3];" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "elemento diagonale nullo\n" ] } ], "source": [ "[~, ~] = gauss_simple(A);" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "elemento diagonale nullo\n" ] } ], "source": [ "[L_1, U_1] = gauss_simple(A_1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il metodo di fattorizzazione di Gauss senza strategie di pivoting fallisce perché in entrambi i casi l'esecuzione si blocca a causa della presenza di un elemento pivotale nullo. Ciò non accade applicando l'eliminazione gaussiana con pivoting parziale." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x_p =\n", "\n", " 1\n", " 1\n", " 1\n", "\n" ] } ], "source": [ "[L_p, U_p, P] = gauss_partial(A);\n", "[x_p] = lusolve(L_p, U_p, P, [], b)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x_1p =\n", "\n", " 1.00000\n", " 1.00000\n", " 1.00000\n", " 1.00000\n", "\n" ] } ], "source": [ "[L_1p, U_1p, P_1] = gauss_partial(A_1);\n", "[x_1p] = lusolve(L_1p, U_1p, P_1, [], b_1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 2" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ans =\n", "\n", " -1.50000 4.00000 -0.50000\n", " -1.00000 -1.00000 1.00000\n", " 1.50000 -1.00000 -0.50000\n", "\n" ] } ], "source": [ "clear x L U P\n", "\n", "A = [3 5 7; 2 3 4; 5 9 11];\n", "A_1 = [1 2 3 4; 2 -4 6 8; -1 -2 -3 -1; 5 7 0 1];\n", "B = eye(3);\n", "B_1 = eye(4);\n", "\n", "inv(A)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X =\n", "\n", " -1.50000 4.00000 -0.50000\n", " -1.00000 -1.00000 1.00000\n", " 1.50000 -1.00000 -0.50000\n", "\n" ] } ], "source": [ "X = matrix_eq_solver(A, B)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ans =\n", "\n", " -0.41667 0.17500 -0.06667 0.20000\n", " 0.25000 -0.12500 0.00000 0.00000\n", " -0.13889 0.02500 -0.42222 -0.06667\n", " 0.33333 0.00000 0.33333 -0.00000\n", "\n" ] } ], "source": [ "inv(A_1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_1 =\n", "\n", " -0.41667 0.17500 -0.06667 0.20000\n", " 0.25000 -0.12500 -0.00000 -0.00000\n", " -0.13889 0.02500 -0.42222 -0.06667\n", " 0.33333 0.00000 0.33333 0.00000\n", "\n" ] } ], "source": [ "X_1 = matrix_eq_solver(A_1, B_1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per risolvere un'equazione matriciale si estrae il vettore dei termini noti dalla matrice tramite iterazioni. Si risolvono quindi $n$ sistemi lineari.\n", "Se si impiega la fattorizzazione LU senza pivoting si blocca l'algoritmo di Gauss a causa della presenza di elementi pivotali nulli. Per questa ragione la risoluzione degli $n$ sistemi lineari si impiega una strategia di pivoting parziale." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 3" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x =\n", "\n", " 2\n", " 2\n", "\n" ] } ], "source": [ "ep = 0;\n", "A = [ep 1; 1 1];\n", "b = [2 + ep, 4]';\n", "\n", "[L, U, P] = gauss_partial(A);\n", "x = lusolve(L, U, P, [], b)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gauss senza pivoting:\t\t 2.010101 1.989899 \n", "Gauss con pivoting parziale:\t 2.010101 1.989899\n", "Gauss senza pivoting:\t\t 2.000100 1.999900 \n", "Gauss con pivoting parziale:\t 2.000100 1.999900\n", "Gauss senza pivoting:\t\t 2.000001 1.999999 \n", "Gauss con pivoting parziale:\t 2.000001 1.999999\n", "Gauss senza pivoting:\t\t 2.000000 2.000000 \n", "Gauss con pivoting parziale:\t 2.000000 2.000000\n", "Gauss senza pivoting:\t\t 2.000000 2.000000 \n", "Gauss con pivoting parziale:\t 2.000000 2.000000\n", "Gauss senza pivoting:\t\t 2.000178 2.000000 \n", "Gauss con pivoting parziale:\t 2.000000 2.000000\n", "Gauss senza pivoting:\t\t 1.998401 2.000000 \n", "Gauss con pivoting parziale:\t 2.000000 2.000000\n", "Gauss senza pivoting:\t\t 4.440892 2.000000 \n", "Gauss con pivoting parziale:\t 2.000000 2.000000\n", "Gauss senza pivoting:\t\t 0.000000 2.000000 \n", "Gauss con pivoting parziale:\t 2.000000 2.000000\n" ] } ], "source": [ "for k = 2 : 2 : 18\n", " ep = 10^-k;\n", " A_i = [ep 1; 1 1];\n", " b_i = [ep + 2, 4]';\n", " [L_1, U_1] = gauss_simple(A_i);\n", " [L, U, P] = gauss_partial(A_i);\n", " x_1 = lusolve(L_1, U_1, [], [], b_i);\n", " x = lusolve(L, U, P, [], b_i);\n", " fprintf(\"Gauss senza pivoting:\\t\\t %f %f \\n\", x_1);\n", " fprintf(\"Gauss con pivoting parziale:\\t %f %f\\n\", x);\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Quando non si applica la strategia pivotale si nota che per valori molto piccoli l'accuratezza del risultato si riduce. In particolare si nota in questo caso che mano a mano che $\\varepsilon$ decresce, il valore di $x_1$ oscilla rispetto al risultato atteso a partire dalla quart'ultima iterazione ovvero per $\\varepsilon < 10^{-12}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 4" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L =\n", "\n", " 1.00000 0.00000 0.00000 0.00000\n", " 0.66667 1.00000 0.00000 0.00000\n", " 0.66667 -2.00000 1.00000 0.00000\n", " 0.66667 -2.00000 2.00000 1.00000\n", "\n", "U =\n", "\n", " 3.00000 1.00000 1.00000 1.00000\n", " 0.00000 0.33333 -0.66667 -0.66667\n", " 0.00000 0.00000 -1.00000 -2.00000\n", " 0.00000 0.00000 0.00000 3.00000\n", "\n" ] } ], "source": [ "A = [3 1 1 1; 2 1 0 0; 2 0 1 0; 2 0 0 1];\n", "b = [4 1 2 4]';\n", "[L, U] = gauss_simple(A);\n", "L\n", "U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si nota il fenomeno del *fill-in*, per cui la matrice $A$, avente molti valori nulli, ha fattori $L$ e $U$ [L, U, ~] = gauss_partial(A);non nulli ad eccezione delle rispettive parti triangolari superiore e inferiore." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L =\n", "\n", " 1.00000 0.00000 0.00000 0.00000\n", " 0.66667 1.00000 0.00000 0.00000\n", " 0.66667 1.00000 1.00000 0.00000\n", " 0.66667 -0.50000 0.50000 1.00000\n", "\n", "U =\n", "\n", " 3.00000 1.00000 1.00000 1.00000\n", " 0.00000 -0.66667 0.33333 -0.66667\n", " 0.00000 0.00000 -1.00000 1.00000\n", " 0.00000 0.00000 0.00000 -1.50000\n", "\n" ] } ], "source": [ "[L, U, ~] = gauss_partial(A);\n", "L\n", "U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si nota che adottando la strategia di pivoting parziale la crescita degli elementi di $U$ in modulo è minore rispetto al caso in cui non si ha il pivoting. In particolare per i moltiplicatori, ovvero gli elementi della matrice $L$, vale $|m_{i, j}| \\le 1$." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x =\n", "\n", " 2\n", " -1\n", " 0\n", " 1\n", "\n" ] } ], "source": [ "[m, n] = size(A);\n", "\n", "% permutazione della prima riga con l'ultima\n", "temp = A(1,:);\n", "A(1,:) = A(n,:);\n", "A(n,:) = temp;\n", "\n", "% permutazione della prima colonna con l'ultima\n", "temp = A(:,1);\n", "A(:,1) = A(:,n);\n", "A(:,n) = temp;\n", "n = length(b);\n", "\n", "% permutazione della prima componente con l'ultima\n", "temp = b(1);\n", "b(1) = b(n);\n", "b(n) = temp;\n", "\n", "[L, U, P] = gauss_partial(A);\n", "x = lusolve(L, U, P, [], b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 5" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "n = 100;\n", "kmax = 20;\n", "\n", "cond_A = zeros(kmax, 1);\n", "err_rel = zeros(kmax, 1);\n", "err_rel_p = zeros(kmax, 1);\n", "x_es = ones(n, 1);\n", "norm_x_es = norm(x_es);\n", "\n", "% vettore di n componenti random\n", "v = rand(n, 1);\n", "% vettore con norma 2 unitaria (ogni componente si divide per la norma)\n", "v = v / norm(v); \n", "\n", "Q = eye(n) - 2 * v * v';\n", "D = eye(n);" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "for k = 1:kmax\n", " \n", " D(n, n) = 10^k;\n", " A = Q * D;\n", " b = A * x_es;\n", " \n", " % memorizza in vettore num cond.\n", " cond_A(k) = cond(A); \n", " \n", " [L, U] = gauss_simple(A);\n", " x = lusolve(L, U, [], [], b);\n", " \n", " % memorizza in vettore err rel\n", " err_rel(k) = norm(x_es - x) / norm_x_es; \n", " \n", " [L_p, U_p, P] = gauss_partial(A);\n", " x_p = lusolve(L_p, U_p, P, [], b);\n", " \n", " % memorizza in vettore err rel parziale\n", " err_rel_p(k) = norm(x_es - x_p) / norm_x_es; \n", "\n", "end" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<IPython.core.display.Image object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure\n", "x_n = 1:kmax;\n", "semilogy(x_n, err_rel, x_n, err_rel_p);\n", "legend(\"senza pivoting\", \"pivoting parziale\",\"location\", \"eastoutside\");\n", "title(\"A variabile di dimensione n = 100\");\n", "ylabel(\"Errore relativo\");\n", "box off" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<IPython.core.display.Image object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure\n", "semilogy(cond_A)\n", "title('A variabile di dimensione n=100')\n", "ylabel('Indice condizionamento in norma 2')\n", "ylim([1, 10^25]);\n", "box off" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 6" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "nmin= 2; nmax = 50;\n", "err_rel_chol = zeros(nmax - nmin, 1);\n", "err_rel_gss = zeros(nmax - nmin, 1);\n", "\n", "for n = nmin:nmax\n", " B = rand(n);\n", " A = B' * B;\n", " x_es = (1 : n)';\n", " norm_x_es = norm(x_es);\n", " b = A * x_es;\n", " \n", " [L, U, P] = gauss_partial(A);\n", " x = lusolve(L, U, P, [], b);\n", " err_rel_gss(n - nmin + 1) = norm(x_es - x) / norm_x_es;\n", " \n", " L_2 = chol(A);\n", " y_2 = lsolve(L_2', b);\n", " x_2 = usolve(L_2, y_2);\n", " err_rel_chol(n - nmin + 1) = norm(x_es - x_2) / norm_x_es;\n", " \n", "end" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<IPython.core.display.Image object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure\n", "xn=(nmin:nmax)';\n", "semilogy(xn,err_rel_chol,'b',xn,err_rel_gss,'r')\n", "legend('chol', 'lu', \"location\", \"eastoutside\")\n", "title('Metodo di Fattorizzazione di Cholesky')\n", "xlabel('Dimensione n')\n", "ylabel('Errore relativo')\n", "box off" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dato che le soluzioni ottenute con i due metodi non si discostano in maniera significativa tra loro, si può concludere che l'algoritmo di Cholesky è stabile." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 7" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "cont = 0;\n", "x_n = 4:6:40;\n", "A = [];\n", "\n", "err_rel_1 = zeros(1,length(x_n));\n", "err_rel_2 = zeros(1,length(x_n));\n", "err_rel_3 = zeros(1,length(x_n));\n", "\n", "for n = 4:6:40\n", " cont = cont + 1;\n", " \n", " % costruzione matrice di Hankel\n", " for i = 1:n\n", " for k = i+1-n:i\n", " if k > 0\n", " A(i,n+k-i) = 2^k;\n", " else\n", " A(i,n+k-i) = 2 ^ (1 / (2 - k));\n", " end\n", " end\n", " end\n", " \n", " x_es = ones(n, 1);\n", " b = A * x_es;\n", " norm_x_es = norm(x_es);\n", " cond_A(cont) = cond(A);\n", " \n", " [L, U, P] = gauss_partial(A);\n", " x = lusolve(L, U, P, [], b);\n", " err_rel_1(cont) = norm(x_es - x) / norm_x_es;\n", " \n", " [L_1, U_1, P_1, Q] = gauss_total(A);\n", " x_1 = lusolve(L_1, U_1, P_1, Q, b);\n", " err_rel_2(cont) = norm(x_es - x_1) / norm_x_es;\n", " \n", " [Q, R] = qr(A);\n", " y = Q' * b; x_hs = usolve(R, y);\n", " err_rel_3(cont) = norm(x_es - x_hs) / norm_x_es;\n", " \n", "end" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<IPython.core.display.Image object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure\n", "loglog(\n", " (4:6:40), err_rel_3, 'ko-', ...\n", " (4:6:40), err_rel_1, 'r*-', ...\n", " (4:6:40), err_rel_2, 'bs-');\n", "\n", "legend('Householder', 'Pivot parziale', 'Pivot totale', \"location\", \"eastoutside\")\n", "box off" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Esercizio 8" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "clear all\n", "cont = 0;\n", "A = [];\n", "\n", "for n = 48:2:58\n", " cont = cont + 1;\n", " \n", " % costruzione matrice di Hankel\n", " for i = 1:n\n", " for j = 1:n\n", " if i == j || j == n\n", " A(i, j) = 1;\n", " elseif i > j\n", " A(i, j) = -1;\n", " else\n", " A(i, j) = 0;\n", " end\n", " end\n", " end\n", " \n", " x_es = ones(n, 1);\n", " b = A * x_es;\n", " norm_x_es = norm(x_es);\n", " cond_A(cont) = cond(A);\n", " \n", " [L, U, P] = gauss_partial(A);\n", " x = lusolve(L, U, P, [], b);\n", " err_rel_par(cont) = norm(x_es - x) / norm_x_es;\n", " \n", " [L_1, U_1, P_1, Q] = gauss_total(A);\n", " x_1 = lusolve(L_1, U_1, P_1, Q, b);\n", " err_rel_tot(cont) = norm(x_es - x_1) / norm_x_es;\n", " \n", " [Q, R] = qr(A);\n", " y = Q' * b; x_hs = usolve(R, y);\n", " err_rel_hous(cont) = norm(x_es - x_hs) / norm_x_es;\n", " \n", "end" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<IPython.core.display.Image object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure\n", "subplot(2,1,1)\n", "plot(\n", " [48:2:58], err_rel_hous, 'ko-', ...\n", " [48:2:58], err_rel_par, 'r*-', ...\n", " [48:2:58], err_rel_tot, 'bs-')\n", "\n", "legend('Householder','Pivot parziale','Pivot totale', ...\n", " \"location\", \"southoutside\")\n", "box off\n", "\n", "subplot(2,1,2)\n", "plot(\n", " [48:2:58], err_rel_hous, 'ko-', ...\n", " [48:2:58], err_rel_tot, 'bs-')\n", "\n", "legend('Householder','Pivot totale', ...\n", " \"location\", \"southoutside\")\n", "box off" ] } ], "metadata": { "kernelspec": { "display_name": "Octave", "language": "octave", "name": "octave" }, "language_info": { "file_extension": ".m", "help_links": [ { "text": "GNU Octave", "url": "https://www.gnu.org/software/octave/support.html" }, { "text": "Octave Kernel", "url": "https://github.com/Calysto/octave_kernel" }, { "text": "MetaKernel Magics", "url": "https://metakernel.readthedocs.io/en/latest/source/README.html" } ], "mimetype": "text/x-octave", "name": "octave", "version": "5.2.0" } }, "nbformat": 4, "nbformat_minor": 4 }