< M A T L A B > Copyright 1984-2005 The MathWorks, Inc. Version 7.1.0.183 (R14) Service Pack 3 August 02, 2005 To get started, select MATLAB Help or Demos from the Help menu. >> % prova di costruzione della matrice richiesta dall'esercizio 1 >> n=5 n = 5 >> a=eye(n+1) a = 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 >> v=rand(1,n) v = 0.9501 0.2311 0.6068 0.4860 0.8913 >> a(n+1,1:n)=v a = 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0.9501 0.2311 0.6068 0.4860 0.8913 1.0000 >> a(1:n,n+1)=v' a = 1.0000 0 0 0 0 0.9501 0 1.0000 0 0 0 0.2311 0 0 1.0000 0 0 0.6068 0 0 0 1.0000 0 0.4860 0 0 0 0 1.0000 0.8913 0.9501 0.2311 0.6068 0.4860 0.8913 1.0000 >> % la matrice a e' simmetrica >> % chiamiamo la routine matlab per la fattorizzazione LU >> [L,U,P]=lu(a) L = 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0.9501 0.2311 0.6068 0.4860 0.8913 1.0000 U = 1.0000 0 0 0 0 0.9501 0 1.0000 0 0 0 0.2311 0 0 1.0000 0 0 0.6068 0 0 0 1.0000 0 0.4860 0 0 0 0 1.0000 0.8913 0 0 0 0 0 -1.3550 P = 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 >> % con poco lavoro si puo' fare direttamente il calcolo >> % infatti P e' sempre l'identita' >> % L e' propio la parte di a dalla diagonale in giu' >> % per il calcolo di U basta calcolare il solo elemento U(n+1,n+1) essendo gli altri >> % dati dalla parte sopra la diagonale di a. >> % si vede subito che l'elemento e' dato da 1 - la somma dei quadrati delle v >> 1-sum(v.^2) ans = -1.3550 >> % i comandi spy mostrano la struttura delle matrici L e U >> spy(L) >> spy(U) >> % ora grazie alla particolare struttura della matrice a e' possibile calcolarsi direttamente >> % L ed U che chiamiamo LL ed UU per confrontarli con quelli gia' trovati. >> LL=eye(n+1) LL = 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 >> LL(n+1,1:n)=a(n+1,1:n) LL = 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0 0 0 0 0 1.0000 0 0.9501 0.2311 0.6068 0.4860 0.8913 1.0000 >> UU=eye(n+1) UU = 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 >> UU(1:n,n+1)=a(1:n,n+1) UU = 1.0000 0 0 0 0 0.9501 0 1.0000 0 0 0 0.2311 0 0 1.0000 0 0 0.6068 0 0 0 1.0000 0 0.4860 0 0 0 0 1.0000 0.8913 0 0 0 0 0 1.0000 >> UU(n+1,n+1)=1-sum(a(1:n,n+1).^2) UU = 1.0000 0 0 0 0 0.9501 0 1.0000 0 0 0 0.2311 0 0 1.0000 0 0 0.6068 0 0 0 1.0000 0 0.4860 0 0 0 0 1.0000 0.8913 0 0 0 0 0 -1.3550 % verifichiamo di aver fatto i calcoli giusti... >> LL-L ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> UU-U ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> % perfetto. Controlliamo che la fattorizzazione funzioni: >> LL*UU ans = 1.0000 0 0 0 0 0.9501 0 1.0000 0 0 0 0.2311 0 0 1.0000 0 0 0.6068 0 0 0 1.0000 0 0.4860 0 0 0 0 1.0000 0.8913 0.9501 0.2311 0.6068 0.4860 0.8913 1.0000 >> LL*UU-a ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> % ora si puo' scrivere la function di matlab; si noti che in realta' basta >> % memorizzare il vettore v piu' un singolo numero U(n+1,n+1).