You are on page 1of 37

IDZ DO

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

2. Poznawanie jzyka Visual Basic for Applications (VBA) ........................................... 55


2.0. Wprowadzenie
2.1. Nawigowanie po edytorze VBA
2.2. Pisanie funkcji i podprogramw
2.3. Typy danych
2.4. Definiowanie zmiennych

55
56
59
63
64

2.5. Definiowanie staych


2.6. Uywanie tablic
2.7. Komentowanie kodu
2.8. Wpisywanie dugich instrukcji w kilku liniach
2.9. Uywanie instrukcji warunkowych
2.10. Wykorzystanie ptli
2.11. Uruchamianie programw VBA
2.12. Poznawanie funkcji wbudowanych
2.13. Poznawanie obiektw Excela
2.14. Tworzenie wasnych obiektw w VBA
2.15. Korzystanie z pomocy VBA

65
66
67
68
69
70
72
75
76
81
84

3. Gromadzenie i porzdkowanie danych ......................................................................85


3.0. Wprowadzenie
3.1. Importowanie danych z plikw tekstowych
3.2. Importowanie danych z plikw tekstowych delimitowanych
3.3. Importowanie danych metod przecignij i upu
3.4. Importowanie danych z baz danych Accessa
3.5. Importowanie danych ze stron internetowych
3.6. Konwersja tekstu na kolumny
3.7. Usuwanie dziwnych znakw z zaimportowanego tekstu
3.8. Zamiana jednostek
3.9. Sortowanie danych
3.10. Filtrowanie danych
3.11. Wyszukiwanie wartoci w tabelach
3.12. Pobieranie danych z plikw XML

85
85
90
91
92
94
97
97
100
102
105
109
116

4. Tworzenie wykresw .................................................................................................. 119


4.0. Wprowadzenie
4.1. Tworzenie prostych wykresw
4.2. Typy wykresw krtki przegld
4.3. Formatowanie wykresw
4.4. Modyfikowanie osi wykresu
4.5. Ustawianie skali logarytmicznej lub plogarytmicznej
4.6. Tworzenie wykresw o wikszej liczbie osi
4.7. Zmienianie typu wykresu
4.8. czenie wykresw rnych typw
4.9. Tworzenie wykresw typu Powierzchniowy 3-W
4.10. Tworzenie wykresw konturowych
4.11. Opisywanie wykresw
4.12. Zapisywanie wasnych typw wykresw

Spis treci

119
119
126
128
129
132
134
138
140
140
145
148
151

4.13. Kopiowanie wykresw do Worda


4.14. Wywietlanie supkw bdw

151
152

5. Analiza statystyczna .................................................................................................. 153


5.0. Wprowadzenie
5.1. Obliczanie statystyk podsumowujcych
5.2. Wykrelanie rozkadu czstoci
5.3. Obliczanie przedziaw ufnoci
5.4. Korelowanie danych
5.5. Wyznaczanie rang i percentyli
5.6. Przeprowadzanie testw statystycznych
5.7. Przeprowadzanie analizy ANOVA
5.8. Generowanie liczb losowych
5.9. Pobieranie prbek

153
154
158
161
162
166
168
172
174
175

6. Analiza szeregw czasowych .....................................................................................177


6.0. Wprowadzenie
6.1. Wykrelanie szeregw czasowych
6.2. Dodawanie linii trendu
6.3. Obliczanie rednich ruchomych
6.4. Wygadzanie danych za pomoc rednich waonych
6.5. Centrowanie danych
6.6. Usuwanie trendu z szeregw czasowych
6.7. Szacowanie wskanikw waha sezonowych
6.8. Usuwanie waha sezonowych
6.9. Prognozowanie
6.10. Zastosowanie dyskretnej transformaty Fouriera

177
177
178
180
186
191
194
197
200
202
204

7. Funkcje matematyczne ............................................................................................... 215


7.0. Wprowadzenie
7.1. Korzystanie z funkcji sumujcych
7.2. Dzielenie
7.3. Mnoenie
7.4. Przegld funkcji wykadniczych i logarytmicznych
7.5. Uywanie funkcji trygonometrycznych
7.6. Kontrolowanie znakw
7.7. Pierwiastkowanie
7.8. Zaokrglanie i obcinanie liczb
7.9. Zamiana systemw liczbowych
7.10. Manipulowanie macierzami
7.11. Wykonywanie dziaa na wektorach

215
215
216
217
219
221
222
223
223
224
225
227

Spis treci

7.12. Wykorzystywanie funkcji arkuszowych w kodzie VBA


7.13. Wykonywanie dziaa na liczbach zespolonych

230
231

8. Dopasowywanie krzywej i regresja .......................................................................... 233


8.0. Wprowadzenie
8.1. Przeprowadzanie liniowego dopasowywania krzywej za pomoc wykresw
8.2. Przeprowadzanie dopasowania liniowego za pomoc funkcji arkusza
8.3. Liniowe dopasowywanie krzywej przy uyciu jednej funkcji arkuszowej
8.4. Przeprowadzanie wielokrotnej regresji liniowej
8.5. Generowanie nieliniowego dopasowania krzywej
przy uyciu wykresw Excela
8.6. Dopasowywanie krzywych przy uyciu dodatku Solver
8.7. Ocenianie jakoci dopasowania
8.8. Wyznaczanie przedziaw ufnoci

233
233
237
240
243
246
248
252
258

9. Rozwizywanie rwna ............................................................................................ 261


9.0. Wprowadzenie
9.1. Rozwizywanie rwna metod graficzn
9.2. Iteracyjne rozwizywanie rwna nieliniowych
9.3. Automatyzowanie mudnych zada za pomoc VBA
9.4. Rozwizywanie ukadw rwna liniowych
9.5. Rozwizywanie ukadw rwna nieliniowych
9.6. Rozwizywanie rwna metodami klasycznymi

261
269
271
274
281
286
287

10. Numeryczne cakowanie i rniczkowanie .............................................................. 293


10.0. Wprowadzenie
10.1. Obliczanie caek oznaczonych
10.2. Implementacja metody trapezw w VBA
10.3. Zastosowanie cakowania numerycznego do wyznaczania
rodka cikoci obszaru
10.4. Obliczanie momentu drugiego rzdu dla danego obszaru
10.5. Obliczanie caek podwjnych
10.6. Rniczkowanie numeryczne

293
294
298
300
303
304
307

11. Rozwizywanie rwna rniczkowych zwyczajnych ........................................... 315


11.0. Wprowadzenie
11.1. Rozwizywanie zagadnie pocztkowych pierwszego rzdu
11.2. Zastosowanie metody Rungego-Kutty do rozwizywania
zagadnie pocztkowych drugiego rzdu
11.3. Rozwizywanie ukadw rwna sprzonych
11.4. Rozwizywanie zada brzegowych metod strzaw

Spis treci

315
315
321
326
332

12. Rozwizywanie rwna rniczkowych czstkowych ........................................... 337


12.0. Wprowadzenie
12.1. Rozwizywanie rwna rnicowych za pomoc Excela
12.2. Iteracyjne rozwizywanie rwna rnicowych za pomoc dodatku Solver
12.3. Rozwizywanie zagadnie pocztkowych
12.4. Wykorzystanie Excela do rozwizywania zagadnie sformuowanych
przy uyciu metody elementw skoczonych

337
339
341
345
349

13. Przeprowadzanie analizy optymalizacyjnej w Excelu ............................................. 353


13.0. Wprowadzenie
13.1. Tradycyjne programowanie liniowe z wykorzystaniem Excela
13.2. Analizowanie zagadnie z zakresu optymalizacji alokacji zasobw
13.3. Uzyskiwanie bardziej realistycznych wynikw przy uyciu
ogranicze cakowitoliczbowych
13.4. Rozwizywanie zada kopotliwych
13.5. Optymalizowanie projektw technicznych
13.6. Korzystanie z raportw Solvera
13.7. Zastosowanie algorytmu genetycznego do optymalizacji

353
354
357
362
364
370
373
377

14. Wprowadzenie do oblicze finansowych .................................................................393


14.0. Wprowadzenie
14.1. Obliczanie wartoci biecej
14.2. Obliczenie wartoci przyszej
14.3. Okrelanie wymaganej stopu zwrotu
14.4. Podwajanie zasobw pieninych
14.5. Ustalanie miesicznych patnoci
14.6. Analiza przepyww finansowych
14.7. Uzyskiwanie zakadanej wartoci przyszej
14.8. Wyznaczanie wartoci biecej netto
14.9. Szacowanie stopy zwrotu
14.10. Rozwizywanie zagadnie odwrotnych
14.11. Wyznaczanie progu rentownoci

393
394
394
395
396
397
397
399
400
402
403
404

Skorowidz ................................................................................................................... 407

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.

Polecenie Szukaj wyniku


Polecenie Szukaj wyniku jest bardzo atwe w uyciu. Wystarczy po prostu poda docelow
warto dla komrki docelowej i okreli niezalen komrk, ktrej zawarto bdzie zmieniana, aby osignita zostaa zadana warto docelowa. Na rysunku 9.1 pokazany jest interfejs tego narzdzia. Aby uzyska do niego dostp, naley z gwnego menu wybra polecenie
Narzdzia/Szukaj wyniku.

Rysunek 9.1. Okno dialogowe polecenia Szukaj wyniku

262

Rozdzia 9. Rozwizywanie rwna

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

Rysunek 9.2. Okno dialogowe Opcje

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.

Rysunek 9.3. Okno dialogowe Solver - Parametry

Dodatek Solver moemy wykorzysta do rozwizywania problemw o wielu zmiennych.


W takich przypadkach warto docelowa w komrce docelowej bdzie uzyskiwana przez
zmian wartoci w kilku komrkach niezalenych. Komrki, ktrych zawarto bdzie zmieniana, podajemy w polu Komrki zmieniane. Moemy przy tym zastosowa dowolny styl odwoa oraz odwoania do wielu komrek oddzielone rednikami. Wersja Solvera doczana
do Excela pozwala na podanie maksymalnie 200 komrek niezalenych.
Dodatek Solver nie wymaga nawet podawania wartoci docelowej. Zamiast tego moemy
wybra opcj minimalizowania lub maksymalizowania tej wartoci. Odwoanie do komrki
docelowej umieszczamy w polu Komrka celu (musi to by pojedyncza komrka zawierajca
formu). Przyciski wyboru opcji Rwna pozwalaj zdecydowa, czy zawarto komrki docelowej ma by minimalizowana, maksymalizowana lub ustalona przez przypisanie jej konkretnej wartoci liczbowej.
264 |

Rozdzia 9. Rozwizywanie rwna

Klikajc przycisk Odgadnij, moemy pozwoli Solverowi odgadn, ktre komrki


powinien uzna za niezalene dla danego problemu. Ja jednak unikam korzystania
z tej moliwoci. Sprowadza si ona do wybrania wszystkich komrek, do ktrych odwouje si formua w komrce docelowej i ktre same nie zawieraj formu. W przypadku prostej formuy z niewielk liczb zmiennych niezalenych, z ktrych wszystkie chcemy zmienia, takie rozwizanie moe by przydatne. Stwierdziem jednak,
e w wikszoci przypadkw, z jakimi miaem do czynienia, wybranych zostao zbyt
duo komrek nawet te, ktrych nie zamierzaem w ogle zmienia (bo zawieray
np. stae lub inne wartoci, ktre z pewnych wzgldw powinny pozosta niezmienne). Z drugiej strony, jeeli mamy do czynienia z du liczb zmiennych, uatwieniem
moe by zlecenie Solverowi wybrania ich wszystkich, a nastpnie rczne usunicie
z pola Komrki zmieniane tych, ktrych nie chcemy zmienia.

To jeszcze nie wszystkie moliwoci Solvera. Na komrki bdce czci rozwizywanego


problemu moemy nakada okrelone ograniczenia. Mog one mie charakter rwnoci lub
granic grnych i dolnych. Jest to przydatne, gdy interesuje nas rozwizanie z okrelonego obszaru lub gdy przeprowadzamy proces optymalizacji z ograniczeniami. Receptura 9.4 zawiera przykad wykorzystania tych ogranicze przy rozwizywaniu ukadu rwna za pomoc
Solvera. Z kolei rozdzia 13. zawiera receptury z przykadami zastosowania Solvera do przeprowadzania optymalizacji z ograniczeniami. Dodatek Solver (w wersji doczanej do Excela)
pozwala utworzy maksymalnie 100 ogranicze dla zagadnie nieliniowych i 200 dla zagadnie liniowych.
Solver korzysta rwnie z wikszej liczby algorytmw znajdowania rozwiza ni polecenie
Szukaj wyniku. Do rozwizywania problemw liniowych wykorzystuje metod sympleks.
Solver moe take rozwizywa problemy nieliniowe, wykorzystujc metod uoglnionego
gradientu zredukowanego. W przypadku, gdy rozwizywany problem wymaga zmiennych
o wartociach cakowitych, Solver korzysta take z algorytmu podziaw i ogranicze (ang.
branch and bound).
Niewielk kontrol nad tymi algorytmami umoliwia okno dialogowe Solver - Opcje. Aby
otworzy to okno (pokazane na rysunku 9.4), naley klikn przycisk Opcje w oknie dialogowym Solver - Parametry.

Rysunek 9.4. Okno dialogowe Solver - Opcje

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

Rozdzia 9. Rozwizywanie rwna

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.

Rysunek 9.5. Okno dialogowe Solver - Wyniki

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 |

Rozdzia 9. Rozwizywanie rwna

9.1. Rozwizywanie rwna metod graficzn


Problem
Chcemy graficznie wyznaczy pierwiastki rwnania.

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

9.1. Rozwizywanie rwna metod graficzn

| 269

Rysunek 9.6. Wykres wielomianu trzeciego stopnia

odpowiadajcych poszczeglnym wartociom zmiennej x. (Na zrzucie ekranu zaznaczona


jest komrka C8 i na pasku formuy widoczna jest formua zawarta w tej komrce). Formua
ta ma nastpujc posta: =$C$2+$C$3*B8+$C$4*B8^2+$C$5*B8^3.
Teraz widzimy wyranie, jak zachowuje si nasze rwnanie i gdzie le jego pierwiastki. Wyznaczenie dokadnych wartoci zmiennej x, dla ktrych y = 0 moemy zrealizowa na kilka
sposobw. Jeden z nich polega na aproksymowaniu wartoci zmiennej x przez interpolacj
wartoci w kolumnach B i C. W tym celu naley odszuka takie wartoci zmiennej x, dla ktrych zmienna y zmienia swj znak, a nastpnie naley dokona interpolacji midzy tymi wartociami. Inny sposb wyznaczenia miejsc zerowych moe polega na wykorzystaniu technik
iteracyjnych. Przykady takich technik zawarte s w recepturach 9.2 i 9.3. Z kolei receptura
9.6 pokazuje, jak wyznaczy pierwiastki opisywanego tu rwnania trzeciego stopnia, stosujc
metod Newtona i metod siecznych.
Jednak co robi w sytuacji, gdy mamy do czynienia z rwnaniem nie dajcym si zapisa
w postaci y = g(x)? Podczas prby wykonania wykresu takiego rwnania w opisany wyej
sposb napotkamy oczywicie problemy. Na szczcie Excel oferuje narzdzia, ktre moemy
wykorzysta, aby omin te trudnoci. Wyjanienie tego, co mam na myli, znajduje si w recepturze 9.2.

270

Rozdzia 9. Rozwizywanie rwna

9.2. Iteracyjne rozwizywanie rwna nieliniowych


Problem
Uytkownik chciaby rozwiza w Excelu rwnanie nieliniowe metod iteracyjn, ale nie wie,
jak si do tego zabra.

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.

9.2. Iteracyjne rozwizywanie rwna nieliniowych

271

Rysunek 9.7. Przykad rwnania nieliniowego

Wyznaczanie Cf za pomoc polecenia Szukaj wyniku


Aby znale rozwizanie za pomoc tego narzdzia, naley z gwnego menu wybra polecenie Narzdzia/Szukaj wyniku. Zostanie okno dialogowe Szukanie wyniku pokazane na rysunku 9.8.

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

Rozdzia 9. Rozwizywanie rwna

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.

Wyznaczanie Cf za pomoc Solvera


Polecenie Szukaj wyniku sprawdza si dobrze w tym prostym przykadzie i w praktyce nie
musielibymy tutaj stosowa bardziej zaawansowanego narzdzia, jakim jest dodatek Solver.
Jednak w celach ilustracyjnych chc pokaza, jak mona go wykorzysta do rozwizania tego
samego problemu. Arkusz naley przygotowa tak samo jak poprzednio, natomiast z gwnego menu naley wybra polecenie Solver zamiast Szukaj wyniku. Okno dialogowe Solver - Parametry dla tego konkretnego przykadu zostao pokazane na rysunku 9.9.

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.

9.2. Iteracyjne rozwizywanie rwna nieliniowych

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.

9.3. Automatyzowanie mudnych zada


za pomoc VBA
Problem
Wiemy ju, jak stosowa polecenie Szukaj wyniku i dodatek Solver do rozwizywania rwna
nieliniowych, ale kopot polega na tym, e potrzebujemy rozwiza takie rwnanie dla okrelonego przedziau wartoci, a rczne wykonanie tego zadania staje si niezwykle mudne,
bo wymaga wielokrotnego stosowania tych narzdzi.

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

Rozdzia 9. Rozwizywanie rwna

Na szczcie twrcy Solvera i polecenia Szukaj wyniku umoliwili wykorzystanie moliwoci tych narzdzi z poziomu jzyka VBA, dziki czemu moemy tego typu zadania zautomatyzowa.

Automatyzowanie polecenia Szukaj wyniku


Aby pokaza zautomatyzowany sposb wykorzystania polecenia Szukaj wyniku, rozpoczniemy od wprowadzenia pewnych modyfikacji do arkusza pokazanego na rysunku 9.7. Naszym
celem bdzie utworzenie podprogramu VBA wywoujcego polecenie Szukaj wyniku, ktre
z kolei bdzie oblicza wartoci Cf dla okrelonego zakresu wartoci RN. Aby mc uruchomi
podprogram VBA, dodaem do arkusza element sterujcy w postaci przycisku. Kliknicie tego przycisku bdzie rozpoczynao proces rozwizywania. Wstawiem rwnie tabel, ktra
bdzie automatycznie wypeniana obliczonymi wartociami Cf i RN. Na koniec dodaem jeszcze wykres krzywej reprezentujcej uzyskane wyniki. Zmodyfikowany w ten sposb arkusz
zosta przedstawiony na rysunku 9.10.

Rysunek 9.10. Przykad automatyzacji polecenia Szukaj wyniku

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.

9.3. Automatyzowanie mudnych zada za pomoc VBA

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.

Rysunek 9.11. Pasek narzdzi Przybornik formantw

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

Rozdzia 9. Rozwizywanie rwna

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

9.3. Automatyzowanie mudnych zada za pomoc VBA

277

wykorzystywanego w naszym przykadzie i mona j zobaczy na zakadce arkusza w dolnej


czci rysunku 9.10. Teraz za kadym razem, gdy uywam instrukcji takiej jak .Range("Rn_2"),
odwoujc si w tym przypadku do zakresu komrek, VBA przyjmuje domylnie, e jest to
odwoanie do skadnika typu Range obiektu Worksheet o nazwie Rwnanie nieliniowe. Bez
uycia instrukcji With musielibymy napisa: Worksheets("Rwnanie nieliniowe").Range
("Rn_2").
Instrukcji With musi towarzyszy instrukcja zamykajca End With, tak jak w przykadzie 9.1. W ten sposb dziaanie instrukcji With zostaje ograniczone do tych instrukcji, ktre s zawarte midzy With a End With.

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

Rozdzia 9. Rozwizywanie rwna

Przykad 9.2. Procedura przycisku


Private Sub CommandButton1_Click()
End Sub

Jest to procedura obsugujca zdarzenie polegajce na klikniciu przycisku. Poniewa nasz


przycisk nosi domyln nazw CommandButton1, std nazw tej procedury jest CommandButton1_Click.
Nazw elementu sterujcego typu ActiveX mona zmieni przez zmian waciwoci
Name w oknie waciwoci tego elementu. Aby dokona takiej zmiany, naley wczy
tryb projektowania, klikn wybrany element prawym przyciskiem myszy i z menu
podrcznego wybra polecenie Waciwoci. W otwartym w ten sposb oknie Properties
mona zmodyfikowa parametry wybranego elementu.

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

9.3. Automatyzowanie mudnych zada za pomoc VBA

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

ma na celu poinformowanie Solvera, aby po odnalezieniu rozwizania nie wywietla okna


dialogowego Solver - Wyniki. Wywietlanie tego okna moe by przydatne np. podczas
debugowania tego typu procedur, a wwczas naley ustawi ten parametr na False.
SolverFinish KeepFinal:=1

Ta linia nakazuje Solverowi zachowa znalezione wyniki.


Po dokonaniu tych zmian w kodzie procedury i uruchomieniu jej przez kliknicie przycisku
na przykadowym arkuszu, powinnimy ujrze wyniki bardzo podobne do tych, jakie uzyskalimy, stosujc polecenie Szukaj wyniku.
Jeli podczas uruchamiania nowej procedury wystpi bd sygnalizowany komunikatem o treci Sub or Function not Defined, naley sprawdzi, czy Solver jest zarejestrowany w rodowisku VBA. W tym celu naley z gwnego menu edytora VBA
wybra polecenie Tools/References i w otwartym w ten sposb oknie dialogowym References upewni si, e zaznaczona jest pozycja SOLVER. Na koniec naley klikn
przycisk OK.

280 |

Rozdzia 9. Rozwizywanie rwna

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.

9.4. Rozwizywanie ukadw rwna liniowych


Problem
Chcielibymy rozwiza ukad rwna liniowych za pomoc Excela.

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

Artyku ten dostpny jest tylko w jzyku angielskim przyp. tum.

9.4. Rozwizywanie ukadw rwna liniowych

281

[x] = [A] [b]


-1

Zamy na przykad, e dane s macierze [A] i [b], takie jak na rysunku 9.12.

Rysunek 9.12. Rozwizywanie rwnania macierzowego

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.

Wykorzystanie Solvera i ogranicze


Zamiast funkcji operujcych na macierzach, ktre mog si okaza si mao porczne w przypadku duych macierzy, do rozwizania ukadu rwna liniowych (a take nieliniowych, jak
si okae w recepturze 9.5) moemy wykorzysta dodatek Solver. Poka teraz, jak za pomoc tego dodatku i odpowiednich ogranicze mona rozwiza ten sam ukad rwna co poprzednio. Odpowiednie ustawienie arkusza pokazane jest na rysunku 9.13.

282

Rozdzia 9. Rozwizywanie rwna

Rysunek 9.13. Rozwizywanie ukadu rwna liniowych za pomoc Solvera z ograniczeniami

Problem polega w zasadzie na rozwizaniu ukadu trzech rwna z trzema niewiadomymi


x1, x2 i x3. Rwnania maj posta: a1x1+a2x2+a3x3 = b. Tym razem interesowa nas bdzie ukad
rwna w takiej wanie postaci, a nie, jak poprzednio, w postaci macierzowej. Jest to ten sam
ukad, tylko inaczej zapisany.
Rozwizywanie rozpoczniemy od przygotowania tabeli z wartociami wspczynnikw a i b
oraz wartociami pocztkowymi (przewidywanymi) niewiadomych x. Jak wida na rysunku
9.13, wspczynniki a umieciem w komrkach od D9 do F11, wspczynniki b w komrkach od I9 do I11, a niewiadome x w komrkach od H9 do H11.
Nastpnie w komrkach od J9 do J11 umieciem formuy nastpujcej postaci: =D9*$H$9+E9
*$H$10+F9*$H$11. Kada z tych formu oblicza wspczynnik b dla odpowiedniego rwnania w oparciu o wartoci wspczynnikw a i pocztkowe wartoci niewiadomych x. W przypadku idealnym wyniki w tej kolumnie powinny by rwne wartociom wspczynnikw b
umieszczonym w ssiedniej kolumnie. Poniewa przyjte przez nas wartoci niewiadomych
x s tylko wartociami przewidywanymi, dlatego w tym momencie zawartoci tych kolumn
mog si rni. Moemy jednak uy Solvera do wyznaczenia takich wartoci niewiadomych
x, dla ktrych wspczynniki b w obu kolumnach bd takie same. W ten sposb uzyskamy
rozwizanie naszego ukadu rwna.
Otwrzmy okno dialogowe Solvera, wybierajc z gwnego menu polecenie Narzdzia/Solver.
Tym razem jednak nie bdziemy minimalizowa, maksymalizowa ani ustawia konkretnej
wartoci dla komrki docelowej. Pole Komrka celu pozostawimy puste, tak jak na rysunku 9.14.
W polu Komrki zmieniane umiecimy odwoanie do zakresu komrek zawierajcych wartoci
niewiadomych x, W tym przypadku s to komrki od H9 do H11. Teraz nadszed czas na dodanie kilku ogranicze.
Naszym celem jest pozwolenie Solverowi na zmienianie wartoci niewiadomych x przy naoonych ograniczeniach polegajcych na tym, e obliczane wartoci wspczynnikw b w komrkach od J9 do J11 maj by rwne zadanym wartociom tych wspczynnikw w komrkach od I9 do I11. Musimy wic utworzy takie ograniczenie dla kadego wspczynnika b.

9.4. Rozwizywanie ukadw rwna liniowych

| 283

Rysunek 9.14. Solver z ograniczeniami

Utworzone przeze mnie ograniczenia widoczne s w oknie dialogowym Solvera pokazanym


na rysunku 9.14. Aby utworzy takie ograniczenie, naley otworzy okno dialogowe Dodaj
warunek ograniczajcy (rysunek 9.15) klikniciem przycisku Dodaj.

Rysunek 9.15. Okno dialogowe Dodaj warunek ograniczajcy

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.

Po skompletowaniu wszystkiego moemy klikn przycisk Rozwi. Solver powinien szybko


znale rozwizanie, takie jak na rysunku 9.13, gdzie kolumna wartoci x (komrki od H9 do
H11) reprezentuje rozwizanie naszego ukadu rwna. Jak wida, pokrywa si ono z rozwizaniem uzyskanym poprzednio z wykorzystaniem macierzy.

Minimalizowanie reszt za pomoc Solvera


Inne podejcie do wykorzystywania ogranicze w Solverze polega na takim sformuowaniu
zadania, aby sprowadzi go do problemu minimalizacji reszt. Moemy zrobi to bardzo a284 |

Rozdzia 9. Rozwizywanie rwna

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

Kolumna K zawiera kwadraty rnic (reszt) midzy zadanymi (kolumna I) a obliczonymi


(kolumna J) wartociami wspczynnikw b. Formuy w tej kolumnie maj posta: =(I20-J20)
^2. Komrka K23 zawiera sum kwadratw tych reszt obliczan za pomoc formuy =SUMA
(K20:K22).
W zasadzie mamy tu do czynienia z problemem najmniejszych kwadratw, polegajcym na
minimalizowaniu sumy kwadratw reszt. Korzystajc z Solvera, moemy bez trudu zminimalizowa t sum przez zmian wartoci niewiadomych x w kolumnie H.
Sprowadza si to do bezporedniego zastosowania opisywanych ju w tym rozdziale technik
opartych na wykorzystaniu Solvera. Na rysunku 9.17 zosta pokazany model waciwy dla
naszego przykadu.

Rysunek 9.17. Solver bez ogranicze

9.4. Rozwizywanie ukadw rwna liniowych

| 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.

9.5. Rozwizywanie ukadw rwna nieliniowych


Problem
Musimy rozwiza ukad rwna nieliniowych.

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 |

Rozdzia 9. Rozwizywanie rwna

Rysunek 9.18. Wykres rwna nieliniowych

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.

9.6. Rozwizywanie rwna metodami klasycznymi


Problem
Wiemy ju, jak wykorzystywa wbudowane funkcje i narzdzia Excela do rozwizywania
rwna liniowych i nieliniowych oraz ukadw takich rwna, ale chcielibymy rwnie zobaczy, jak mona zaimplementowa w Excelu klasyczne algorytmy rozwizywania rwna.

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.

9.6. Rozwizywanie rwna metodami klasycznymi

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 |

Rozdzia 9. Rozwizywanie rwna

Przykad 9.5. Funkcja Fx


Public Function Fx(x As Double) As Double
Fx = 1 + x * (3 + x * (3 * x 7))
End Function

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

Function NewtonsMethod(x0 As Double, e As Double, n As Integer) As Double


i As Integer
err As Double
xn As Double
xn1 As Double

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

W kolejnych liniach nastpuje inicjalizacja tych zmiennych. Zmiennej i przypisywana jest


warto 0, zmiennej err dowolna dua liczba, a zmiennej xn warto pocztkowa (argument) x0.
Miejscem, gdzie tak naprawd realizowana jest metoda Newtona, jest ptla While. Obliczenia
w tej ptli wykonywane s tak dugo, a zmienna err osignie warto mniejsz od zadanej
tolerancji zbienoci e lub osignita zostanie maksymalna liczba iteracji n.
Ptla While obejmuje trzy instrukcje. W pierwszej obliczana jest kolejna warto x na podstawie aktualnego oszacowania. Wykorzystany zosta tutaj wzr Newtona oraz wywoywane s
funkcje Fx i dFx. W drugiej linii obliczany jest bd zbienoci. W trzeciej i ostatniej linii tej
ptli nastpuje uaktualnienie szacowanej wartoci x przed kolejnym etapem iteracji.
Po wyjciu z ptli While z powodu osignicia czy to odpowiedniej zbienoci, czy te
maksymalnej liczby iteracji funkcja zwraca aktualne oszacowanie wartoci x.
Aby wywoa t funkcj z poziomu arkusza, moemy w dowolnej komrce umieci na przykad tak formu: =NewtonsMethod(0; 0,0001; 100) . Excel bdzie wywoywa funkcj
NewtonsMethod za kadym razem, gdy zajdzie potrzeba aktualizacji arkusza (tym razem nie
musimy uywa adnego przycisku, poniewa NewtonsMethod jest funkcj). W tym przypadku zawarto takiej komrki bdzie wynosi 0,215, co rzeczywicie jest pierwiastkiem rozwaanego rwnania. Naley zauway, e zostaa tu przyjta warto pocztkowa rwna 0.
Pozostae pierwiastki mona wyznaczy, zmieniajc odpowiednio warto pocztkow. Ustalenie tej wartoci na 0,5 da pierwiastek dla x = 1,0. Po zmianie wartoci pocztkowej na 1,75
otrzymamy pierwiastek dla x =1,549.

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

Function SecantMethod(x0 As Double, x1 As Double, e As Double, n As Integer) As


i As Integer
err As Double
xn As Double
xn1 As Double
xnm1 As Double

i = 0

290

Rozdzia 9. Rozwizywanie rwna

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.

9.6. Rozwizywanie rwna metodami klasycznymi

291

You might also like