2015-03-01 1 views
2
function y = dd2(x1,x2) 
y=0; 
if x1==0 && x2==0 
    y=1; 
end 

Cela ne fonctionnerait pas car l'entrée ne peut pas être un tableau. J'espère pouvoir le faire fonctionner pour un tableau X de 1 * m, et un tableau Y de 1 * n donc quand vous dd2 (X, Y) il crée am * n matrice avec 1 à la position où X = 0 , Y = 0 et zéro sinoncomment définir une fonction delta discrète 2d qui peut prendre une entrée matricielle dans matlab

Y at-il une fonction qui a déjà été implémentée dans matlab? (comme une fonction delta discrète 2D) Je ne l'ai pas trouvé .. Le dirac (x) retournerait inf ce que je veux est zéro. Y at-il un moyen de changer l'inf à 1? Merci

Répondre

2

Il existe une fonction magique appelée bsxfun qui fait presque tout dans MATLAB et trouve certainement une autre configuration parfaite ici. La mise en œuvre avec elle ressemblerait à quelque chose comme ça -

y = bsxfun(@and,x1(:)==0,x2(:).'==0) 

échantillon analysé avec x1 comme 1x4 et x2 comme 1x6 -

x1 = 
    0 -1 -1  0 
x2 = 
    -1 -1 -1 -1  0  0 
y = 
    0  0  0  0  1  1 
    0  0  0  0  0  0 
    0  0  0  0  0  0 
    0  0  0  0  1  1 

Regardez les positions des 0 's dans x1, x2 et 1' s dans la sortie y pour vérifier les résultats.


Cas général Solution

Pour un cas général, vous pouvez définir un anonymous function comme si -

func1 = @(x1,x2) x1==0 & x2==0 

Ensuite, l'utiliser dans bsxfun pour la sortie deseired -

y = bsxfun(func1,x1(:),x2(:).') 

Ainsi, avec chaque nouvelle instruction conditionnelle, vous n'avez qu'à changer func1! Par exemple, vous pouvez ajouter une instruction conditionnelle supplémentaire -

func1 = @(x1,x2) x1==0 & x2==0 | x1 <0 
+0

Cela aide vraiment! Il est probablement préférable de changer 'x1 (:) == 0, x2 (:). '== 0' à' x1 (:).' == 0, x2 (:) == 0' par convention d'ordre x et y . Une question de suivi: si j'ai plusieurs fonctions dans le même dossier, comment puis-je spécifier @et fait référence à ma fonction dd2()? – diodeBucks

+1

@diodeBucks Consultez les modifications? – Divakar