IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

méthode itérative


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut méthode itérative
    Bonjour a tous
    J'ai besoin d'un gros coup de main pour faire un programme sur Matlab.
    Je cherche a programmer une méthode itérative, pour résoudre une équa diff au voisinage de x = 10
    L'equa diff est y"(t)= f(t,y(t)) ou f(x,y)=2x^2+2y^2 avec y(10)=2
    Je procède en cherchant la convergence de la suite
    (yn+1)= I(yn) qui doit tendre vers son point fixe, et donc vers la solution cherchée.
    I(yn)=2+y'(2) +int(int(f(t,y(t))dt dt

    les intégrales se font entre x=2 et x=2+h, parametre a faire bouger pour s'approcher de la fonction

    MON PROBLÈME, c'est que je ne comprend pas bien comment programmer cet algorithme
    Est ce que je doit faire un programme pour f, un pour y, un pour la récurrence? avec chaque fonction réutilisant la précedente
    Comment puis-je faire pour au final tracer différentes courbes permettant l'approximation de ma solution y(x)
    Matlab n'arette pas de me mettre des messages d'erreur comme quoi mes variables doivent être des matrices carrées.
    bref
    J'espère avoir été compréhensible, comme vous le comprendrez je suis plutôt débutant sur matlab.
    si vous voulez voir ce que j'ai deja essayer de faire je peux le poster ici

    Merci pour votre aide précieuse.

  2. #2
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour, et bienvenue sur le forum.

    Est ce que ton problème est lié directement à Matlab, où tu as un problème bien particulier.
    Matlab n'arette pas de me mettre des messages d'erreur comme quoi mes variables doivent être des matrices carrées.
    bref
    Tu peux commencer par nous montrer ce que tu as fais, pour voir par la suite comment t'aider.

    Est ce que tu as lu la doc, et la résolution avec ode45 de matlab.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    oui oui mon problème est directement lié a matlab
    Pour ode45, ca ne devrai pas m'aider parce que je doit presenter ma démarche pour arriver a la solution.

    Alors voici ce que j'ai fait ,dsl pour les noms bidons

    Definition de ma fonction y1, permettant d'initialiser mon itération
    a priori, je doit pouvoir prendre n'importe quoi pour cette fonction, du moment qu'elle est continue au voisinage de 10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function [ result ] = ygrec1(entree1)
    % petitf calcule la fonction f de x et de y
    result=entree1^5
    % calcule la fonction en
    end
    ensuite ma fonction f

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function [ result ] = petitf2(entree1,ygrec1)
    result=2*entree1^2+2*(ygrec1(entree1))^2
    end
    Après, la fonction que je retrouve dans mon itération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function [ result ] =grandI(y1)
    % fonction grandI, definit par l'a double intégrale
    result= (1+0.1)*10+dblquad(@petitf2,10,10+0.1,10,10+0.1)
    end
    et enfin mon itération permettant de calculer le nième terme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function [ result ] = suiterecur( n )
    % suite calcule le n Ëme terme (result) de la suite u(n+1)
    result=2;
    for i=1:n, result=grandI(result); end, 
    end
    J'ai fixé le h avec 0,1 pour le moment, et je pensait ensuite faire varier ce parametre.

    voila en fait je sait jamais quand je doit déclarer des variables, comment mettre un test d'arrêt sur mon itération,

    voici les erreurs que matlab me donne si je lui demande de me donner la valeur de la suit pour n=3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    >> suiterecur(3)
    ??? Attempted to access ygrec1(10); index out of bounds because numel(ygrec1)=1.
     
    Error in ==> petitf2 at 3
    result=2*entree1^2+2*(ygrec1(entree1))^2
     
    Error in ==> dblquad>innerintegral at 84
    fcl = intfcn(xmin, y(1), varargin{:}); %evaluate only to get the class below
     
    Error in ==> quad at 62
    y = f(x, varargin{:});
     
    Error in ==> dblquad at 64
    Q = feval(quadf, @innerintegral, ymin, ymax, tol, trace, intfcn, ...
     
    Error in ==> grandI at 3
    result= (1+0.1)*10+dblquad(@petitf2,10,10+0.1,10,10+0.1)
     
    Error in ==> suiterecur at 4
    for i=1:n, result=grandI(result); end, % si on met une virgule aprËs le 2 (au lieu du ;)

    je suis en train de penser que matlab ne sait peut être pas me donner un resultat sous la forme d'un fonction, (y(x) la solution de mon equa diff).
    Comment je peux m'en sortir alors?

    Merci de votre aide précieuse

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    Pour l'erreur indiqué par matlab, elle vient du fait que tu passes ygrec1 en argument de ta fonction alors que ygrec1 est elle-même une fonction. Je pense que tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function result = petitf2(entree1)
    result=2*entree1^2+2*(ygrec1(entree1))^2
    end
    Après pour les questions en rapport avec la méthodologie sur la résolution numérique d'equa diff, ce n'est pas directement lié à matlab, tu obtiendras sûrement plus de réponse en posant ta question dans le forum Algorithmes->mathématiques
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    merci pour cette correction
    manifestement il n'y a pas que ca..
    Je ne sait pas si matlab peut gerer le calcul de fonctions ou les arguments sont eux même des fonctions. C'est le cas de ma fonction grandI qui est une fonction de ygrec1, et qui doit la transformer en ygrec2=grandI(ygrec1).

    Est ce que cela fonctionnerais mieux si je travaillait avec ygrec1 sous forme d'une matrice? Comment doit)je proceder alors?
    Le cas echeant, serra il possible de calculer la double intégrale de f(t,ygrec1(t))??

    Merci de votre aide précieuse, qui commence a devenir urgente

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Matlab peut tout à fait évaluer numériquement la valeur d'une composée de fonction, si c'est bien cela la question...

    Quel est le problème? As-tu un nouveau message d'erreur?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2015, 12h43
  2. méthode itérative de Newton en C++
    Par sousoucati dans le forum Débuter
    Réponses: 2
    Dernier message: 21/05/2013, 11h27
  3. [Débutant] la méthode itérative du point le plus proche
    Par azertyuio dans le forum MATLAB
    Réponses: 0
    Dernier message: 30/09/2011, 12h14
  4. la méthode itérative
    Par sophielow dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/06/2011, 00h49
  5. compléter le programme d'une méthode itérative
    Par jery190 dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/02/2010, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo