Witam, dostałem projekt którego celem jest policzenie wartości funkcji we wszystkich punktach podziału na n części przedziału [a,b]. Funkcja f dana jest w postaci rozwinięcia w szereg potęgowy i w postaci wzoru analitycznego. Obliczanie sumy szeregu wykonać mam z dokładnością e (epsilon). Algorytm obliczenia sumy szeregu ma być w oddzielnej funkcji. Poniżej zamieszczam szereg i wzór analityczny (przepraszam z góry za jakość)
http://img151.imageshack.us/i/skanowanie0001nc.jpg/
Problem tkwi w tym że niestety wartość ze wzoru analitycznego nie zgadza mi sie z tą wyliczoną przez szereg… poza tym przy dołożonym warunku (poniżej) funkcja zwraca cały czas 0 nawet gdy dokładność wyniku ustalę na 0.00000001.
if (fabs(wyraz)
{
suma=0;
}
Proszę o pomoc i wskazanie mi błędu w funkcji liczącej szereg bo ja nie mogę się doszukać.
#include
#include
#include
double silnia(double liczba)
{
double silnia, i;
if (liczba < 0)
{
return 0;
}
else if (liczba < 2)
{
return 1;
}
else
{
i = 1;
silnia = 1;
while (i++ < liczba)
{
silnia *= i;
}
return silnia;
}
}
double szereg(double pp, double k, double eps)
{
double wyraz=1, suma=0, i, x=k-pp;
for(i=0; fabs(wyraz)>=eps; i+=4)
{
if (x!=0)
{
wyraz=((pow(x,i)*cos(pp))/silnia(i))-((pow(x,i+1)*sin(pp))/silnia(i+1))-((pow(x,i+2)*cos(pp))/silnia(i+2))+((pow(x,i+3)*cos(pp))/silnia(i+3));
suma+=wyraz;
}
else
{
wyraz=(cos(pp)/silnia(i))-(sin(pp)/silnia(i+1))-(cos(pp)/silnia(i+2))+(sin(pp)/silnia(i+3));
suma+=wyraz;
}
if (fabs(wyraz)
{
suma=0;
}
}
return suma;
}
int main()
{
double pp, kp, krok, eps, licznik, k, x;
int j;
double *tablica1;
double *tablica2;
double *tablica3;
printf("Podaj poczatek przedzialu ");
scanf("%lf", &pp);
printf("Podaj koniec przedzialu ");
scanf("%lf", &kp);
printf("Podaj krok ");
scanf("%lf", &krok);
printf("Podaj dokladnosc ");
scanf("%lf", &eps);
if (pp>kp)
{
printf("Przedzial nie istnieje\n");
}
licznik = (kp-pp)/krok;
tablica1 = malloc(licznik * sizeof *tablica1);
tablica2 = malloc(licznik * sizeof *tablica2);
tablica3 = malloc(licznik * sizeof *tablica3);
for(j=0, k=pp; j<=licznik; j++, k+=krok)
{
tablica1[j]=cos(k);
tablica2[j]=szereg(pp, k, eps);
tablica3[j]=k;
}
for(j=0; j<=licznik; j++)
{
printf("%lf\t%lf\t%lf\n",tablica3[j] ,tablica2[j], tablica1[j]);
}
system("PAUSE");
return 0;
}