Obliczanie funkcji cos(x) za pomocą szeregu taylora

2010-12-21 14:54
0

Witam serdecznie mam za zadanie napisanie programu obliczającego Cos(x) wykorzystując do tego szereg Taylora: [img]http://upload.wikimedia.org/m[...]f3fb8c819ea48fdad176.png[/img].
Wcześniej miałem do wykonania program obliczający pierwiastek kwadratowy, z którym sobie poradziłem:

program pierwiastek1;
{$APPTYPE CONSOLE}
VAR a,yi,yi1 : REAL;
I,N : Integer;
BEGIN
 WRITE('a=');
 READLN(a);
 WRITE('n=');
 READLN(n);
 yi:=1e6;yi1:=yi;
 for i:=1 to N do Begin
 yi:=yi1;
 yi1:=(yi+a/yi)/2;
 writeln('i=',i,'yi1=',yi1);end;
 writeln('blad=', abs(sqrt(a)-yi1));
 readln;
 end. 

Program ten prosi nas o podanie liczby,którą mamy spierwiastkować "a" a następnie podajemy ilość przejść "n" im większa liczba przejść tym coraz bardziej dokładny wynik aż przy którymś przejściu dojdzie do wyniku poprawnego, oprócz tego program oblicza błąd.

Na podobnej zasadzie z wykorzystaniem tej pętli mam obliczyć cos(x), jednak nie umiem sobie z tym poradzić, w tym przypadku za liczbe przejść będą odpowiadały kolejne wyrazy tego ciągu, im większą liczbę "n" podamy tym więcej wyrazów z tego ciągu dołączamy, a co za tym idzie wynik będzie dokładniejszy. pomoże ktoś?

edytowany 1x, ostatnio: olesio, 2013-10-18 21:31

Pozostało 580 znaków

2010-12-22 15:44
Gość
0

Mi też by się to przydało , może ktoś chociaż nakieruje ? Jakieś podpowiedzi ?

Pozostało 580 znaków

2010-12-22 16:23
0

Potrzebujesz funkcji wyliczającej silnię. Oraz funkcji wyliczającej potęgę (standardowo taka jest - Power()). A potem po prostu:

for i := 0 to N do
begin
  wynik := wynik + (Power(-1, i)/Silnia(2*i) * Power(x, 2*i));
end;

Pozostało 580 znaków

2010-12-22 16:26
0

@up żartujesz sobie? Optymalność woła o pomstę do nieba!
Proponuje wyznaczyć sobie pierwszy wyraz szeregu, nazwijmy go X_0. Następnie ruszyć głową i zobaczyć że kolejny wyraz ciągu, nazwijmy go X_1 to jest X_0 przemnożone przez pewną liczbę i podzielone przez inną. X_2 jest to X_1 przemnożone i podzielone. Itd.
Konkludując należy policzyć pierwszy wyraz, a potem wyliczać kolejne wyrazy sumując sobie to do wyniku.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
W zadaniu było "skorzystaj z szeregu Taylora", a nie "...i zrób to optymalnie". Ale oczywiście masz rację :-) - Ktos 2010-12-23 22:17

Pozostało 580 znaków

2010-12-23 20:10
0

A nie lepiej:

Writeln('Podaj liczbe do zcosinusowania');
Readln(X);
Writeln('Cosinus z ' + floatToStr(X) + ' to ' + FlostToStr(Cos(X)));

Nie pamietam jaki typ ma parametr cos, ale na pewno rezultat jest w Extended


edytowany 1x, ostatnio: TomRiddle, 2010-12-23 20:12

Pozostało 580 znaków

2010-12-24 09:33
0
TomRiddle napisał(a)

zcosinusowania

A cóż to takiego?

Pozostało 580 znaków

2010-12-24 10:10
bo
0

Tom Riddle, czytałeś pierwszy post?

mam za zadanie napisanie programu obliczającego Cos(x) wykorzystując do tego szereg Taylora

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0