Calcolo iterativa



  • Calcolo iterativa
    di madesi (utente non iscritto) data: 23/01/2016 11:19:29

    Buon pomeriggio,
    ho bisogno del vostro aiuto.
    Avrei bisogno di creare una macro in Excel che mi faccia dei calcoli iterativi.
    Nello specifico ho un set di valori di Temperatura che metto come iniziali e il foglio di calcolo trova dei coefficienti di scambio di calore.Mi ricalcolo cosi nuove temperature finché non ottengo che la temperatura il delta= T(ntentativo)-T(ntentativo-1) siano <0,001.
    solo cosi ottengo il valore di coefficiente di scambio effettivo.
    Vi sono però in ogni coefficiente di scambio globale vari coefficienti per cui le temperature sono tra loro dipendenti.
    Io ho bisogno che tutte le temperature vadano a convergenza contemporaneamente.
    Le funzioni sono monotone per cui con 2 o massimo tre tentativi riesco a farle convergere ma con tale macro risparmio molto tempo.
    Potete aiutarmi??
    Dall'esempio potete capire che le celle di verifica sono da C229 a C335.
    Bisogna andare a cambiare le celle di primo tentativo C265 C94 C269 C130 C190 D146 D168 rispettivamente finchè lo scarto tra esse e quelle finali di verifica sia <0,001.
    Grazie in anticipo.
    p.s. ho provato andando a sbloccare in opzioni excel la formula circolare ma dopo 2 passaggi mi da valore su una temperatura e così pure se vado avanti non mi da convergenza.



  • di patel data: 24/01/2016 09:19:03

    cit.
    Dall'esempio potete capire che le celle di verifica sono da C229 a C335.

    Ci ritieni molto intelligenti, grazie, ma per lo meno io non lo sono.





  • di madesi data: 24/01/2016 17:17:13

    Cosa non è chiaro??



  • di Mohican1989 data: 30/01/2016 14:43:07

    Rispolvero, vuoi provare a riallegare il file ? Evidentemente scrivi come se tutti sapessimo cosa si intende per temperature indipendenti e avessimo chiaro cosa sia il concetto di scambio di calore. Ad ogni modo sicuramente con il file alcune cose potevano essere capite, ora che non c'è più è davvero difficile interpretare-



  • di madesi data: 31/01/2016 09:50:21

    Ho ricaricato il file.
    Non vi chiedo di capire il contenuto del file visto che sono concetti di scambio di calore.
    Voglio solo che automaticamente mi ributti nelle caselle C265 C94 C269 C130 C190 D146 D168 i valori trovati nelle caselle da C229 a C335 rispettivamente finchè le differenze C265-335<0,001.
    Spero di esser stato chiaro stavolta.



  • di Mohican1989 data: 31/01/2016 14:14:44

    Perdona, la cella C229 è vuota e nella cella a fianco c'è scritto "Where,".
    La Cella c238 c239 c240 c241 sono vuote nella cella c242 la formula per trovare hR insomma ci sono un sacco di celle vuote altre con dei risultati.
    Da quello che leggo chiedi di trasporre i dati delle caselle da c229 a c335 sono 106 celle, dubito intendessi poter mettere il valore dellde 106 celle nelle 7 che hai indicato.



  • di madesi data: 06/02/2016 10:26:15

    Scusate la confusione ma intendevo sostituire il valore nelle 7 celle da C329 a C335 nelle celle come indicato a fianco. Ad esempio per la C329 : Put this value manually in cell C265 untill difference approaches zero. In pratica manualmente io dovrei mettere il valore della cella C329 nella C265 finchè la differenza di valori non è trascurabile (diciamo 0,01).cosi per tutte le T.Potrei farlo con VBA utilizzando un ciclo do.While? mi aiutate??



  • di Mohican1989 data: 07/02/2016 14:36:59

    Ti posto il codice.
    Di fatto i numeri non sembrano cambiare perché le differenze già soddisfano il requisito ...
     
    Sub AvvicinaZero()
    Do Until (Range("C329") - Range("C265")) < 0.001
        Range("C265") = Range("C329")
    Loop
    Do Until (Range("C330") - Range("C94")) < 0.001
        Range("C94") = Range("C330")
    Loop
    Do Until (Range("C331") - Range("C269")) < 0.001
        Range("C269") = Range("C331")
    Loop
    Do Until (Range("C332") - Range("C130")) < 0.001
        Range("C130") = Range("C332")
    Loop
    Do Until (Range("C333") - Range("C190")) < 0.001
        Range("C190") = Range("C333")
    Loop
    Do Until (Range("C334") - Range("D146")) < 0.001
        Range("D146") = Range("C334")
    Loop
    Do Until (Range("C335") - Range("D168")) < 0.001
        Range("D168") = Range("C335")
    Loop



  • di madesi data: 07/02/2016 17:50:37

    Non so come ringraziarti.Va bene!!!! l'unica cosa è che ho dovuto anteporre Abs alla differenza perchè la convergenza può avvenire anche dal segno -.Non so se sono stato chiaro.