[C++] Wzór Maclaurina na obliczanie arctan szeregiem potęgowym
Ostatnio zmodyfikowano 2014-10-29 21:29
Roofy5 Temat założony przez niniejszego użytkownika |
[C++] Wzór Maclaurina na obliczanie arctan szeregiem potęgowym » 2014-10-29 15:47:54 Witam! Na studiach zaczęliśmy naukę języka C. Dla tych którzy już coś kiedyś programowali jest możliwość napisania trzech projektów i dzięki temu jest się zwolnionym z egzaminów. Moje zadanie to: Napisać funkcję, która na podstawie rozwinięcia w szereg oblicza wartość funkcji arctg(x). Na internecie znalazłem jak takie rozwinięcie wygląda: http://www.matematyka.pl/latexrender/pictures/9/e/9ed7385696335d5c3ad92a24d73edc65.png Oto mój kod: #include <stdio.h> #include <math.h> #define n 100
double szeregowanie( double x ) { double licznik = 1; double mianownik, dlax, pomocnik; int i; int j; dlax = x; for( j = 0; j <= n; j++ ) { for( i = 1; i < j; i++ ) { licznik = licznik *( - 1 ); } mianownik = 2 * j + 1; for( i = 1; i < 2 * j + 1; i++ ) { dlax = dlax * x; } pomocnik = pomocnik +( licznik / mianownik ) * dlax; licznik = 0; mianownik = 0; dlax = x; } return pomocnik; }
Niestety funkcja nie działa prawidłowo. Arctan(x) nie jest taki jaki powinien. Macie jakieś pomysły? |
|
DejaVu |
» 2014-10-29 21:29:29 #include <cstdio> #include <cmath>
float obliczSzeregMaclaurina( float _x, float _dokladnosc ) { float wynik = 0.0f; for( int n = 0; n < _dokladnosc; ++n ) { float licznik = n % 2 == 0 ? 1.0f: - 1.0f; float mianownik = 2.0f * n + 1.0f; float wartosc = std::pow( _x, 2 * n + 1 ); wynik +=( licznik / mianownik ) * wartosc; } return wynik; }
int main() { float wartosc = 0.1f; float wartoscReferencyjna = std::atan( wartosc ); float wartoscObliczona = obliczSzeregMaclaurina( wartosc, 100000 ); printf( "wartoscReferencyjna = %.5f;\n", wartoscReferencyjna ); printf( "wartoscObliczona = %.5f;\n", wartoscObliczona ); return 0; }
Standardowe wyjście programu: wartoscReferencyjna = 0.09967; wartoscObliczona = 0.09967;
|
|
« 1 » |