Risoluzione matrici triangolari inferiori, problema

di Anonimizzato9893 il
8 risposte
Ciao a tutti. Devo implementare una function che mi risolve questo tipo di matrici, ecco come l'ho fatta, non capisco dove sbaglio, ma non dà il giusto risultato, neanche il primo termine del vettore x che dovrebbe essere giusto sempre per come l'ho scritto. Qualcuno mi può dare una mano? Grazie mille
function [x] = triangolareinf( A,b )
%Metodo delle sostituzioni successive in avanti per la risoluzione di un
%sistema triangolare inferiore.
%IMPUT
%     A--> Matrice dei coefficienti
%     b--> vettore termini noti
%OUTPUT
%     x--> soluzione del sistema

[n,m]=size(A);
if n~=m
    error ('la matrice deve essere quadrata')
end

for i= 1:n
    if A(i,i)==0
        error ('la matrice è singolare')
    end
end

x(1) = b(1) / A(1,1);
c = 1;
t=0;
for j= 2:n
    for l= 1:c
         s = t + (A(j,l).*x(l));
         t = (A(j,l).*x(l));
    end
t=0;
x(j) = ( b(j) - s ) / A(j,j);
c = c+1;
end

end

8 Risposte

  • Apposto ho risolto
  • Bene, ma giusto perché mi è caduto l'occhio sul codice... per la singolarità della matrice, potresti evitare il ciclo for, scrivendo così
       if det(A)==0
            error ('la matrice è singolare')
        end
    oppure, se vuoi proprio controllare che tutti gli elementi della diagonale siano 0:
    if isequal(diag(A),zeros(1,numero_di_elementi_della_diagonale))
  • Grazie, però dovevo evitare di calcolare il determinante in quella maniera ecco per che non l'ho utilizzato.
    Avrei un altra domanda, devo definire un vettore con un numero ripetuto n volte, come faccio?
  • Tipo [3 3 3 3 3]?
  • Si, in questo caso però è un vettore [0,0,0,...0] i volte, dove i si aggiorna iterazione dopo iterazione
  • Zeros(1,i)
  • Grazie XD non avevo proprio pensato
  • Se vuoi fare un numero diverso da zero usi Ines e moltiplichi per il numero che vuoi.
    Lo so che la prima tentazione è sempre usare i cicli for, ma non servono quasi mai!
Devi accedere o registrarti per scrivere nel forum
8 risposte