Aide Scilab : plot de la fonction porte

Fermé
cuber_71 Messages postés 1 Date d'inscription jeudi 31 décembre 2009 Statut Membre Dernière intervention 31 décembre 2009 - 31 déc. 2009 à 10:31
 philippe - 4 janv. 2010 à 10:19
Bonjour,

j'utilise le logiciel Scilab et dans le cadre d'un devoir je dois tracer la fonction porte (la fonction qui vaut 1 sur [-0.5,0.5] et 0 partout ailleurs).
J'ai donc créé ce programme pour la tracer sur [-10,10]:
________
function a = porte(x)
if ((x < -0.5) | (x > 0.5)) then
a = 0 + 0*x
else
a = 1 + 0*x
end
endfunction

dx = 0.1;
x = [-10 :dx :10];
plot(x,porte(x))
________
Mais je ne comprends pas : il me trace la fonction constante 1 sur [-10,10] !!
J'ai retourné le problème dans tous les sens mais je ne vois pas la faille, surtout que quand je lui demande des valeurs il renvoie les bonnes : le problème vient donc du plot de la fonction !
Quelqu'un peut-il m'éclairer?
Merci d'avance.
A voir également:

1 réponse

Le problème vient du fait que tu appliques applique ta fonction porte à une matrice (x = [-10 :dx :10];) alors qu'elle est définie pour s'appliquer à un réel. Pour résoudre ce problème tu as deux solutions :

- si tu gardes ta définition de la fonction porte alors il faut utiliser feval pour l'évaluation :

8<----8<----8<----8<----8<----
dx = 0.1;
x = [-10 :dx :10];
y=feval(x,porte);
plot(x,y)
8<----8<----8<----8<----8<----

-si tu ne veux pas utiliser feval alors il faut coder ta fonction porte pour qu'elle s'applique "naturellement" aux matrices en utilisant bool2s :


8<----8<----8<----8<----8<----
function a = porte2(x)
a=bool2s((x >= -0.5) & (x <= 0.5))
endfunction

plot(x,porte2(x))
8<----8<----8<----8<----8<----
5