fonctions & matlab
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 33

fonctions & matlab



  1. #1
    invite247cc089

    Question fonctions & matlab


    ------

    salut

    est c que vous pouvez m'aider svp sur un exercice sur matlab?
    j'ai trouvé cet exercice dans un site,il permet de trouver les sollutions de la fonction: f(x)=exp(x)-2.cos(x) d'après la méthode newton-raphson!
    ce petit programme detecte une erreur;
    Error in ==> etude_fct at 13
    x(1)=input('Donner la valeur initiale x(1): \n');
    pouvez vous m'aider svp!
    est ce que vous pouvez me dire à quoi sert la commande figure dans matlab ?
    et c quoi la difference entre:clf et clc?


    merci pour votre aide!

    ----------------------------------------------


    Code:
    clf;
    x=-1:0.1:1;
    f=exp(x)-2*cos(x);
    figure(1);
    plot(x,f); grid on;
    title('Fonction : f(x)=exp(x)-2.cos(x)');
    clear all;
    clc;
    x(1)=input('Donner la valeur initiale x(1): \n');
    e=1e-10;
    n=5000;
    for i=2:n
    f=exp(x(i-1))-2*cos(x(i-1));
    diff=exp(x(i-1))+2*sin(x(i-1));
    x(i)=x(i-1)-f/diff;
    if abs(x(i)-x(i-1))<=e
    xp=x(i);
    fprintf('xp=%f\n',x(i));
    break;
    end
    end
    j=1:i;
    figure(2);
    plot(j,x(j),'*r',j,x(j));
    xlabel('Nombre d''itérations');
    title('Convergence de la solution : Méth. de Newt.-Raph.');
    disp('Les valeurs successives de x(i) sont :');
    x'

    -----
    Dernière modification par Flyingsquirrel ; 07/03/2010 à 13h18. Motif: Balises [code]

  2. #2
    invitea6f35777

    Re : fonctions & matlab

    Salut

    J'ai testé et pour moi le programme marche parfaitement, peut-être as tu une version plus ancienne de Matlab dans laquelle la fonction input n'existait pas ? enfin en tout cas j'aurai du mal à te dire d'où vient ton erreur étant donné que je n'arrive pas à l'avoir. De toute façon ce n'est pas grave tu peux remplacer cette ligne par
    x(1)=a
    avec a la valeur numérique que tu veux, par exemple
    x(1)=0
    c'est juste que tu devras changer la valeurs dans le programme à la main à chaque fois que tu voudras tester une valeur différente.

    la commande figure sert à selectionner une fenetre de figure dans laquelle on va tracer, par exemple
    figure(1)
    clf
    plot ...
    figure(2)
    plot ...
    efface la fenetre de figure 1 et trace quelque chose dedans
    puis trace autre chose dans la deuxième fenetre figure. Il doit y avoir un nombre de figure limité mais je ne suis pas sûr et je ne sais pas combien.

    Sinon clf (clear figure) efface la figure de la fenetre de figure selectionnee (soit par la commande figure soit par ce que tu as cliqué sur une des fenetres)
    et clc (clear command) effece la console (ce qui n'a rien à voir). Ainsi le programme efface le paquet d'instruction que tu avais tapé avant de lancer le programme avant d'afficher son résultat. Cela sert essentiellement à ce que celui qui utilise le programme remarque que le programme écrit quelque chose sur la console (ce qui se voit mieux quand elle est vidée avant).

  3. #3
    invite247cc089

    Smile Re : fonctions & matlab

    Bonsoir
    je vous remercie beaucoup "KerLannais"!

    maintenant je sais la difference entre clf et clc!
    est c k vous pouvez me donner un lien pour télécharger la nouvelle version de matlab,si c possible?
    j'ai pas bien compris pour le (1)=a .
    est c k vous connaissz c quoi la convergence d'une fonction?

    merci d'avance

  4. #4
    invitea6f35777

    Re : fonctions & matlab

    ce que je voulais dire par x(1)=a c'est que si tu tape le code

    Code:
    clf;
    x=-1:0.1:1;
    f=exp(x)-2*cos(x);
    figure(1);
    plot(x,f); grid on;
    title('Fonction : f(x)=exp(x)-2.cos(x)');
    clear all;
    clc;
    x(1)=0;
    e=1e-10;
    n=5000;
    for i=2:n
    f=exp(x(i-1))-2*cos(x(i-1));
    diff=exp(x(i-1))+2*sin(x(i-1));
    x(i)=x(i-1)-f/diff;
    if abs(x(i)-x(i-1))<=e
    xp=x(i);
    fprintf('xp=%f\n',x(i));
    break;
    end
    end
    j=1:i;
    figure(2);
    plot(j,x(j),'*r',j,x(j));
    xlabel('Nombre d''itérations');
    title('Convergence de la solution : Méth. de Newt.-Raph.');
    disp('Les valeurs successives de x(i) sont :');
    x'
    ca devrait marcher (en tout cas c'est sûr que tu n'aura plus la même erreur). le code

    Code:
    clf;
    x=-1:0.1:1;
    f=exp(x)-2*cos(x);
    figure(1);
    plot(x,f); grid on;
    title('Fonction : f(x)=exp(x)-2.cos(x)');
    clear all;
    clc;
    x(1)=1.32;
    e=1e-10;
    n=5000;
    for i=2:n
    f=exp(x(i-1))-2*cos(x(i-1));
    diff=exp(x(i-1))+2*sin(x(i-1));
    x(i)=x(i-1)-f/diff;
    if abs(x(i)-x(i-1))<=e
    xp=x(i);
    fprintf('xp=%f\n',x(i));
    break;
    end
    end
    j=1:i;
    figure(2);
    plot(j,x(j),'*r',j,x(j));
    xlabel('Nombre d''itérations');
    title('Convergence de la solution : Méth. de Newt.-Raph.');
    disp('Les valeurs successives de x(i) sont :');
    x'
    devrait marcher aussi et etc.

    Sinon on peut télécharger Matlab à partir du site officiel de Matlab (qui n'est pas trop dur à trouver normalement) mais il est payant. Cependant en général on peut télécharger des versions d'évaluations gratuites qui ne durent qu'un certain nombre de jour. Sinon je te conseil une version gratuite de Matlab : Scilab, la syntaxe est légèrement différente (par exemple ton code ne devrait pas marcher tel quel, mais si tu veux je pourrais te le traduire pour scilab). Il est facile à trouver aussi ( en tapant Scilab sous google on tombe sur le site officiel).
    Dernière modification par Flyingsquirrel ; 07/03/2010 à 13h19. Motif: Balises [code]

  5. A voir en vidéo sur Futura
  6. #5
    invite247cc089

    Question Re : fonctions & matlab

    salut,

    Code:
    clc;
    x(1)=0;    % le X0=1 est choisi d’après le programmeur
    e=1e-10;
    n=5000;
    for i=2:n
    f=exp(x(i-1))-2*cos(x(i-1));
    diff=exp(x(i-1))+2*sin(x(i-1));
    x(i)=x(i-1)-f/diff;
    if abs(x(i)-x(i-1))<=e
    xp=x(i);
    fprintf('xp=%f\n',x(i));
    break;
    end
    end
    j=1:i;
    figure(2);
    plot(j,x(j),'*r',j,x(j));
    xlabel('Nombre d''itérations');
    title('Convergence de la solution : Méth. de Newt.-Raph.');
    disp('Les valeurs successives de x(i) sont :');
    x'
    est c que vous pouvez m'expliquer svp pour les lignes qui sont en rouge?
    et pourquoi on cherche les valeurs successives de X?

    merci beaucoup!
    Dernière modification par Flyingsquirrel ; 07/03/2010 à 13h17. Motif: Balises [code]

  7. #6
    invitea6f35777

    Re : fonctions & matlab

    Le programme calcule des approximation successives x(i) de la solution qui convergent. A cause des erreurs d'arrondis on aura pas la solution avec une précision infinie, on peut alors s'arréter lorsque deux estimations successives x(i-1) et x(i) sont suffisament prochent puisque alors on est suffisament proche de la solution. Il suffit il regarde si la valeur absolue de la différence est inférieure à ce qui est déjà une très bonne précision. Dans ce cas il pose xp le résultat final comme étant égal à la dernière valeur calculée x(i). Ainsi en général le calcul demande moins de 5000 itérations, le 5000 est là comme sécurité pour éviter que le programme tourne indéfiniment en cas de problème de convergence. Il est important que e soit quand même relativement grand par rapport aux cumuls des erreurs d'arrondis sinon le programme risque de faire beaucoup d'itération à la fin pour rien puisqu'elles n'améliorerons pas le résultat (voire pire puisqu'il y aura plus d'erreurs d'arrondis au final. La valeur de e est donc tout à fait raisonnable.

    Le ' sert un transposer un vecteur, le vecteur x est horizontal (parce que de base matlab créé des vecteurs horizontaux), le vecteur x' est le même vecteur mais vertical. La ligne x' sert juste à afficher les approximations successives (qui sont contenues dans le vecteur x (ou tableau si tu préfère)) verticalement (ce qui est plus esthétique).

    tu peut taper dans la console
    >>v=[1 2 3]
    >>v'

    tu devrais obtenir
    >>v=[1 2 3]
    v=
    1 2 3
    >>v'
    ans=
    1
    2
    3

  8. #7
    invite247cc089

    Question Re : fonctions & matlab

    bonjour,
    merci beaucoup pour votre aide
    je peux dire que ce programme va chercher les points qui appartiennent à l'intersection de la tangente et la fonction f .
    l'équation de la tangente est:
    tx=f'(xi)*(x-xi)+f(xi)
    ou' le xi est le point d'intersection de f et la tangente

    et on a le point d'intersection de la tangente et l'axe des X (i+1)
    =>tx=0
    =>f'(xi)*(x(i+1)-xi)+f(xi)=0
    =>x(i+1)=xi - { f'(xi) / f(xi) }


    donc on repete la meme chose avec xi qui s'approche de point ou' s'annule la fonctionf
    -----------------------
    est ce que c correct?
    je n'ai pas encore saisi le principe!!!

    merci

  9. #8
    invite247cc089

    Unhappy Re : fonctions & matlab

    BONJOUR

    ya qlq1 pour m'aider svp?

  10. #9
    invitea6f35777

    Re : fonctions & matlab

    Oui c'est exactement ça. L'idée est qu'il est difficile résoudre exactement une équation du type

    dès que est un peu compliquée. On veut alors résoudre cette équation de façon approchée en remplaçant la fonction par une fonction plus simple mais "proche". On fait une approximation de . La méthode d'approximation la plus simple (ou du moins une des pus simples) que l'on connaisse est la méthode d'approximation affine. Si est une fonction dérivable en et si est suffisamment proche de alors


    On se ramène à résoudre l'équation approchée

    C'est une équation facile à résoudre puisque c'est une équation du premier degré, on a

    L'approximation affine n'est valable qu'au voisinage de il faut donc que soit proche de la vraie solution de l'équation . Puisqu'on résout une équation approchée on obtient une solution approchée mais on espère qu'on a progressé et que est plus proche de que est proche de . Ainsi, réitérant le procédé mais avec à la place de on doit avoir une meilleure approximation de au voisinage de (puisque l'approximation de est bonne au voisinage de et que est plus proche de ) et donc la solution que l'on trouve sera encore meilleure (c-à-d encore plus proche de . Si tout ce passe bien on construit une suite qui converge vers la solution et qui permet donc de calculer la solution avec une précision arbitraire. Il est possible de trouver des fonction dérivables et des point de départ tels que la méthode de Newton-Raphson ne converge pas mais normalement si on prends suffisamment proche de la solution ça marche (il y a des théorèmes qui donnent des conditions suffisantes de convergence de la méthode).

  11. #10
    invite247cc089

    Smile Re : fonctions & matlab

    je vous remercie beaucoup mr "",pour votre explication

    maintenant je comprend le but de theoreme newton-raphson!

    pour appliquer ce theoreme dans matlab,j'ai un essai mais à une fonction donnée déja dans le programme
    mon probleme comment creer un fichier ou' l'utilisateur entre sa fonctiion puis le programme affiche les points ou' la fonction f de l'utilisateur s'annule?
    est ce que je px vous envoyer mon essai pour m'aider ?

    merci encore une fois

  12. #11
    invitea6f35777

    Re : fonctions & matlab

    Tu as deux possibilités, soit dans ton répertoire de travail tu créé un fichier f.m qui contient par exemple

    Code:
    function y=f(x)
    
    y=x^2+1;
    
    end
    (tu peut évidemment remplacer x^2+1 par n'importe quelle fonction de ton choix)

    la fonction f sera alors visible par ton programme de Newton-Raphson

    par exemple si tu créé un autre fichier Addab.m dans ton répertoire de travail qui contient

    Code:
    function z=Addab(a,b)
    
    z=f(a)+f(b);
    
    end
    alors tu as dans la console

    >>Addab(0,2)
    ans=
    6

    il suffit alors de modifier le fichier f.m pour changer de fonction. Bien sûr Addab n'est ici qu'un exemple de fonction qui utilise une autre fonction mais toi à la place tu utilisera ton programme

    L'autre solution consiste à utiliser des "function handles", si tu modifie le fichier Addab.m comme ceci

    Code:
    function z=Addab(g,a,b)
    
    z=g(a)+g(b);
    
    end
    dans la console tu as

    >>Addab(@(x) x^2+1,0,2)
    ans=
    6
    >>Addab(@sqrt,0,4)
    ans=
    2
    >>g=@(x) x^3-2;
    >>Addab(g,-1,1)
    ans=
    -4

  13. #12
    invite247cc089

    Smile Re : fonctions & matlab

    salut,
    merci beaucoup pour votre aide.

    j'ai pas bien compris au sujet des fichiers!

    quelle est la forme de mon fichier pour que l'utilisateur donne sa fonction f ,et le fichier remplace sa variable fct par la fonction f et fait le traitement de la méthode newton raphson puis affiche les points d'approximation ?

    et comment connaitre la solution x* pour comparer x0 ,x1,.....avec?

  14. #13
    invitea6f35777

    Re : fonctions & matlab

    Si tu créé un fichier NewtonRaphson.m (au moyen de l'éditeur de matlab ou dans un bloc note) qui contient le code

    Code:
    function NewtonRaphson(x0,f,df)
    
    %Dans un premier temps, puisque l'on va écrire les résultats dans la
    %console, on la nettoie au moyen de la commande
    
    clc 
    
    %C'est l'abbréviation de "clear command window" (nettoyer la
    %fenêtre de commande, c-à-d la console).
    
    %On affiche les résultats numériques en format long (avec plus de chiffres
    %après la virgule).
    
    format long
    
    % L'utilisateur doit renseigner trois paramètres pour lancer le
    %programme, f est la fonction à laquelle on applique la méthode
    %de Newton-Raphson (c-à-d qu'on veut résoudre f(x)=0),
    %df est sa dérivée que l'utilisateur aura calculé lui même à la main
    %pour plus de précision (Matlab n'est pas un logiciel de calcul formel
    %contrairement à Maple et en particulier il ne sait pas dériver ou
    %alors seulement de façon approchée), x0 est la valeur de départ de
    %la méthode de Newton-Raphson, elle doit être suffisamment
    %proche de la solution de f(x)=0 pour que ça marche. Par exemple,
    %l'utilisateur pourra taper dans la console
    %>>NewtonRaphson(1,@(x) x^2-4,@(x) 2*x) le programme
    %devrait alors renvoyer une bonne approximation de 2 qui est la
    %solution positive de x^2-4=0 ainsi que les itérations successives
    %de la méthode. Ce cas est d'ailleurs un bon cas test de la fonction.
    
    %le principe de la méthode est qu'on construit un vecteur x dont les
    %composantes sont des approximations successives de le solution
    %de l'équation f(x)=0. La première valeur est choisie par l'utilisateur
    
    x(1)=x0; 
    
    %On rappelle que les conposantes d'un vecteur sont
    %numérotées de 1 à length(x) et que x(0) n'existe pas, c'est pour
    %ça qu'on commence à x(1). Je rappelle aussi que pour Matlab,
    %vecteur est un synonyme de tableau.
    
    %length(u) avec u un vecteur renvoie le nombre de composantes de
    % u (length signifie longueur en anglais).
    
    %On n'arrète le calcul lorsque la méthode converge, c'est à dire 
    %lorsque deux itérations successives ne diffèrent que d'au plus
    
    e=1e-10;
    
    %ce qui signifie e=10^(-10). C'est ce qu'on appelle le test d'arrêt.
    
    %Toutefois au cas où la méthode ne convergerait pas, pour éviter
    %que le programme  tourne indéfiniment du fait que la différence 
    %entre deux itérations successives serait toujours plus grande en 
    %valeur absolue que e, on fixe un nombre maximal d'itération
    
    n=5000;
    
    %C'est une valeur arbitraire mais largement plus grand que le
    %nombre d'itération nécessaire en moyenne lorsque la méthode
    %converge.
    
    for i=2:n  %("for" signifie "pour" en anglais et "2:n" désigne le
    %vecteur horizontal [2 3 ... n] qui comprend les valeurs entières 
    %de 2 à n).
    
    %Pour i allant de 2 à n (tant que le test d'arrêt n'a pas fonctionné)
    %on calcule x(i) à partir de x(i-1) en utilisant la
    %formule x(i)=x(i-1)-f(x(i-1))/f'(x(i)).
    %Pour l'explication de cette formule il faut se référer à un cours sur
    %la méthode de Newton-Raphson.
    
    x(i)=x(i-1)-f(x(i-1))/df(x(i-1));
    
    %On fait le test d'arrêt: on regarde si la valeur absolue de la
    %différence entre x(i) et x(i-1) est inférieur ou égale à e
    
    if abs(x(i)-x(i-1))<=e
    
    %("if" signifie "si" en anglais et "abs" est l'opérateur valeur absolue) 
    
    %dans ce cas la valeur que l'on renvoie est la dernière valeur
    %calculée
    
    disp('La valeur finale est:')
    xp=x(i)
    
    %On l'affiche en ne mettant pas de point virgule à la fin de la ligne
    %on pourrait aussi utiliser l'instruction fprintf. D'ailleurs on peut
    %remarquer que les seules lignes se terminant par un point virgule
    %dans le programme sont les lignes où on affecte une valeur 
    %numérique à une variable qu'on ne veut pas afficher sur la console.
    %C'est à ça que sert le point virgule. 
    
    %disp est l'abbréviation de display qui signifie afficher en anglais, 
    %cela permet d'afficher une chaine de caractères sur la console).
    
    %On sort de la boucle for au moyen de l'instruction
    
    break %("break" signifie "casser" en anglais).
    
    end %fin de la clause if
    
    end %fin de la boucle for
    
    %Pour terminer on affiche les itération successives verticalement
    
    disp('les valeurs des itérations successives sont:')
    x'
    
    %On affiche (pas de point virgule) le vecteur x transposé (mis à la
    %verticale) par l'opérateur '
    
    %On trace ces valeurs sur un graphe. On sélectionne la première
    %fenêtre figure
    
    figure(1)
    
    %On efface la fenêtre au cas où il y aurait déjà quelque chose de
    %tracé et au cas où un "hold on" serait encore actif (hold on est une 
    %instruction qui permet de conserver les tracer précédents et qui est
    %désactivée lorsqu'on efface la fenêtre).
    
    clf
    
    %C'est l'abbréviation de "clear figure window" (nettoyer la fenêtre de
    %graphe).
    
    %On trace les valeurs de x sur un graphe, à la fois par une ligne
    %brisée bleu qui relie des point (ce qu'on obtient par défaut par
    %l'instruction plot(x)) et par des étoiles rouges (ce qu'on obtient par
    %l'instruction plot(x,'*r'), le style de tracé est précisé par la chaine
    %de caractère '*r', les ' servent à dire que c'est une chaine de
    %caractères et non pas la multiplication par la variable r, le * sert à
    %dire que l'on veut des étoiles, le r abréviation de red qui signifie 
    %rouge en anglais donne la couleur). On utilise hold on pour ne pas
    %que le deuxième tracé efface le premier.
    
    hold on %(hold on signifie quelque chose comme maintenir)
    plot(x) %(plot signifie tracer point par point)
    plot(x,'*r')
    
    %l'intruction plot(u) avec u un vecteur trace le graphe correspondant
    % au points du plan de couples de coordonnées (1,u(1)), (2,u(2)),...,
    %(length(u),u(length(u)).
    
    %on met un titre au graphe
    
    title('Approximations successives de la methode de New.-Raph.');
    
    %(title signifie titre en anglais).
    
    %on met une légende sur l'axe des x et des y
    
    xlabel('numero de l'iteration')
    ylabel('valeur de l'approximation')
    
    %(label signifie étiquette en anglais).
     
    end %fin de la fonction NewtonRaphson.
    J'ai abondamment commenté le programme (lignes qui commencent par %) pour ta compréhension, bien sûr tu peux enlever toutes ces lignes. Cela dit je te conseille de laisser quelques commentaires pour le cas ou tu voudrais repredre ce programme plus tard et que tu aurais oublié comment il marche.

    Après t'être assuré que le fichier NewtonRaphson.m est bien dans le répertoire de travail de Matlab, quitte à changer le répertoire de travail de Matlab. Essaie de taper dans la console
    >>NewtonRaphson(1,@(x) x^2-4,@(x) 2*x)
    et regarde ce qui se passe

  15. #14
    invitea6f35777

    Re : fonctions & matlab

    Je rappelle aussi que la notation
    @(x) x^2-4 signifie en langage Matlab, la fonction qui à x associe x^2-4.

  16. #15
    invitea6f35777

    Re : fonctions & matlab

    oups

    il faut remplacer les lignes

    xlabel('numero de l'iteration')
    ylabel('valeur de l'approximation')

    par

    xlabel('numero de l''iteration')
    ylabel('valeur de l''approximation')

    pour que ça marche sinon il prend le ' à l'intérieur de la chaine de caractère pour la fin de la chaine de caractère et il ne comprend pas (c'est pour ça que le ' à l'intérieur d'une chaine de caractères s'obtient par deux ' successifs)

  17. #16
    invite247cc089

    Smile Re : fonctions & matlab

    c'est très gentil à vous mr "KerLannais"!
    est ce qu'il y'a un moyen pour calculer la dérivée de f donnée par l'utilisateur? !parce que l'utilisateur entre seulement sa fonction .

    vous avez fait dans les parametres de la fonction f x0 c'est à dire que le programme cherche les points d'annulation de f au voisinage de x0?
    et comment connaitre x0?


    je m'excuse pour le dérangement!

  18. #17
    invite247cc089

    Question Re : fonctions & matlab

    encore une chose,
    j'ai tapé c que vous m'avez dit dans la console mais il y'a une erreur :
    ??? >>NewtonRaphson(1,@(x) x^2-4,@(x) 2*x)
    |
    Error: Unexpected MATLAB operator.
    est ce que vous pouvez m'aider s'il vous plait?
    merci

  19. #18
    invitea6f35777

    Re : fonctions & matlab

    J'espère que tu n'as pas tapé les ">>", ça normalement c'est le prompteur de la console, il faut seulement taper NewtonRaphson(1,@(x) x^2-4,@(x) 2*x)

    si ce n'est pas ça l'erreur, que ce passe-t-il lorsque tu tapes
    @(x) x^2-4

    Sinon, ce sera moins précis mais tu peux utiliser le code

    Code:
    function NewtonRaphson(x0,f)
    
    clc
    format long
    x(1)=x0; 
    e=1e-10;
    n=5000;
    for i=2:n 
    df=(f(x(i-1)+e)-f(x(i-1)))/e; 
    %on calcule une valeur approchée de la dérivée de f en x(i-1).
    x(i)=x(i-1)-f(x(i-1))/df;
    if abs(x(i)-x(i-1))<=e
    disp('La valeur finale est:')
    xp=x(i)
    break 
    end
    end
    disp('les valeurs des itérations successives sont:')
    x'
    figure(1)
    clf
    hold on 
    plot(x) 
    plot(x,'*r')
    title('Approximations successives de la methode de New.-Raph.');
    xlabel('numero de l''iteration')
    ylabel('valeur de l''approximation')
    
    end
    (j'ai juste enlevé les commentaires et rajouté les lignes en rouge et modifié les lignes en bleu)

    ensuite tu tapes NewtonRaphson(1,@(x) x^2-4). Pour la valeur de x0 tu peut tracer la fonction f (avec Matlab), voir où la courbe coupe l'axe des abscisses et prendre la graduation la plus proche comme valeur de départ.

    Si tu tapes NewtonRaphson(1,@(x) x^2-2) tu devrais avoir une bonne approximation de la racine carrée de 2.

  20. #19
    invite247cc089

    Re : fonctions & matlab

    j'ai ajouter la commande diff mais il m'accepte pas!

  21. #20
    invitea6f35777

    Re : fonctions & matlab

    C'est normal la commande diff correspond à une dérivation discrète, Matlab n'est pas un logiciel de calcul formel mais de calcul numérique. Je t'ai donné une version du programme qui ne demande à l'utilisateur que x0 et f je voudrais juste savoir si tu arrives à le faire fonctionner.

    Pour info, la commande diff ne s'applique qu'à un vecteur v et diff(v) est le vecteur [v(2)-v(1),v(3)-v(2),...,v(n)-v(n-1)] où n est le nombre de composantes de v
    par exemple

    >>diff([1 15 2])
    ans=
    14 -13

  22. #21
    invite247cc089

    Smile Re : fonctions & matlab

    salut et grand merci à vous

    j'ai essayé le programme avec une fonction qui a 2 parametres f et x0
    mais ça ne marche pas !!
    qu'est ce que je px faire ?
    il faut k l'utilisateur entre seulement f et x0!
    ya un moyen pour calculer la dérivée de f?


    merci

  23. #22
    invite247cc089

    Smile Re : fonctions & matlab

    salut
    j'ai essayé le code que vous m'avez proposé, ça marche bien!
    merciiiiiii beaucoup

    mais une chose,est ce k vous pouvez m'expliquer k veut dire cette formule :

    df=(f(x(i-1)+e)-f(x(i-1)))/e;

    j'attends votre réponse

  24. #23
    invitea6f35777

    Re : fonctions & matlab

    J'ai approché par un taux d'accroissement de en :

    pour petit. Ici j'ai pris on a alors une approximation raisonnable de .

  25. #24
    invite247cc089

    Smile Re : fonctions & matlab

    encore une fois merci beaucoup pour tout!

    est ce que la formule de la dérivée que vous avez écrit est une formule générale?

    x(i-1) =>i-1 parce qu'on a commencé par i=2!

    svp pour la formule:
    x=x0- f'(x)/ f(x)

    vous avez parlé de x*
    est ce que ce x* est la vraie solution de f(x)=0 ,?
    et comment le connaitre?
    par dessiner la courbe de f?

    merci beaucoup

  26. #25
    invitea6f35777

    Re : fonctions & matlab

    la formule que j'ai donnée donne une valeur approximative de la dérivée de en et marche pour toute fonction pas trop méchante (plus la fonction est méchante, plus l'approximation donnée par la formule est mauvaise). Cette formule vient tout simplement de la définition de la dérivée:

    ce qui signifie, d'après la définition de la limite, que l'on peut approcher à une précision arbitraire par

    pour peu que soit choisi suffisamment petit.

    Par exemple

    on sait que

    mais on veut calculer sans utiliser la formule de . On prend par exemple
    On calcule

    On trouve l'approximation alors que la vraie valeur est

    On commet donc une erreur de . Si maintenant on prend on a

    On commet donc une erreur de

    Oui le dont je parle est la vraie solution de l'équation et s'il y avait une formule miracle qui donne automatiquement la solution d'une équation à partir de l'équation alors la méthode de Newton-Raphson ne servirait à rien et la formule miracle en question serait enseignée dans tous les cours de mathématiques. Mais bien entendu cette formule miracle n'existe pas et la méthode de Newton-Raphson est une des méthode pour calculer avec une précision arbitraire, cette méthode ne marche pas toujours hélas. Tu dois juste trouver une valeur de qui convienne, si tu ne veux pas tracer la courbe pour trouver une valeur de tu peux toujours essayer des valeurs au pif jusqu'à ce que ça converge. Il faut bien comprendre que

    1- Il y a des solutions d'équations qui ne peuvent être connues que par des méthodes type Newton-Raphson, et de tels solutions ne pourront qu'être calculées jusqu'à une précision arbitraire. La raison en est simple: que ce soit avec l'ensemble des symboles des mathématiques actuel ou que ce soit avec l'ensemble des symboles des mathématiques dans un certaine futur (c'est à dire un ensemble à priori plus grand de symboles mais toujours en nombre fini) il existe des nombres réels qui ne peuvent pas être écrit avec un nombre fini de symbole (c'est mathématiquement démontré).

    2- Pire, il y a des nombres réels qui ne peuvent même pas être calculés (nombres incalculables) et en particulier il ne peuvent être trouvés par aucune méthode.

    3- Il n'existe aucune méthode pour trouver avec certitude une valeur convenable de à partir de la fonction même si la méthode qui consiste à tracer le graphe marche la plupart du temps.

    4- Quelle que soit la méthode pour trouver un zéro de la fonction , aucune ne marche (ou plutôt, n'importe laquelle des méthode pourra échouer) si l'utilisateur ne donne pas une localisation du zéro (du type "le zéro que je cherche est proche de ", ou alors "le zéro que je cherche est le seul zéro de la fonction entre et ").

    5- Pour certaines fonctions il existe des méthodes de localisation des zéros. Par exemple si est une fonction polynomiale (voir les suites de Sturm notamment).

    6-Ainsi, pour les fonctions polynomiales on peut écrire un programme qui calculera tous les zéros avec une précision arbitraire. On commence par trouver un intervalle borné qui contient tous les zéros (il existe une méthode), ensuite découpe cet intervalle en sous-intervalles qui contiennent au plus un zéro (là aussi il y a une méthode) puis dans chaque intervalle on utilise la méthode de dichotomie qui permet d'approcher les zéros jusqu'à ce qu'on soit suffisamment proche pour qu'on puisse appliquer le méthode de Newton-Raphson qui est plus rapide que la dichotomie (là aussi on peut avoir un critère pour savoir qu'on est suffisamment proche). Dans ce cas l'utilisateur peu se contenter d'entrer la fonction et rien d'autre.

  27. #26
    invite247cc089

    Question Re : fonctions & matlab

    salut

    merci beaucoup!

    pour connaitre x0,il faut tracer la courbe de f,mais le code ne marche pas;

    x=-1:0.1:1;
    clc
    f=input('entrer la fonction :');


    plot(x,f);
    title('la courbe de la fonction f,pour extraire x0.');
    xlabel('Axe des abscisses.')
    ylabel('Axe des ordonés.')

    j'ai esayé autre;

    x=-10:0.1:10;
    str=input('taper une équation :','s'); %taper l'equation par l'utilisateur
    f=inline(str);

    plot(x,f);
    title('la courbe de la fonction f,pour extraire x0.');
    xlabel('Axe des abscisses.')
    ylabel('Axe des ordonés.')

    mais il ya erreur dans input !

    est c k vous pouvez m'aider svp?


    merci

  28. #27
    invitea6f35777

    Re : fonctions & matlab

    essai ceci

    x=-1:0.1:1;
    clc
    f=input('entrer la fonction :');

    for i=1:length(x)
    y(i)=f(x(i));
    end
    plot(x,y);
    title('la courbe de la fonction f,pour extraire x0.');
    xlabel('Axe des abscisses.')
    ylabel('Axe des ordonés.')

  29. #28
    invite247cc089

    Question Re : fonctions & matlab

    salut,

    j'ai essayé le code:
    x=-1:0.1:1;
    clc
    f=input('entrer la fonction :');

    for i=1:length(x)
    y(i)=f(x(i));
    end
    plot(x,y);
    title('la courbe de la fonction f,pour extraire x0.');
    xlabel('Axe des abscisses.')
    ylabel('Axe des ordonés.')

    mais il y'a une erreur =>

    ??? Attempt to execute SCRIPT input as a function.

    Error in ==> courbe2fonction at 3
    f=input('entrer la fonction :');

    --------
    quel est le travail de :
    for i=1:length(x)
    y(i)=f(x(i));

    merci beaucoup mr"KerLannais" pour votre aide!

    j'ai un probleme au nuveau du programme:

    clc
    format long
    x(1)=x0;
    e=1e-10;
    n=5000;
    for i=2:n
    df=(f(x(i-1)+e)-f(x(i-1)))/e;
    %on calcule une valeur approchée de la dérivée de f en x(i-1).
    x(i)=x(i-1)-f(x(i-1))/df;
    if abs(x(i)-x(i-1))<=e
    disp('La valeur finale est:')
    xp=x(i)
    break
    end
    end
    disp('les valeurs des itérations successives sont:')
    x'
    figure(1)
    clf
    hold on
    plot(x)
    plot(x,'*r')
    title('Approximations successives de la methode de New.-Raph.');
    xlabel('numero de l''iteration')
    ylabel('valeur de l''approximation')

    end
    si on applique ce programme à une fonction périodique par exemple f(x)=sin(x)
    dans l'intervalle [-8*pi,8*pi],le programme doit afficher 16 points ou' s'annule la fonction f.
    est c qu'il ya 1 moyen pour que l'utilisateur entre l'intervalle ou' il veut chercher les points qui annulent sa fonction?

    merci bien de m'aider pour ce probleme!

  30. #29
    invite247cc089

    Question Re : fonctions & matlab

    slt,
    mercii bcp pour nous aider.
    j'ai un problème au niveau du programme précédent,il faut préciser l'interval pour préciser tous les approximations x(i).
    merci.

  31. #30
    invite247cc089

    Question Re : fonctions & matlab

    salut
    est ce que vous pouvez m'aider svp!?

    je sais k je vous ai dérangé beaucoup mais je né personne pour m'aider!

    -----
    le prof ma dit par exemple si l'utilisateur entre f(x)=sin(x) et l'intervalle -8*pi 8*pi
    le programme doit afficher 16 points ou' s'annule la f

    je sais pas comment faire!


    merci de m'aider

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [matlab] programmation : peut-on générer un arbre des fonctions d'un code Matlab ?
    Par inviteafe1cd13 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 09/07/2015, 11h12
  2. MATLAB & Fibonacci
    Par invite3d34a963 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 15/06/2015, 01h41
  3. Equation différentielle & Matlab
    Par invite50429c49 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 12/02/2010, 17h38
  4. Matlab-matrice de fonctions
    Par inviteab2b41c6 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 25/10/2006, 14h15
  5. MatLab, fonctions mm2dp*
    Par invite3af7f462 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 01/02/2005, 16h13