2009-10-25 6 views
0

J'essaie d'effectuer une sommation vraiment simple dans MATLAB. Voici mon code:MATLAB: Pourquoi cette somme ne fonctionne-t-elle pas correctement?

moment = 0; 

for y=1:rows, 
    for x=1:cols, 
     moment = moment + (x^p * y^q * Im(y,x)); 
    end 
end 

Je veux (x^p * y^q * Im (y, x)) à calculer pour chaque itération et ajouté à la variable moment, mais cette fonction retourne le moment la première fois c'est calculé. Il ne semble pas faire l'ajout du tout.

Probablement une erreur stupide, mais je suis vraiment confus. Aucune suggestion?

Répondre

6

Pourrait-il être que Im est de type uint8 ou un type similaire de petite portée? Essayez de mettre cette ligne avant les boucles:

Im = double(Im); 

BTW vous pouvez réécrire votre code en une ligne:

moment = sum(sum(((1:rows)'.^q * (1:cols).^p) .* double(Im))); 
+0

Oui, Im est de type uint8, mais il fonctionne maintenant. Je vous remercie! – Domenic

+0

Il semble que 'p' et' q' peuvent être inversés dans votre solution d'une ligne. – gnovice

+0

@gnovice: fixe, bonne prise – Amro

0

mettre un point d'arrêt sur la ligne moment = moment + ... et voir si la variable "moment" est en cours d'augmentation.

Je ne sais pas pourquoi vous utilisez la virgule dans l'instruction for. Cela ne devrait pas avoir d'effet, je ne pense pas, mais c'est inutile.