Pomimo rozwoju programów klikologicznych w ekonometrii, istnieje wiele osób, które wciąż cenią sobie programy typu Matlab, czy Gauss. W programach klikologicznych typu EViews użytkownik ma małą kontrolę nad tym co program robi. Można co najwyżej mieć zaufanie do programistów poszczególnych firm i wierzyć, że to co jest ukryte pod maską programu zostało naprawdę dobrze zaprogramowane. W Gaussie i Matlabie mamy większość rzeczy pod naszą kontrolą. Moglibyśmy korzystać również z programów czysto programistycznych jak np. C++, ale Gauss ma kilka zalet Po pierwsze Gauss rozumie macierze. Wszelkie operacje macierzowe są niezwykle proste np. odwrócenie macierzy otrzymujemy przez A. Po drugie wiele rzeczy zostało już oprogramowane przez ekonometryków na świecie. Wystarczy ściągnąć kod z sieci, ewentualnie go trochę zmodyfikować i używać do własnych potrzeb. Tak naprawdę większość rzeczy, które będziemy robić można znaleźć na różnych uniwersyteckich serwerach. Np. http://www.wws.princeton.edu/mwatson/ec518/gauss_tutorial.html http://faculty.washington.edu/ezivot/gaussfaq.htm http://www.arec.umd.edu/gauss/ Kody do Gaussa http://www.american.edu/academic.depts/cas/econ/gaussres/gaussidx.htm Gauss jest też bardzo podobny do Matlaba, można nawet sobie ściągnąć konwerter kodów http://www.american.edu/academic.depts/cas/econ/gaussres/utilitys/gtoml Większość nowoczesnych i najnowszych rzeczy w ekonometrii najpierw pojawia się jako kody entuzjastów np. w Gaussie, a dopiero parę lat później można znaleźć w klikologicznych programach ekonometrycznych. Gauss ma również tą zaletę, że można bezpłatnie korzystać z wersji Gauss light (głównym ograniczeniem jest liczba elementów macierzy nie większa niż 10.000, tzn. np. 100x100) Instrukcja jak ściągnąć http://econweb.rutgers.edu/bhardwaj/ftpgauss.doc
Katalog roboczy W oknie (Command Window) pomimo nazwy głównie pojawiać się będą wyniki. Na początek będziemy tam ręcznie wpisywać komendy Warto jest wybrać opcję Window->Output Window i rozdzielić okno na okno komend i okno wyników Podstawy programowania i obróbka danych W Gaussie wszystkie komendy muszą się kończyć średnikiem. Na szczęście jeśli zapomnimy Gauss zrobi to za nas. Do komentarzy możemy wykorzystać następujące dwie formy @ komentarz @, lub /*komentarz*/. Ta druga jest oczywiście preferowana. Dlaczego? @ komentarz malo widoczny @ /*Komentarz bardzo widoczny*/ Na początek popatrzmy na kilka najprostszych operacji x=3; y=7;
z=x+y; print "zdefiniowalismy zmienne x,y,z" x y z; /*Możemy tez*/ b="zdefiniowalismy rozne liczby"; print b x y; Gauss zazwyczaj równie dobrze radzi sobie z liczbami jak i ze stringami W gaussie bez problemu możemy posługiwać się liczbami zespolonymi. v=complex(3,1); print v; /*Część rzeczywista*/ real(v); /*część urojona*/ imag(v); Zaokrąglanie liczb. Liczby możemy zaokrąglać do wartości rzeczywistych na kilka sposobów. y=123*atan(3)^2; print y; floor(y) /* podłoga największa liczba mniejsza od zadanej*/ round(y) /*zaokrąglenie do najbliższej liczby całkowitej*/ ceil(y) /* sufit najmniejsza liczba większa od zadanej*/ fix(y) /*Zaokrąglenie w kierunku zera*/ fix(-y) floor(-y) ceil(-y) round(-y) Do wprowadzania macierzy używamy nawiasów klamrowych A={1 2 3, 4 5 6}; print A; /*Usunięcie zmiennej b*/ delete B; let B[2,3]= 1 2 3 4 5 6; print B;
f=5e2; print f; Przecinek decyduje o końcu wiersza, korzystając z opcji let najpierw definiujemy wymiar macierzy. Spróbujmy wprowadzić coś błędnego /*Bledne kody*/ let C[1,4]=1 2 3; print C; /*Tak juz mozna*/ let C[1,4] =5; print C; /*mozna tez tak*/ let x = 1 2, 3 4, 5 6; x; Macierze specjalne A=zeros(3,3); print A; B=ones(2,5); print B; C=eye(4); print C; Czasami dla większej czytelności możemy zmienić sobie format wyświetlania. Np. format 12,3; /*odstęp między liczbami =12; Liczba miejsc po przecinku =3*/ C; Na macierzach możemy przeprowadzać właściwie wszystkie znane nam operacje Macierze (jeśli tylko mają odpowiednie wymiary możemy) dodawać, mnożyć, odwracać, transponować konsolidować Na początek zdefiniujmy kilka macierzy A={1 2, 3 4}; A; B={1 1, 2 2}; B; C={1 2 3, 4 5 6};
C; /*dodawanie, tylko dla macierzy o tych samych wymiarach*/ print A+B; /*mnozenie*/ D=A*B; print D; print A*C; /*Tak mozna*/ /*A tak już nie*/ print C*A; /*Transponowanie macierzy*/ print C ; E=C'*A; print E; /*Odwracanie macierzy*/ A1=inv(A); print A1; /*Sprawdzmy czy macierz jest dobrze odwrocona*/ print A1*A; print A*A1; /*Suma każdego wiersza i każdej kolumny*/ sumc(c); sumr(c); /*Dla niekwadratowych też można znalezc diag*/ diag(c); Możemy też składać macierze w wektor, albo po kolumnach, albo po wierszach A; vec(a); /*stworzenie wektora ze złożonych kolumn*/ vecr(a); /*zbudowanie wektora ze złożonych kolumn*/ Macierze możemy też konsolidować (po wierszach, albo po kolumnach) a; b; print a b; /*konsolidacja w kolumnach*/ print a~b; /*Konsolidacja w wierszach*/ Oczywiście możemy odnieść się bezpośrednio do każdego elementu macierzy. Do elementu macierzy odnosimy przez podanie nr wiersza i nr kolumny awb=a~b; print awb[2,1]; /*drugi wiersz i pierwsza kolumna*/ print awb[1,3]; /*pierwszy wiersz i trzecia kolumna*/; Możemy też dodawać poszczególne elementy do siebie x2=awb[2,1]+awb[1,4]; print x2; Operacje z kropką.
W gaussie możliwe są tzw. operacje z kropką. Polegają one na np. mnożeniu macierzy element po elemencie print A B; print A.*B; /*mnozenie elementu a[ij] przez element b[ij]. Macierze muszą być tych samych wymiarow*/ print A*B; Możemy też wykonywać operacje na każdym elemencie b={3,4,5}; b^2; /*silnia z każdego elementu*/ b!; Ale też np. e={0, 12, 4}; b.*e; b*e; /*nie da się takiej operacji*/ /*Iloczyn skalarny*/ b'*e; /*Można też potęgę wyraz po wyrazie*/ b.^e; /*lub*/ e^b; /*dzielenie wyraz po wyrazie*/ e./b; Możemy znaleźć też wektor złożony z elementów na przekątnej z1=diag(eye(3)+3*ones(3,3)); print z1; Ale w gaussie macierze możemy też np. dzielić. Co to znaczy C = A/ B 1 gdy B kwadratowe C = B A 1 gdy B niekwadratowe C = ( B' B) B' A Tak naprawdę lepiej jest policzyć samemu. Porównajmy C A; G=C/A; print G;
G2=inv(A)*C; print G2; print inv(a'*a)*a'*c; C2=A*G; print C2; Chcemy rozwiązać równanie Ax=b. Znamy A i b, chcemy znaleźć x. Np. M2={8 1 6, 3 5 7, 4 9 2}; b={3,4,5}; x=b/m2; print x; /*Sprawdzenie*/ print M2*x; Macierz M2 jest macierzą magiczną Policzmy sumę w wierszach i w kolumnach sumc(m2) sumr(m2) Zadania. Wprowadzić do systemu następujące macierze 1 3 5 A1= 0 0 0 1 1 1 1 0 0 0 0 1 0 0 A2 = 0 0 1 0 0 0 0 1 7 A3= 3*10 10 23 11 1 A4= 5 π Obliczyć część rzeczywistą, część ułamkową, znaleźć kąt i liczbę sprzężoną dla 0 0 a1 = 3+ 4 i; a2 = cos 30 + i sin 30 ; a3 = exp(4) + iln(5) Pamiętaj, że standardowo w Gaussie kąty są w radianach, np. 45 0 oznacza pi/4 Wprowadź do Gaussa macierz X=
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 Y macierz jednostkowa o wymiarach 5 na 5 Z macierz 2 na 3 o wyrazach losowych V macierz 3 na 12 złożoną z zer a=[2 20 11 4 5] Sprawdź, czy X jest kwadratem magiczny. Znajdź macierz odwrotną do macierzy X i sprawdź, czy jest to rzeczywiście macierz odwrotna Znajdź liczbę k będącą sumą elementów na diagonali macierzy X Znajdź liczbę l będącą sumą elementu leżącego w trzecim wierszu i czwartej kolumnie, oraz liczby będącej w 5 wierszu i 1 kolumnie macierzy X Przemnóż macierz X i Y. Przemnóż macierz X i Y wyraz po wyrazie. Znajdź wektor u będący rozwiązaniem równania X*u=a. Którą operację da się wykonać? a4*v, a4 *V, V*a4, V*a4, V.*a4, V.*a4'. Zbudować wektor złożony z wektorów i kolumn macierzy X.