Fattorizzazione LU

di il
29 risposte

29 Risposte - Pagina 2

  • Re: Fattorizzazione LU

    Ma la matrice P non viene mai usata?
  • Re: Fattorizzazione LU

    No, me la costruisco separatamente, nell'algoritmo non si usa. praticamente dovrei fare P * A per scambiare le righe della matrice A, però per evitare di fare prodotti tra matrici le scambio così
     w = A(i,:); 
            A(i,:) = A(k,:);
            A(k,:) = w;
  • Re: Fattorizzazione LU

    Mi sembra che è proprio lì che scambia le righe... cioè, se provi a scrivere questo:
    w = A(i,:);
    A(i,:) = A(k,:);
    A(k,:) = w;
    e poi questo:
    A1=P*A
    vengono risultati diversi.
    Io lo sto facendo su una matrice 3x3, per i = 1 sono uguali, mentre per i = 2 ottengo due matrici diverse, dove sono scambiati alcuni valori.
    (Perché non vuoi fare prodotti?)
  • Re: Fattorizzazione LU

    Per evitare quell' o(n^3) operazioni in virgola mobile.
    Tu hai applicato separatamente lo scambio e il prodotto con P o insieme?
  • Re: Fattorizzazione LU

    Ho solo aggiunto la riga con il prodotto sotto alle 3 che scambiano le righe e ho tolto i ; in modo da vedere ad ogni ciclo le due matrici.
    (Ma con che dimensioni di matrici stai lavorando?)
  • Re: Fattorizzazione LU

    Con dimensioni basse, ma mi è stato chiesto di evitare il prodotto matriciale...
  • Re: Fattorizzazione LU

    Se usi la riga che ti ho messo prima eviti anche gli assegnamenti...
  • Re: Fattorizzazione LU

    Ok grazie
  • Re: Fattorizzazione LU

    Prego, fammi sapere se vengono diverse anche a te... magari abbiamo isolato il problema...
  • Re: Fattorizzazione LU

    Ho scritto così
    v = P(i,:);
            P(i,:) = P (k,:);
            P(k,:) = v; 
            A([i k],i:n)=A([k i],i:n);
            A1 = P * A;
    e ho messo le stringhe seguenti come commento in modo che non mi vadano a modificare la A e quindi la U. Effettivamente la A1 dovrebbe essere uguale alla U ma mi viene una riga scambiata. ho provato per i=1 e i = 2
  • Re: Fattorizzazione LU

    Per P puoi fare la stessa cosa...
    P([i k],:)=P([k i],:);
    Infatti vengono diverse (se moltiplichi o se scambi le righe a mano. Quindi o le due operazioni non sono equivalenti oppure sbagli qualcosa nell'invertire le righe...
  • Re: Fattorizzazione LU

    Ho risolto il problema però non capisco perché come lo scrivevo prima non va bene, ho scritto così dopo la permutazione
    g =  [zeros(i,1); A(i+1:n,i)]/A(i,i) ;
    
    A(i+1:n,i) = A(i+1:n,i)/A(i,i);
    A(i+1:n,i+1:n) = A(i+1:n,i+1:n) - g(i+1:n) * A(i,i+1:n);
    
    end
    U = triu(A);
    L = tril(A,-1) + eye(n);
    infatti ho scoperto che la matrice L non è altro che triangolare inferiore della matrice A, però mi doveva uscire pure con l'algoritmo di prima perché prendevo la prima colonna di A, la dividevo per A(i,i) e la ponevo uguale alla prima colonna di L...
  • Re: Fattorizzazione LU

    Dovresti sempre controllare passaggio per passaggio i risultati in modo da capire in quale punto del codice si comporta in modo diverso...
    Comunque, adesso funziona...
  • Re: Fattorizzazione LU

    Infatti... cmq il problema era dovuto al fatto che non permutavo la L...
  • Re: Fattorizzazione LU

    Bene, mi fa piacere che sia tutto risolto.
Devi accedere o registrarti per scrivere nel forum
29 risposte