2013-03-05 2 views
-1

Je comprends que si je voulais générer des valeurs y de y = sin (2x) Je pouvais faire:Matlab Fonction Représentation

y = sin(0:.01:2*2); 

Cependant, si je voulais générer des valeurs pour y = 0, sauf si x est un multiple de 1 ou sqrt (2) à quels points y = 1, comment aborderais-je ce problème? Dois-je créer une fenêtre autour des valeurs et espérer que la taille du pas est suffisamment petite pour le capturer? Je vous remercie.

+0

Je ne trouve aucune corrélation entre les différents points spécifiques que vous nommez. sqrt (2) comme une entrée au péché? Cependant, en général, vous ne pouvez jamais compter sur des nombres à virgule flottante pour vous donner une égalité exacte, donc si vous essayez de résoudre cette équation pour y = 0 ou quoi que ce soit, ne le faites pas de cette façon. Enfin, votre syntaxe ne fait pas de péché (2x). La priorité de l'opérateur le fait à la place faire péché (0: 0.01: 4). Générez x en premier et branchez-le. – Peter

+0

Désolé, ce n'était pas clair. Je suis utilisé le péché (2x) comme un exemple de la façon dont je comprends comment générer des valeurs en fonction de certaines fonctions, mais si la fonction n'est pas bien représentée, comment puis-je générer les valeurs. Telle que la fonction pour f (x) = 1 si x = n (sqrt (2)) pour n dans N et x = 0 ailleurs. Je vous remercie. – BenM

Répondre

1

Utilisez des conditions logiques. Par exemple, à partir de y(x) puis y(y==1) va générer la valeur de y pour cette condition et des zéros ailleurs. Pour des conditions plus génériques, vous pouvez utiliser mod et ismember etc. Un autre problème que vous aurez est de faire correspondre des entiers à des flottants, vous devrez d'abord arrondir et ensuite utiliser les fonctions mentionnées ci-dessus.

+0

Le problème ici est que les données que je génère pour y dépendent de mon entrée x. Pourrais-je utiliser un vecteur bidimensionnel pour les conditions? Dites que j'ai '[X, Y (x)]' alors utilisez une instruction conditionnelle pour générer les valeurs y qui remplissent la condition et laisser les autres seuls? Je vous remercie. – BenM

0

Ok, je comprends. Encore une fois, l'arithmétique à virgule flottante ne fait pas l'égalité, donc votre exemple ne fonctionnera pas. De plus, comme vous échantillonnez la fonction à intervalles discrets, il est difficile de capturer des fonctions delta. Donc, ne le faites pas de cette façon. Si, au contraire, vous êtes à la recherche pour les fonctions standard de morceaux, voici l'idée:

x = 0:.01:2; 
x1_locations = x < 1; 
x2_locations = ~x; 
y = zeros(size(x)); 
y(x1_locations) = sin(2*x(x1_locations)); 
y(x2_locations) = cos(3*x(x2_locations)); 

Encore une fois, la raison pour laquelle cela ne fonctionnera pas pour, disons, x1_locations = (floor(x/sqrt(2)) == x/sqrt(2)) est que vous allez jamais frapper exactement l'emplacement de x qui montrera ceci, et même si vous l'avez fait, erreur d'arrondi dans la représentation en virgule flottante peut encore vous faire manquer l'emplacement. Si vous êtes d'accord avec l'approximation, utilisez une différence absolue maximale par rapport aux valeurs qui vous intéressent.

+0

Je comprends que j'échantillonne l'intervalle sur des intervalles discrets, donc je ne pourrais pas utiliser l'égalité, mais ce que j'essaie de faire est essentiellement de représenter une fonction périodique de Kronecker Delta. Mais je pense que l'utilisation de la différence absolue maximale (en me donnant une petite fenêtre) avec des conditionnels le fera pour moi. – BenM