2010-08-01 10 views
24

Ho bisogno di sviluppare un programma in Java per risolvere alcuni integrali. Integrali come questo:Come risolvere un integrale in Java?

alt text

che ho guardato per alcune funzioni per fare questo, in java.Math ma non ho trovato nulla.

Qualcuno ha un'idea per ottenere una soluzione per questo? (forse alcune librerie extra o qualcosa del genere)

Grazie mille !!

+6

Cerchi un valore numerico (un numero approssimativo) o simbolico (una formula che rappresenta esattamente il risultato)? – meriton

+1

Per l'integrazione simbolica potresti prendere in considerazione http://integrals.wolfram.com/index.jsp –

+0

@meriton Questo thread ha qualche soluzione per l'approssimazione numerica. Ma come ottengo la soluzione simbolica? –

risposta

16

L'articolo di Wikipedia sull'integrazione numerica ha una sezione su methods for one-dimensional integrals.

Non dovresti avere problemi nell'implementazione della regola "trapezoidale" o "rettangolo".

+0

anche questo documento ti aiuta, l'uso e la tolleranza degli errori delle formule http://www.mpia-hd.mpg.de/~mordasini/UKNUM/integration.pdf – mehmet

11

La biblioteca Apache Commons Math contiene, nella sezione Numerical Analysis, quattro diversi integratori numeriche:

  • il metodo di Romberg
  • metodo di Simpson
  • metodo trapezoidale
  • Legendre - Metodo Gauss
+0

Salve, scarico apache math .jar e aggiungo alle mie librerie di progetto. Ma per esempio quando tento di usare una funzione per esempio erfc, quando chiamo Erf erf = new Erf(); (è in matematica su pacchetto speciale) Android Studio mi lancia un errore che dice "Erf() ha un accesso privato in org.apaches.coommon.math.special.erf". Perchè questo? – Txispas

+0

@Txispas: se hai una nuova domanda, utilizza il pulsante [Chiedi domanda] (https://stackoverflow.com/questions/ask). Nessuno tranne me vedrà mai questo commento, e non conosco la risposta :) –

0
/* Petit programme qui calcul numériquement une intégrale selon l'algorithme de Simpson. 
    Avant de l'executer, il faut entrer: 
- l'expression de la fonction f: ligne 12; 
- les bornes inférieure a et supérieure b de l'intégrale: lignes 39 et 40; 
- le nombre de mesures n (n est entier!!!): ligne 41. 

------------------------------------------------------------------------------------------------------ */ 
class Fonction{              //Classe fonction: definit fonction et Simpson 

    double f (double x) {            //DEFINIR la fonction à intégrer. 
    return Math.Cos(x); 
    } 

    double IntSimpson(double a, double b,int n){      //Methode de Simpson pour calcul intégrale 
    int i,z;              //a= borne inférieure et b, borne supérieure d'intégration 
     double h,s;             //n = nombre de pas 

    n=n+n; 
    s = f(a)*f(b); 
    h = (b-a)/n;           
    z = 4; 

    for(i = 1; i<n; i++){ 
     s = s + z * f(a+i*h); 
     z = 6 - z; 
    } 
    return (s * h)/3; 
    } 
} 

class integration{             //Class resultat: calcul l'integrale et affiche le resultat. 

    public static void main(String args[]){ 

    Fonction fonction;           //Appel class fonction 
    fonction = new Fonction(); 

     double a = ???? ;           //RENTRER les valeurs souhaitées de a, b et n !!! 
    double b = ???? ; 
    int n = ???? ; 
    double resultat = fonction.IntSimpson(a,b,n);    //Applique méthode simpson à fonction 


    System.out.println("Integrale vaut: " + resultat);   //Affiche les résultats 
    } 
} 
Problemi correlati