modification fonction factorisation LU

La fonction ci-jointe transforme une matrice A quelconque en deux matrice L et U. on voudrait l'adapter de manière à mettre en paramettre une matrice M stockée au format MMCS;
pouvez-vous m'aider?
merci



function [L,U]=MMCS_LU(I,J,V)
    if max(I)~=max(J) then
        error('la matrice n''est pas carree')
    end;
    getf MMCS2full.sci;
    A=MMCS2full(I,J,V);
    [m,n]=size(A);
    //test de l'inversibilité de la matrice A
    for i=1:n
        if det(A([1:i],[1:i]))==0 then
            e=1;
        end
    end
    if e==1 then
        printf("\n il existe une sous matrice principale non inversible, la methode ne marche pas\n");
        x=[];l=[];u=[];
    else
    //algorithme de gauss
        for r=1:n-1
            j=r; //inversion de lignes si il y a un 0 sur la diagonale
            while a(j,r)==0,
                j=j+1;
            end
            if j>r then,
            //inversion des lignes de a
                for k=r:n
                m=a(r,k);
                a(rk,)=a(j,k);
                a(j,k)=m;
            end
        end



    for i=1:n
        for j=1:i-1
            A(i,j)=A(i,j);
            for k=1:j-1
                A(i,j)=A(i,j)-A(i,k)*A(k,j);
            end;
            A(i,j)=A(i,j)/A(j,j);
        end;

        for j=i:n
            A(i,j)=A(i,j);
                for k=1:i-1
                A(i,j)=A(i,j)-A(i,k)*A(k,j);
            end;
        end;
    end;
    U=triu(A);L=A-U+diag(ones(n,1));
endfunction;

Réponses

  • De mon expérience, je pense que
    - tu dois expliquer quel est ce stockage MMCS que tu mentionnes (je pense que tout le monde ne connais pas les différents types de stockage, j'en connais un ou deux et celui-ci ne me dis rien);
    - c'est sympa d'avoir mis l'algo mais à mon avis ça va changer pas mal de chose quand même.
  • voici la def de MMCS
    %============================================================
    %%
    This ASCII file represents a sparse mxn matrix with N
    % nonzeros in the following Matrix Market format :
    %%
    +
    +
    % |%%MatrixMarket matrix coordinate | <--- header line
    % |% real general | <--+
    % |% comments | |--0 or more comment lines
    % |% | <--+
    % | m n V | <--- rows, columns, entries
    % | I1 J1 A(I1, J1) | <--+
    % | I2 J2 A(I2, J2) | |
    % | I3 J3 A(I3, J3) | |-- L lines
    % | . . . | |
    % | IN JN A(IN, JN) | <--+
    % +
    +
    %%
    Indices are 1-based, i.e. A(1,1) is the first element.
    %
    %============================================================
    5 5 8
    1 1 1.000e+00
    2 2 1.050e+01
    3 3 1.500e-02
    1 4 6.000e+00
    4 2 2.505e+02
    4 4 -2.800e+02
    4 5 3.332e+01
    5 5 1.200e+01


    ou plus simplement:

    -->A=[1 2 3;0 3 5;1 0 8]
    A =

    ! 1. 2. 3. !
    ! 0. 3. 5. !
    ! 1. 0. 8. !

    -->matricestockeeMMCS=[1 1 1;1 2 2;1 3 3;2 3 5;3 1 1;3 3 8]
    matricestockeeMMCS =

    ! 1. 1. 1. !
    ! 1. 2. 2. !
    ! 1. 3. 3. !
    ! 2. 3. 5. !
    ! 3. 1. 1. !
    ! 3. 3. 8. !


    Au fait je travaille avec scilab!
Connectez-vous ou Inscrivez-vous pour répondre.