2012-06-08 20 views
11

Sto implementando un algoritmo per la scuola e sto avendo problemi a capire come un integrale definito è rappresentato nella programmazione. Ad esempio So che l'equazione di addizione può essere implementata come il seguente esempio:
enter image description hereProblemi nell'implementazione di equazioni matematiche nella programmazione

assumendo y = f (x)

if(x==0){ 
    y=x+1; 
}else{ 
    for(int i = 0; i < n; i++){ 
     y = y + (x - 1); 
    } 
} 

Come avrei quindi rappresentare un integrale numerico, esempio:
enter image description here
Le equazioni qui piantate potrebbero non avere senso matematico, ma il mio obiettivo è quello di implementare equazioni simili in C# per un progetto di programmazione scolastica che devo fare in cui devo implementare un algoritmo che contiene integrali. Ho letto che ci sono metodi numerici per risolvere integrali definiti come la regola di Simpson; dovrei usare questi metodi per implementare l'equazione o un integrale può essere rappresentato in programmazione come un ciclo o qualcosa del genere?

+0

Quindi, vuoi un parser di formula? O vuoi imparare a cambiare le formule matematiche al codice? – SQLMason

+0

Voglio cambiare le formule matematiche al codice – user1327159

+0

Benvenuti in programmazione! Come accennato in seguito, non puoi avere una somma infinita. Devi pensare a quali passi prendere per risolvere il problema e scrivere il codice relativo. – SQLMason

risposta

1

Dipende da ciò che si sta cercando di fare. Se si trattava di un'implementazione specifica, è sufficiente integrare la formula x-1 in (x^2)/2 - x e quindi restituire il valore massimo meno il valore minimo.

In alternativa può essere implementato come una stima di scegliere una dimensione appropriata per passo dx.

decimal dx=0.1; 

if(x==0){ 
    y=x+1; // could just return y=1 
}else{ 
    decimal tempY=0; 
    for(decimal i = 3; i <= 20; i+=dx){ 
     tempY += (i - 1); 
    } 
    // Either return tempY as decimal or 
    y= Convert.ToInt32(tempY); 
} 
1

Forse non capisco ma vuoi sapere come calcolare un integrale numericamente?

Se è così, ci sono molti metodi. Per una breve introduzione prendere un'occhiata a: http://en.wikipedia.org/wiki/Numerical_integration

Da voi esempio si può semplicemente fare:

int f(int x) { 
    if(x == 0) { 
     y = x + 1; 
    }else{ 
     y = computeIntegral() 
    } 
    return y 
} 

dove computeIntegral() è una funzione si deve scrivere per calcolare un integrale.

Ma penso che ci sia un problema con la funzione f (x) perché se x non è zero f (x) come solo un valore. Forse il confine integrale dovrebbe dipendere da x?

Un ultimo commento. Se x è un numero variabile, x == 0 non è consigliato perché un numero mobile non ha una rappresentazione binaria univoca a causa del troncamento di arrotondamento.

+0

So che l'equazione non ha senso che in cui solo due immagini ho bussato in Word per dare un'idea generale di ciò che voglio fare, ma ciò che il mio obiettivo è quello di trovare il modo di rappresentare un non integrale necessariamente quella integrale nel codice, ma da quello che sto comprensione è che avrei dovuto calcolare l'integrale utilizzando ad esempio un metodo numerico, se non sto equivoco quello che dicevi – user1327159

+0

Gli standard IEEE FP richiede che il +0 e -0 confrontare alla parità quindi il fatto che abbiano rappresentazioni diverse non rende x == 0.0 un'operazione non valida (o fastidiosa). E questo non ha nulla a che fare con 'troncamento arrotondamento' –

+0

@HighPerformanceMark Ok per 'x == 0 'ma più in generale ha senso per confrontare due numeri floating con' '==? – Ger

0

Non è possibile rappresentare un integrale semplicemente con un ciclo, perché un integrale è una somma infinita. Devi utilizzare un metodo di approssimazione o modificare l'equazione per rimuovere il segno integrale. L'integrale nella tua seconda equazione dovrebbe essere facile da rimuovere.

1

Il tema dell'integrazione numerica è ampio e può diventare estremamente complesso, quindi non coprirò tutto in questa risposta.

La regola di Simpson è un metodo per l'integrazione numerica verso l'estremità semplice e approssimativa (piuttosto che complessa, accurata o entrambe) dello spettro. Non è una cattiva scelta per iniziare le indagini sull'argomento, in quanto è molto semplice da capire e programmare. Non ho dubbi che è possibile implementare direttamente lo the formula as presented on Wikipedia nel tuo linguaggio di programmazione preferito.

Ora, per legare i loop e la regola di Simpson insieme: la precisione dell'approssimazione che la regola di Simpson fa al vero valore di un integrale è migliorata quando i limiti di integrazione (3 e 20 nel tuo esempio) si avvicinano. Quindi un approccio che potresti prendere sarebbe scrivere un ciclo che calcola l'integrale da 3 a 4, da 4 a 5, ..., e li aggiunge tutti alla fine. L'integrazione produce aree, aggiungendo aree che producono (di solito) un'altra, più grande, area.

E a tutti gli altri esperti in integrazione numerica, sì, so che ci sono altri approcci e che molti di questi altri approcci sono "migliori" (in molti sensi diversi), e so che la regola di Simpson avrà problemi con alcune (molte) funzioni, ma non è un brutto posto per iniziare.

Problemi correlati