Istvan

Gauss-dokumentáció-TeXworks

Apr 10th, 2012
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Latex 7.66 KB | None | 0 0
  1. \documentclass[oneside,11pt,a4paper]{article}  
  2.  
  3. \usepackage[utf8]{inputenc}
  4. \usepackage[T1]{fontenc}
  5. \usepackage{indentfirst}
  6. \usepackage{graphicx}  
  7. \usepackage{amsmath}
  8. \usepackage{amsfonts}
  9. \usepackage{url}
  10. \usepackage{algorithmic}
  11. \usepackage{algorithm}
  12. \usepackage{mathtools}
  13. \usepackage{bbm}
  14.  
  15. \newtheorem{szoveg}{ }
  16.  
  17. \DeclareMathOperator{\diag}{diag}
  18.  
  19. %Számhalmazok jelölése%
  20. \newcommand{\IR}{\mathbb{R}}
  21. \newcommand{\IN}{\mathbb{N}}
  22.  
  23. \title{Gauss-elimináció\\ \vspace{10mm} \large Dokumentáció a programcsomagok numerikus módszekeben\\ kurzus beadandóhoz}
  24. \author{Készítette: Farkas István (FASSAAI.ELTE)}
  25. \date{ 2012 Április 3}
  26.  
  27. \begin{document}
  28. \maketitle
  29. \clearpage
  30. \renewcommand*\contentsname{Tartalom}
  31. \tableofcontents
  32.  
  33. \newpage
  34. \section{Feladat}
  35.  
  36. \subsection{Feladat leírás}
  37. Gauss-elimináció LER részleges főelemkiválasztással.\\
  38. Készítsen olyan függvényt, amely adott A mátrix és b vektor esetén a
  39. Gauss-elimináció módszerét követve kiszámítja az Ax = b lineáris egyenletrendszer megoldását. Mutassa közben az alakuló mátrixo(ka)t, a sorok
  40. cseréjét.
  41.  
  42. \subsection{A feladat megoldására használt szoftver}
  43. A feladat megoldására a Matlab szoftvert használjuk. A szoftver numerikus számítások elvégzésére lett kifejlesztve, így könnyű benne mátrixműveleteket végrehajtani (mint például sorcsere) és algorimusokat implementálni.
  44.  
  45. \section{Gauss-elimináció}
  46.  
  47. \subsection{Az alapfeladat}
  48. Egy n ismeretlenes egyenletrendszer általános alakja
  49. \begin{equation}
  50.     a_{11}x_1 + a_{12}x_2 + ... + a_{1n}x_n = b_1
  51. \end{equation}
  52. \begin{equation}
  53.     a_{21}x_1 + a_{22}x_2 + ... + a_{2n}x_n = b_2\\
  54. \end{equation}
  55. \begin{equation}
  56. \vdots
  57. \end{equation}
  58. \begin{equation}
  59.     a_{n1}x_1 + a_{n2}x_2 + ... + a_{nn}x_n = b_n
  60. \end{equation}
  61. \par
  62.  
  63. Feladatunk, hogy kiszámoljuk az egyenletrendszer ismeretlenjeit. Erre az egyik legkézenfekvőbb eszköz a Gauss-elimináció. Ha az egyenletrendszer együtthatóit beírjuk egy A $\in$ $\IR^{n \times n}$ -es mártixba, és az  egyenletrendszer bal oldali konstansait beírjuk egy b $\in$  $\IR^n$ -es vektorba akkor a feladat a következőképpen is megfogalmazható:\par
  64. Keressük azt az x $\in$  $\IR^n$ vektort amire teljesül az \\
  65. \begin{equation}
  66. Ax = b
  67. \end{equation}
  68. ahol A $\in$ $\IR^{n \times n}$ invertálható mátrix, det(A) $\neq$ 0 és b $\in$  $\IR^n$. \par
  69. A Gauss-elimináció során ebből a mátrixból fogunk kiindulni. Első lépésként az A mártrix mellé írjuk a b vektort, így egy n$\times$n+1 es mártixot kapunk. Az algoritmus két fő részre osztható:
  70. \begin{szoveg}
  71. az n$\times$n es mátrixból felsőháromszög mátrixot csinálunk
  72. \end{szoveg}
  73. \begin{szoveg}
  74. rekurzív visszahelyettesítésel megkapjuk az n+1 oszlopban az eredményvektort
  75. \end{szoveg}
  76.  
  77. \subsection{Részleges főelemkiválasztás}
  78. Az algoritmus során, mikor a mátrixot ekvivalens áttalakításokkal felsőháromszög mátrixá alakítjuk, folymatosan osztanunk kell az éppen aktuális mátrix diagonális elemével. Azonban ha ez az elem nulla a Gauss-elimináció megakad. Hogy ezt a problémát kiküszöböljük, az algoritmusba beteszünk egy ellenőrzést az aktuális elem vizsgálatára. Ha a k. diagonális elem nulla akkor megkeressük az akutális oszlop legnagyobb elemét abszolút értékben, és azt a sort amelyikben ez az elem van, kicseréljük a k. sorral. Ezt az eljárást nevezzük részleges főelemkiválsztásnak.
  79.  
  80. \section{A program}
  81. A program adott A mátrix és b vektor esetén a Gauss-elimináció módszerét követve kiszámítja az Ax = b lineáris egyenletrendszer megoldását, részleges főelemkiválasztással. A programot gauss nevű fájlba mentjük és .m kiterjesztéssel látjuk el. A program hívását az x=gauss(A,b) paranccsal tehetjük meg. Ekkor az eredmény az x vektorba fog bekerülni.
  82.  
  83. \subsection{Bemenő, kimenő adatok}
  84. Bemenő paraméterek:\\
  85. Egy n$\times$n -es mátrix (A), egy n méretű vektor (b)\\
  86.  
  87. Kimenő adatok:\\
  88. Egy n méretű vektor, a lineáris egyenletrendszer megoldása (x)
  89.  
  90. \newpage
  91. \subsection{Programkód}
  92. A program kódja a következő:\\
  93. \begin{verbatim}
  94. function x = gauss(A,b)
  95.  
  96. n=length(A);
  97. A=[A,b]
  98. for k=1:n-1
  99.  for i=k+1:n
  100.    for j=k+1:n+1
  101.      if ( A(k,k) == 0 )
  102.        [maximum, ind] = max(abs(A(k:n,k)));
  103.        if ( maximum == 0 )
  104.          disp('A mátrix determinánsa nulla')
  105.          return;
  106.        end
  107.           akt = A(ind,1:n+1);
  108.           A(ind,1:n+1) = A(k,1:n+1);
  109.           A(k,1:n+1) = akt;
  110.          disp('A mátrix sorcsere utan:')
  111.          disp(A)
  112.       end
  113.         A(i,j) = A(i,j) -  ( (A(i,k) / A(k,k)) * A(k,j) );
  114.    end
  115.    A(i,k)=0;
  116.  end
  117.  disp('A matrix elimináció után:')
  118.  disp(A)
  119. end
  120. x=zeros(n,1);
  121. x(n,1) = A(n,n+1) / A(n,n);
  122. temp=0;
  123. for k=n-1:-1:1
  124.  for j=k+1:n
  125.    temp = temp + A(k,j) * x(j,1);
  126.  end
  127.    x(k,1) = (A(k,n+1) - temp) / A(k,k);
  128.    temp=0;
  129. end
  130. \end{verbatim}
  131.  
  132. \section{Teszteredmények}
  133. \subsection{Egy általános teszteset}
  134. A program a
  135. $$
  136. \left[\begin{array}{ccc|c}
  137. 0 & 7 & -8  & 3\\
  138. 2 & 4 & -5 & 1\\
  139. -4 & -6 & 5 & 9\\
  140. \end{array}\right]
  141. $$
  142. bemenetre első lépésként sorcserét csinál, felcseréli az első sort a harmadikkal.
  143. $$
  144. \left[\begin{array}{ccc|c}
  145. -4 & -6 & 5  & 9\\
  146. 2 & 4 & -5 & 1\\
  147. 0 & 7 & -8 & 3\\
  148. \end{array}\right]
  149. $$
  150. Második lépésként eliminálja ez első oszlopot,
  151. $$
  152. \left[\begin{array}{ccc|c}
  153. -4 & -6 & 5  & 9\\
  154. 0 & 1 & -2.5 & 5.5\\
  155. 0 & 7 & -8 & 3\\
  156. \end{array}\right]
  157. $$
  158. majd a második oszlopot.
  159. $$
  160. \left[\begin{array}{ccc|c}
  161. -4 & -6 & 5  & 9\\
  162. 0 & 1 & -2.5 & 5.5\\
  163. 0 & 0 & 9.5 & 35.5\\
  164. \end{array}\right]
  165. $$
  166. A program a végén kiírja az eredményvektort.
  167. $$
  168. \left[\begin{array}{c}
  169. -1.1579\\
  170. -3.8421 \\
  171. -3.7368 \\
  172. \end{array}\right]
  173. $$
  174. Ha olyan mátrixot adunk meg bemenetnek aminek a determinánsa nulla, akkor a "Mátrix determinánsa nulla" üzenetet kapjuk. Ekkor a gauss elimináció nem végrehajtható a mátrixon.
  175. \subsection{A program futásidejének tesztelése}
  176. Hogy megvizsgáljuk a program futásidejét, készítünk egy teszt\_script.m nevű scriptet. A scriptet egy n $\in$ $\IN$ bemenő konstansal hívjuk meg. A program k$\times$k k $\in$ (1...n) méretű mártixokat generál és tölt fel véletlenszerű számokkal, valamint k $\in$ (1...n) méretű vektorokat készít az egyenletrendszerhez, szintén véletlen számokkal feltöltve. Minden egyes Ax = b egyenletrendszerre meghívja a gauss\_teszt.m  programot, ami annyiban tér el az eredeti gauss.m programtól, hogy itt mellőzünk mindenféle képernyőre íratást, az ugyanis torzítana a teszt eredményén.
  177. A teszt\_script.m kimenete egy grafikon, ahol az x tengelyen a mátrixok mérete, y tengelyen pedig a Gauss-elimináció végrehajtásának idelye van.
  178. A teszt\_script.m kódja:
  179. \begin{verbatim}
  180. function test_script(n)
  181. tocok = zeros(1,n);
  182. kak = (1:n);
  183. for k=1:n,
  184.  A = rand(k,k);
  185.  b = rand(k,1);
  186.  tic;
  187.  gauss_test(A,b);
  188.  tocok(k) = toc;
  189. end
  190. plot(kak, tocok, 'r*')
  191. \end{verbatim}
  192. 100 darab mátrixra meghívva a következő grafikont kapjuk.\\\\
  193. \includegraphics[origin = c, width=300pt, height=300pt]{kep.png}
  194. \newpage
  195. \section{Hivatkozások}
  196. \renewcommand*\refname{}
  197. \begin{thebibliography}{9}
  198. \bibitem{book1}
  199. \textbf{Freud, R.,}
  200. \textit{Lineáris algebra},
  201. ELTE Eötvös Kiadó, Budapest, 2004.
  202. \bibitem{book2}
  203. \textbf{Gergó, L.,}
  204. \textit{Numerikus módszerek},
  205. ELTE Eötvös Kiadó, Budapest, 2010 október.
  206. \bibitem{electronic}
  207. \textbf{Krebsz, A., Bozsik, J.,} Numerikus Módszerek Példatár,
  208. {\tt http://numanal.inf.elte.hu/$\sim$krebsz/prog\_inf\_bsc\_c.htm}
  209.  
  210. \end{thebibliography}
  211.  
  212. \end{document}
Advertisement
Add Comment
Please, Sign In to add comment