macro per ricerca obiettivo



  • macro per ricerca obiettivo
    di Gaetanick (utente non iscritto) data: 12/04/2014 20:06:23

    Salve!
    dovrei trovare i valori di 3 variabili indipendenti che annullano contemporaneamente 3 funzioni cioè:
    f(x,y,z)=0
    g(x,y,z)=0
    h(x,y,z)=0
    Bisogna utilizzare la funzione ricerca obiettivo 3 volte e con iterazioni ripetute perchè il soddisfacimento di una funzione ricerca obiettivo =0 modifica i valori delle altre funzioni! Quindi si tratta di una tripla iterazione.
    Manualmente risulta molto laborioso perchè bisogna applicare la ricerca obiettivo ripetutamente a tre funzioni che dipendono dalle stesse variabili. Mi chiedo come posso applicare una macro che consenta di eseguire la funzione ricerca obiettivo in modo seriale, o se esiste una funzione più rapida.
    non so se sono stato chiaro!
    Qualcuno può aiutarmi?E' per la tesi di laurea



  • di Textomb data: 13/04/2014 10:47:27

    ciao
    Una problematica del genere si potrebbe risolvere utilizzando il ricerca obiettivo in modo combinato ad un ciclo do loop until.
    Sostanzialmente fai ripetere il ricerca obiettivo fin quando non vengono verificate le condizioni che cerchi anche sulle altre funzioni.
    Per addentrarsi meglio dovresti allegare qualche esempio concreto con ciò che ti serve ottenere e le variabili che vengono coinvolte nei calcoli.



  • ciclo do loop until
    di Gaetanick (utente non iscritto) data: 13/04/2014 11:16:20

    Il file che tratto è molto grande e prevede riferimenti a migliaia di celle, però il problema che devo risolvere riguarda solo 6 celle, in particolare 3 celle dove sono localizzate le variabili indipendenti x,y,z che possiamo ad esempio porre rispettivamente in A1, A2, A3 e le funzioni f, g, h che poniamo rispettivamente in B1, B2, B3. Il discorso non cambia basterà solo modificare le celle. Per essere più precisi tutte le funzioni dipendono dalle tre vaiabili però ad ognuna deve essere applicata la ricerca obiettivo su una sola variabile. In particolare:
    Alla funzione in B1 va applicata la ricerca obiettivo (=0) variando la cella A1
    Alla funzione in B2 va applicata la ricerca obiettivo (=0) variando la cella A2
    Alla funzione in B3 va applicata la ricerca obiettivo (=0) variando la cella A3
    Ma applicando ricerca obiettivo ad una cella varia il valore delle altre due funzioni è questo il problema!!!
    si deve fare ricerca obiettivo fino a quando si ha una convergenza (tutte le funzioni si annullano) ovviamente con una certa tolleranza perchè non sarà possibile la convergenza totale!
    Puoi scrivermi il codice della funzione do loop until con queste celle?
    Ti ringrazio tanto, Gaetano



  • di Zer0Kelvin data: 13/04/2014 16:08:21

    Ciao.
    Si potrebbe provare a registrare una macro ed adattare il codice ottenuto.



  • di Gaetanick (utente non iscritto) data: 13/04/2014 16:25:10

    Riporto il codice che ho registrato nel file originale,
    devo ripetere la macro diverse volte per arrivare alla convergenza!
    come si applica il ciclo do loop until?

    ps:perchè quando riapro il file dopo aver salvato mi cancella la macro?
    E' la prima volta che uso le macro, forse devo salvare in altro modo?
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    '
        Range("K145").GoalSeek Goal:=0, ChangingCell:=Range("J145")
        Range("K150").GoalSeek Goal:=0, ChangingCell:=Range("J110")
        Range("K154").GoalSeek Goal:=0, ChangingCell:=Range("J109")
    End Sub



  • di Textomb data: 14/04/2014 09:56:58

    un'idea di come risolvere la questione potrebbe essere questa.
    come ti avevo già accennato.
    riporto il codice sotto.
    ti consiglio di assegnare un valore >0 a cui attribuire la tolleranza che vuoi ammettere nel calcolo.
    nel nostro caso ho ipotizzato la cella K155.
    Ciao

     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    Do
    
        Range("K145").GoalSeek Goal:=0, ChangingCell:=Range("J145")
        Range("K150").GoalSeek Goal:=0, ChangingCell:=Range("J110")
        Range("K154").GoalSeek Goal:=0, ChangingCell:=Range("J109")
    
    Loop Until Abs(Range("K145")) + Abs(Range("K150")) + Abs(Range("K154")) <= Range("K155")
    
    MsgBox "Obiettivo Ottenuto", vbInformation
    
    End Sub



  • di Zer0Kelvin data: 14/04/2014 12:02:07

    Quote:
    ___________________________________________________________
    ps:perchè quando riapro il file dopo aver salvato mi cancella la macro?
    E' la prima volta che uso le macro, forse devo salvare in altro modo?
    ___________________________________________________________

    Ciao.
    Riguardo a questo, con Excel 2007 o successivi, devi salvare il file in formato .xlsm (file con attivazione macro) oppure .xlsb (file binario).