-1

Résoudre l'équation différentielle. dy/dx = xz + 1, dz/dx = -xy pour x = 0,3 étant donné que y = 0 et z = 1 lorsque x = 0 en utilisant la méthode runge kutta d'ordre quatre. Je suis incapable de démarrer ce problème. S'il vous plaît aider. J'ai besoin d'une solution mathématique en utilisant l'analyse numérique et non la programmation.Méthode numérique runge kutta

+0

Je vote pour clore cette question hors-sujet parce que ce n'est pas une question de programmation. –

+0

Pourquoi ça? L'analyse numérique est un chapitre de notre cours. Cela a été demandé dans notre examen administratif le plus prestigieux quelques années en arrière – user6950970

+0

De votre édition à votre question: "J'ai besoin d'une solution mathématique pas la programmation." –

Répondre

1

Du texte classique Recettes numériques http://www.aip.de/groups/soe/local/numres/bookcpdf/c16-1.pdf:

quatrième ordre méthode Runge-Kutta. À chaque étape, la dérivée est évaluée quatre fois: une fois au point initial, deux fois aux points milieu de l'essai et une fois à un point final de l'essai. A partir de ces dérivées, la valeur finale de la fonction est calculée.

k1 = hf(xn, yn) 
k2 = hf(xn + h/2 , yn + k1/2) 
k3 = hf(xn + h/2 , yn + k2/2) 
k4 = hf(xn + h, yn + k3) 
yn+1 = yn + k1/6 + k2/3 + k3/3 + k4/6 + O(h^5) 

Exemple en C:

#include “nrutil.h" 
float **y,*xx; 
void rkdumb(float vstart[], int nvar, float x1, float x2, int nstep, void (*derivs)(float, float [], float [])) 
{ 
    void rk4(float y[], float dydx[], int n, float x, float h, float yout[], void (*derivs)(float, float [], float [])); 
    int i,k; 
    float x,h; 
    float *v,*vout,*dv; 
    v=vector(1,nvar); 
    vout=vector(1,nvar); 
    dv=vector(1,nvar); 
    for (i=1;i<=nvar;i++) { 
     v[i]=vstart[i]; 
     y[i][1]=v[i]; 
    } 
    xx[1]=x1; 
    x=x1; 
    h=(x2-x1)/nstep; 
    for (k=1;k<=nstep;k++) { 
     (*derivs)(x,v,dv); 
     rk4(v,dv,nvar,x,h,vout,derivs); 
     if ((float)(x+h) == x) 
      nrerror("Step size too small in routine rkdumb”); 
     x += h; 
     xx[k+1]=x; 
     for (i=1;i<=nvar;i++) { 
      v[i]=vout[i]; y[i][k+1]=v[i]; 
     } 
    } 
    free_vector(dv,1,nvar); 
    free_vector(vout,1,nvar); 
    free_vector(v,1,nvar); 
} 

Cela devrait vous aider à démarrer. J'espère que cela aide.

+0

J'ai besoin d'une solution mathématique et non d'une programmation informatique – user6950970

+0

Consultez le lien vers le chapitre Recettes numériques sur Runge Kutta que j'ai cité. À mon humble avis, il va très bien sur la solution mathématique. –

+0

je sais comment résoudre deux variables mais le problème est ceci est 3 variable – user6950970