web-dev-qa-db-fra.com

Algorithme pour calculer les trajectoires du champ vectoriel

J'ai un champ de vecteur bidimensionnel, c'est-à-dire pour chaque point (x, y) J'ai un vecteur (u, v), alors que u et v sont des fonctions de x et y.

Ce champ de vecteur définit canoniquement un ensemble de trajectoires, c'est-à-dire un ensemble de chemins qu'une particule prendrait si elle suit le long du champ Vector. Dans l'image suivante, le champ vectoriel est représenté en rouge et il existe quatre trajectoires partiellement visibles, représentées en rouge foncé:

trajectories

J'ai besoin d'un algorithme qui calcule efficacement certaines trajectoires pour un champ de vecteur donné. Les trajectoires doivent satisfaire une sorte de densité minimale dans l'avion (pour chaque point de l'avion, nous devons avoir une trajectoire "à proximité") ou une autre condition pour obtenir un ensemble raisonnable de trajectoires.

Je n'ai pu trouver rien d'utile sur Google à ce sujet, et Stackexchange ne semble pas gérer le sujet non plus.

Avant de commencer à concevoir un tel algorithme par moi-même: Y a-t-il des algorithmes connus pour ce problème? Quel est leur nom, pour lequel les mots-clés dois-je rechercher?

3
cheesus

De toute évidence, vous avez affaire à un ensemble d'équations différentielles:

dx/dt = u (x, y)
dy/dt = v (x, y)

Il y a beaucoup d'algorithmes, qui peuvent réellement intégrer de telles équations, mais cela dépendra de l'U et V (sont-ils linéaires ou non, etc.). Pouvez-vous fournir une autre information à ce sujet?

En ce qui concerne votre exigence, est-il correctement compris que vous souhaitez créer plusieurs trajectoires les unes des autres? Ou voulez-vous dire autre chose?

ÉDITER:

J'ai dû être un peu confus quand j'ai écrit mon poste d'origine. Évidemment, les équations différentielles sont linéaires et la forme réelle de U et V sont moins importantes.

En fait, l'intégration de ces équations est assez simple. Si la précision est moins importante, vous pouvez faire une simple intégration d'Euler - sinon vous voudrez peut-être examiner les méthodes de Runge-Kutta (par exemple, RK4 - quatrième ordre Runge-Kutta).

Les deux sont bien connus, donc je ne vais pas entrer dans les détails ici. Faites une recherche Google ou chèque wiki:

méthode Euler
[.____] méthodes de runge-kutta

Atteindre une densité est un peu plus difficile, je suppose. Lorsque vos équations différentielles sont linéaires, les deux positions initiales se traduiront par des trajectoires similaires. De toute évidence, vous pouvez obtenir les trajectoires similaires que la précision des ordinateurs le permet. Si vous voulez plutôt que les deux trajectoires se terminent dans des points similaires, vous pouvez simplement définir le point de fin et faire l'intégration inversée.

4
nilu