🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.vbasic
Article #104996

[VBA] Excel - obliczanie szeregu funkcji - przydługie

#104996
From: Paweł
Date: Tue, 20 Jan 2015 20:13
74 lines
4032 bytes
Witam
Piszę makro w Excelu w VBA do liczenia rozwinięcia funkcji trygonometrycznej: f 
= cos(5*x) w nieskończony szereg Taylora w postaci:

s = 1 - (5^2∙x^2)/2! + (5^4∙x^4)/4! - (5^6∙x^6)/6! + ......

Cechą charakterystyczną tego szeregu jest to, że poszczególne wyrazy szeregu są 
odejmowane i dodawane naprzemiennie.
Napisałem sobie pętlę, która ma liczyć sumę szeregu "s" poprzez obliczenie i 
sumowanie poszczególnych wyrazów szeregu "a" dla zadanej wartości "x" z zadaną 
dokładnością "eps". Bo nie można liczyć w nieskończoność :)
Kod pętli wygląda następująco:
-----------------------------------------------
n = 2
If eps < 0 Then
Do
      a = (5 ^ n * x ^ n) / silnia(n)
      w = 1
      If a > eps Then
        If (w Mod 2 = 1) Then
          a = -a
        End If
        s = 1 + a
      End If
      If Abs(f - s) >= -eps Then
        n = n + 2
        w = w + 1
      Else
        Exit Do
      End If
    Loop While (Abs(f - s) < eps)
End If
-------------------------------------------------------
gdzie:
n - zadana początkowa wartość potęgi (typ Integer)
eps - dokładność porównawcza (mniejsza od 0) zadana przez użytkownika (typ 
Double)
a - obliczany wyraz szeregu zgodnie ze wzorem (typ Double)
x - zadana wartość przez użytkownika (typ Double)
silnia(n) - wywołanie zewnętrznej funkcji silnia
w - licznik wyrazów szeregu
s - suma szeregu dla zadanego "x" (typ Double)
f - wartość funkcji cos(5*x) dla zadanego "x" (typ Double)

Pętla wg idei ma działać następująco:
1. Oblicza pierwszy wyraz szeregu "a".
2. Do sumy szeregu "s" ma dodać lub odjąć (dodać ujemnie - stąd If dla 
"nieparzystych" argumentów dla licznika "w" = 1, 2, 3, itd. i podstawienie dla 
nich a = -a) jeden wyraz "a" zgodnie z ogólnym powyższym wzorem na sumę szeregu.
3. Po dodaniu każdego wyrazu "a" sprawdza czy suma szeregu "s" jest większa lub 
równa wynikowi obliczonego wcześniej "f" o zadaną wartość "eps".
4. Jeżeli tak to zwiększa współczynnik potęgi "n" o wartość "2" oraz licznik 
kolejnego wyrazu o 1.
5. Wraca do początku i liczy kolejny wyraz "a" i jeśli spełnia warunki to dodaje 
lub odejmuje go do/od sumy "s"
6. Operacje 1 - 6 są wykonywane dopóki różnica pomiędzy "f" i "s" będzie 
mniejsza niż dokładność "eps".

Niestety mam problem, że pętla liczy tylko "a" dla pierwszego obiegu, co jest 
poprawne dla podstawionego x = 0,
ale dla x <> 0 powinna wykonywać kilka obiegów, a też robi tylko jeden.

Zaznaczam, że wynikiem funkcji "f" są wartości ujemne lub dodatnie, zgodnie z 
wykresem sinusoidalnym. Zbliżone do nich powinny być wartości "s".
Niestety ta pętla działa tak, że wartości są jedynie coraz bardziej ujemnie 
dlatego, że liczony jest tylko jeden wyraz "a".

W czym jest tu błąd myślowy/składniowy? Podejrzewam warunek While, a może typy 
zmiennych powinny być inne...... :/
Mimo różnych prób nie znalazłem rozwiązania.
Proszę o wskazówki :)

Pozdrawiam
Paweł 
Technical Details
Message-ID: <54beb6e7$0$21540$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: Paweł <brop@wp.pl>
Newsgroups: pl.comp.lang.vbasic
Subject: [VBA] Excel - obliczanie szeregu funkcji -
 przydługie
Date: Tue, 20 Jan 2015 21:13:25 +0100
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Newsreader: Microsoft Windows Live Mail 15.4.3508.1109
X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3508.1109
Lines: 75
Message-ID: <54beb6e7$0$21540$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 79.191.26.147
X-Trace: 1421784809 unt-rea-a-02.news.neostrada.pl 21540 79.191.26.147:26896
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit