Derivazione/Integrazione in C++

Flamber
Ciao ragazzi, cercavo un libro o delle risorse online che trattassero abbastanza approfonditamente l'implementazione del calcolo integrale e differenziale per il C++. Dove posso trovare qualcosa del genere?

Risposte
vict85
Numerico o simbolico? A che ti serve? Per il numerico lo puoi dedurre da ogni manuale di analisi numerica (con qualche impegno da parte tua).

Flamber
Non mi serve a nulla, se non per cultura personale, mi sono posto il dubbio perchè stavo cercando di scrivere un programmino che mi integrasse un funzione con metodo montecarlo. Quindi mi interessa capire con più precisione possibile quale sia il massimo locale della funzione nell'intervallo per poter aplicare il montecarlo.
Sicuramente un'approccio numerico è indispensabile.

Per l'integrazione/derviazione simbolica invece da dove potrei partire?

apatriarca
Credo che la mia idea di metodo montecarlo non corrisponda alla tua perché non vedo la necessità di conoscere il massimo in un intervallo. In effetti il metodo montecarlo che conosco io non ha alcun bisogno di avere funzione sulla funzione integrata (è il suo forse unico vantaggio in effetti).

Flamber


Allora penso che non stiamo parlando della stessa cosa, anche perchè io non sono molto competente in materia.
Comunque, facendo riferimento all'immagine la mia idea di massima era:

1) Chiedo all'utente la funzione e ne trovo il valore massimo.

2) chiedo all'utente su quale intervallo (a,b) vuole integrare.

3) scelgo $10^15$ punti in quel rettangolo di altezza h, con coordinate pseudo-casuali, e tengo conto nella variabile n di quanti punti stanno sotto la funzione.

4) con la proporzione $10^15/n=((b-a)*h)/(int_a^bf(x)dx)$ trovo l'integrale

Però per trovare $h$ non ho bisogno di trovare il massimo della funzione?

vict85
Ti suggerisco di cominciare con il guardare wiki per metodi più efficienti http://en.wikipedia.org/wiki/Numerical_integration

Per quanto riguarda la questione dell'implementazione la cosa più complessa ritengo sia gestire le funzioni, a meno che tu non voglia fare un codice troppo specializzato per essere riutilizzato. Il metodo più generale consiste nell'usare i template. Il metodo più alla C è quello di usare puntatori a funzioni. Il primo metodo è in qualche modo più generale ed è, in un certo senso, compatibile con il secondo.

Flamber
Conosco quei metodi, ho seguito un corso di calcolo numerico abbastanza corposo, e ne ho implementato la maggior parte con Matlab.

Tuttavia ciò che cercavo, erano degli esempi o dei libri che riguardassero proprio l'integrazione e la derivazione implementata in C++, non so perchè, ma sono attratto dall'argomento e mi piacerebbe saperne di più

apatriarca
Di fatto non esiste un vero e proprio "metodo montecarlo". Un metodo montecarlo è qualsiasi metodo che stima una qualche quantità incognita a partire da un certo numero di campioni casuali. Un metodo montecarlo è corretto solo in media. Normalmente convergono al risultato molto lentamente, ma hanno il vantaggio di poter funzionare quando altri metodi falliscono. La convergenza non dipende ad esempio dalla dimensione del dominio di integrazione. Per quanto riguarda il tuo esempio, è certamente un metodo montecarlo, ma non è il metodo da usare per integrare una funzione 1D. Il tuo metodo serve per calcolare l'area di regioni di spazio di forma sconosciuta (anche molto complesse). Ma l'integrale di una funzione ha una forma molto più "regolare" e si può fare di meglio. Il metodo più semplice calcola l'integrale nel modo seguente:
\[ \int_a^b f(x)\,dx = \frac{ \sum_{i = 1}^N (b - a)\,f(X_i) }{N} \]
dove \(a \leq X_i \leq b\) sono valori casuali.

P.S. Tecnicamente hai bisogno di conoscere anche il minimo. Che succede se la tua funzione assume anche valori negativi?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.