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.
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
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