Solution initiale complexe

Résolu/Fermé
dodi - 23 févr. 2009 à 03:22
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 - 23 févr. 2009 à 14:21
Bonjour,
au cours de la résolution d'une équation de la forme f(z) =0 par la méthode itérative de Newton- Raphson sous matlab et en chisissant la solution initiale Z0=a0+i*b0 comme complexe, sur matlab s'affiche le message suivant:
"Error using ==> fzero
Function value at starting guess must be finite and real"
comment je peux faire pour surmenetr cet obstacle et merci

3 réponses

Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377
23 févr. 2009 à 12:04
Bonjour mon ami !

Je ne pense pas qu'il y ait de solution miracle avec la fonction fzero de Matlab mais peut-être me trompé-je.
Je te suggère d'utiliser la fonction fslove ; tape help fsolve ou doc fsolve pour savoir comment utiliser cette fonction.
À titre d'exemple, imaginons que tu veuilles résoudre l'équation f(z)=0f(z)=z²-2i. Certes, l'exemple est relativement stupide puisque les zéros de cette fonction sont tout simplement les racines du polynôme P=X²-2i, c'est-à-dire ±(1+i), mais il ne s'agit que d'un exemple. Supposons que ton initial guess pour la méthode de Newton-Raphson est z0=(1+i)/2, alors ces lignes te donneront la solution 1+i de l'équation f(z)=0 :
f=@(z)(z.^2-2i);
[zsol,fzsol,exit_value]=fsolve(f,1/2+1/2i);
Je te souhaite une bien bonne journée !
0
Bonjour, et merci d'avoir accorder de l'intret à ma question
je ssais que la fonction fsolve peut feire l'affaire mais le problème est toujours présent pour moi parce que avec fzero on peut obtenir f(zk) avec les zk sont les valeurs de z trouvées par itération et moi j'ai une petite conditin sur les f(zk). cette condition est la suivante RES(f(zk)) doit etre infér de par exemple 10^( -5)
comment je peux le faire donc avec fsolve qui n'affiche pas les f(zk)? et merci encore une fois
0
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377
23 févr. 2009 à 14:21
Je te suggérais dans le message 1 de consulter l'aide Matlab concernant la fonction fsolve en tapant help fsolve ou doc fsolve. Avec une fonction de ce genre (que j'ai construite avec l'aide Matlab) :
function [z fvalz histit] = find0problem(z0)

    histit = [];
    options = optimset('OutputFcn', @outputvalues,'Display','iter');
    [z fvalz] = fsolve(@f,z0,options);
        
    function stop = outputvalues(x,optimValues,state);
        stop = false;
        histit = [histit; optimValues];
    end
    
    function fz = f(z)
      fz = z^2-2i;
    end

end
Tu obtiens toutes les informations nécessaires concernant chaque itération de la fonction fsolve dans la structure histit. Il suffit alors d'appeler cette fonction pour la résolution de ton problème :
[z fvalz histit]=find0problem(1);
Et les carottes sont cuites...
Je te fais plein de poutous mon ami !
0