Tablicowanie szeregu funkcji

0

Witam, mam za zadanie napisanie programu, który na podstawie rozwinięcia w szereg oblicza wartość funkcji dla danego argumentu na podstawie poprzedniego wyrazu nie wykorzystując pow, ani silni.
Cały program mam już napisany, lecz mam wątpliwości co do mojej funkcji, która oblicza rozwinięcie w szereg dla log(x). Bardzo bym prosił o sprawdzenie i ew. pomoc w poprawie, bo bardzo mi na tym zależy :)

Tutaj link do szeregu: http://www.wolframalpha.com/input/?i=ln(x)

A tu kod źródlowy:

 #include<stdio.h>
#include<math.h>
#define LWS 100
double szereg(double x){
	double w,s;
	int i;
	w=x;
	s=x;

	for(i=1;i<=LWS;i++){
		w=-w*-1*(-1+x)/i;
		s+=w;
	}//end for
return s;
}//end szereg
int main()
{
double a,b,dx,x;
int lp;

	printf("Podaj poczatek przedzialu: ");
	scanf("%lf",&a);
	printf("Podaj koniec przedzialu: ");
	scanf("%lf",&b);
	printf("Podaj liczbe podprzedzialu: ");
	scanf("%d",&lp);

	dx=(b-a)/lp;

	printf(" __________________________________________________________\n");
	printf("|     x      |     logx             |         szereg       |\n");
	printf("|____________|______________________|______________________|\n");

	for(x=a;x<=b;x+=dx)
		printf("| %10.4lf | %20.4lf | %20.4lf |\n",x,log(x),szereg(x));

	printf("|____________|______________________|______________________|\n");
}// end main
1

Spróbuj tak:

double szereg(double x){
    double w,s;
    int i;
    w=1; // <---
    s=0; // <--- 
    ...
}
0

Ma ktoś może jakiś inny pomysł? Dalej nie wychodzą, te same wyniki co w kolumnie z ln(x), a próbowałem innych kombinacji.

1

http://www.wolframalpha.com/input/?i=taylor+log+at+1
a u ciebie jest inaczej!

double szereg(double x){
    x=x-1.0;
    double w,s;
    int i;
    w=x;
    s=0;
    for(i=1;i<=LWS;i++){
        s += w/i;
        w *= -x; // tu nie ma "/i" !
    }
    return s;
}
0

Dzięki za dobry wzór i za pomoc, ale wyniki dalej są złe... Próbuje to zapisać w inny sposób, ale na razie bez rezultatów.

0

Wyniki są dobre. Wzór, który podał @MarekR22 jest prawdziwy dla -1 < x <= 1 0 < x <= 2. Pewnie stosujesz go dla x spoza tego przedziału. Ponadto, dla x bliskich -1 0, potrzebne jest znacznie więcej składników niż 100.

1 użytkowników online, w tym zalogowanych: 0, gości: 1