[C] Rozwiniecie w szereg arctg(x)

franca1
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 12 sty 2015, o 23:02
Płeć: Kobieta
Lokalizacja: krakow

[C] Rozwiniecie w szereg arctg(x)

Post autor: franca1 »

Witam mam na zadanie zrobic:
Tablicowanie funkcji w zadanym przedziale, z zadaną liczbą
podprzedziałów, z wykorzystaniem rozwinięcia w szereg.
Dane wejściowe do programu: przedział, w którym funkcja ma
być tablicowana, liczba podprzedziałów.
trzeba Napisać funkcję szereg, która na podstawie rozwinięcia w
szereg oblicza wartość funkcji dla danego argumentu.
Na ekranie mają się pojawić 3 kolumny liczb: argument ( \(\displaystyle{ x}\) ),
wartość funkcji z biblioteki matemtycznej dla \(\displaystyle{ x}\), wartość
funkcji szereg dla \(\displaystyle{ \arctan \left( x \right)}\).
W funkcji szereg nie uzywamy funkcji pow ani silnia; do
obliczenia kolejnego wyrazu szeregu wykorzystujemy wyraz
poprzedni.


to sa moje wypociny czy ktos moglby mi pomoc z ta funkcja arctg(x) bo wychodzi inaczej niz powinno

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#define li 100  //liczba iteracji do szeregu

//tablicowanie funkcji atan w <a,b> - szereg + funkcja biblioteczna


//definicja funkcji szereg  x - parametr formalny

double szereg(double x)
{
 double s, w;
 int i;
 s=x;
 w=x;
 x=0;
 for(i=0;i<=li;i++)
 {
        w= -w*x*x/(2*i*(2*i+1)); 
        s=s+w;           
 }                  
 return s;    
}       





int main(int argc, char *argv[])
{
  int lp;
  double a, b, krok, x;

  //<a;b> - przedzial, lp - ilosc podprzedzialów

  printf("podaj konce przedzialow i liczbe podprzedzialow
");
  scanf("%lf %lf %d",&a,&b,&lp);
  krok=(b-a)/lp;
  printf("krok=%6.2lf


",krok);
  printf("     ----------------------------

");
  printf("        x    szereg(x)  atan(x)
     ----------------------------
");
  for (x=a;x<=b;x+=krok)
         printf("%10.2lf    %7.4lf    %7.4lf
",x,szereg(x),atan(x));
  printf("     ----------------------------

");
  system("PAUSE");	
  return 0;
}
Ostatnio zmieniony 13 sty 2015, o 12:33 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

[C] Rozwiniecie w szereg arctg(x)

Post autor: Adifek »

Nic dziwnego, że nie wychodzi, skoro dzielisz przez zero :P I zerujesz sobie x'a :P

Mamy, że \(\displaystyle{ \arctg (x) = \sum_{n=0}^{\infty}\frac{(-1)^{n} x^{2n+1} }{ 2n+1}}\). Niech \(\displaystyle{ a_n(x)}\) będzie \(\displaystyle{ n}\)-tym składnikiem tego szeregu. Oczywiście \(\displaystyle{ a_n(x) =\frac{(-1)^{n} x^{2n+1} }{ 2n+1}}\). Zauważ teraz, że \(\displaystyle{ a_{n+1}(x) = \frac{(-1)^{n+1} x^{2n+3} }{ 2n+3} = \frac{-x^{2}(2n+1)}{2n+3} \frac{(-1)^{n} x^{2n+1} }{ 2n+1} = \frac{-x^{2}(2n+1)}{2n+3} a_n(x)}\). Stąd dostajesz piękny algorytm:

Kod: Zaznacz cały

double arkustangens ( double x )
{
  double suma = x;
  double a = x;
  int i;
  for( i = 0; i <= 20; i++ )
  {
     a = a*(-1)*x*x*(2*i+1)/(2*i+3);
     suma = suma + a;
  }
  return suma;
}
franca1
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 12 sty 2015, o 23:02
Płeć: Kobieta
Lokalizacja: krakow

[C] Rozwiniecie w szereg arctg(x)

Post autor: franca1 »

dzieki ale nie wychodzi, wypisuje jakies strasznie duze liczby.. :/
jakies inne podpowiedzi???
ODPOWIEDZ