Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
Excel w nauce
i technice. Receptury
Autor: David Bourg
Tumaczenie: Zbigniew Wako
ISBN: 83-246-0477-4
Tytu oryginau: Excel Scientific and Engineering Cookbook
Format: B5, stron: 432
Excel to nie tylko arkusz kalkulacyjny to potne narzdzie obliczeniowe
Wikszo uytkownikw komputerw kojarzy Excel z programem wykorzystywanym
w biurach i urzdach do tworzenia zestawie, tabelek, wykresw i przeprowadzania
oblicze matematycznych. Tymczasem jego moliwoci s o wiele wiksze. Excel,
dziki wbudowanym funkcjom, dodatkowym pakietom i jzykowi VBA moe suy
jako narzdzie do wykonywania zoonych operacji obliczeniowych, przydatnych
naukowcom i inynierom. Dzi do przeprowadzenia zaawansowanych oblicze
i symulacji nie trzeba ju wyspecjalizowanych stacji roboczych i trudnych w obsudze
aplikacji wystarczy komputer i Excel.
Ksika Excel w nauce i technice. Receptury to zbir sposobw, ktre uatwi
odkrycie wszystkich moliwoci obliczeniowych tego programu. Opisano w niej metody
rozwizywania rnych, nawet bardzo skomplikowanych zada matematycznych,
zwizanych z porzdkowaniem danych i tworzeniem wykresw. Przedstawiono sposoby
przeprowadzania analiz statystycznych i analiz cigw czasowych, aproksymowania
wykresw funkcji, oblicze macierzowych, rozwizywania rwna liniowych,
nieliniowych i rniczkowych oraz numerycznego rniczkowania i cakowania.
Podstawy obsugi Excela
Programowanie w jzyku VBA
Importowanie danych do arkuszy
Sortowanie i filtrowanie
Obliczanie przedziaw ufnoci
Analiza i predykcja cigw czasowych
Regresja liniowa
Aproksymacja funkcji
Rozwizywanie rwna i ukadw rwna
Cakowanie i rniczkowanie
Optymalizacja
Obliczenia finansowe
Dziki tej ksice przekonasz si, e Excel jest narzdziem przydatnym w kadym
biurze projektowym i pracowni naukowej.
Wstp .............................................................................................................................. 9
1. Podstawy pracy z programem Excel .............................................................................15
1.0. Wprowadzenie
1.1. Poznawanie interfejsu
1.2. Wprowadzanie danych
1.3. Ustawianie typu danych dla komrki
1.4. Zaznaczanie wielu komrek
1.5. Wprowadzanie formu
1.6. Styl odwoa W1K1
1.7. Odwoywanie si do wicej ni jednej komrki
1.8. Zrozumienie priorytetu operatorw
1.9. Stosowanie potg w formuach
1.10. Funkcje wbudowane
1.11. Formatowanie arkuszy
1.12. Definiowanie wasnych stylw formatowania
1.13. Korzystanie z polece Kopiuj, Wytnij, Wklej i Wklej specjalnie
1.14. Uywanie nazw komrek (jak zmiennych w programowaniu)
1.15. Kontrolowanie poprawnoci danych
1.16. Stosowanie makr
1.17. Wstawianie komentarzy i rwna
1.18. Uzyskiwanie pomocy
15
15
21
23
26
29
32
34
35
35
36
39
42
44
46
47
48
50
53
55
56
59
63
64
65
66
67
68
69
70
72
75
76
81
84
85
85
90
91
92
94
97
97
100
102
105
109
116
Spis treci
119
119
126
128
129
132
134
138
140
140
145
148
151
151
152
153
154
158
161
162
166
168
172
174
175
177
177
178
180
186
191
194
197
200
202
204
215
215
216
217
219
221
222
223
223
224
225
227
Spis treci
230
231
233
233
237
240
243
246
248
252
258
261
269
271
274
281
286
287
293
294
298
300
303
304
307
Spis treci
315
315
321
326
332
337
339
341
345
349
353
354
357
362
364
370
373
377
393
394
394
395
396
397
397
399
400
402
403
404
Spis treci
ROZDZIA 9.
9.0. Wprowadzenie
W tym rozdziale skoncentrujemy si na rozwizywaniu rwna za pomoc Excela. Rozwizywanie rwna w sensie oglnym moe polega na znajdowaniu pierwiastkw pojedynczych
rwna, wyznaczaniu wartoci zmiennych niezalenych, przy ktrych zmienna zalena przyjmuje zadan warto, lub rozwizywaniu ukadw rwna nieliniowych. Istnieje wiele tradycyjnych, rcznych i komputerowych, metod rozwizywania rwna. Metoda Newtona iteracyjnego znajdowania pierwiastkw rwna nieliniowych czy metoda eliminacji Gaussa
z podstawianiem wstecznym dla rozwizywania ukadw rwna liniowych to przykady takich klasycznych metod. W swojej, zaliczanej ju do klasyki, ksice Introduction to Numerical
Analysis Hildebrand przedstawi kilka klasycznych metod rozwizywania rwna. W ksikach z serii Numerical Recipes moemy znale algorytmy rozwizywania rwna zapisane
w rnych jzykach programowania1. Algorytmy prezentowane w tych i innych ksikach
powiconych metodom numerycznym s skuteczne i dobrze su naukowcom oraz inynierom. W tym rozdziale chciabym jednak pokaza, jak atwo mona, wykorzystujc moliwoci Excela, rozwizywa rwnania przy maej iloci programowania, a w niektrych przypadkach bez adnego programowania poza tworzeniem formu arkuszowych. Po tym, jak
zobaczymy, co Excel ma nam do zaoferowania, jeli Czytelnik nadal bdzie chcia napisa
program dla jakiej klasycznej metody, poka implementacj kilku takich metod przy uyciu jzyka VBA i Excela.
Niewiele mona zyska przez zastosowanie Excela lub innego tego typu narzdzia do rozwizywania rwna, ktre mona z atwoci rozwiza rcznie, stosujc proste przeksztacenia algebraiczne. Dlatego w prezentowanych tu przykadach skoncentrujemy si niemal wycznie na rwnaniach nieliniowych.
Naley rwnie doda, e opisywane tutaj techniki mog by stosowane nie tylko do rwna
majcych posta wyrae matematycznych, mimo i wikszo przykadowych rwna jest
tutaj prezentowana w takiej wanie postaci. Moemy na przykad mie do czynienia z rwnaniem zoonym z kilku formu realizujcych wyszukiwanie w tabelach lub podobnych,
ktre mona atwo utworzy za pomoc arkusza kalkulacyjnego. Taki arkusz moe potem
1
Patrz: F.B. Hildebrand, Introduction to Numerical Analysis, Dover Publications, 1974 oraz ksiki Numerical Recipes wydane przez Cambridge University Press, ktrych autorami s: Press, Teukolsky, Vetterling i Flannery.
261
reprezentowa rwnanie nieliniowe, ktre bdziemy chcieli rozwiza. Moemy mie rwnie do czynienia z obliczeniami rozoonymi na wiele arkuszy. Ostatecznie, niezalenie od
tego, czy mamy do czynienia z czysto matematycznym wyraeniem, czy te ze skomplikowanym arkuszem, zawsze moemy wskaza zmienne niezalene i zmienne zalene. Rozwizywanie tego typu rwna polega zwykle na znajdowaniu takich wartoci zmiennych niezalenych, przy ktrych zmienne zalene przyjmuj wartoci zadane. W pewnych przypadkach
zmienne zalene mog by tylko porednio zwizane z rozwizywanym rwnaniem, a wtedy moemy prbowa znale pierwiastek rwnania dla pewnej miary efektu (z tak sytuacj mamy do czynienia na przykad przy dopasowywaniu krzywej metod najmniejszych
kwadratw).
Ten typ oblicze wystpuje rwnie w zagadnieniach (lub czciowo pokrywa si z nimi)
zwizanych z analiz co-jeli oraz optymalizacj (patrz rozdzia 13.) W obu tych przypadkach czsto zachodzi potrzeba stosowania tych samych technik iteracyjnych, jakich uywa si
do rozwizywania rwna nieliniowych.
Poniewa w niniejszym rozdziale bardzo czsto bdziemy korzysta z takich narzdzi Excela,
jak polecenie Szukaj wyniku i dodatek Solver, chciabym je pokrtce przedstawi, pokazujc
ich moliwoci oraz wystpujce midzy nimi rnice.
Zarwno polecenie Szukaj wyniku, jak i dodatek Solver s uytecznymi narzdziami umoliwiajcymi przeprowadzanie oblicze iteracyjnych bez koniecznoci pisania odpowiednich
programw. Ja wykorzystuj je bardzo czsto do rozwizywania rnych problemw, poczwszy od rozwizywania ukadw rwna nieliniowych, przez analiz optymalizacyjn, po prognozowanie. Dodatek Solver wykorzystaem nawet do rozwizania rwna ruchu zbudowanego i testowanego przeze mnie wodolotu.
Z pozoru moe wydawa si, e obydwa narzdzia robi to samo pozwalaj znale w sposb iteracyjny warto w komrce docelowej przez zmian wartoci w innej, powizanej z ni
komrce. Istniej jednak midzy tymi narzdziami pewne rnice, o ktrych naley pamita, decydujc si na wybr jednego z nich w celu rozwizania okrelonego problemu. Dalsza
cz niniejszego wprowadzenia zawiera opis tych rnic.
262
Pole Ustaw komrk zawiera odwoanie do komrki docelowej, ktrej zawarto ma by ostatecznie rwna wartoci podanej w polu Warto. Odwoanie do komrki, ktrej zawarto ma
by zmieniana, podajemy w polu Zmieniajc komrk. Komrka docelowa musi zawiera formu, ktra z kolei musi bezporednio lub porednio odwoywa si do komrki podanej
w polu Zmieniajc komrk.
Polecenie Szukaj wyniku moe by wywoane rwnie z podprogramu napisanego
w jzyku VBA. Nie musimy wic robi tego rcznie, co ma szczeglne znaczenie w sytuacji, gdy polecenie to musi by wywoywane wielokrotnie. Przykad takiej sytuacji
zawiera receptura 9.3.
Posugujc si poleceniem Szukaj wyniku, moemy zmienia zawarto tylko jednej komrki,
co oznacza, e moemy go stosowa tylko w przypadkach z jedn zmienn niezalen. Ponadto musimy poda warto docelow w sposb jawny, tzn. w postaci konkretnej liczby. Polecenie Szukaj wyniku nie pozwala nam rwnie nakada adnych ogranicze na zawarto
komrki niezalenej (tzn. tej, ktr podajemy w polu Zmieniajc komrk).
Zgodnie z tym, co mona przeczyta w krtkim artykule na stronie pomocy technicznej Microsoftu (artyku nr 100782), polecenie Szukaj wyniku wykorzystuje algorytm przeszukiwania
liniowego, przyjmujc wartoci pocztkowe zblione do wartoci podanej w komrce niezalenej. Oznacza to, e warto znajdujca si w komrce niezalenej w chwili uruchomienia
polecenia Szukaj wyniku suy jako warto pocztkowa majca charakter prognozy wyniku.
Naley o tym pamita szczeglnie podczas rozwizywania problemw, ktre maj wicej
ni jedno rozwizanie. Na przykad, jeli prbujemy znale pierwiastki rwnania trzeciego
stopnia, podana przez nas warto pocztkowa moe prowadzi do jednego rozwizania,
podczas gdy inna warto pocztkowa moe da inne rozwizanie. Wynika std rwnie, e
jeli polecenie Szukaj wyniku nie znajduje adnego rozwizania, wwczas naley sprbowa
zastosowa inn warto pocztkow.
Polecenie Szukaj wyniku koczy obliczenia, gdy maksymalna wielko zmian midzy iteracjami spada poniej okrelonego progu. Przy ustawieniach domylnych prg ten wynosi 0,001.
Obliczenia zostan przerwane rwnie wtedy, gdy liczba iteracji przekroczy ustalon warto (domylnie 100). Kryteria te moemy zmieni, wybierajc z gwnego menu polecenie
Narzdzia/Opcje, ktre otwiera okno dialogowe Opcje pokazane na rysunku 9.2.
W oknie tym naley otworzy zakadk Przeliczanie. W jej rodkowej czci zobaczymy pole
opcji Iteracja oraz dwa pola edycyjne Maksymalna liczba iteracji i Maksymalna zmiana. W polach
tych naley wpisa odpowiednie wartoci i zaznaczy opcj Iteracja, aby nowe kryteria zaczy obowizywa.
W przypadkach prostych problemw iteracyjnych polecenie Szukaj wyniku sprawdza si bardzo dobrze i jest atwe w uyciu. Jednak gdy mamy do czynienia z bardziej zoonym problemem lub potrzebujemy wikszej kontroli nad procesem iteracyjnym, naley sign po
bardziej wyrafinowane narzdzie, jakim jest dodatek Solver.
Dodatek Solver
Dodatek Solver jest podobny w swoim dziaaniu do polecenia Szukaj wyniku rwnie pozwala znale warto docelow w komrce docelowej przez iteracyjn zmian wartoci w komrce niezalenej. Jednak jego moliwoci s o wiele wiksze, co znajduje odzwierciedlenie
w bardziej rozbudowanym interfejsie (rysunek 9.3). Dodatek Solver jest dostpny w menu
9.0. Wprowadzenie
263
Narzdzia. Jeli nie ma go wrd opcji tego menu, naley wybra polecenie Narzdzia/Dodatki
i na licie dostpnych dodatkw zaznaczy pozycj Dodatek Solver. Po wykonaniu tych czynnoci mona go uruchomi, wybierajc polecenie Narzdzia/Solver.
9.0. Wprowadzenie
265
Jak wida, jest tu znacznie wicej opcji w porwnaniu z tylko dwiema dostpnymi dla polecenia Szukaj wyniku. Opcje Solvera to:
Maksymalny czas
Opcja ta reprezentuje maksymalny czas, jaki Solver moe przeznaczy na poszukiwanie
wyniku. Po upywie tego czasu proces zostanie przerwany, a Solver wywietli okno z informacj, e nie mg znale rozwizania w wyznaczonym czasie. Warto t moemy
ustali maksymalnie na 32 767 sekund (nieco ponad 9 godzin), ale chyba nigdy nie zachodzi potrzeba ustawiania a tak dugiego czasu.
Liczba iteracji
Pozwala okreli maksymaln liczb iteracji, jakie Solver moe wykona w poszukiwaniu
wyniku. Jeeli ta liczba zostanie osignita, zanim Solver znajdzie rozwizanie, proces zostanie przerwany, a my zostaniemy poinformowani, e rozwizanie nie zostao znalezione przy zadanej liczbie iteracji. Warto t moemy ustali maksymalnie na 32 767, chocia
w mojej praktyce nigdy nie musiaem stosowa wartoci wikszych ni 1000, a najczciej
pozostawiam warto domyln, czyli 100.
Dokadno
Jest to liczba dziesitna z przedziau od 0 do 1, a jej warto domylna wynosi 1,010-6.
Solver wykorzystuje j do oceny, czy naoone ograniczenia s spenione. Im mniejsza jest
ta liczba, tym wiksza precyzja. W praktyce bardzo rzadko zmieniam t warto.
Tolerancja
Tolerancja jest uywana do okrelenia, czy ograniczenie wykorzystujce wartoci cakowite jest spenione. Wyraana jest w procentach, a jej warto domylna wynosi 5%. Jeli
nie stosujemy ogranicze z wartociami cakowitymi, tolerancja nie jest uywana.
Zbieno
Ten parametr jest uywany do okrelenia, czy Solver znalaz rozwizanie. Jeli dla piciu
ostatnich iteracji zmiana wartoci w komrce docelowej nie przekracza wartoci podanej
w polu Zbieno, Solver uznaje, e rozwizanie zostao znalezione, i wywietla okno ze stosown informacj. Obliczenia bd kontynuowane do momentu osignicia maksymalnej
liczby iteracji lub maksymalnego czasu. Jeeli zostanie napotkane ktrekolwiek z zadanych
ogranicze, Solver wywietli komunikat z informacj, e nie moe odnale rozwizania.
Przyjmij model liniowy
Jeeli wiemy, e model rozwizywanego problemu ma charakter liniowy, moemy zaleci
Solverowi zastosowanie metody sympleks zamiast algorytmu uoglnionego gradientu zredukowanego. Gdy zaznaczymy t opcj, Solver przeprowadzi kilka testw sprawdzajcych,
czy wedug jego kryteriw nasz model jest rzeczywicie liniowy. W przypadku negatywnego wyniku tych testw zostanie wywietlony komunikat z ostrzeeniem, e model nie
spenia kryteriw liniowoci.
Przyjmij nieujemne
Zaznaczenie tej opcji oznacza automatyczne naoenie ogranicze w postaci dolnej granicy wartoci dla wszystkich komrek zmienianych. Jeli wiemy, e wszystkie zmienne powinny by zawsze nieujemne, i chcemy, aby rzeczywicie nie przyjmoway wartoci ujemnych, wwczas powinnimy zaznaczy t opcj. W ten sposb moemy unikn rcznego
nakadania ogranicze na kad zmienn.
266
Automatyczne skalowanie
W niektrych zagadnieniach wartoci zmiennych niezalenych mog znacznie rni si
pod wzgldem wielkoci od wartoci zmiennych zalenych. W takich przypadkach dobrze jest tak przeskalowa model, aby wartoci wejciowe i wyjciowe byy tego samego
rzdu. Jeeli wczeniej nie wykonalimy takiego skalowania, moemy zaznaczy t opcj,
aby Solver zrobi to za nas. Wartoci wejciowe i wyjciowe zostan wwczas przeskalowane w wyniku podzielenia ich przez wartoci pocztkowe podane w komrkach zmienianych i docelowych. W takich sytuacjach szczeglnej wagi nabiera dobr odpowiednich
wartoci pocztkowych. Zawsze najlepiej jest ustala te wartoci zgodnie ze zdrowym rozsdkiem i realiami rozwaanego problemu.
Poka wyniki iteracji
Jeli chcemy na bieco ledzi prac Solvera podczas rozwizywania danego problemu,
moemy t opcj zaznaczy. Pojawi si wwczas okno dialogowe informujce nas o tym,
e Solver przerwa prac i e aktualne wyniki iteracji s wywietlane w aktywnym arkuszu. Opcja ta przydaje si, gdy chcemy przeledzi wyniki poszczeglnych etapw iteracji, na przykad wtedy, gdy chcemy ustali, dlaczego Solver nie moe znale rozwizania. W zwykych warunkach nie zaznaczam tej opcji, poniewa taki tryb pracy wymaga
za kadym razem kliknicia odpowiedniego przycisku nakazujcego Solverowi przejcie
do nastpnego etapu. W sytuacji, gdy rozwizanie danego problemu wymaga duej liczby iteracji, moe to by bardzo mudne i czasochonne.
Estymaty
Tutaj moemy okreli sposb, w jaki Solver bdzie szacowa wartoci pocztkowe zmiennych niezalenych. Opcja Styczna oznacza wykorzystanie do tego celu interpolacji liniowej,
a opcja Kwadratowa interpolacji kwadratowej, dajcej lepsze rezultaty (szybsze znajdowanie rozwizania) w przypadku problemw nieliniowych. Szczerze mwic, przy szybkoci wspczesnych procesorw trudno jest zauway istotn rnic midzy tymi opcjami, jeli chodzi o czas znajdowania rozwizania typowych problemw.
Pochodne
Do obliczania gradientw Solver wykorzystuje metod rnic skoczonych, dajc nam
moliwo wyboru jednego z dwch schematw tej metody. Opcja W przd pozwala wybra schemat rnicy przedniej (progresywnej), a opcja Centralne schemat rnicy centralnej. Rniczkowanie w oparciu o schemat rnicy centralnej wymaga wikszej iloci
oblicze, ale jest bardziej dokadne. I znw, jeli chodzi o czas trwania oblicze, rnica
midzy tymi opcjami jest praktycznie niezauwaalna na wspczesnych komputerach. Ja
najczciej wybieram rniczkowanie centralne. (Analiz rnic midzy rniczk przedni a rniczk centraln zawiera receptura 10.6).
Szukanie
Tutaj moemy nakaza Solverowi rozwizywanie problemu metod Newtona lub metod
sprzonego gradientu. Solver uywa tych metod do okrelania kierunku poszukiwa
podczas kadej iteracji. Metoda Newtona wymaga mniejszej liczby oblicze ni metoda
sprzonego gradientu, ale za to angauje wicej zasobw pamiciowych. Jeli pami jest
kwesti istotn na przykad, gdy rozwizujemy rozbudowany problem z du liczb
zmiennych i ogranicze lub gdy zasoby pamiciowe naszego komputera s ograniczone
wwczas moemy wybra metod sprzonego gradientu.
9.0. Wprowadzenie
267
Istniej jeszcze dwie inne opcje Solvera, ktre, mimo e nie wpywaj bezporednio na proces
obliczeniowy, s bardzo uyteczne. Opcjami tymi s: Zaaduj model i Zapisz model. Ujmujc
rzecz krtko: Solver pozwala nam zapisywa modele i ponownie je wykorzystywa. To moe
by przydatne podczas sprawdzania rnych kombinacji zmiennych, ogranicze i opcji Solvera
pod ktem najlepszego dopasowania modelu do danego zagadnienia. Daje to rwnie moliwo odtworzenia modelu w dowolnym momencie (bez koniecznoci pamitania wszystkich
ustawie), jeli zdecydujemy si na ponowne wykonanie tych samych oblicze.
Aby zapisa model, naley klikn przycisk Zapisz model. Pojawi si wwczas mae okno dialogowe wzywajce do okrelenia zakresu komrek, w ktrych dane modelu maj by zapisane. Zakres ten powinien by pooony z dala od innych danych i formu znajdujcych si
w arkuszu, aby nie zostay one zastpione danymi zapisywanego modelu. Do okrelenia tego
zakresu wystarczy podanie jednej komrki Solver umieci dane modelu w kolumnie, rozpoczynajc od podanej komrki i zajmujc trzy komrki plus jeszcze tyle, ile jest ogranicze
w zapisywanym modelu.
Aby pniej odtworzy zapisany model, wystarczy otworzy okno Solver - Opcje i klikn
przycisk Zaaduj model. Zobaczymy wwczas mae okno dialogowe wzywajce nas do zaznaczenia zakresu komrek, w ktrych model zosta zapisany. Tym razem musimy zaznaczy
ten zakres w caoci zaznaczenie tylko pierwszej komrki nie wystarczy.
Jeszcze jednym przydatnym elementem Solvera jakiego nie ma w przypadku polecenia
Szukaj wyniku jest okno dialogowe Solver - Wyniki. Po znalezieniu rozwizania Solver informuje nas o tym, otwierajc okno dialogowe, takie jak to pokazane na rysunku 9.5.
Mamy tutaj do wyboru zachowanie wyniku uzyskanego przez Solver lub przywrcenie oryginalnych wartoci pocztkowych. Ponadto moemy wyda Solverowi polecenie wygenerowania jednego lub kilku spord trzech raportw: Wynikw, Wraliwoci i Granic. W tym celu
naley klikn odpowiedni nazw raportu. Moemy wybra jeden, wszystkie lub dowoln
kombinacj dwch raportw. Po klikniciu przycisku OK Solver utworzy nowy arkusz dla
kadego zaznaczonego raportu. Raporty te przydaj si podczas interpretowania uzyskanych
wynikw, szczeglnie w przypadku optymalizacji z ograniczeniami. Zagadnienia zwizane
z tymi raportami i optymalizacj s szerzej opisane w rozdziale 13.
Zawsze moemy skorzysta z pomocy, jak dodatek Solver oferuje nam po klikniciu przycisku Pomoc dostpnego we wszystkich jego oknach dialogowych. Czytelnikom pragncym poszerzy swoj wiedz na temat historii i wewntrznych mechanizmw Solvera polecam artyku pt. Design and Use of the Microsoft Excel Solver, autorstwa Daniela Fylstry, Leona Lasdona,
Johna Watsona i Allana Warena, opublikowany na amach pisma Interfaces, nr 5 (1998).
268 |
Rozwizanie
Naley zapisa rwnanie w postaci y = g(x), obliczy wartoci zmiennej y dla zadanego zakresu wartoci zmiennej x i, wykorzystujc moliwoci Excela, utworzy wykres tych wynikw.
Informacje na temat tworzenia wykresw w Excelu mona znale w rozdziale 4.
Analiza
Jeli musimy znale pierwiastki rwnania, ktrego nie moemy rozwiza rcznie, powinnimy rozpocz od wykonania wykresu dla tego rwnania. Uzyskamy w ten sposb cenn informacj na temat natury samego rwnania i pooenia jego pierwiastkw. Jeli tylko moemy
przedstawi rwnanie w postaci y = g(x), gdzie x oznacza zmienn niezalen, a y zmienn zalen, wwczas z atwoci moemy zestawi kolumny z obliczeniami zmiennej y dla
rnych wartoci zmiennej x.
To wszystko wydaje si bardzo proste i prawd mwic, w kategoriach operacji arkuszowych,
nie jest to trudne do wykonania. Jednak gdy mamy do czynienia z jakim szczeglnie zawikanym rwnaniem, ktre na dodatek moe mie kilka pierwiastkw, lepiej byoby dysponowa wiedz o pooeniu tych pierwiastkw. Wynika to std, e wikszo iteracyjnych metod
rozwizywania rwna wymaga od nas podania przypuszczalnego pooenia tych pierwiastkw. Niektre metody wymagaj podania dwch wartoci pocztkowych, a inne okrelenia
przedziaw, w ktrych pierwiastki mog si znajdowa. Sukces w wyznaczeniu pierwiastkw za pomoc kadej z tych metod zaley wic od jakoci naszych przewidywa i ustalanych na tej podstawie wartoci pocztkowych. (Konkretne przykady mona znale w pozostaych recepturach z tego rozdziau).
Rozwamy nastpujce rwnanie wielomianowe trzeciego stopnia:
y = a + bx + cx 2 + dx3
To rwnanie ma oczywicie trzy pierwiastki, co oznacza, e istniej trzy wartoci zmiennej x,
dla ktrych zmienna y przyjmuje warto rwn zero. Bez trudu mona to wykaza, wykrelajc krzyw zalenoci y od x. Na rysunku 9.6 zosta przedstawiony wykres powyszego
rwnania wykonany w Excelu.
Jak wida, rzeczywicie krzywa przecina o x w trzech punktach, a to dowodzi, e dla trzech
wartoci zmiennej x zmienna y przyjmuje warto rwn zero. Aby wykreli t krzyw, zestawiem dwie kolumny: jedna zawiera wartoci zmiennej x, a druga obliczone wartoci
zmiennej y. Na rysunku 9.6 s to kolumny, odpowiednio: B i C. W tym przykadzie przyjem dowolne wartoci wspczynnikw wielomianu i umieciem je w kolumnach od C2
do C5. Na pasku formuy mona zobaczy formu, jakiej uyem do obliczania wartoci y
| 269
270
Rozwizanie
Naley wykorzysta polecenie Szukaj wyniku lub dodatek Solver. Informacje na temat rnic
w korzystaniu z tych narzdzi oraz zalet i wad kadego z nich zawarte zostay we wprowadzeniu do niniejszego rozdziau.
Analiza
W tej recepturze chc pokaza na konkretnym przykadzie, jak rozwiza rwnanie nieliniowe za pomoc takich narzdzi jak polecenie Szukaj wyniku i dodatek Solver. Nasze rozwaania skoncentrujemy na nastpujcym rwnaniu:
0,242
Cf
= log( RN C f )
Rwnanie to jest wykorzystywane w obliczeniach oporw ruchu statkw do szacowania wartoci wspczynnika oporu tarcia Cf jako funkcji liczby Reynoldsa RN. Istniej jeszcze inne
rwnania suce do tego samego celu, ale wybraem ten klasyczny przypadek, poniewa nie
mona go zapisa w postaci y = g(x). Musimy wic sign po metody iteracyjne, aby obliczy
warto Cf odpowiadajc danej wartoci RN.
Poka teraz, jak wykorzysta polecenie Szukaj wyniku i dodatek Solver do rozwizania tego
problemu. W obu przypadkach musimy najpierw przeksztaci to rwnanie do nastpujcej
postaci:
0=
0,242
Cf
- log( R N C f )
Teraz moemy zastosowa jedno z wymienionych wyej narzdzi do iteracyjnego poszukiwania takiej wartoci Cf, ktra przy zadanej wartoci RN sprawi, e prawa strona tego rwnania bdzie rwna 0. Wczeniej jednak musimy praw stron tego rwnania umieci w arkuszu w postaci formuy, tak jak zostao to pokazane na rysunku 9.7.
Formua reprezentujca praw stron naszego rwnania znajduje si w komrce C5. Posta
tej formuy jest nastpujca: =0,242/PIERWIASTEK(C4)-LOG(C3*C4;10), co zreszt wida na
pasku formuy na rysunku 9.7. Komrka C3 zawiera zadan liczb Reynoldsa, a komrka C4
wspczynnik tarcia wyznaczony za pomoc Solvera lub polecenia Szukaj wyniku. Aby skorzysta z tych narzdzi, musimy w komrce C4 umieci warto pocztkow, ktr powinna
by przewidywana przez nas warto wspczynnika tarcia. Jak ju wskazywaem we wstpie
do niniejszego rozdziau, taka warto pocztkowa powinna by dobierana bardzo starannie.
271
Rysunek 9.8. Okno dialogowe Szukanie wyniku dla przykadowego rwnania nieliniowego
W polu Ustaw komrk naley wpisa C5 lub klikn ma ikon na prawo od pola edycyjnego, aby tymczasowo przej do arkusza i zaznaczy tam komrk C5 (po jej zaznaczeniu naley wcisn klawisz Enter, aby powrci do okna Szukanie wyniku). Przypominam, e komrka C5 zawiera formu reprezentujc praw stron naszego rwnania i chcemy, aby wynik
tej formuy by rwny zero. Dlatego w polu Warto naley wpisa 0. Jest to nasza warto
docelowa. Teraz w polu Zmieniajc komrk naley umieci odwoanie do komrki C4, ktra
zawiera warto wspczynnika tarcia. Po klikniciu przycisku OK zawarto komrki C4
bdzie dotd zmieniana, a formua w komrce C5 osignie warto dostatecznie blisk 0.
Wynik tych oblicze jest pokazany na rysunku 9.7. Wida tu, e reszta w komrce C5 wynosi
9,6104.
272
Powinienem doda, e przyjta przeze mnie warto pocztkowa dla komrki C4 wynosia
1107. Mogem przyj warto 0, poniewa wiem, e wspczynnik tarcia powinien by bardzo ma liczb, ale tego nie zrobiem, bo to wywoaoby bd dzielenia przez zero. Wystpienie takiego bdu podczas pracy polecenia Szukaj wyniku powoduje awaryjne zakoczenie
jego dziaania i wywietlenie komunikatu o nastpujcej treci: Formua w komrce musi dawa
w wyniku liczb.
Reszta wynoszca 9,6104 nie oznacza zego wyniku, ale moemy uczyni go jeszcze lepszym.
Jak wspominaem we wprowadzeniu, moemy zmieni ustawienia zbienoci dla polecenia
Szukaj wyniku w oknie dialogowym Opcje (rysunek 9.2). Aby go otworzy, naley z gwnego
menu wybra polecenie Narzdzia/Opcje. Na zakadce Przeliczanie zaznaczyem opcj Iteracja
i ustawiem parametr Maksymalna liczba iteracji na 5 000, a parametr Maksymalna zmiana na
1108. Przy takich ustawieniach polecenie Szukaj wyniku znalazo rozwizanie ze znacznie
mniejsz reszt wynoszc 3,4109. Wspczynnik tarcia dla zadanej liczby Reynoldsa wynis przy tym 0,0124.
Rysunek 9.9. Okno dialogowe Solver - Parametry dla przykadu z rwnaniem nieliniowym
W polu Komrka celu umieciem odwoanie do komrki C5. Spord opcji Rwna wybraem
Warto i w polu obok wpisaem 0. Tak jak poprzednio, komrka C5 zawiera praw stron
naszego rwnania, ktra ma przyj warto rwn 0. Nastpnie w polu Komrki zmieniane
umieciem odwoanie do komrki C4, ktra zawiera warto pocztkow wspczynnika
tarcia. Kliknicie przycisku Rozwi rozpoczyna proces rozwizywania rwnania.
Solver rzeczywicie znajduje rozwizanie, dajc warto wspczynnika tarcia rwn 0,0124
przy reszcie wynoszcej 5,45107. S to wartoci porwnywalne z uzyskanymi za pomoc
polecenia Szukaj wyniku.
273
Sprbujmy teraz, troch dla zabawy, rozwiza ten sam problem, ale z wiksz wartoci pocztkow wspczynnika tarcia, np. 1 lub 5 albo jeszcze wicej. W takim przypadku Solver nie
potrafi znale rozwizania! Przy takich wartociach pocztkowych Solver przeskakuje rzeczywiste rozwizanie i w efekcie prbuje przyj dla dalszych iteracji warto wspczynnika
tarcia rwn 0, co oczywicie oznacza w tym przypadku bd dzielenia przez zero i przedwczesne zakoczenie dziaania Solvera. Ten prosty przykad wiadczy dobitnie o tym, jak
wielkie znaczenie ma waciwy dobr wartoci pocztkowych. Ponadto pokazuje, e jeeli
pierwsza prba jest nieudana, naley zmieni warto pocztkow i sprbowa ponownie.
Rozwizanie
Mona zautomatyzowa ten proces, wykorzystujc jzyk VBA, ktry umoliwia programowe
wywoywanie Solvera lub polecenia Szukaj wyniku.
Analiza
Dodatek Solver i polecenie Szukaj wyniku s wygodnymi narzdziami do rozwizywania rozmaitych problemw w Excelu. Ale jeszcze lepsze jest to, e moemy uywa tych narzdzi
bezporednio w kodzie VBA, nawet bez rcznego otwierania ich okien dialogowych, zaznaczania komrek itp. Oznacza to, e moemy zautomatyzowa wiele zada wymagajcych
uycia Solvera lub polecenia Szukaj wyniku, oszczdzajc w ten sposb wiele cennego czasu.
Rozwamy ponownie przykadowe rwnanie z receptury 9.2. Dla wygody przytaczam je tutaj jeszcze raz:
0,242
Cf
= log( RN C f )
Powstaje pytanie: jak utworzy wykres tego rwnania? Gdybymy chcieli wykreli krzyw
zalenoci Cf od RN, musielibymy dla kadego punktu wyznaczajcego t krzyw uy Solvera
lub polecenia Szukaj wyniku. Nawet gdybymy nie zamierzali tworzy wykresu, lecz tylko sam
tabel z wartociami Cf dla rnych wartoci RN, wwczas rwnie czekaby nas trud rcznego, wielokrotnego stosowania tych narzdzi dla kadej wartoci RN. A mona sobie wyobrazi jeszcze bardziej zoony przypadek, gdy rwnanie zawiera jeszcze jeden parametr, ktry
rwnie chcemy systematycznie zmienia. To musiaoby by naprawd nudne zajcie!
274
Na szczcie twrcy Solvera i polecenia Szukaj wyniku umoliwili wykorzystanie moliwoci tych narzdzi z poziomu jzyka VBA, dziki czemu moemy tego typu zadania zautomatyzowa.
Jak wida, jest tutaj kilka nowych elementw. Kady z nich postaram si objani. Elementy
pochodzce z oryginalnego arkusza zostay wyrnione czcionk pochy (patrz rysunek 9.10),
natomiast caa reszta jest tutaj nowa.
275
Pierwsz rzecz, jak dodaem do tego arkusza, byo wpisanie w komrkach C1 i C2 wartoci
okrelajcych pocztek i koniec rozwaanego przedziau wartoci RN. Na lewo od tych komrek umieciem odpowiednie etykiety objaniajce.
Nastpnie w komrkach od A9 do C30 skonstruowaem tabel przeznaczona do przechowywania wartoci RN i odpowiadajcych im wartoci Cf . Pocztkowo tabela ta zawieraa tylko
nagwki kolumn w wierszu 9 i numery wierszy w kolumnie A. Kolumny Cf i RN pozostay
na razie puste zostan wypenione po uruchomieniu podprogramu VBA, ktry wkrtce
zaprezentuj.
Po zestawieniu tabeli utworzyem wykres, ktry bdzie prezentowa zaleno Cf od RN. Jako
e tabela danych na razie jest pusta, na wykresie nie zobaczymy adnej krzywej. Jednak przygotowanie wykresu ju na tym etapie oznacza, e po zakoczeniu oblicze wykonywanych
przez podprogram VBA zostanie on automatycznie zaktualizowany i oczekiwana krzywa pojawi si. (Jeli Czytelnik potrzebuje dodatkowych informacji na temat tworzenia wykresw,
proponuj zajrze do rozdziau 4.).
Ostatnim elementem, jaki musimy jeszcze doda do arkusza, jest przycisk, ktry na rysunku
9.10 nosi nazw Oblicz Cf. Excel pozwala nam dodawa do arkuszy rne elementy sterujce,
umoliwiajc w ten sposb konstruowanie nawet bardzo rozbudowanych interfejsw graficznych (ang. GUI Graphical User Interface) podobnych do tych, ktre znamy ze standardowych programw dziaajcych w systemie Windows. Dla celw niniejszego przykadu poka, jak wstawi do arkusza prosty przycisk i powiza go z kodem VBA, tak aby kliknicie
tego przycisku wywoywao jak akcj. W tym przypadku kod VBA obliczy wartoci Cf dla
caego zakresu wartoci RN i wypeni tabel danych.
Zanim przystpimy do umieszczenia przycisku w arkuszu, musimy upewni si, e pasek
narzdzi Przybornik formantw jest widoczny w Excelu. Pasek ten zosta pokazany na rysunku 9.11.
Jeli jest niewidoczny, naley z gwnego menu Excela wybra polecenie Widok/Paski narzdzi/
Przybornik formantw.
Aby doda przycisk do arkusza, wystarczy klikn ikon Przycisk polecenia (rysunek 9.11),
a nastpnie klikn w obrbie arkusza, tam, gdzie chcemy przycisk umieci. Po wykonaniu
tych czynnoci na naszym arkuszu powinien pojawi si nowy element w postaci przycisku.
Pocztkowo bdzie on otoczony uchwytami (keczkami), ktre moemy przeciga, zmieniajc w ten sposb rozmiary przycisku. Moemy rwnie przeciga sam przycisk, aby zmieni
jego pooenie.
W momencie dodawania nowego elementu sterujcego do arkusza Excel przechodzi w tryb
projektowania, co jest sygnalizowane wciniciem przycisku Tryb projektowania na pasku Przybornik formantw. W tym trybie moemy zmienia rozmiary elementw kontrolnych i przemieszcza je. Po wyjciu z trybu projektowania kliknicie elementu kontrolnego spowoduje
276
jego uaktywnienie. Tryb projektowania mona na przemian wcza i wycza, klikajc wspomniany ju przycisk Tryb projektowania na pasku narzdzi.
Elementy sterujce dostpne na pasku Przybornik formantw s kontrolkami ActiveX.
Jeli w trybie projektowania klikniemy taki element prawym przyciskiem myszy,
wwczas z menu podrcznego moemy wybra polecenie Waciwoci, ktre otwiera
okno udostpniajce wszystkie waciwoci tego elementu. W tym oknie moemy
dokona edycji wielu charakterystyk wybranego elementu kontrolnego. Na przykad
zmiana waciwoci Caption oznacza zmian tekstu wywietlanego na samym elemencie kontrolnym. W naszym przykadzie ten tekst zosta zmieniony na Oblicz Cf, co
wida na rysunku 9.10.
Po dodaniu przycisku musimy powiza go jakim kodem VBA, jeli kliknicie tego przycisku ma powodowa podjcie jakiejkolwiek akcji. A zatem nastpny etap bdzie polega na
napisaniu odpowiedniego podprogramu i powizaniu go z nowym przyciskiem.
Przykad 9.1 przedstawia procedur, jak przygotowaem na potrzeby naszego przykadu.
(Czytelnikw, ktrzy poszukuj informacji na temat doczania takich jak ta procedur VBA
do arkuszy Excela, odsyam do rozdziau 2.).
Przykad 9.1. Procedura ComputeCf
Public Sub ComputeCf()
Dim inc As Double
With Worksheets("Rwnanie nieliniowe")
inc = (.Range("Rn_2") - .Range("Rn_1")) / 20
For i = 0 To 20
.Range("Rn") = .Range("Rn_1") + (inc * i)
.Range("Fx").GoalSeek goal:=0, ChangingCell:=.Range("Cf")
.Cells(10 + i, 2) = .Range("Rn")
.Cells(10 + i, 3) = .Range("Cf")
Next i
End With
End Sub
Procedura, ktrej nadaem nazw ComputeCf, pobiera granice przedziau zmiennoci RN zapisane w komrkach C1 i C2, a nastpnie, wykorzystujc polecenie Szukaj wyniku, oblicza 20
wartoci Cf . Po obliczeniu wszystkich wartoci Cf wyniki s zapisywane w tabeli obejmujcej
komrki arkusza od A9 do C30.
Pierwsza linia procedury zawiera deklaracj zmiennej lokalnej o nazwie inc, ktra bdzie
przechowywa przyrost zmiennej RN (przyrost ten jest obliczany w dalszej czci procedury),
czyli rnic midzy kolejnymi wartociami tej zmiennej.
W nastpnej linii wystpuje instrukcja With. W jzykach zorientowanych obiektowo, takich
jak VBA, gdzie dostp do skadnikw obiektu realizowany jest poprzez skadni z kropk
(widoczn w powyszym przykadzie), instrukcje With peni bardzo uyteczn rol. Pozwalaj one okreli, ktry obiekt ma by przyjty jako domylny przy odwoywaniu si do poszczeglnych skadnikw. Dziki temu moemy zaoszczdzi pisania, opuszczajc w tych
odwoaniach nazw obiektu-rodzica. Na przykad w tym podprogramie uyem instrukcji
With Worksheets("Rwnanie nieliniowe"), informujc w ten sposb VBA, e chc uzyska
dostp do obiektu typu Worksheet o nazwie Rwnanie nieliniowe. Jest to nazwa arkusza
277
Nastpna instrukcja po With oblicza warto zmiennej inc, odwoujc si do komrek zawierajcych granice przedziau zmiennej RN za pomoc obiektw typu Range, tak jak to zostao
wczeniej opisane. Jako odwoania do tych komrek zastosowaem ich nazwy, Rn_2 i Rn_1.
Uwaam, e nazwy s bardziej czytelne ni standardowe odwoania. O nadawaniu nazw komrkom mona przeczyta w recepturze 1.14.
Po obliczeniu wartoci inc podprogram wchodzi w ptl For przebiegajc przez wszystkie
wartoci RN. Dla kadej wartoci RN obliczana jest iteracyjnie warto Cf za pomoc polecenia
Szukaj wyniku. Oto objanienie kadej linii tej ptli:
.Range("Rn") = .Range("Rn_1") + (inc * i)
W tej linii obliczana jest kolejna warto RN, ktra zapisywana jest w komrce o nazwie Rn
(komrka C3).
.Range("Fx").GoalSeak goal:=0, ChangingCell:=.Range("Cf")
Tutaj nastpuje wywoanie polecenia Szukaj wyniku (ang. Goal Seak) dla komrki o nazwie
Fx (komrka C4) jako komrki docelowej, ktrej zawarto ma osign warto 0. Warto docelowa jest tutaj ustalana przez goal:=0. Parametr Zmieniajc komrk jest okrelany przez ChangingCell:=.Range("Cf"). Wszystko to stanowi informacj dla polecenia
Szukaj wyniku, e zawarto komrki Cf ma by tak zmieniana, aby w komrce Fx pojawia si warto rwna zero.
.Cells(10 + i, 2) = .Range("Rn")
W tej linii zawarto komrki Rn jest zapisywana w tabeli danych, poczwszy od komrki
B10. Numer wiersza jest zwikszany o 1 przy kadym przejciu ptli. Dla wygody zastosowaem tutaj styl odwoa W1K1. (Wicej informacji na temat tego stylu zawiera receptura 1.6).
.Cells(10 + i, 3) = .Range("Cf")
Warto Cf wyznaczona przez polecenie Szukaj wyniku jest zapisywana do tabeli danych.
Tutaj rwnie zastosowaem styl W1K1.
Teraz moemy powiza napisan wanie procedur ComputeCf z przyciskiem dodanym
wczeniej do arkusza. W tym celu naley najpierw wczy tryb projektowania (w sposb
opisany wczeniej), a nastpnie klikn ten przycisk prawym przyciskiem myszy. Z otwartego w ten sposb menu podrcznego naley wybra polecenie Wywietl kod, ktre przeniesie
nas do edytora VBA, gdzie powinnimy zobaczy now procedur przygotowan dla naszego przycisku. Procedura ta zostaa pokazana w przykadzie 9.2.
278
Opisywana procedura jest na razie pusta. Umiecimy w niej wywoanie napisanej wczeniej
procedury ComputeCf, tak jak to zostao pokazane w przykadzie 9.3.
Przykad 9.3. Wywoanie procedury ComputeCf
Private Sub CommandButton1_Click()
ComputeCf
End Sub
Jeli teraz klikniemy przycisk w Excelu (po wyczeniu trybu projektowania), spowoduje to
wykonanie procedury obliczajcej wartoci Cf dla zadanego zakresu wartoci RN. Wyniki tych
oblicze zobaczymy w tabeli oraz na wykresie. Jeeli zechcemy wyznaczy wartoci Cf dla
innego zakresu wartoci RN, jedyne, co musimy zrobi, to wpisa granice nowego zakresu
(w komrkach C1 i C2) i ponownie klikn przycisk.
Excel zawiera jeszcze jeden zestaw elementw sterujcych dostpnych na pasku Formularze (widocznym po wybraniu polecenia Widok/Paski narzdzi/Formularze). Elementy te wygldaj tak jak stosowane w tym przykadzie elementy ActiveX, ale daj nam
wiksz kontrol i rni si od nich sposobem modyfikowania waciwoci oraz
przypisywania funkcji. Oglnie, elementy typu ActiveX s nowsze i lepiej oprogramowane, a elementy formularzowe s starsze i utrzymywane dla zachowania zgodnoci ze starszymi wersjami programw.
Automatyzowanie Solvera
Wykorzystanie Solvera moemy zautomatyzowa w sposb analogiczny do tego, jaki zastosowalimy w celu zautomatyzowania uycia polecenia Szukaj wyniku. W rzeczywistoci, aby
w rozwaanym przykadzie zamiast polecenia Szukaj wyniku zastosowa dodatek Solver, wystarcz niewielkie modyfikacje kodu VBA. Wszystkie elementy arkusza mog pozosta takie
same jak poprzednio, a zmodyfikowa musimy tylko procedur ComputeCf. Now wersj tej
procedury przedstawia przykad 9.4.
Przykad 9.4. Procedura ComputeCf z uyciem Solvera
Public Sub ComputeCf()
Dim inc As Double
With Worksheets("Rwnanie nieliniowe")
inc = (.Range("Rn_2") - .Range("Rn_1")) / 20
279
For i = 0 To 20
.Range("Rn") = .Range("Rn_1") + (inc * i)
' Tutaj rozpoczyna si nowy kod:
.Range("Cf") = 0.001
SolverOK SetCell:=Range("Fx"), MaxMinVal:=3, ValueOf:=0,
ByChange:=Range("Cf")
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
.Cells(10 + i, 2) = .Range("Rn")
.Cells(10 + i, 3) = .Range("Cf")
Next i
End With
End Sub
Zmiana w stosunku do poprzedniej wersji obejmuje cztery linie kodu nastpujce po komentarzu 'Tutaj rozpoczyna si nowy kod:. Te nowe linie to:
.Range("Cf") = 0.001
W tej linii ustawiana jest warto pocztkowa zmiennej Cf. W tym przypadku bdzie ona
wynosi 0,001 i bdzie suy jako warto wstpna, ustawiana przed wywoaniem Solvera.
SolverOK SetCell:=Range("Fx"), MaxMinVal:=3, ValueOf:=0, ByChange:=Range("Cf")
W tej linii nastpuje wywoanie wewntrznej procedury Solvera o nazwie SolverOK w celu
inicjalizacji modelu Solvera. Komrka docelowa (jest ni komrka o nazwie Fx) jest okrelana przez SetCell:=Range("Fx"). Poniewa chcemy jej przypisa konkretn warto,
ustalamy MaxMinVal:=3. Gdyby chodzio nam o maksymalizowanie wartoci docelowej,
naleaoby napisa MaxMinVal:=1, a w przypadku minimalizowania MaxMinVal:=2. Kolejny zapis ValueOf:=0 jest informacj dla Solvera, e warto docelowa wynosi 0. Z kolei
zapis ByChange:=Range("Cf") informuje Solver, e ma poszukiwa rozwizania przez
zmian zawartoci komrki o nazwie Cf.
SolverSolve UserFinish:=True
Wywoanie procedury SolverSolve uruchamia Solvera. Przypisanie UserFinish:=True
280 |
Informacje dodatkowe
Za pomoc kodu VBA mona kontrolowa znacznie wicej aspektw Solvera, ni tutaj pokazaem. Wicej informacji mona znale w pomocy Excela oraz na stronie internetowej pomocy technicznej Microsoftu http://support.microsoft.com, gdzie naley odszuka artykuy na
temat Solvera (wrd wielu tematw dotyczcych innych produktw tej firmy). Dla pragncych zgbi tajniki stosowania Solvera najbardziej pomocnym moe okaza si artyku pt.
How to create Visual Basic macros by using Excel Solver in Excel 97 (artyku nr 843304)2.
Rozwizanie
Ukady rwna liniowych mona rozwizywa w Excelu, stosujc rne podejcia. Na przykad moemy napisa program w jzyku VBA bdcy implementacj jednego ze standardowych algorytmw rozwizywania ukadw rwna. Takie podejcie jest niewtpliwie skuteczne, ale czasochonne wymaga napisania programu i jego przetestowania w celu usunicia
ewentualnych bdw. Jako e Excel udostpnia nam narzdzia do wykonywania dziaa na
macierzach, moemy ukad rwna przedstawi w postaci macierzowej i znale rozwizanie
przez odwrcenie odpowiedniej macierzy. Jeszcze atwiejszy sposb polega na wykorzystaniu dodatku Solver. W poniszej analizie zaprezentowane zostan dwa ostatnie rozwizania.
Analiza
Jeli potrafimy zapisa ukad rwna w postaci rwnania macierzowego, to moemy znale
rozwizanie, stosujc proste odwracanie macierzy. Jeli nie moemy lub nie chcemy tego zrobi, albo mamy do czynienia z ukadem rwna nieliniowych, moemy wybra jedno z podej opartych na wykorzystaniu Solvera.
Odwracanie macierzy
W recepturze 7.10 pokazaem, jak wykorzysta funkcje wbudowane Excela operujce na macierzach do mnoenia i odwracania macierzy. Te same funkcje moemy zastosowa do rozwizania ukadu rwna liniowych zapisanego w nastpujcej postaci:
[A][x] = [b]
Nasze podejcie do rozwizania tego zadania bdzie polegao na bezporednim zastosowaniu wspomnianych funkcji. Wartoci niewiadomych x speniajce powysze rwnanie znajdziemy przez rozwizanie nastpujcego rwnania macierzowego:
2
281
Zamy na przykad, e dane s macierze [A] i [b], takie jak na rysunku 9.12.
Pierwszy etap rozwizywania tego rwnania to odwrcenie macierzy [A]. W tym celu naley
uy formuy =MACIERZ.ODW(C6:E8), pamitajc przy tym, e jest to formua tablicowa, ktr naley wprowadzi do okrelonego zakresu komrek i zatwierdzi wciniciem klawiszy
Ctrl+Shift+Enter. Rezultat takiego odwrcenia macierzy jest widoczny na rysunku 9.12 w komrkach od C14 do E16.
Drugi i zarazem ostatni etap polega na pomnoeniu odwrconej macierzy [A] przez macierz
[b] za pomoc formuy =MACIERZ.ILOCZYN(C14:E16;C10:C12), ktra rwnie jest formu
tablicow i naley j wprowadzi do zakresu komrek. Ostateczny wynik zosta pokazany na
rysunku 9.12 w komrkach od C19 do C21.
282
| 283
W polu Adres komrki naley umieci odwoanie do komrki zawierajcej obliczan warto
wspczynnika b, a w polu Warunek ograniczajcy odwoanie do komrki zawierajcej odpowiedni warto zadan tego wspczynnika. Z listy rozwijanej w rodkowej czci okna
naley wybra znak rwnoci (=). Kliknicie przycisku Dodaj spowoduje zatwierdzenie utworzonego ograniczenia bez zamykania okna Dodaj warunek ograniczajcy, tak wic moemy od
razu przystpi do tworzenia kolejnych dwch ogranicze. Po dodaniu ostatniego ograniczenia i zamkniciu okna klikniciem przycisku Anuluj powinnimy zobaczy te ograniczenia
w postaci takiej jak na rysunku 9.14.
By moe Czytelnik zastanawia si, dlaczego nie okrelilimy komrki docelowej.
Ot okazuje si, e w takiej sytuacji Solver tworzy tzw. pozorn komrk docelow.
Poniewa dla samego rozwizania naszego zadania zawarto tej komrki jest nieistotna, moemy poprzesta na zdefiniowaniu samych ogranicze.
two, dodajc do tabeli z rysunku 9.14 jeszcze jedn kolumn. Poszerzona w ten sposb tabela
zostaa pokazana na rysunku 9.16.
Rysunek 9.16. Rozwizywanie ukadu rwna liniowych za pomoc Solvera metod minimalizacji reszt
| 285
W polu Komrka celu naley umieci odwoanie do komrki zawierajcej sum kwadratw
reszt, czyli K23. Tym razem bdziemy chcieli zminimalizowa zawarto tej komrki. W polu
Komrki zmieniane naley umieci odwoanie do komrek zawierajcych wartoci x, ktre
bd zmieniane. Warto podkreli, e nie ma tutaj adnych ogranicze.
Po klikniciu przycisku Rozwi powinnimy zobaczy wyniki takie jak na rysunku 9.16. Jak
naleao si spodziewa, pokrywaj si one z wynikami uzyskanymi za pomoc metod opisywanych wczeniej.
To, ktre podejcie jest lepsze, zaley od naszych upodoba i rozmiarw konkretnego ukadu
rwna. W przypadku ukadu o duych rozmiarach prawdopodobnie zastosowabym metod trzeci Solver bez ogranicze poniewa pozwala ona najszybciej dokona odpowiednich ustawie. Jak wynika z analizy powyszego przykadu, ten sam problem mona rozwiza w Excelu, stosujc z rwnym powodzeniem rne metody.
Rozwizanie
Naley sformuowa problem w kategoriach reszt i zastosowa Solver w celu ich zminimalizowania, uzyskujc w ten sposb rozwizanie ukadu.
Analiza
Do rozwizywania ukadw rwna nieliniowych mona zastosowa te same techniki wykorzystujce dodatek Solver, ktre zostay opisane w recepturze 9.4. Jako przykad rozwamy
nastpujce dwa rwnania:
y = 1 - e- x
9 y 2 + 4x2 = 1
Zamy, e chcemy znale warto lub wartoci zmiennej x speniajce oba rwnania jednoczenie. Jak wynika z wykresu tych dwch rwna (rysunek 9.18), istniej dokadnie dwa
rozwizania.
Jeli chodzi o rozwizywanie tego typu ukadw rwna, mamy do wyboru kilka rnych
podej. W przypadku, gdy moemy z atwoci rozwiza te rwnania wzgldem zmiennej
y (w powyszym przykadzie jest to moliwe), wwczas moemy je wzajemnie przyrwna
i zapisa w postaci 0 = f(x)g(x), a nastpnie zastosowa jedn z technik opisanych w recepturze 9.2.
Jeli ukad skada si z wicej ni dwch rwna lub nie moemy tych rwna rozwiza
wzgldem wsplnej zmiennej, wwczas moemy prbowa znale rozwizanie, stosujc metod minimalizacji reszt opisan w recepturze 9.4, a konkretnie w punkcie Minimalizowanie
286 |
reszt za pomoc Solvera. Stosujc to ostatnie podejcie, znalazem dwie wartoci zmiennej x
speniajce powyszy ukad rwna, a mianowicie: x = 0,306 oraz x = 0,253. Aby mc zastosowa Solver do wyznaczenia obu rozwiza, musiaem przyj dwie rne wartoci pocztkowe dla zmiennej x. W pierwszym przypadku wybraem warto pocztkow wiksz od
0,5, a w drugim mniejsz od 0,5.
Rozwizanie
Posugujc si jzykiem VBA, moemy napisa program realizujcy dowolny algorytm, tak
jak w kadym innym jzyku programowania. W poniszej analizie poka, jak za pomoc
VBA mona zaimplementowa dwie klasyczne metody: Newtona oraz siecznych.
287
Analiza
Na przykadach prezentowanych w niniejszej recepturze poka, jak mona zaimplementowa metod Newtona i metod siecznych. S to metody dobrze znane i dokadnie opisane
w wielu publikacjach z dziedziny matematyki wyszej i metod numerycznych. Ponadto w internecie mona znale implementacje tych metod napisane w rnych jzykach, np. w Fortranie czy C. Nie powinno wic stanowi problemu zaimplementowanie tych metod w VBA
jako funkcji wasnych, a nastpnie wywoanie ich z poziomu arkusza w Excelu.
W poniszych przykadach zastosujemy rwnanie wielomianowe trzeciego stopnia, ktre analizowalimy ju wczeniej w recepturze 9.1. Dla przypomnienia, przytaczam go tutaj ponownie:
y = a + bx + cx 2 + dx 3
Wykres pokazany na rysunku 9.6 pozwala zorientowa si, gdzie le pierwiastki tego rwnania. Za pomoc dodatku Solver moglibymy z atwoci wyznaczy dokadn warto kadego z tych pierwiastkw, ale moemy rwnie wykorzysta do tego celu metod Newtona
lub metod siecznych (lub jedn z wielu innych metod, dla ktrej potrafimy napisa program),
co wanie teraz uczynimy.
Metoda Newtona
Metoda Newtona polega na przyblianiu wartoci x bdcej pierwiastkiem rwnania przez
wyznaczanie punktu przecicia z osi odcitych stycznej do rozwaanej krzywej w punkcie
o okrelonej wsprzdnej x. W ten sam sposb wyznacza si kolejne przyblienia, a do uzyskania zakadanej zbienoci szacowanej wartoci x z wyznaczanym pierwiastkiem. Podstawowy wzr sucy do wyznaczania kadej nowej wartoci x jako przyblienia pierwiastka
ma nastpujc posta:
xn+1 = xn -
f ( xn )
f ( xn )
Jak wida, metoda Newtona wymaga obliczenia, lub przynajmniej oszacowania, wartoci
pierwszej pochodnej rozwaanej krzywej. W naszym przykadzie mamy do czynienia z rwnaniem, ktre pozwala dokadnie obliczy t pochodn. W sytuacjach, w ktrych dokadne
obliczenie pochodnej jest trudne bd niemoliwe (na przykad wtedy, gdy funkcja okrelona
jest przez dane tabelaryczne), naley skorzysta z numerycznych metod rniczkowania. We
wstpie do tego rozdziau bya ju mowa o tym, e Solver w swych obliczeniach stosuje rniczkowanie numeryczne i nawet pozwala nam wybra schemat rnicy przedniej lub centralnej (zagadnienia te s przedmiotem analizy w recepturze 10.6).
Struktura powyszego rwnania powinna by dla nas wskazwk, jak naley implementowa metod Newtona. Po pierwsze, potrzebny nam bdzie podprogram obliczajcy wartoci
rozwaanej funkcji. Po drugie, musimy mie rwnie podprogram obliczajcy wartoci pochodnej tej funkcji. I po trzecie, potrzebny bdzie podprogram realizujcy powysze rwnanie, poczwszy od pewnego zadanego punktu a do osignicia zakadanej zbienoci rozwizania. Zaprezentuj teraz te podprogramy w wersji przygotowanej przeze mnie dla potrzeb
opisywanego tu przykadu. Pierwszy z nich jest pokazany w przykadzie 9.5 i suy do obliczania wartoci rozwaanej funkcji dla zadanej wartoci zmiennej x.
288 |
Podprogram ten jest waciwie funkcj VBA i dlatego zwraca warto do wywoujcego go
podprogramu. W tym przypadku zwraca warto rwnania szeciennego, ktre jest przedmiotem naszych rozwaa. (Gdy bdziemy mie do czynienia z innym rwnaniem, wwczas
naley odpowiednio zmodyfikowa funkcj Fx).
Nastpny podprogram, pokazany w przykadzie 9.6, jest funkcj VBA zwracajc warto
pochodnej naszego rwnania szeciennego dla zadanej wartoci x.
Przykad 9.6. Funkcja dFx
Public Function dFx(x As Double) As Double
dFx = 3 + x * (9 * x 14)
End Function
Ostatni z potrzebnych nam podprogramw jest pokazany w przykadzie 9.7 i stanowi waciw implementacj metody Newtona, wywoujc cyklicznie funkcje Fx oraz dFx.
Przykad 9.7. Metoda Newtona
Public
Dim
Dim
Dim
Dim
i = 0
err = 9999
xn = x0
While (err > e) And (i < n)
xn1 = xn - Fx(xn) / dFx(xn)
err = Abs(xn1 - xn)
xn = xn1
Wend
NewtonsMethod = xn
End Function
Zauwamy, e ten podprogram, NewtonsMethod, take jest funkcj VBA. To oznacza, e bdziemy mogli j wywoa bezporednio z komrki arkusza, a obliczona przez t funkcj warto zostanie zwrcona do wywoujcej j komrki. Wkrtce poka, jak naley to zrobi, ale
wczeniej chciabym objani kolejne linie kodu funkcji NewtonsMethod.
Funkcja ta przyjmuje trzy argumenty. Pierwszy, x0, suy jako warto pocztkowa dla poszukiwa pierwiastka. Drugi argument, e, okrela tolerancj zbienoci, ktra powinna by
liczb rzeczywist o maej wartoci (np. 0,001). Argument ten jest uywany do sprawdzania,
czy kolejne wyniki oblicze s dostatecznie zbiene. Trzeci i ostatni argument, n, okrela maksymaln liczb iteracji. Suy on do zatrzymania iteracji, gdyby miaa trwa nieskoczenie
dugo z powodu braku zbienoci wynikw.
Bezporednio pod nagwkiem tej funkcji deklarowane s pewne zmienne. Kolejno s to: i
zmienna licznikowa, err zmienna przechowujca rnic midzy dwoma kolejnymi wynikami szacowa wartoci x, xn zmienna przechowujca oszacowan warto xn, xn1
zmienna przechowujca oszacowan warto xn+1.
9.6. Rozwizywanie rwna metodami klasycznymi
| 289
Metoda siecznych
Zamiast metody Newtona mona zastosowa metod siecznych. Ma ona t zalet, e nie wymaga obliczania pochodnej rozwaanego rwnania. Musimy za to poda dwie wartoci pocztkowe, aby skonstruowa sieczn zamiast stycznej w celu wyznaczenia przyblionej wartoci x. Wzr na obliczanie kolejnych przyblie xn+1 w metodzie siecznych przedstawia si
nastpujco:
xn+1 = xn - f ( xn )
xn - xn-1
f ( xn ) - f ( xn-1 )
Do zaimplementowania tej metody potrzebna nam bdzie nadal funkcja Fx z przykadu 9.5,
ale nie bdzie ju potrzebna funkcja dFx.
Funkcj VBA stanowic waciw implementacj metody siecznych dla naszego rwnania
prezentuje przykad 9.8.
Przykad 9.8. Metoda siecznych
Public
Double
Dim
Dim
Dim
Dim
Dim
i = 0
290
err = 9999
xn = x1
xnm1 = x0
While (err > e) And (i < n)
xn1 = xn - Fx(xn) * (xn - xnm1) / (Fx(xn) - Fx(xnm1))
err = Abs(xn1 - xn)
xnm1 = xn
xn = xn1
Wend
SecantMethod = xn
End Function
Funkcja ta jest istotnie podobna do funkcji NewtonsMethod. Jest tu jednak kilka rnic, ktre
postaram si objani. Pierwsz z tych rnic jest obecno dodatkowego argumentu x1, ktry reprezentuje drug warto pocztkow dla x. Przypominam, e metoda siecznych wymaga podania dwch wartoci pocztkowych.
Pozostae dwie rnice wystpuj w ptli While. Jak wida, wyraenie xn1 zostao zastpione
wzorem obowizujcym w metodzie siecznych. Ponadto przy kadym przejciu ptli uaktualniane s obie wartoci: xn oraz xn-1 przechowywane w zmiennych, odpowiednio: xn i xnm1.
Funkcj SecantMethod moemy wykorzysta w formule arkuszowej, podobnie jak robilimy
to z funkcj NewtonsMethod. Ja na przykad wprowadziem do trzech rnych komrek nastpujce formuy:
=secantmethod(0; -0,1; 0,0001; 100)
=secantmethod(0,5; -0,6; 0,0001; 100)
=secantmethod(1,75; 1,7; 0,0001; 100)
Wartoci, jakie otrzymaem, wyniosy, odpowiednio: 0,215, 1,000 i 1,549. Jak wida, s one
identyczne z tymi, ktre otrzymalimy, stosujc metod Newtona, i w obu przypadkach s
zgodne z wnioskami wynikajcymi z analizy wykresu przedstawionego na rysunku 9.6.
291