Risultati da 1 a 9 di 9

Discussione: problema routine



  1. #1
    L'avatar di engineer
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Catania
    Età
    28
    Messaggi
    2
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    1

    problema routine

    Salve
    dovendo risolvere un'equazione di secondo grado particolarmente complessa (e dovendola risolvere per 352779 dati) ho pensato di implementare questa routine su excel. Purtroppo c'è qualcosa che sicuramente non va, dato che nella maggior parte dei casi si blocca all'interno del ciclo, e nei casi rimanenti stampa risultati errati (andando a confrontare con la soluzione del risolutore). Per esempio fornendo u = 26,7 e tm = 1 dovrebbe dare come risultato circa 5. Spero che qualcuno possa aiutarmi. Vi ringrazio anticipatamente.



    Invia MPPM 

  2. #2
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17
    per cominciare per facilitare il lavoro di chi potrà aiutarti è di postare un file di esempio
    magari una tabellina con i valori di imput ed il risultato corretto
    non aiuti molto mettendo immagini che uno devo riscriversi!!!
    almeno metti la routine in formato testo!!!

    posso solo dirti di implementare da subito la funzione 'on error goto' che aiuto ad individuare il problema
    e per prova scivere su una colonna la sequenza dei valori trovati per vedere verso a cosa converge
    comunque c'è da fare una considerazione, i valori cercati, posson non necessariamente essere univoci
    NON essendo una semplice equazione di 2° grado, ma ben più complessa
    basta graficarla in lambda
    ed in queste ricerche, di solito si parte con una 'trappola' più grande, per poi restringerla
    ma ad occhio è più un problema di metodo che di Excel, tipo gestire il segno dell'errore per decidere di andare 'avanti' o 'indietro', e poi allontanarsi con il valore iniziale di lambda
    al momento non posso aiutardi essendo lontano da una postazione Excel

    e poi tanto per dire...
    convenzionalmente l'accelerazione di gravita dal lontano 1901 vale 9.80665 m/s², a 45° di latitudine ed a livello del mare
    volendo c'è la formula esatta che tiene conto della latitudine, dell'altezza sul livello del mare o sull'acqua
    e visto che tutte le altre costanti sono di 5 cefre, per uniformità userei almeno 9.8066
    Invia MPPM 

  3. I seguenti utenti hanno dato un "Like"


  4. #3
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17
    ti consiglio l'uso del metodo di Newton-Rapshson (bisogna ricavarsi le derivate prime e seconde della funzione) detto anche metodo delle tangenti, è molto veloce

    il tuo codice è concettualmente sbagliato in quanto non tiene conto dell'errore se è positico e negativo
    e poi essendo una funzione tipicamente esponenziale ha valori piccolissimi e grandissimi
    per cui a sinistra l'incremento può essere più grande mentre a sinistra molto piccolo
    a secondo di dove si trova l'incremento deve cambiare altrimenti si rischi di oscillare fuori dalla trappola

    per il tuo valore 9.80665*1/26.7 = 0.3673, lambda =-5.83 (MENO), basta graficare la funzione e si ha un'idea dell'andamento e del volore aprossimativo cercato
    un codice molto grezzo, che non corregge l'incremento, e bisogna indivuduare (graficamente) il possibile valore di lambda, può essere:
    Codice: 
    Public Function SMB(U As Double, tm As Double) As Double
    Dim k As Double, incr As Double, errMax As Double, lambda As Double, errore As Double
    
        errMax = 0.01
        k = 9.80665 * tm / U
        lambda = -6
        incr = 0.001
        
    rip:
        errore = base(lambda) - k
        If errore > errMax Then
           lambda = lambda - incr
           GoTo rip
        ElseIf errore < -errMax Then
           lambda = lambda + incr
           GoTo rip
        End If
        SMB = lambda
    End Function
    
    Function base(lambda As Double) As Double
        base = 6.5882 * Exp((0.0161 * lambda ^ 2 - 0.3692 * lambda + 2.2024) ^ 0.5 + 0.8798 * lambda)
    End Function
    Invia MPPM 

  5. I seguenti 4 utenti hanno dato un "Like" a zio_tom per questo post:


  6. #4
    L'avatar di engineer
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Catania
    Età
    28
    Messaggi
    2
    Versione Office
    2010
    Likes ricevuti
    0
    Likes dati
    1
    Ti ringrazio!!!!!!
    Molto gentile!
    Invia MPPM 

  7. #5
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17
    la cosa banale che mi è sfuggita, senza uso di VBA, è usare il "RISOLUTORE" di Excel
    bisogna attivarlo, aggiungi componenti aggiuntivi
    andando su 'Dati' lo si vede sull'estrema destra della Ribbon
    scrivere la funzione uguagliando a zero
    cioe su cella C2 =6.5822*EXP((0.0161*A3^2-0.3692*A3+2.2024)^0.5+0.8798*A3)-9.80665*$B$2/$B$1
    con su B1 U, e su B2 tm
    selezionando la cella C2, click su risolutore
    imporre la ricerca dello 0
    fissare i valori min e max (ristretti perchè è piuttosto lento e poco preciso)


    Invia MPPM 

  8. #6
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1125
    Ciao Zio_Tom
    Ti do un consiglio per inserire immagine statiche in formato .jpg .gif .png ecc.. ecc.per questo forum
    Guarda questo video ti fa vedere come inserire direttamente da link esterno


    http://www.forumexcel.it/forum/2-ann...-www-imgur-com


    esempio:




    Ciao
    Invia MPPM 

  9. #7
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17
    per didattica riporto metodo di Newton-Raphson

    https://it.wikipedia.org/wiki/Metodo_delle_tangenti

    Codice: 
    Public Function metodoNewton(x0 As Double, e As Double, n As Integer, k As Double) As Double
    'x0 obiettivo
    'e  errore ammesso per convergenza
    'n  numero interazioni
    'k  valore y voluto (da inserire direttamente o puntando una casella)
    '   sarebbe g*tm/U
    '=metodoNewton(0;0.0001;1000;A3)
    
    Dim i As Integer, err As Double, xn As Double, xn1 As Double
        i = 0: err = 9999
        xn = x0
        While (err > e) And (i < n)
            Funz = Fx(xn, k)
            derFunz = dFx(xn)
            xn1 = xn - Funz / derFunz
            err = Abs(xn1 - xn)
            xn = xn1
            i = i + 1
        Wend
        If i>=n Then MsgBox "Superato limite cicli imposto."
        metodoNewton = xn
    End Function
    
    Public Function Fx(x As Double, k As Double) As Double
    'funzione base
        Fx = 6.5882 * Exp((0.0161 * x ^ 2 - 0.3692 * x + 2.2024) ^ 0.5 + 0.8798 * x) - k
    End Function
    
    Public Function dFx(x As Double) As Double
    'derivata funzione base
        dFx = 6.5882 * Exp((0.0161 * x ^ 2 - 0.3692 * x + 2.2024) ^ 0.5 + 0.8798 * x) _
        * ((0.0322 * x - 0.3692) / (2 * (0.0161 * x ^ 2 - 0.3692 * x + 2.2024) ^ 0.5) + 0.8798)
    End Function
    12 interazioni contro le circa 1000, molto efficiente, a parità di errore voluto 0.0001 e valore 'lambda=-5.792479'

    ovviamente nelle Function Fx ed dFx
    si sostituiscono con rispettivamente con lafunzione f(x) e la sua derivata f'(x)
    che vogliamo

    per trovare la derivata e non ci ricordiamo come ricavarla a mano
    ci viene in aiuto un applicativo di Microsoft 'Mathematics'
    liberamente scaricabile sia in versione 32bit sia 64bit
    https://www.microsoft.com/it-it/down....aspx?id=15702

    ... è tutto
    .... ingegneria non è più quella di una volta, erano quasi 40 anni che non vedevo tali cose (non son problemi di Excel)
    .... meglio cambiare Nick
    Invia MPPM 

  10. #8

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6747
    Versione Office
    2013
    Likes ricevuti
    711
    Likes dati
    162
    Invia MPPM 

  11. #9

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4016
    Versione Office
    2013
    Likes ricevuti
    1225
    Likes dati
    923
    Ciao a tutti e....
    mi scuso in anticipo con zio_tom (la discussione rimarrà comunque visibile).

    @engineer
    ti invito a leggere il regolamento specialmente la parte riguardante il cross-posting:

    Regola nr.3 "Crossposting" la stessa domanda vietata su più forum
    Non è consentito postare lo stesso messaggio o parti di esso in più aree del forum o su altri forum di excel, salvo casi di particolare interesse che dovranno comunque essere autorizzati da un Admin
    Messaggi crossposting verranno chiusi e quando possibile riuniti.
    Se ripetuti potranno portare all'allontanamento dell'utente.
    Domanda postata su altro forum:
    http://www.pc-facile.com/forum/viewt...?f=26&t=106561

    Questa discussione verrà chiusa.

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
    Invia MPPM 

Discussioni Simili

  1. [Risolto] Errore su routine
    Di DINO1 nel forum Domande su Excel VBA e MACRO
    Risposte: 5
    Ultimo Messaggio: 13/12/16, 18:17
  2. Errore Routine troppo estesa!
    Di morenomax nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 26/04/16, 18:09
  3. Creare routine di stampe con excel
    Di Nicolabt nel forum Domande su Excel VBA e MACRO
    Risposte: 8
    Ultimo Messaggio: 14/03/16, 20:42
  4. Creare routine di stampe con excel
    Di Nicolabt nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 12/03/16, 21:57
  5. Chiamata di routine o argomenti non validi
    Di Alessandro nel forum Domande su Excel VBA e MACRO
    Risposte: 6
    Ultimo Messaggio: 09/03/16, 15:24

Tag per Questa Discussione

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •