Bonjour,
je suis doctorant 2è année et j'ai un programme matlab où je dois trouver les zéros d'une fonction G composée de fonctions de Bessel (il s'agit en fait de calculer la projection du champ électrique sur un mode donné d'un guide d'onde). Pour x négatif, cette fonction est donc complexe, idem lorsque x dépasse une certaine valeur.
Pour trouver les zéros (et pas un seul), je fais fzero(g,x) sur une série de x balayant l'axe des abscisses. Ceci est du coup très long, car il peut y avoir 5-6 racines, parfois dures à trouver avec ce scan (par exemple lorsque la pente de la portion de droite qui coupe l'axe des abscisses est très forte), j'affine donc le scan lorsqu'il ne trouve pas le nombre de solutions requis.
Malheureusement avec ce scan automatique (dont je ne peux changer les bornes inférieures et supérieures en x sous peine de perdre des solutions), il me sort ce message à chaque cycle de la boucle (car je dois trouver les zéros de cette fonction pour un millier de valeurs d'un paramètre dont dépend la fonction, donc 1000 fonctions différentes au final, toutes avec des racines différentes) :
Avec le chiffre de "function value" qui change évidemment suivant le cycle.Exiting fzero: aborting search for an interval containing a sign change
because complex function value encountered during search.
(Function value at -28000 is -0.00057514-8.2177e-023i.)
Check function or try again with a different starting value.
J'ai cherché la doc matlab pour essayer de désactiver ce message, j'ai tenté "OutPut=off" ou "FunValCheck=off" mais rien à faire. Or désactiver ce message me ferait gagner un temps précieux, vu qu'il met 20 minutes en gros pour calculer l'ensemble des racines de ces 1000 fonctions, et affiche à chaque coup ce message, plusieurs fois par cycle vu qu'il y a plusieurs racines. Pourriez-vous m'indiquer comment le désactiver ? Sachant que je ne cherche pas à modifier mon algorithme pour qu'il ne tombe pas sur des valeurs complexes, mais juste à lui dire de ne plus afficher ce message.
Ou bien avez-vous un algorithme tout prêt étant plus efficace que fzero (qui est très limité puisqu'il faut lui donner soit un x proche du zero, soit un intervalle avec les bornes de signes opposés, alors que mon but est de juste lui donner la fonction et qu'il trouve les racines sur un grand intervalle quelconque non-infini bien sûr) ?
Merci d'avance.
Partager