Partage
  • Partager sur Facebook
  • Partager sur Twitter

Euler explicite : Matlab

    31 mars 2020 à 10:36:48

    bonjour 

    Dans le cadre de mon projet de première année en ingénieur civil, il m'est demandé d'utiliser la méthode d'Euler explicite pour résoudre des équations différentielle. J'ai reussi à faire odefun avec les différentes équations mais je ne comprends pas comment utiliser Euler pour les résoudre. 



    voici odefun

    function [dVar] = odefunbon(t,Var)
    T = Var(1); %la température moyenne de la terre
    Ca = Var(2); %la quantité de carbone contenue dans l’atmosphère
    Cs = Var(3); %la quantité de carbone contenue dans le sol et la végétation
    Wa = Var(4); %la quantité de vapeur d’eau contenue dans l’atmosphère
    Ws = Var(5);%la quantité d’eau contenue dans le sol
    %GW
    xw=[1.00 9.50 18.00];
    yw=[0.00 1.00 0.00];
    ordrew=length(xw)-1;
    pw = polyfit(xw,yw,ordrew);
    GW(Ws)= polyval(pw,Ws);
    %GT
    xt=[5 18 25.5 33 40];
    yt=[0 0.8 1 0.75 0];
    ordret=length(xt)-1;
    pt = polyfit(xt,yt,ordret);
    GT(T)=polyval(pt,T);
    %BILAN DE CARBONE----------------------------------------------------------
    m = 0.08; % l’inverse du temps de vie moyen de la végétation
    e(t)=0; %émissions de CO2 anthropiques
    Pmax = 200;
    GC(Cs)=4*Cs*Ca*(1/(Ca+Cs)^2);
    P=Pmax*GT(T)*GC(Cs)*GW(Ws); %productivité
    dCs=P-m*Cs;
    dCa=-P+m*Cs+e(t);
    %BILAN DE L'ENERGIE--------------------------------------------------------
    S = 340;%énergie apportée par le soleil
    k = 16.9; %la capacité thermique de la planète
    kw=2257; %la chaleur latente d’évaporation de l’eau
    Yc = 1-(0.4*Ca)/(750+Ca);
    Yw = (1.02258+Wa^0.409)/(1+2.258*Wa^0.409);
    Y = 5.67e-8 * Yc * Yw; %coefficient de proportionnalité
    Wasat = exp((17.638*T)/(T+243.4)); %quantité de saturation en eau
    q = Wa/Wasat;
    %QUANTITE DE NUAGES
    if q>=0 && q<=0.5
        n = 0;
    end
    if q>0.5 && q<1
        n = (2*q)-1;
    end
    if q>=1
        n = 1;
    end
    %QUANTITE DE TERRE RECOUVERTE PAR DE LA NEIGE
    if T>15
        Fsn=0;
    end
    if T>=-15 && T<=15
        Fsn = 1-(T+15)/30;
    end
    if T<-15
        Fsn=1;
    end
    Vg=1-Cs/(600+Cs); %végétation p/r au sol
    aA=0.1; %albedo de l’atmosphère supérieure sans nuage
    aSurf=( (0.4*Vg + (1-Vg) /10)*(1-Fsn)) + 0.7*Fsn; %albedo de surface
    a = aA + 0.4*n + aSurf*(0.81-0.56*n); %albedo
    %BILAN DE L'EAU------------------------------------------------------------
    v=0.192;
    kveg=0.7; ksol=7;
    Eveg=P*kveg; Esol= (Wasat-Wa)*(Ws/ksol);
    E=Vg*Esol+Eveg*(1-Vg); %évaporation et l’évapotranspiration des végétaux
    H=v*n*Wa; %pluie tombée en un an
    dWa=-H+E;
    dWs=H-E;
    %--------------------------------------------------------------------------
    dT = (1/k)*(S*(1-a)-Y*T^4-kw*dWs);
    dVar(1) = dT;
    dVar(2) = dCa;
    dVar(3) = dCs;
    dVar(4) = dWa;
    dVar(5) = dWs;

    voici mon brouillon de euler.

    function [G,U] = EulerExplicite(Inter_t,y0,h)

    t1= Inter_t(1);
    t2= Inter_t(2);
    h=0.5; % ici j'ai donné une valeur a h mais il nous est demander de le definir de manière empirique
    t0=0;
    y(i) = x(t1);
    y(i+1)=x(t2);
    while i=1:5; %nb de derivés
        y0 = x0(t0);
        while F = t1 : h : t2;
            (dVar)=odefun (t0:y0);
            y(i+1) = y(i) + h*dVar(i);
            t(i+1) = t(i)+ h;
            G(F:i) = y(i+1);
            U(F) = t(i+1);
        end
    end

    si quelqu'un s'y connais bien en mathlab merci d'avance

    -
    Edité par AxelMillard 31 mars 2020 à 10:39:09

    • Partager sur Facebook
    • Partager sur Twitter

    Euler explicite : Matlab

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown