Aproksymacja funkcji cosinus szeregiem Taylora

scorpion126
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 25 wrz 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: scorpion126 »

Witam
Na podstawie tematu: 218692.htm
Chce napisać funkcję cosinus ale coś nie działa

Czy ktoś widzi błąd?

Kod: Zaznacz cały


public class Funkcje {
	
	
	double sinus(double x)
	{
	   double wyraz=x, kwadrat=x*x, suma=x;
	   int n=1;
	   while(Math.abs(wyraz)>(1E-12))
	   {
		  wyraz*=-kwadrat/(2*n*(2*n+1));
	      suma+=wyraz;
	      n++; 
	   }
	   return suma;
	}

	double cosinus(double x)
	{
	   double wyraz=1, kwadrat=x*x, suma=1;
	   int n=1;
	   while(Math.abs(wyraz)>(1E-20))
	   {
		  wyraz*=-kwadrat/(2*n-1);
	      suma+=wyraz;
	      n++;
	   }
	   return suma;
	}

	public static void main (String arg[]){
		
		Funkcje sinus = new Funkcje();
		
		System.out.println("sinus: "+sinus.sinus(1));
		System.out.println("sin  : "+Math.sin(1));
		
		System.out.println("cosinus: "+sinus.cosinus(2));
		System.out.println("cos  : "+Math.cos(2));
		
		
		
			
	}

}
output:

Kod: Zaznacz cały

sinus: 0.8414709848078937
sin  : 0.8414709848078965
cosinus: -0.2799761491308182
cos  : -0.4161468365471424
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: miki999 »

Porównując do poprzedniego tematu szukałbym problemu tutaj:

Kod: Zaznacz cały

        wyraz*=-kwadrat/(2*n-1);
scorpion126
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 25 wrz 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: scorpion126 »

no ja wiem tylko co tam wstawic ;P
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: miki999 »

A wiesz jak wygląda przedstawienie funkcji kosinus w postaci tego szeregu?
scorpion126
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 25 wrz 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: scorpion126 »

\(\displaystyle{ \cos x = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n)!} \cdot x^{2n}}\)
Ostatnio zmieniony 25 wrz 2011, o 20:08 przez scorpion126, łącznie zmieniany 1 raz.
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: miki999 »

Zastanów się po czym sumujesz.
scorpion126
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 25 wrz 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: scorpion126 »

tzn? jakas wskazowka ?
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: miki999 »

To, że w podanym przez Ciebie temacie widnieje wzór z błędnie napisanymi indeksami, nie oznacza, że masz go przepisywać jak małpa
Zajrzyj do byle jakiej książki / strony internetowej z omawianym szeregiem Taylora i zobacz, jak powinien wyglądać cosinus.
Ewentualnie mając obliczonego sinusa, możesz skorzystać z tego, że \(\displaystyle{ \sin \left(x+ \frac{\pi}{2}\right)=\cos x}\). Na pewien sposób to też rozwiązanie problemu.
scorpion126
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 25 wrz 2011, o 16:11
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: scorpion126 »

Skorzystałem z wersji obejścia problemu
Nie mam już nerwów się tym zadręczać, jakbyś mógł mi powiedzieć jak powinna wyglądać implementacja dla cosinusa to byłbym wdzięczny a jeśli nie to i tak dziękuje za podpowiedz
Xitami

Aproksymacja funkcji cosinus szeregiem Taylora

Post autor: Xitami »

Kod: Zaznacz cały

typedef double real;

real COS(real x){
	x*=x;
	real w=1, s=1;
	int i=0;
	while(w)
		s+=w*=-x/(++i)/(++i);
	return s; }

main(i){
	for(i=0; i<=180; i++)
		printf("%3d %f %f
", i, cos(i*0.0174532925), COS(i*0.0174532925)); }
ODPOWIEDZ