[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Mathematica, Matlab, Statistica, LaTeX i wszelkiego rodzaju oprogramowanie przydatne matematykowi w pracy. Miejsca w sieci poświęcone zagadnieniu.
kamios95
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 8 cze 2015, o 20:29
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Post autor: kamios95 »

Cześć ;)
Zadanie polega na obliczeniu sumy szeregu \(\displaystyle{ sin^2(x)}\). Tutaj wstawiam mój kod ;)

Kod: Zaznacz cały

tic
format long
suma1 = 0;
suma2 = 0;
pi = 3.14159265359;
x = pi*(5/6)
N=input(' Podaj N ');
for k = 0 : N
suma1 = suma1 + (((((-1).^k).*(x.^(1+2*k)))./(factorial(1+2*k))).^2)';
end
disp('Suma pi*(5/6) wynosi:')
disp(suma1)

x = pi*(1/3)
for k = 0 : N
suma2 = suma2 + (((((-1).^k).*(x.^(1+2*k)))./(factorial(1+2*k))).^2)'; 
end
disp('Suma pi*(1/3) wynosi:')
disp(suma2)
toc
Wydaje mi się, że coś jest w nim spaprane. Niby rozwinięcia Taylora są okey, więc powinno dobrze liczyć, ale takie daje mi to wyniki dla np. 10 kroków.

Kod: Zaznacz cały

>> Projekt

x =

   2.617993877991667

 Podaj N 10
Suma pi*(5/6) wynosi:
  16.875978022596069

x =

   1.047197551196667

Suma pi*(1/3) wynosi:
   1.133365644334625

Elapsed time is 2.550988 seconds.
I tutaj moje pytanie. Bo wyliczając ten sinus w np wolframie, dla podanych wartości x wyskakują zupełnie inne wyniki, bo dla \(\displaystyle{ \frac{ 1 }{3} \pi}\) jest \(\displaystyle{ 0.75}\) a dla \(\displaystyle{ \frac{ 5 }{6} \pi}\) jest \(\displaystyle{ 0.25}\) . Mogli byście mi pomóc i wyjaśnić skąd wyskakują takie różnice, bo siedzę nad tym już trochę czasu i nie mogę do tego dojść :/ I w ogóle czy ten kod jest dobry do tego zadania ?
Ostatnio zmieniony 10 cze 2015, o 13:55 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Post autor: ksisquare »

mnie rozwija się tak: \(\displaystyle{ sin^2(x)=x^2
- \frac{1}{3} x^4
+ \frac{2}{45} x^6
- \frac{1}{315} x^8
+ \dots}\)

a u Ciebie \(\displaystyle{ x}\) jest w potęgach nieparzystych

a ta kropka np. ".^2" jest OK?
kamios95
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 8 cze 2015, o 20:29
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Post autor: kamios95 »

ksisquare no tak własnie powinien się rozwijać, ale na wolfram alpha dostałem taki wzór jaki mam teraz w kodzie. Dokładniej taki \(\displaystyle{ (\sum_{k=0}^{ \infty }\frac{ (-1)^{k}* x^{(1+2k)} }{(1+2k)!}) ^{2}}\) Czyżby wolfram kłamał ? :p A co do tej kropki to ma być tak "^.2" ??? Ale przy takim ustawieniu kropki wychodzą jakieś liczby zespolone xd

Teraz spróbowałem inny wzór a dokładnie taki \(\displaystyle{ -(\sum_{k=1}^{ \infty }\frac{ (-1)^{k}* (2^{(-1+2k) }*x ^{2k}) }{(2k)!} )}\) też z wolframa, są inne wyniki i chyba nawet dobre ^^

Kod: Zaznacz cały

>> Projekt

x =

   2.617993877991667

 Podaj N 10
Suma szeregu dla x = pi*(5/6) wynosi:
   0.249997214057695


x =

   1.047197551196667

Suma szeregu dla x = pi*(1/3) wynosi:
   0.750000000000054

Elapsed time is 1.307703 seconds.
>> 

Ale nie wiem czy znowu dobrze te kropki wstawiłem :

Kod: Zaznacz cały

suma2 = suma2 -(((-1).^k).*((2.^(-1+2*k))*(x.^(2*k)))./factorial(2*k))'; 
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Post autor: mdd »

Co do pierwszego kodu:
1) Kropki nie są potrzebne.
2) Wzór mówi, że najpierw dodajemy, a potem podnosimy do kwadratu całość (nie dodajemy "kwadratów" do siebie).
3) W Matlabie liczby \(\displaystyle{ \pi}\) nie trzeba definiować.

Kod: Zaznacz cały

tic
format long
suma1 = 0;
suma2 = 0;

x = pi*(5/6)
N=input(' Podaj N ');
for k = 0 : N
suma1 = suma1 + ((((-1)^k)*(x^(1+2*k)))/(factorial(1+2*k)));
end
disp('Suma pi*(5/6) wynosi:')
disp(suma1^2)

x = pi*(1/3)
for k = 0 : N
suma2 = suma2 + ((((-1)^k)*(x^(1+2*k)))/(factorial(1+2*k)));
end
disp('Suma pi*(1/3) wynosi:')
disp(suma2^2)
toc
kamios95
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 8 cze 2015, o 20:29
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Post autor: kamios95 »

mdd dzięki znowu coś więcej wiem np o tym \(\displaystyle{ \pi}\) albo kropkach Już wychodzą dobre wyniki, ale użyłem tego drugiego wzoru.

Mam jeszcze jedno pytanie dotyczące tego zagadnienia. Bo mam jeszcze jeden podpunkt do zreazlizowania, a dokładniej "Zobrazować błędy względne w funkcji liczby wyrazów sumowanego szeregu (obcięcia)". I jak rozmawiałem na początku z naszym Doktorem to powiedział, że mogę zrobić to tak, że po prostu obliczam w matlabie po matlabowsku gotowym sinusem ten wynik, a pozniej odejmę od niego to co mi wyszło tym szeregiem Taylora. A wczoraj dostałem jeszcze od niego jakieś notatki dotyczące błędu obcięcia w szeregu Taylora, ale tak średnio z tego coś rozumiem :p Myślicie że ten pierwszy sposób wystarczy żeby obliczyć ten błąd i się nie przyczepi ?
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

[Matlab] Suma szeregu z sinusem, niepoprawne wyniki

Post autor: mdd »

kamios95 pisze:Myślicie że ten pierwszy sposób wystarczy żeby obliczyć ten błąd i się nie przyczepi ?
Trudno powiedzieć. Na wszelki wypadek można obie metody zastosować .
ODPOWIEDZ