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

MATLAB Discussion :

Changement de signe graphe


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Changement de signe graphe
    Bonjour, étant étudiante en sciences de la mer, je travaille avec matlab sur de la modélisation des populations.
    J'ai ici un problème technique je pense.
    Suite à mon code (programme générale et fonction), j'obtiens une courbe de la forme d'une parabole.
    Je dois l'obtenir convexe (ce qui est bon avec ce code) mon problème est que les valeurs en ordonnée sont négatives, or cela est censé représenter une distance, donc l'erreur commise entre la valeur observée et la valeur calculée.
    Le deuxième souci est que quand j'arrive à avoir les valeurs sur l'ordonnée positives, ma courbe est concave, ce qui ne correspond pas.

    Je ne sais pas si j'ai donné assez d'informations, merci d'avance

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    clear;
    clc;
    u=zeros(2,1);
    tmax=10; %Dur?e de simulation
    duree=0:0.1:tmax;
    global Cenv epsilon_a alpha beta gamma phi K k1
    Cenv=40;
    epsilon_a=0.8;
    phi=1;
    k1min=0;
    k1max=1;
    dk1=0.0001;
    alpha=0.1;beta=0.1;gamma=10;
    L0=40; % Condition initiale
    C0=0;
    K=1;
    d=[];
    erreur=0;
     
    k1moit=(k1min+k1max)/2;
     
     
    Lobs=[78 101 127 156 176];
     
    for k1=k1min:dk1:k1max;
        [t,u]=ode45(@contaminant,duree,[L0 C0]);
        L=u(:,1);C=u(:,2);
        if k1<=k1moit;
            for i=1:5
                erreur=erreur-((Lobs(1,i)-L((1+20*i),1))^2);
            end
        else
            for i=1:5
                erreur=erreur+(Lobs(1,i)-L((1+20*i),1))^2;
            end
        end
        d=[d;erreur];
    end
     
    m=min(d);
     
    abs=k1min:dk1:k1max;
    figure(4)
    plot(abs,d);
    et la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function du=contaminant(t,u);
    global Cenv epsilon_a alpha beta gamma phi K k1
    du=zeros(2,1);
    L=u(1);C=u(2);
    psi=K/(K+C);
    du(1)=1/(3*alpha)*(epsilon_a*gamma*phi*psi-alpha*beta/psi*L);
    du(2)=k1*Cenv/L-3*C/L*(1/(3*alpha)*(epsilon_a*gamma*phi*psi-alpha*beta/psi*L));

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je remarque que tu ne fixes la variable erreur à 0 qu'avant la boucle for et pas pendant. Ne connaissant pas le contexte, je ne peux pas te dire si c'est vraiment cela la cause.
    Une idée d'ammélioration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for k1=k1min:dk1:k1max;
        [t,u]=ode45(@contaminant,duree,[L0 C0]);
        L=u(:,1);C=u(:,2);
        erreur = 0;   % ????????
        if k1<=k1moit;
            erreur=erreur-sum((Lobs(1,1:5)'-L((1+20*(1:5)),1)).^2);
        else
            erreur=erreur+sum((Lobs(1,1:5)'-L((1+20*(1:5)),1)).^2);
        end
        d=[d;erreur];
    end
    Attention tu définis une variable nommée abs, qui est le nom d'une fonction de Matlab, chose à éviter.
    Je te conseille de regarder cette discussion, pour éviter d'utiliser les variables globales, chose à éviter aussi de préférence.

Discussions similaires

  1. [XL-2010] Déceler changement de signe sur courbe
    Par khallou2007 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/10/2011, 22h59
  2. Réponses: 1
    Dernier message: 09/03/2011, 15h05
  3. Changement de signe
    Par virulent dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2009, 10h26
  4. Réponses: 1
    Dernier message: 06/03/2007, 12h25
  5. [Débutant - Excel - Graph] Erreur sur changement nom de série
    Par seiryujay dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/12/2006, 10h12

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