[Matlab] Multiples solutions avec solve/vpasolve ?

Tout ce qui concerne notamment les outils de calcul numérique, de calcul formel ou de géométrie.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Maxinquaye

[Matlab] Multiples solutions avec solve/vpasolve ?

Message non lu par Maxinquaye »

Bonjour,

J'ai besoin de calculer la valeur nulle du déterminant d'une matrice 6x6 avec Matlab, dont l'équation dépend de deux variables. J'ai donc fait mon code en utilisant les variables et fonctions symboliques, j'ai tapé ma matrice à la main et demandé le calcul du déterminant via la fonction det :

Code : Tout sélectionner

A = det(M) == 0;
Celui ci me ressort une expression qui me semble cohérente dans la forme (je n'ai pas eu le courage de calculer le déterminant à la main ...), dépendant donc de mes variables k et V.

Cependant, lorsque je demande à Matlab d'utiliser les fonctions solve ou vpasolve pour calculer les solutions de A, celui-ci ne me ressort qu'une seule solution pour le couple (k,V) alors que je suis censé en avoir plusieurs (du genre une infinité ...).

Je voulais donc savoir si j'utilisais mal la fonction vpasolve ou solve (les deux fonctions me donne les mêmes solutions), ou si il existait une fonction qui me donnerait plusieurs solutions et si il était possible de demander un nombre de solution précis (par exemple prendre les 200 premières solutions).

Voici mon code et la solution :

Code : Tout sélectionner

S = vpasolve(A,k,V);


S = 

    k: [1x1 sym]
    V: [1x1 sym]

>> S.k
 
ans =
 
32.201772109820644873788838300434
 
>> S.V
 
ans =
 
1239.0
Merci d'avance aux personnes qui me répondront !
nirosis
Modérateur honoraire
Modérateur honoraire
Messages : 1803
Inscription : samedi 28 mai 2005, 14:48
Localisation : Orsay, France

Re: [Matlab] Multiples solutions avec solve/vpasolve ?

Message non lu par nirosis »

Tu peux au moins essayer différents "initial guess" dans vpasolve et voir si tu trouves toujours les mêmes solutions.

Code : Tout sélectionner

S = vpasolve(eqn,var,init_guess)
Sinon, tu obtiens normalement un polynôme des variables k et V (de degré 6 au max non?)
Tu peux fixer une variable et résoudre en en fonction de l'autre pour voir si tu trouves d'autres solutions (avec roots() ou solve).

Autre solution, tu peux aussi passer en totalement numérique, une fois que tu as l'équation de ta fonction à résoudre : tu peux utiliser des fonctions type fsolve() (idem varier le ini guess te permettra théoriquement de trouver différentes solutions si elles existent).

peut-être que la forme explicite des solutions est trop compliquée à établir ou à écrire, et que c'est pour ça que matlab ne te la donne pas. Essaie avec le même type de problème pour une matrice 2x2 ou 3x3 au max. Dans ce cas, as-tu des solutions explicites et matlab te montre-t-il qu'il y en a une infinité ?
Maxinquaye

Re: [Matlab] Multiples solutions avec solve/vpasolve ?

Message non lu par Maxinquaye »

Ton idée semble marcher, merci beaucoup !

J'ai fixé k, et j'ai défini V comme une variable, et j'ai fais la recherche des 0 en incrémentant la valeur dans le champ "init_guess" pour plusieurs valeurs de k.

Quand une solution est présente aux alentours de la valeur donnée à V, vpasolve me retourne la solution.

Je crois que j'ai de plus compris pourquoi je n'obtenais qu'une solution, vpasolve retourne toutes les solutions d'un polynôme, mais uniquement la première solution dans le cas de l'application à un autre type d'équation. Je n'avais pas vu cette mention dans la doc de la fonction avant de venir poster ici.

Or, je ne pense pas que mon équation obtenue par calcul du déterminant soit un polynôme puisqu'elle comporte des exponentielles en fonction de k et de V. Pas la peine de tester avec des matrices plus petites, il me semble que ça soit la cause de mon problème.

Quoi qu'il en soit, ton idée semble marcher très bien encore merci :)
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: [Matlab] Multiples solutions avec solve/vpasolve ?

Message non lu par rebouxo »

Ben, je pense que si, c'est une bonne idée de tester du $2 \times 2$ ou $3 \times 3$, parce que cela permet de tester ton programme et de le comparer à des calculs à la main.

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.
nirosis
Modérateur honoraire
Modérateur honoraire
Messages : 1803
Inscription : samedi 28 mai 2005, 14:48
Localisation : Orsay, France

Re: [Matlab] Multiples solutions avec solve/vpasolve ?

Message non lu par nirosis »

tant mieux si tu as avancé sur ton problème !
Traiter le cas 2x2 ou 3x3 reste intéressant pour la compréhension comme le dit Olivier.
c'est d'ailleurs une démarche à garder en mémoire (si tu es en doctorat, ça peut servir) : toujours essayer de comprendre un cas simplifié avant de traiter le problème réel souvent bien plus compliqué (et pour lequel des méthodes numériques sont nécessaires).
Mine de rien, faire des calculs à la main avant de lancer des grosses routines Matlab hyper poussées est formateur et peut éviter quelques déconvenues :-)
Bonne continuation.
Maxinquaye

Re: [Matlab] Multiples solutions avec solve/vpasolve ?

Message non lu par Maxinquaye »

J'ai suivi vos conseils et j'ai essayé avec une matrice 2x2 pour un cas avec et sans exponentielle. Le déterminant calculé est bien le même que celui que j'obtiens à la main dans les deux cas, mais le nombre de solution est différents.

Dans le cas avec exponentielles, quelque soit la forme des termes qui composent la matrice, je n'obtiens qu'une solution, alors que j'en obtiens un nombre égale au degré du polynôme qui constitue le déterminant de la matrice lorsque j'enlève les exponentielle.

Il semble donc que ça soit belle et bien le problème, le déterminant de ma matrice n'est pas un polynôme et la fonction me retourne donc uniquement la première solution.

Quoiqu'il en soit la méthode proposée par Nirosis fonctionne très bien, j'ai réussi a obtenir les graphiques que je voulais. Si d'autres personnes ont le même problème que moi il me semble donc que c'est une des solutions possibles à étudier.

Merci encore pour vos idées !