rozwiniecie w szereg funkcji arctan, program w C

s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Prosze o pomoc w napisaniu tego programu, siedze nad tym juz pare dni, lecz moje umiejetnosci i zasob wiedzy nie pozwalaja mi na rozwiazanie tego zadania. Bede niezmiernie wdzieczny za pomoc.

Zadanie:
Rozwinięcie w szereg Maclaurina funkcji arctan(x) dane jest następującą formułą:
\(\displaystyle{ arctan(x)= \sum_{n=0}^{ \infty } (-1)^{n} \frac{x ^{2n+1} }{2n+1}}\)
Oblicz liczbę π(pi) z dokładnością do k miejsc po kropce dziesiętnej ( k<10 – parametr
wczytaj z klawiatury) stosując rozwinięcie wokół punktu x=1 .
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: Szemek »

s3ba, jak pracujesz nad tym kilka dni, to pokaż co udało Ci się napisać
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Nie potrafie tego rozwiazac, na zajeciach robilismy dotychczas sortowanie i napisalismy dwie funkcje pokazujace czy dana wartosc jest: cyfra, litera, mala litera, duza litera, itp. Na podstawie moich notatek z cwiczen nie umiem napisac tej funkcji. Szukam jakiegos przykladu,podobnego zadania, aby miec jakis punkt odniesienia. Sam nie mam pomyslu na rozwiazanie tego zadania.

Pozdrawiam.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: spajder »

Podobne masz: obliczyć wartość sumy:
\(\displaystyle{ \sum\limits_{n=1}^{10}\frac{1}{n}}\)

to wtedy:

Kod: Zaznacz cały

float suma = 0;      // zeby sie poczatek zgadzal
for(int i = 1; i <= 10; i++)
    suma += 1.0/i;
Zastanów się, co trzeba zmienić, żeby obliczyć Twój szereg
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Chodzi o to:

Kod: Zaznacz cały

    int i;
    float suma = 0;      // zeby sie poczatek zgadzal
for(i = 0; i <= 10; i++)
    suma += pow(-1,i)*(pow(x-1,2*i+1))/(2*i+1);
    printf("%lf",suma);
Nie za bardzo rozumiem tego polecenia (o co chodzi z ta liczba π(pi), arctan(x) ma byc rowny π(pi) tak?) i niewiem jak kontrolowac parametr k:
Oblicz liczbę π(pi) z dokładnością do k miejsc po kropce dziesiętnej ( k<10 – parametr
wczytaj z klawiatury) stosując rozwinięcie wokół punktu x=1 .
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: Szemek »

\(\displaystyle{ \arctan 1 = \frac{\pi}{4}}\), bo \(\displaystyle{ \tg \frac{\pi}{4} = 1}\)

Podaję kod, jak policzyć sumę \(\displaystyle{ n}\) - wyrazów tego szeregu
Ukryta treść:    
Zastanów się jak dokonać kontroli precyzji.
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Ma to wygladac w ten sposob:

Kod: Zaznacz cały

petla{
if (k == warunek na dana liczbe miejsc po przewcinku)
break;
}
printf("wynik: %lg",&wynik);
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: spajder »

Poszukaj sobie na necie o rozwinięciu funkcji w szereg (choćby wpisanie "szereg taylora" na wikipedii). Tam jest też oszacowanie błędu, prosty wzór (szukaj reszty w postaci Lagrange'a).
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Nie wiem jak moge porownywac wynik, aby petla zakonczyla sie z dokladnoscia do k miejsc po przecinku. Czy musze obliczac do tego celu reszte? Czy mozna to zapisac w prostszy sposob?

Np. Czy mozna porownywac wynik ze stala M_PI zapisana w bibliotece <math.h>, tylko nie wiem jak mam wprowadzic ten parametr k aby porownanie odbywalo sie do danej liczby po przecinku.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: spajder »

Niestety, ale po każdym przebiegu pętli musisz obliczyć resztę i porównać z potrzebną dokładnością.
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Dobra dzieki, a powiedz mi jak juz bede mial to reszte to jak ja bede mogl porownac, bo to jest dla mnie ciagle zagadka?
Jak mam wykorzystac parametr k w porownywaniu (Jak mam zapisac ta potrzebna dokladnosc z parametrem k)??
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: Szemek »

precyzję \(\displaystyle{ 10^{-k}}\) ustaw sobie w zmiennej typu double
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Wlasnie nie wiem jak to zrobic, mozesz dac jakis przyklad.
Pozdrawiam.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: spajder »

Kod: Zaznacz cały

double precyzja = pow(10, -k);
:p
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

rozwiniecie w szereg funkcji arctan, program w C

Post autor: s3ba »

Udalo mi sie napisac taki kod, nie wiem czy jest on poprawny. Nie udalo mi sie napisac reszty w postaci Lagrange'a, mam nadzieje ze wartosc reszty obliczonej w ten sposob rowniez jest poprawna. Bede wdzieczny za sprawdzenie i poprawienie bledow. Pozdrawiam.

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
          int n=1000000000,i,a=1,k;
  
   do{
               scanf("%d", &k);
               fflush(stdin);
               }while(k>=10);

   double suma = 0.0,precyzja=pow(10,-k),reszta;
   for(i=0; i<n; i++)
   {
      suma += (double) a / ((double) (2*i+1));
      a = -a;
      if(suma*4.0<=M_PI)
      reszta = M_PI- suma*4.0;
      else
       reszta = suma*4.0- M_PI;
      if(precyzja > reszta)
      break;
   }
   printf("%1.9lf", 4.0*suma);
   printf("\n%1.9lf", M_PI);
   printf("\n%1.9lf", reszta);
   printf("\n%1.9lf", precyzja);


  system("pause");
}
ODPOWIEDZ