Aide Scilab : plot de la fonction porte

cuber_71 Messages postés 1 Statut Membre -  
 philippe -
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.

1 réponse

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