Comment résoudre un système d'ordinaire de synchronisation équation avec le temps des paramètres en fonction de
Comment résoudre un système d'équation différentielle ordinaire ..un problème de valeur initiale ....avec les paramètres en fonction du temps ou de la variable indépendante?
dire que l'équation que j'ai
Dy(1)/dt=a(t)*y(1)+b(t)*y(2);
Dy(2)/dt=-a(t)*y(3)+b(t)*y(1);
Dy(3)/dt=a(t)*y(2);
où a(t) est un vecteur et b(t) =c*(t); où la valeur de a et de b sont en train de changer avec le temps, pas dans la monotonie, et chaque pas de temps.
J'ai essayé de résoudre ce à l'aide de ce post....mais quand j'ai appliqué le même principe ...j'ai eu le message d'erreur
"Erreur à l'aide de griddedInterpolant Le point de coordonnées ne sont pas
séquencé strictement monotone de l'ordre."
Quelqu'un peut-il m'aider?
Je suppose que vous êtes en utilisant
ode45
? pouvez-vous montrer la fonction MATLAB vous intégrer, et comment vous appelez l'intégrateur?OriginalL'auteur prashanta_himalay | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Merci de lire jusqu'à la fin pour voir si la première ou deuxième partie de la réponse est pertinente pour vous:
Partie 1:
D'abord créer un
.m
fichier avec une fonction qui décrivent votre calcul et les fonctions qui vont donnera
etb
. Par exemple: créer un fichier appeléfun_name.m
qui contiendra le code suivant:Puis d'utiliser un second fichier avec le code suivant:
Bien sûr, pour le
fun_name.m
cas j'ai écrit, vous ne devez pas utiliser les sous-fonctions poura(t)
etb(t)
, vous pouvez simplement utiliser de manière explicite de la forme fonctionnelle dansDy
si c'est possible (commecos(t)
etc).Partie 2: Si
a(t)
,b(t)
sont juste des vecteurs de nombres que vous avez qui ne peut pas être exprimé comme une fonction det
(comme dans la partie 1), puis vous aurez besoin d'avoir aussi un temps de vecteur pour laquelle chacun d'entre eux arrive, cela peut être bien sûr en même temps que vous allez utiliser pour l'ODE, mais il n'a pas besoin d'être, aussi longtemps qu'une interpolation de travail. Je vais traiter le cas général, quand ils ont différents intervalles de temps ou de résolutions. Ensuite, vous pouvez faire quelque chose de la suite, de créer de lafun_name.m
fichier:Pour l'utiliser, voir le script suivant:
c'est un autre problème, je voudrais utiliser les conditions dans le code de l'ODE lui-même, semblable à ce qui est discuté ici: stackoverflow.com/questions/14173377/...
Merci à Vous tous résolus.
la réponse vous-même liée à une mauvaise. L'introduction de telles conditions, dans l'ODE fonction est susceptible de rendre le système rigide, et entraîner éventuellement complètement des résultats incorrects. Au minimum
ode15s
doit être utilisé, mais même cela peut échouer dans certains cas. La bonne façon de gérer de tels cas est via un événement de détection. Voir mes réponses à 1, 2 et 3. Pour info, je suis ici à partir de ce post récent.Eh bien, il n'est pas clair si vous voulez dire la partie 1 ou partie 2 de la réponse. Aussi, si vous avez raison, merci de répondre à cette question dans la façon dont vous voyez l'ajustement. On peut comparer un cas simple et voir si ma réponse est satisfaisante. Je serai heureux de voir et d'apprendre d'autres façons
OriginalL'auteur bla