IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scilab Discussion :

Débutant souhaitant tracer une fonction


Sujet :

Scilab

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 70
    Points
    70
    Par défaut Débutant souhaitant tracer une fonction
    Bonjour le forum,

    Je vous écrit car je me mets tranquillement à Scilab et les débuts sont durs!!!! Ben oui, le peu de Matlab que j'ai pu faire est totalement oublié
    Cependant, j'espère trouver de l'aide sur le forum, bien qu'il s'agisse de Scilab et non pas de MatLab.

    Mon problème est le suivant: dans le script suivant, je souhaite tracer la fonction Dii, fonction qui dépend de la variable x. Lorsque je trace cette fonction, Scilab me trace une "infinité" de courbes!!! Je ne vois pas trop pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    x=linspace(700,1200,1000);
    
    cs=input("boron concentration:");
    xbasc();
    
    q=1.60217733*10^-19;
    k=1.380658*10^-23;
    kbis=k/q;
    Ea=-3.46;
    difo=0.76;
    
    gap=1.17-(4.73*(10^-4)*(x^2).*((636+x)^-1));
    
    A=-gap/(2*kbis);
    
    n=sqrt(1.5*10^33)*(x^(1.5)).*exp(A.*(x^-1));
    
    B=cs/n;
    
    Di=0.037*exp((Ea/kbis)*((273+x)^-1));
    D0=difo*exp((Ea/kbis)*((273+x)^-1));
    Dii=B*(difo*exp((Ea/kbis)*(273+x)^-1));
    //d2=(Dii)+(D0);
    
    plot2d1([x],[Dii])  //style=[3])//,logflag="nl")
    De même, à la dernière ligne (la commande plot), il m'est impossible de définir quoique se soit, par exemple la couleur du plot: une erreur 999 apparait, suite à un mauvais dimensionnement pour l'arguement d'entrée n°3 ??...

    Enfin, je souhaite aussi tracer d2, soit une addition de 2 exponentielles, chose que je n'arrive pas à réaliser: un message d'erreur 8 apparait, addition incohérente.

    Auriez vous un peu de temps à consacrer au débutant que je suis, SVP ?

    merci d'avance,

    Johann

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 70
    Points
    70
    Par défaut Un début de réponse
    Re bonjour le forum,

    si dans le code je remplace l'expression de Dii par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dii=cs*(n^-1).*(difo*exp((Ea/kbis)*(273+x)^-1));
    Donc, si j'explicite n, comme par magie, je n'ai plus qu'une seule courbe de tracer...

    Ceci m'arrange, mais je reste dans l'incompréhension..

    merci,
    johann

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 70
    Points
    70
    Par défaut
    Re,

    Décidément, je me trouve bien seul...
    Enfin, j'arrive tout de même à avancer!!
    Et bien, tout d'abord, il suffit de faire un peu de ménage dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    x=linspace(700,1200,1000);
    cs1=input("boron concentration:");
    xbasc();
     
    Ea=-3.46;q=1.60217733*10^-19;k=1.380658*10^-23;
    kbis=k/q;
     
    gap=1.17-(4.73*(10^-4)*(x^2).*((636+x)^-1));
     
    A=-gap/(2*kbis);
    ni=(7.6354*10^15)*(x^(1.5)).*exp(A.*(x^-1));
     
    Di=0.037*exp((Ea/kbis)*((273+x)^-1));
    D0=0.76*exp((Ea/kbis)*((273+x)^-1));
     
    Dii=cs1*(ni^-1).*D0;
    d2=(Dii)+(Di);
     
    plot2d1([x],[d2],style=[2],logflag="nl")
    Dans l'expression de Dii, j'ai donc injecté directement D0, précédemment défini, plutôt que de réécrire toute l'équation, et j'ai aussi injecté cs1 et ni, plutôt que de passer par une variable.

    Le graph fonctionne bien, je retombe sur mes pieds, et j'arrive même à faire l'addition "d2"!!!

    Bon, bien que cela fonctionne maintenant, j'aimerais bien comprendre pourquoi cela ne fonctionnait pas avant. Mon code était-il si brouillon?

    Merci,
    johann

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Pour essayer de comprendre il faudrait que tu étudies les tailles de tes variables dans tes 2 codes.

    A mon avis la différence se situe surtout là :

    1er code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dii=B*(difo*exp((Ea/kbis)*(273+x)^-1));
    2ème code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dii=cs*(n^-1).*(difo*exp((Ea/kbis)*(273+x)^-1));
    * et .* ce n'est pas la même chose.

    Ceci étant vu très rapidement et non testé, c'est plus une intuition
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    x=linspace(700,1200,1000);
    cs1=input("boron concentration:");
    xbasc();
    Ea=-3.46;
    q=1.60217733*1e-19;
    k=1.380658*1e-23;
    kbis=k/q;
    gap=1.17-(4.73*(1e-4)*(x^2).*((636+x)^(-1)));
     
    A=-gap/(2*kbis);
    ni=(7.6354*10^15)*(x^(1.5)).*exp(A.*(x^(-1)));
     
    Di=0.037*exp((Ea/kbis)*(273+x)^(-1));
    D0=0.76*exp((Ea/kbis)*(273+x)^(-1));
     
    Dii=cs1*(ni^(-1)).*D0;
    d2=(Dii)+(Di);
     
    plot2d1([x],[d2],style=[2],logflag="nl")

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Points : 70
    Points
    70
    Par défaut
    bonjour Caro-Line et Phryte,

    Et merci de vos réponses.
    Merci Caro-Line pour la piste des tailles de variables, je vais essayer de regarder de plus près... Si j'arrive à trouver comment on fait!!

    En ce qui concerne le * et .*, je sais bien que ce n'est pas la même chose. Sachant que je veut le calculer pour chaque x, il faut bien que j'utilise le second, si j'ai bien tout compris En plus, si j'utilise le premier, il y a une erreur qui apparait de multiplication incohérente... donc je n'ai presque pas le choix

    Phryte, dans ton code, rien ne change à part l'écriture des puissances de 10. Est-ce si important?

    Merci de votre aide,

    Johann

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    rien ne change à part l'écriture des puissances de 10. Est-ce si important?
    Non, mais avec ma version 4.1.2 cela fonctionne comme je l'ai fait et il y a une seule courbe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant]Comment exécuter une fonction tous les jours
    Par pseudomh dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/06/2006, 16h10
  2. [C#][Débutant] Comment faire une fonction FindWindow ?
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/04/2006, 13h19
  3. [Débutant] Déclarer, utiliser une fonction
    Par Hokagge dans le forum Langage
    Réponses: 7
    Dernier message: 14/03/2006, 08h03
  4. [LG] Tracer une fonction f(x)
    Par lishou dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2006, 16h20
  5. lire une image et tracer une fonction
    Par Battosaiii dans le forum C
    Réponses: 4
    Dernier message: 23/11/2005, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo