2015-10-20 1 views
0

J'effectue des calculs d'entrée-sortie dans Octave. J'ai plusieurs matrices/vecteurs dans la formule:Omettre des zéros du calcul matriciel dans Octave

F = f' * (I-A)^-1 * Y 

Tous les vecteurs contiennent probablement des zéros. Je voudrais les omettre du calcul et retourner juste 0 à la place. Toute aide serait grandement appréciée!

Miranda

Répondre

0

Que voulez-vous dire quand vous dites "les omettent"?

Si vous souhaitez supprimer des zéros d'un vecteur, vous pouvez le faire:

octave:1> x=[1,2,0,3,4,0,5]; 
octave:2> x(find(x==0))=[] 
x = 

    1 2 3 4 5 

La logique est: x == 0 testera chaque élément de x (dans ce cas, le test est si elle est égale à zéro) et retourne un vecteur de 0 et de 1 (0 si le test est faux pour cet élément et 1 autre)

Alors:

octave:1> x=[1,2,0,3,4,0,5]; 
octave:2> x==0 
ans = 

    0 0 1 0 0 1 0 

la fonction find() retourne la valeur d'index d'un non -zero élément de c'est l'argument, d'où:

octave:3> find(x==0) 
ans = 

    3 6 

Et puis vous êtes juste indexation et le retrait quand vous faites quelque chose comme:

octave:5> x([3, 6]) = [] 
x = 

    1 2 3 4 5 

Mais au contraire, vous le faites à la sortie de la fonction find() (qui est le vecteur [3,6] dans ce cas)

Vous pouvez faire la même chose pour les matrices:

octave:7> A = [1,2,0;4,5,0] 
A = 

    1 2 0 
    4 5 0 

octave:8> A(find(A==0))=[] 
A = 

    1 
    4 
    2 
    5 

Alors u La fonction reshape() permet de la transformer en matrice.