Bonjour,
Je dois résoudre à l'aide de la méthode d'Euler l'équation d'un oscillateur harmonique non amorti, i.e. .
Pour appliquer la méthode d'Euler, on la décompose en 2 équations différentielles du premier ordre,
Mais je dois écrire une fonction
où N est le nombre d'équations différentielles à intégrer, t est le temps, "fonctions" un tableau contenant les fonctions à intégrer, dt le pas, et f une fonction qui calcule les dérivées pour l'algorithme.Code:void euler(int N, float t, float fonctions[], float dt, void f(int N, float t, float fonctions[],float derivees[]))
J'ai réalisé ce qui suit :
Mais je vois mal quel est l'intérêt de la fonction f une fois qu'on a écrit une boucle telle que la mienne (est-elle correcte d'ailleurs ? Est-ce qu'il manque des choses pour que mon programme fonctionne ?), et je ne sais pas trop quoi mettre dans la procédure associée à f.Code:#include <iostream> #include <string> #include <stdio.h> #include <fstream> #include <math.h> #include <cstdlib> using namespace std; void euler(float t, float x[], float u[], float dt, void f(int N, float t, float fonctions[], float derivees[])) { cin >> "Entrer la valeur du pas " >> dt; cin >> "Entrer la valeur de x(0) " >> x[0]; cin >> "Entrer la valeur de x_point(0) " >> u[0]; // OU : x[0]=0; u[0]=v0; for (t=0;t<100;t=t+dt) { // Ecriture des résultats dans un fichier : ofstream ressort("ressort.res"); ressort << t << " " << x[t] << " " << u[t] << endl; TP4.close(); // On écrit dans le fichier avant de procéder aux calculs pour ne pas omettre les valeurs initiales de i, x[i] et u[i]. // SCHEMA D'EULER : u[t+1]=-w*w*x[t]*dt+u[t]; x[t+1]= x[t]+dt*u; // Désignation de la i+1-ème case du tableau } //Calcul des dérivées avec, comme le veut l'énoncé, la fonction f: double f(int N, float t, float fonctions[N], float derivees[N]){ derivees[N]=-w*w*x[i]} // x_point_point = -w²*x. } int main() { cout << Euler(n,t,fonctions[],dt,f(N,t, fonctions, derivees) << endl; // A remplir plus tard. return 0; }
En espérant obtenir de l'aide, et merci d'avance.
-----