Tablicowanie szeregu funkcji

2015-01-12 12:53
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

Pozostało 580 znaków

2015-01-12 13:38
1

Spróbuj tak:

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

Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

2015-01-26 11:24
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.

Pozostało 580 znaków

2015-01-26 11:30
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;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2015-01-26 11:34

Pozostało 580 znaków

2015-01-26 23:17
Zimny Terrorysta
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.

Pozostało 580 znaków

2015-01-27 07:50
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.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 5x, ostatnio: bogdans, 2015-01-27 13:16
raczej dla 0<x<2 - MarekR22 2015-01-27 11:21

Pozostało 580 znaków

2015-01-27 11:29
0

jest ok http://ideone.com/4oexuv


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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