Program liczący sumę szeregu

Sakurazuka
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 4 sty 2010, o 18:19
Płeć: Mężczyzna
Lokalizacja: Myślenice

Program liczący sumę szeregu

Post autor: Sakurazuka »

Witam. Mam do zrobienie program liczący sumę szeregu i wyświetlającego wyniki dla kolejnych x z podanego przedziału oraz wypisujący dokładną wartość funkcji dla porównania.

mój szereg to:
\(\displaystyle{ (1+x) ^{ \frac{1}{4} }= \sum_{i=0}^{ \infty } { \frac{1}{4} \choose i}x ^{i}=1+ \frac{1}{4} x- \frac{1*3}{4*8} x^{2}+ \frac{1*3*7}{4*8*12} x^{3}- \frac{1*3*7*11}{4*8*12*16}x ^{4} +...}\)

Metodą prób i błędów otrzymałem taki kod (na razie nie pobiera dokładności i liczby wyrazów - ma je zadeklarowane ale to jeszcze przerobię)

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double szysz(int krok,double eps,double x, int i);


int main()
{
	double x,z,d,krok,eps,w;
	int i,lkrok;
	printf("podaj poczatek przedzialu 
");
	scanf("%lf",&x);
	printf("podaj koniec przedziału 
");
	scanf("%lf",&z);
	printf("podaj krok 
");
	scanf("%lf",&krok);
	while(x<=z)
{
d=szysz(20,0.00001,x,1);
w=pow((1+x),(1./4));
printf("%lf %lf  
",d,w);
x=x+krok;
}

}

double szysz(int lkrok,double eps,double x, int i)
{
	double sump= 1;
	double gp,gn,dp,dn,k;
	
	
	gp =1;
	dp =1;
	double wyraz=1;
	i=0;
	k=x*(-1);
	
	while(eps<fabs(wyraz)&&(i+2)<lkrok)
	{
		gn= (i*4)-1;
		dn= (i+1)*4;
	
		wyraz =((gp*gn)/(dp*dn)*k);
		k=k*x*(-1);
		
	
		sump+=wyraz;
		gp=gp*gn;
		dp=dp*dn;
		i++;
	}
	
	return sump;

}
Pętla chyba zgadza się z postacią szeregu ale wyniki już nie bardzo - po kompilacji otrzymuję (dla przedziału [0,2] i kroku 0.5:

1.000000 1.000000
1.106683 1.106682
1.186528 1.189207
-3.525825 1.257433
-945.769468 1.316074

(po prawej wartość dokładna). może mi ktoś wytknąć błąd bo ja go nie widzę...-- 12 kwi 2010, o 10:08 --no taaak... na kartce z zadaniem była jeszcze dziedzina nic dziwnego że się rozłazi. już śmiga. można zamknąć
ODPOWIEDZ