Maestre, primitiva functiei asteia nu poate fi exprimata doar cu functii elementare. Iti mai trebuie si niste functii speciale.
Prima data, ai functia erorilor (error function) erf(x)… care este primitiva lui e^(-x^2), inmultita cu 2/sqrt(pi)… bun… functia are limita -1 in -inf, limita 1 in inf… si trece prin 0.
Acuma raspunsul la intrebarea ta este functia erfi(x)=erf(i x)/i, unde i=sqrt(-1) , mai precis primitiva lui e^(-x^2) e este sqrt(pi)/2*erfi(x).
Mai aveti intrebari?.. ca mai am raspunsuri.
exact raspunsul asta l-am gasit pe un site care-ti integreaza orice functie i-o dai (the integrator)
Ce coincidenta…
Ia vezi daca gasesti si o metoda de evaluare a lui erf(x), cu precizie de cel putin 4 zecimale peste tot realul…
daca ma pui, iti fac un programel sa-ti calculeze erf in punctul x si cu 10 zecimale exacte
@admin: sorry ca am stricat layoutul site-ului, dar linkul ala e marisor
Ma, sa le gasesti gata implementate in fortran e simplu… dar totusi… in C sau in delphi… cum evaluezi functia daca nu o ai gata-facuta?
Fara suparare, dar nu pot sa refuz o provocare
mi se pare ca tu m-ai provocat pe mine
later edit: integrala aia e o serie taylor: x - x^3/3 + x^5/52! - x^7/73! + … , iar de aici si pana la surse mai e un singur pas:
long double erf(long double x)
{
double suma=x,ics=x; //ics=termenul curent
int i=1;
do{
ics*=xx/i; suma-=ics/(2i+1); i++;
ics*=xx/i; suma+=ics/(2i+1); i++;
}while(fabs(ics/suma)>1E-20); //20 zecimale exacte :
return 1.128379167095512574*suma; //2/radical(pi) = 1.1283…
}
ce zici ?
Provocarea este reciproca si benefica
Nu vreau sa starnim o discutie aprinsa pe forum pe o tema care nu e chiar relevanta… Sincer, as prefera s-o continuam la Galaciuc…
Deocamdata ma rezum la urmatoarele observatii:
0) N-ai scris bine… corect e x - x^3/3 + x^5/(52!) - x^7/(73!) + …
1) Seriile Taylor-Maclaurin sunt o metoda foarte proasta de a evalua functii speciale (mai ales pentru valori mari ale lui x)
2) Seriile Taylor-Maclaurin ale functiilor speciale sunt (in cel mai bun caz) foarte foarte greu convergente (adica ti-ar manca muuuult timp de executie) - asta daca nu sunt divergente.
3) Seriile Taylor-Maclaurin sunt convergente cel mult pe un domeniu/interval finit al argumentului (si de obicei, unul foarte mic)
4) Presupunand ca ar fi convergente au o precizie proasta si necesita foarte multe iteratii.
Ca sa nu ma lungesc… Incearca functia scrisa de tine pentru… sa zicem erf(51) … imi place mie numarul asta… sa-mi spui de cati termeni a fost nevoie si cat a durat evaluare functiei, pentru 5, nu pentru 20 de zecimale exacte.
Mai mult, tine cont… ca functia asta e cat-de-cat prietenoasa… adica pentru orice valoarea a lui x… pana la urma converge. Dar sunt clase de functii gen Lambert-W care sunt pur si simplu divergente (pentru un x>~0.4, la functia Lambert, daca nu ma insel), oricati termeni ai lua in considerare.
Cu permisiunea ta, continuam discutia asta la Galaciuc, unde iti voi spune si o metoda global-convergenta de evaluarea a acestei functii, cu eroare de maxim 10^-5 si cu timp de evaluare invariabil de ordinul de marime al parametrului (dureaza la fel de mult erf(23) cu erf(1777) ).
Pana atunci,
Toate bune.
merge bine pana la erf(5)=0.99999998190957706, insa erf(6)>1 cred ca pt x>6, trebuie calculat erf(x)=1-erfc(x). you were right. continuam la galaciuc