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 :

Valeurs des variables intermédiaires quand l'optimalité est atteinte


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut Valeurs des variables intermédiaires quand l'optimalité est atteinte
    Bonjour,
    J'effectue une minimisation avec contrainte non linéaire à l'aide de fmincon et j'aimerais obtenir les valeurs des variables "call' et "e" (qui sont dans la fonction à minimiser dans un autre mfile) quand l'optimisation est atteinte.
    Toutes mes tentatives sont restées sans succés, ma dernière tentative :

    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
    21
    22
    23
    24
    25
    26
    27
     
    function monopt2
     
    %Chargement des données
    load data
    prix = data;
    load data2
    strike_vec = data2;
    load data3
    sp = data3;
    sig0 = 0.00015164;
    r = 0.0006;
    nbr_sim = 20;
    nbr_strike = 36;
    epsil = randn (nbr_sim,257);
     
    x0=[0.3;0.3;0.3;0.3];
     
    function [f call par,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil] = erreursfun (par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    function [f e par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil] = erreursfun (par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
     
    options=optimset('algorithm','interior-point','display','iter');
     
    [par,fval]=fmincon(@(x)erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil),x0,[],[],[],[],[],[],@confun,options)
     
    function [f call par,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil] = erreursfun (par)
    function [f e par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil] = erreursfun (par)
    J'ai les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Warning: File: monopt2.m Line: 25 Column: 71
    Function with duplicate name "call" cannot be called. 
    Warning: File: monopt2.m Line: 27 Column: 73
    Function with duplicate name "e" cannot be called.
    Encore une fois please help !

  2. #2
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    je ne vois pas du tout ce que tu as cherché à faire avec toutes ces déclarations de fonctions erreursfun sachant qu'il n'y a pas de déclaration de fonctions dans MATLAB...

    Le plus simple je pense est d'écrire une nouvelle fonction erreursfunbis par exemple qui sera identique à erreursfun sauf que tu mettras en sortie les variables que tu souhaites. Tu fais alors l'optimisation sur erreursfun, puis tu évalues tes paramètres avec erreursfunbis.
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse, je suis entrain d'essayer depuis tout à l'heure mais je suis encore dans le flou :s

    Est-ce correcte de mettre pour la nouvelle fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function erreursfunbis[call,e]=erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    ?

    Ensuite dans mon appel à fmincon j'ai ajouté une ligne :

    Je dois surement me tromper :s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Error : File : erreursfunbis.m Line 1 column 24
    unbalanced or unexpected parenthesis or bracket
    De plus j'ai l'impression que les temps de calculs ont augmenté, n'y a-t-il pas un moyen simple d'afficher la dernière valeur de mes variables sans recalculer tout ça une 2e fois ?

  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
    Points : 7 614
    Points
    7 614
    Par défaut
    en programmation, il y a certaines règles à respecter, notamment la première ligne dans une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [out1, out2, ...] = myfun(in1, in2, ...)
    évidemment si tu mets n'importe quoi, tu auras sûrement des erreurs.

    Tu as ta fonction erreursfun.m, celle la tu ne la modifies pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function f = erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    ...% code de la fonction
    Ensuite tu crée une nouvelle fonction (donc un nouveau fichier) erreursfunbis.m :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function [call e] = erreursfunbis(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    ...%Code de la fonction
    Et dans ton fichier principal qui appel fmincon :

    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
    21
    22
    function monopt2
     
    %Chargement des données
    load data
    prix = data;
    load data2
    strike_vec = data2;
    load data3
    sp = data3;
    sig0 = 0.00015164;
    r = 0.0006;
    nbr_sim = 20;
    nbr_strike = 36;
    epsil = randn (nbr_sim,257);
     
    x0=[0.3;0.3;0.3;0.3];
     
    options=optimset('algorithm','interior-point','display','iter');
     
    [par,fval]=fmincon(@(x)erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil),x0,[],[],[],[],[],[],@confun,options)
     
    [call e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    Salut,
    Maintenant j'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Input arguments must be scalar
    IN erreursfunbis at 9
    Je ne vois pas comment entrer que des scalaires alors qu'il y a parmi mes arguments des matrices.

  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
    Points : 7 614
    Points
    7 614
    Par défaut
    Même remarque que dans ta précédente discussion : pense a nous montrer le code complet ainsi que le message d'erreur complet.
    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.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    OK, je le ferai dès que je rentrerai du boulot ce soir

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    Salut !

    Pour ce qui est du code en totalité voilà :

    Fonction des contraintes (je ne pense pas qu'il y ait un problème ici):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function [c, ceq]= confun(par)
    c=[par(2)*(1+par(3)^2)+par(4)-1;
        -par(1);
        -par(2);
        -par(3);
        -par(4)];
    ceq=[];
    Fonction à minimiser :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    function f = erreursfun(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
     
     
    som_var = zeros(nbr_sim,257);
    som_et = zeros(nbr_sim,257);
    sigma = zeros(nbr_sim,257);
    st = zeros(nbr_sim,257);
    payoff = zeros(nbr_sim,257);
    som_payoff= zeros(257,nbr_strike);
    call= zeros(257,nbr_strike);
     
    for i = 1: nbr_strike
     
        strike = strike_vec (i);
     
        for j =1 : nbr_sim
     
            sigma (j,1)=(par(1) + par(2) *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
            for k = 2 : 257
     
                sigma (j,k)=(par(1) + par(2) * (epsil(j,1)-(par(3)^2))*sigma(j,k-1)^2+par(4)*sigma(j,k- 1)^2)^0.5;
     
            end
     
            som_var(j,257)= sigma (j,257);
            som_et(j,257)=sigma (j,257)^0.5*epsil(j,257);
     
            for k = 257 -1 : 1:-1
     
                som_var(j,k)= som_var(j,k+1)+sigma (j,k+1);
     
                som_et(j,k)=som_et(j,k+1)+sigma (j,k+1)^0.5 * epsil(j,k+1);
            end
     
            for k = 1 : 257
     
                st(j,k)= sp(k)*(exp(r*(257-k))-(0.5*som_var(j,k))+som_et(j,k)*epsil(j,k));
     
                payoff(j,k)= max(st(j,k)-strike,0);
     
                som_payoff(k,i)=som_payoff(k,i)+payoff(j,k);
            end
     
        end
     
        for k = 1  : 257
     
            call(k,i)=exp(r*(257-k))*((som_payoff(k,i)/nbr_sim));
     
        end
    end
     
    e=zeros(257,nbr_strike);
    ee=zeros(257);
    eee=0;
     
    for i = 1 : 257
        for j = 1 : nbr_strike
            e(i,j)=(prix(i,j)- call(i,j))^2;
            ee(i)=ee(i)+e(i,j);
        end
        eee=eee+ee(i);
    end
    f= eee;
    Fonction qui devrait me donner les valeurs de mes variables quand l'optimalité est atteinte :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    function [call,e] = erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
     
     
    som_var = zeros(nbr_sim,257);
    som_et = zeros(nbr_sim,257);
    sigma = zeros(nbr_sim,257);
    st = zeros(nbr_sim,257);
    payoff = zeros(nbr_sim,257);
    som_payoff= zeros(257,36);
    call= zeros(257,36);
     
    for i = 1: nbr_strike
     
        strike = strike_vec (i);
     
        for j =1 : nbr_sim
     
            sigma (j,1)=(par(1) + par(2) *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
            for k = 2 : 257
     
                sigma (j,k)=(par(1) + par(2) * (epsil(j,1)-(par(3)^2))*sigma(j,k-1)^2+par(4)*sigma(j,k- 1)^2)^0.5;
     
            end
     
            som_var(j,257)= sigma (j,257);
            som_et(j,257)=sigma (j,257)^0.5*epsil(j,257);
     
            for k = 257 -1 : 1:-1
     
                som_var(j,k)= som_var(j,k+1)+sigma (j,k+1);
     
                som_et(j,k)=som_et(j,k+1)+sigma (j,k+1)^0.5 * epsil(j,k+1);
            end
     
            for k = 1 : 257
     
                st(j,k)= sp(k)*(exp(r*(257-k))-(0.5*som_var(j,k))+som_et(j,k)*epsil(j,k));
     
                payoff(j,k)= max(st(j,k)-strike,0);
     
                som_payoff(k,i)=som_payoff(k,i)+payoff(j,k);
            end
     
        end
     
        for k = 1  : 257
     
            call(k,i)=exp(r*(257-k))*((som_payoff(k,i)/nbr_sim));
     
        end
    end
    e=zeros(257,nbr_strike);
    ee=zeros(257);
    eee=0;
     
    for i = 1 : 257
        for j = 1 : nbr_strike
            e(i,j)=(prix(i,j)- call(i,j))^2;
            ee(i)=ee(i)+e(i,j);
        end
        eee=eee+ee(i);
    end
    Et la fonction d'appel:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    function monopt2
     
    %Chargement des données
    load data
    prix = data;
    load data2
    strike_vec = data2;
    load data3
    sp = data3;
    sig0 = 0.00015164;
    r = 0.0006;
    nbr_sim = 10;
    nbr_strike = 36;
    %load data4
    %epsil = data4;
    epsil = randn (nbr_sim,257);
     
     
    x0=[0.3;0.3;0.3;0.3];
     
     
     
    options=optimset('algorithm','interior-point','display','iter');
     
    par=fmincon(@(x)erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil),x0,[],[],[],[],[],[],@confun,options)
     
     
    [call,e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    Pour ce qui est des erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Undefined function or method 'par' for input arguments of type
    'double'.
     
    Error in ==> erreursfunbis at 18
            sigma (j,1)=(par(1) + par(2)
            *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
    Error in ==> monopt2 at 28
    [call,e] =
    erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    A ma surprise c'est une erreur différente de celle d'hier ???

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Au vu de l'erreur, je pense que c'est une erreur de recopiage, mais il manque le bis dans le nom de la fonction, et pour ton erreur la première entrée se nomme x et non par, contrairement à ton autre fonction qui elle est bien erreursfun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [call,e] = erreursfunbis(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    Salut,
    Je me suis trompé en recopiant le code ici (désolé), je pense que mon problème se situe dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [call e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    J'ai essayé de remplacer 'par' par 'x' mais rien n'y fait


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ??? Undefined function or method 'x' for input arguments of type
    'double'.
     
    Error in ==> erreursfunbis at 18
            sigma (j,1)=(par(1) + par(2)
            *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
    Error in ==> monopt2 at 28
    [call,e] =
    erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas de x dans le message d'erreur... es-tu bien sûr de le recopier correctement?
    Sinon si tu as cette erreur, c'est que tu utilises une variable x quelque part dans ta fonction erreurfunbis... la question est: est-ce toujours un problème de remplacement de x par par, ou est-ce deux variables distinctes?
    Dans ce dernier cas, au lieu de le remplacer dans le prototype de ta fonction, il te faut l'ajouter.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    En mettant par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [call e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    j'ai ce message d'erreur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Undefined function or method 'par' for input arguments of type
    'double'.
     
    Error in ==> erreursfunbis at 18
            sigma (j,1)=(par(1) + par(2)
            *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
    Error in ==> monopt2 at 28
    [call,e] =
    erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    Et en mettant x :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [call e] = erreursfunbis(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Undefined function or method 'x' for input arguments of type
    'double'.
     
    Error in ==> erreursfunbis at 18
            sigma (j,1)=(par(1) + par(2)
            *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
    Error in ==> monopt2 at 28
    [call,e] =
    erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)

  13. #13
    Invité
    Invité(e)
    Par défaut
    Dans ce cas, comment effectues-tu l'appel de cette fonction?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    En metant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    par=fmincon(@(x)erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil),x0,[],[],[],[],[],[],@confun,options)
     
    [call,e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)

  15. #15
    Invité
    Invité(e)
    Par défaut
    Désolé je ne l'ai vu qu'après
    Depuis le début je te parlais du prototype de la fonction (lorsque tu la définis), et non son appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [call,e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    En fait au début du mfile de ma fonction erreursfunbis j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function [call,e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    Ensuite dans le mfile d'appel de l'optimisation j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    par=fmincon(@(x)erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil),x0,[],[],[],[],[],[],@confun,options)
     
    [call,e] = erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    Après optimisation j'ai mon vecteur 'par' qui s'affiche et puis l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Undefined function or method 'par' for input arguments of type
    'double'.
     
    Error in ==> erreursfunbis at 18
            sigma (j,1)=(par(1) + par(2)
            *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
    Error in ==> monopt2 at 28
    [call,e] =
    erreursfunbis(par,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    Je n'ai pas les valeurs de 'call' et de 'e' :s

  17. #17
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    peux-tu nous redonner le code complet de erreursfunbis?

    es-tu sûr d'avoir un seul fichier erreursfun.m qui contient la fonction erreursfun et un seul fichier erreursfunbis.m qui contient la fonction erreursfunbis?
    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.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    Voilà :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    function [call,e] = erreursfunbis(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
     
     
    som_var = zeros(nbr_sim,257);
    som_et = zeros(nbr_sim,257);
    sigma = zeros(nbr_sim,257);
    st = zeros(nbr_sim,257);
    payoff = zeros(nbr_sim,257);
    som_payoff= zeros(257,36);
    call= zeros(257,36);
     
    for i = 1: nbr_strike
     
        strike = strike_vec (i);
     
        for j =1 : nbr_sim
     
            sigma (j,1)=(par(1) + par(2) *(epsil(j,1)-(par(3)^2))*sig0^2+par(4)*sig0^2)^0.5;
     
            for k = 2 : 257
     
                sigma (j,k)=(par(1) + par(2) * (epsil(j,1)-(par(3)^2))*sigma(j,k-1)^2+par(4)*sigma(j,k- 1)^2)^0.5;
     
            end
     
            som_var(j,257)= sigma (j,257);
            som_et(j,257)=sigma (j,257)^0.5*epsil(j,257);
     
            for k = 257 -1 : 1:-1
     
                som_var(j,k)= som_var(j,k+1)+sigma (j,k+1);
     
                som_et(j,k)=som_et(j,k+1)+sigma (j,k+1)^0.5 * epsil(j,k+1);
            end
     
            for k = 1 : 257
     
                st(j,k)= sp(k)*(exp(r*(257-k))-(0.5*som_var(j,k))+som_et(j,k)*epsil(j,k));
     
                payoff(j,k)= max(st(j,k)-strike,0);
     
                som_payoff(k,i)=som_payoff(k,i)+payoff(j,k);
            end
     
        end
     
        for k = 1  : 257
     
            call(k,i)=exp(r*(257-k))*((som_payoff(k,i)/nbr_sim));
     
        end
    end
    e=zeros(257,nbr_strike);
    ee=zeros(257);
    eee=0;
     
    for i = 1 : 257
        for j = 1 : nbr_strike
            e(i,j)=(prix(i,j)- call(i,j))^2;
            ee(i)=ee(i)+e(i,j);
        end
        eee=eee+ee(i);
    end
    Dans mon dossier j'ai :
    Un mfile pour les contraintes
    Un mfile pour erreursfunbis
    Un mfile pour erreursfun
    Un mfile pour l'appel de fmincon
    Et 3 .mat pour les données.

  19. #19
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [call,e] = erreursfunbis(x,prix,strike_vec,sp,sig0,r,nbr_sim,nbr_strike,epsil)
    ce n'est pas celui que tu nous as montré dans ton message #16

    remplace le x par par et ça devrait marcher.
    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.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    En fait j'ai essayé toute les combinaisons entre par et x, je viens de changer comme tu me l'as dit et c'est toujours le même problème :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Undefined function or method 'par'

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. valeur des variable sous la souris en debogage
    Par neho88 dans le forum EDI
    Réponses: 5
    Dernier message: 28/04/2010, 22h52
  2. [MySQL] problème avec la récupération des valeurs des variables POST
    Par Jasmine80 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 11/05/2007, 16h08
  3. [Debutant][Système]Récupérer la valeur des variables systeme
    Par cameleon2002 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/02/2007, 09h57
  4. Affichage des valeurs des variables avec tkprof
    Par hkhan13 dans le forum Oracle
    Réponses: 2
    Dernier message: 04/07/2006, 11h59
  5. Réponses: 3
    Dernier message: 02/03/2006, 19h22

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