Le somme di Riemann sinistro e destro sono approssimazioni di integrali definiti . Certo, in matematica dobbiamo essere molto precisi, quindi miriamo a calcolarli con una serie di suddivisioni che si avvicinano all'infinito, ma non è necessario ai fini di questa sfida. Dovresti invece provare a scrivere il programma più breve, prendendo input e fornendo output attraverso uno dei metodi predefiniti , in qualsiasi linguaggio di programmazione , che procede come segue:
Compito
Dati due numeri razionali e (i limiti della integrale definito), un numero intero positivo , un valore booleano in rappresentanza della sinistra / destra e di una funzione di black-box , calcolare la somma di Riemann a sinistra oa destra (a seconda ) di , usando suddivisioni uguali .
Specifiche I / O
e possono essere numeri in virgola mobile razionale / o frazioni.
può essere rappresentato da due valori distinti e coerenti, ma tieni presente che non puoi assumere funzioni complete o parziali come input.
è una funzione di casella nera. Citando la meta risposta collegata sopra, il contenuto (cioè il codice) delle funzioni della scatola nera non è accessibile, puoi solo chiamarli (passando argomenti se applicabile) e osservarne l'output . Se necessario, si prega di includere le informazioni necessarie sulla sintassi utilizzata dalla propria lingua in modo tale da poter testare l'invio.
Come output, è necessario fornire una razionale / virgola mobile / frazione che rappresenta la somma di Riemann richiesta. Come discusso in passato , l'imprecisione in virgola mobile può essere ignorata, purché l'output sia accurato con almeno tre cifre decimali quando arrotondato al multiplo più vicino di 1/1000 (ad esempio 1.4529999
va bene invece che 1.453
).
Specifiche matematiche
è garantito per essere continuo tra e (senza salti, buchi, nessun asintoti verticali).
Esistono tre casi possibili che devi gestire: (il risultato dovrebbe essere o suoi equivalenti), a <b o a> b .
Se , l'integrale cambia segno. Inoltre, il giusto senso dell'integrale in questo caso è verso .
Le aree sotto il grafico sono negative e quelle sopra il grafico sono positive.
Esempi / casi di test
La risoluzione non è ottimale, perché ho dovuto ridurli un po ', ma sono ancora leggibili.
, k = destra:
Il risultato dovrebbe essere , perché la larghezza di ciascun rettangolo è e il corrispondente le altezze sono .
, k = left:
L'output dovrebbe essere .
, k = right:
Il valore di output atteso è , poiché l'integrale cambia segno quando si invertono i confini ( ) .b < a
, k = left:
Calcolando la nostra somma di Riemann, otteniamo .
, k = right - Uscita: .
, k = left - Uscita: .
, k = right - Output: . Nota che qui sinusoide usa i radianti, ma sentiti libero di usare i gradi.
f(x) = x * sin(1 / x); a = 0; b = 1; n = 50; k = right — Output: 0.385723952885505. Note that sine uses radians here, but feel free to use degrees instead.
Ora che f (x) è una scatola nera perché è importante?