Calcolo integrale



  • Calcolo integrale...
    di Beppe (utente non iscritto) data: 01/12/2008

    Salve a tutti, sono quello che si può definire un neofita del vba, avrei bisogno di sapere se esiste un modo per il calcolo dell'integrale di una funzione.
    grazie in anticipo
    beppe


  • Integrali
    di Riccardo (utente non iscritto) data: 14/12/2008

    Parecchi anni fa mi ero trovato nella situazione di risovere problemini di analisi matematica con excel. la soluzione, in generale, è abbastanza banale se si posseggono nozioni sufficienti di analisi.

    nel caso dell'integrazione per via numerica la soluzione è veramente banale: basta applicare la definizione matematica di integrale, come limite della sommatoria dei prodotti degli intervalli infinitesimi per il valore della funzione calcolata nel centro dell'intervallo stesso, quando dx tende allo zero.

    esistono poi diversi metodi come quello di cavalieri che, con interpolazioni diverse da quella lineare, eseguono calcoli con approssimazioni molto migliori di quella lineare, ma questo è un altro discorso e lo rimandiamo a testi di analisi infinitesimale.
    la routine in vba è semplice applicando un ciclo for ... next all'intervallo di integrazione (a < x < b), suddiviso in un numero congruo di parti (n):
    for i = 1 to n
    sommatoria = sommatoria + f(x+dx/2) * dx
    next i

    il vero grosso problema è quello di sviluppare una funzione evaluate, cioè valuta funzione (f(x), (che nell'antico framework era integrata nel set di istruzioni), mentre in excel non esiste.
    allora ho fatto ricorso ad un help di un forum dove ho trovato delle funzioni validissime che risolvono tutta quanta l'analisi matematica e l'analisi numerica più comune, per intenderci dei primi annni di matematica superiore, ivi compreso il calcolo integrale.
    io personalmente ho utilizzato la routine per sviluppare le funzioni basilari dell'analisi, derivate, grafici, studi di funzione, azzeramento di funzioni col metodo di newton.
    mi sono molto divertito; con piacere ti invio il testo della fondamentale funzione evaluate che il "cervellone" (sig. leonardo volpi) con passione e competenza ha sviluppato nel set di calcolo numerico.
    nella sezione scambio file ho inserito il file "excelfastformula.zip" che contiene gli strumenti creati da leonardo volpi che comprendono tutti gli elementi del calcolo numerico superiore; c'è anche un .doc esplicativo, molto valido. buon divertimento!
    spero di averti fatto un buon servizio, come lo fecero a me coloro che me lo mandarono a suo tempo.
    riccardo
    p.s. qui sotto il codice della sola funzione evalformula, accompagnata dalle funzioni di supporto.

     
    '****************************************************************
    ' Math Expression Evaluation Function. r1.1 , April 2003
    ' using the standard Application.Evaluate EXCEL object
    ' It work with both numeric/symbolic expression
    ' variable symbols are: x, y, z
    'function recognized are:
    'abs,atan,cos,exp,round,int,ln,log,rand,sign,sin,sqrt,tan,acos,
    'asin,cosh,sinh,tanh,acosh,asinh,atanh,fact,min,max,mod
    '****************************************************************
    Function EvalFormula(Formula, Optional x, Optional y, Optional z)
    ' Math Expression Evaluation Function. r1.0 , Sept 2001
    ' using the standard Application.Evaluate EXCEL object
    ' It work with both numeric/symbolic expression
    ' variable symbols are: x, y, z
    ' formula= any expr string like "x^2+3*x+2", "sin(x^2+y^2)"
    ' returns a numeric evaluation or an error message
    'Error   2029    function not found
    'Error   2036    evaluate impossible
    'Error   2007    division for 0
    'Error   2036    evaluate impossible
    'Error   2015    syntax error
    '----------------------------------------------------------------
        f$ = Formula
        If Not IsMissing(x) Then
            VarValue$ = "(" + Trim(Str(x)) + ")"
            strSubstitute f$, "x", VarValue$
        End If
        If Not IsMissing(y) Then
            VarValue$ = "(" + Trim(Str(y)) + ")"
            strSubstitute f$, "y", VarValue$
        End If
        If Not IsMissing(z) Then
            VarValue$ = "(" + Trim(Str(z)) + ")"
            strSubstitute f$, "z", VarValue$
        End If
        EvalFormula = Application.Evaluate(f$)
    End Function
    
    Private Sub strSubstitute(str1, str2, str3)
    'subsitutes string str2 with str3 into str1
    'ver. 3-4-2003 X
    Dim p%
    p = 0
    Do
        p = InStr(p + 1, str1, str2, vbTextCompare)
        If p = 0 Then Exit Do
        '---- --- fix. bug for exp() and max().  Thanks to Chi M Le
        C1 = "-":    C2 = "-"
        If p > 1 Then C1 = Mid(str1, p - 1, 1)
        If p < Len(str1) Then C2 = Mid(str1, p + 1, 1)
        If Not (IsLetter(C1) Or IsLetter(C2)) Then
            '-------------------------------
            S1$ = Left(str1, p - 1)
            L% = Len(str1) - p - Len(str2) + 1
            S2$ = Right(str1, L%)
            str1 = S1$ + str3 + S2$
        End If
    Loop
    End Sub
    
    Private Function IsLetter(c) As Boolean
        code = Asc(c)
        If (65 <= code And code <= 90) Or _
        (97 <= code And code <= 122) Then
            IsLetter = True
        Else
            IsLetter = False
        End If
    End Function
    


  • Integrali
    di Riccardo (utente non iscritto) data: 14/12/2008

    Parecchi anni fa mi ero trovato nella situazione di risovere problemini di analisi matematica con excel. la soluzione, in generale, è abbastanza banale se si posseggono nozioni sufficienti di analisi.

    nel caso dell'integrazione per via numerica la soluzione è veramente banale: basta applicare la definizione matematica di integrale, come limite della sommatoria dei prodotti degli intervalli infinitesimi per il valore della funzione calcolata nel centro dell'intervallo stesso, quando dx tende allo zero.

    esistono poi diversi metodi come quello di cavalieri che, con interpolazioni diverse da quella lineare, eseguono calcoli con approssimazioni molto migliori di quella lineare, ma questo è un altro discorso e lo rimandiamo a testi di analisi infinitesimale.
    la routine in vba è semplice applicando un ciclo for ... next all'intervallo di integrazione (a < x < b), suddiviso in un numero congruo di parti (n):
    for i = 1 to n
    sommatoria = sommatoria + f(x+dx/2) * dx
    next i

    il vero grosso problema è quello di sviluppare una funzione evaluate, cioè valuta funzione (f(x), (che nell'antico framework era integrata nel set di istruzioni), mentre in excel non esiste.
    allora ho fatto ricorso ad un help di un forum dove ho trovato delle funzioni validissime che risolvono tutta quanta l'analisi matematica e l'analisi numerica più comune, per intenderci dei primi annni di matematica superiore, ivi compreso il calcolo integrale.
    io personalmente ho utilizzato la routine per sviluppare le funzioni basilari dell'analisi, derivate, grafici, studi di funzione, azzeramento di funzioni col metodo di newton.
    mi sono molto divertito; con piacere ti invio il testo della fondamentale funzione evaluate che il "cervellone" (sig. leonardo volpi) con passione e competenza ha sviluppato nel set di calcolo numerico.
    nella sezione scambio file ho inserito il file "excelfastformula.zip" che contiene gli strumenti creati da leonardo volpi che comprendono tutti gli elementi del calcolo numerico superiore; c'è anche un .doc esplicativo, molto valido. buon divertimento!
    spero di averti fatto un buon servizio, come lo fecero a me coloro che me lo mandarono a suo tempo.
    riccardo
    p.s. qui sotto il codice della sola funzione evalformula, accompagnata dalle funzioni di supporto.

     
    '****************************************************************
    ' Math Expression Evaluation Function. r1.1 , April 2003
    ' using the standard Application.Evaluate EXCEL object
    ' It work with both numeric/symbolic expression
    ' variable symbols are: x, y, z
    'function recognized are:
    'abs,atan,cos,exp,round,int,ln,log,rand,sign,sin,sqrt,tan,acos,
    'asin,cosh,sinh,tanh,acosh,asinh,atanh,fact,min,max,mod
    '****************************************************************
    Function EvalFormula(Formula, Optional x, Optional y, Optional z)
    ' Math Expression Evaluation Function. r1.0 , Sept 2001
    ' using the standard Application.Evaluate EXCEL object
    ' It work with both numeric/symbolic expression
    ' variable symbols are: x, y, z
    ' formula= any expr string like "x^2+3*x+2", "sin(x^2+y^2)"
    ' returns a numeric evaluation or an error message
    'Error   2029    function not found
    'Error   2036    evaluate impossible
    'Error   2007    division for 0
    'Error   2036    evaluate impossible
    'Error   2015    syntax error
    '----------------------------------------------------------------
        f$ = Formula
        If Not IsMissing(x) Then
            VarValue$ = "(" + Trim(Str(x)) + ")"
            strSubstitute f$, "x", VarValue$
        End If
        If Not IsMissing(y) Then
            VarValue$ = "(" + Trim(Str(y)) + ")"
            strSubstitute f$, "y", VarValue$
        End If
        If Not IsMissing(z) Then
            VarValue$ = "(" + Trim(Str(z)) + ")"
            strSubstitute f$, "z", VarValue$
        End If
        EvalFormula = Application.Evaluate(f$)
    End Function
    
    Private Sub strSubstitute(str1, str2, str3)
    'subsitutes string str2 with str3 into str1
    'ver. 3-4-2003 X
    Dim p%
    p = 0
    Do
        p = InStr(p + 1, str1, str2, vbTextCompare)
        If p = 0 Then Exit Do
        '---- --- fix. bug for exp() and max().  Thanks to Chi M Le
        C1 = "-":    C2 = "-"
        If p > 1 Then C1 = Mid(str1, p - 1, 1)
        If p < Len(str1) Then C2 = Mid(str1, p + 1, 1)
        If Not (IsLetter(C1) Or IsLetter(C2)) Then
            '-------------------------------
            S1$ = Left(str1, p - 1)
            L% = Len(str1) - p - Len(str2) + 1
            S2$ = Right(str1, L%)
            str1 = S1$ + str3 + S2$
        End If
    Loop
    End Sub
    
    Private Function IsLetter(c) As Boolean
        code = Asc(c)
        If (65 <= code And code <= 90) Or _
        (97 <= code And code <= 122) Then
            IsLetter = True
        Else
            IsLetter = False
        End If
    End Function
    



  • di Riccardo (utente non iscritto) data: 14/12/2008

    Chiedo scusa, per errore mi è partita per 2 volte la stessa risposta.
    riccardo