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

Octave Discussion :

[quad] Fonction à plusieurs variables


Sujet :

Octave

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut [quad] Fonction à plusieurs variables
    Bonjour à toutes et tous,

    Je vous remercie par avance d'aider un ignorant comme moi.

    Voila mon souci, je crée une fonction dont je veux calculer une integrale grace à la fonction quad.
    Le soucie c'est que ma fonction possède plusieurs variables et que je ne parviens pas à faire rentrer ces paramêtres dans la fonction quand j'appelle quad...

    Exemple plus simple
    >> a=1
    a = 1
    >> quad('DRx(x,a,a,a,a)',0,1)
    error: `a' undefined near line 1 column 41
    error: evaluating argument list element number 2
    error: evaluating assignment expression near line 1, column 33
    error: called from `__quad_fcn__'
    error: quad: evaluation of user-supplied function failed
    >> quad('DRx(x,1,1,1,1)',0,1)
    ans = -0.22985
    Voilà le script que je souhaite faire tourner:
    ****************************** ***
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function [n]=DRx(x,W,kW,C,Result)
              n=real(W/(2*I*kW*C^2)*Result*exp(-I*x));
    end
     
    CCC=3e8;
     
    for i=1:Npoint
         WW=W(i);
         kkk=kTHz(i);
         RRR=Result1(i);
         RR1(i)=quad('DRx(x,WW,kkk,CCC, RRR)',0,L);
    end
    ****************************** **
    Tout marche si je donne des valeurs numériques en lieu et place des paramètres WW,kkk,CCC,RRR. Mais je veux calculer Npoint intégral avec des paramètres différents.
    Au début j'appeller directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RR1(i)=quad('DRx(x,W(i),kTHz(i ),c,Result1(i))',0,L);
    marchait pas, alors j'ai fait le script pas jolie que je vous ai mis qui marche pas non plus. J'ai alors essayé en déclarant WW,kkk,CCC,RRR global ça change rien.
    J'imagine que le fait que DRx soit entre guillemets fait qu'Octave pert les valeurs.

    Comment passer des valeurs numériques à la fonction appellés dans quad ?
    Comment pourrais-je contourner le problème ?

    S'il vous plait je compte sur vous ce doit pas être très compliqué. Et c'est la dernière étape du calcul.
    Merci d'avance,

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Je ne connais pas Octave mais je pense que tu peux essayer de créer ta chaine de caractères tout simplement.
    Exemple avec les a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a=1;
    machaine=sprintf('DRx(x,%d,%d,%d,%d)',a,a,a,a);
    quad(machaine,0,1)
    A toi d'adapter (et de tester aussi si ça fonctionne)
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour Caro-line je ne suis pas abitué à ce type d'écriture (je débute à peine).
    J'essaie ça de suite et te dis quoi...

    En tout cas merci pour cette réponse rapide
    A de suite

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Ca m'a tout l'air d'être ça, j'ai plus d'erreur. Gros merci !!!

    Si je résume quad prends comme premier argument une chaine de caractère, du coup avec mon précédent code je ne donnais pas la valeur des variables mais bien le nom des variables comme argument (forcément ça peut pas marcher)...

    le %d il sert à mettre le contenue (sous forme de caractère) de la variable donné après.

    Encore Merci,
    (bon ça marche pas encore mais il faut que je comprenne tout ça maintenant)

  5. #5
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Normalement l'aide de sprintf doit t'expliquer tout ça mais en gros tu as compris.
    %d signifie que tu vas lui donner un double en argument.

    Pense à cliquer sur le bouton en bas à gauche si c'est OK
    Règles du Forum

    Adepte de la maïeutique

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    C'est bien résolu mais ça me sort que des zéros, mon problème maintenant c'est que l'une des variable est un nombre complexe...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machaine=sprintf('DRx(x,%d,%d,%d,%d)',a,a,a,COMPLEXE);
    Du coup le dernier %d donne le caractère '0', et oui car comme tu me l'as dis le %d c'est pas pour les types complexes.
    Peut-on passer un complexe directement avec un %Quelchose ?
    Sinon je me débrouillerais autrement.

  7. #7
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Un peu d'imagination
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C=complex(5,3)
    sprintf('%d+%di',real(C),imag(C))
    Règles du Forum

    Adepte de la maïeutique

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    A oui très jolie, je pensais à un truc tordu en modifiant ma fonction DRx pour donné partie réel et imaginaire de chaque coté mais comme ça c'est beaucoup mieu.
    Mais un %c ou autre aurait été pratique.

    En tout cas merci beaucoup, j'ai énormément appris et m'apprête à finaliser mon code grâce à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/11/2012, 01h57
  2. minimiser une fonctions à plusieurs variables
    Par lassaib dans le forum Fortran
    Réponses: 4
    Dernier message: 03/04/2012, 22h04
  3. Réponses: 0
    Dernier message: 22/03/2011, 23h52
  4. Réponses: 0
    Dernier message: 06/08/2010, 16h53
  5. [XL-2003] Optimisation d'une fonction à plusieurs variables
    Par kokoVBA dans le forum Macros et VBA Excel
    Réponses: 45
    Dernier message: 06/05/2009, 10h38

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