From de553ce8a6cac89a8dd4847d2d600f0be073f6c0 Mon Sep 17 00:00:00 2001 From: "Ryan C. Cooper" Date: Thu, 16 Feb 2017 00:06:23 -0500 Subject: [PATCH] add lecture 09 --- .../lecture_09-checkpoint.ipynb | 6 + lecture_09/.lecture_09.md.swp | Bin 0 -> 16384 bytes lecture_09/even_odd_perm.svg | 331 +++++ lecture_09/lecture_09.ipynb | 1151 +++++++++++++++++ lecture_09/lecture_09.log | 28 + lecture_09/lecture_09.md | 802 ++++++++++++ lecture_09/lecture_09.pdf | Bin 0 -> 16189 bytes lecture_09/mass_springs.svg | 214 +++ 8 files changed, 2532 insertions(+) create mode 100644 lecture_09/.ipynb_checkpoints/lecture_09-checkpoint.ipynb create mode 100644 lecture_09/.lecture_09.md.swp create mode 100644 lecture_09/even_odd_perm.svg create mode 100644 lecture_09/lecture_09.ipynb create mode 100644 lecture_09/lecture_09.log create mode 100644 lecture_09/lecture_09.md create mode 100644 lecture_09/lecture_09.pdf create mode 100644 lecture_09/mass_springs.svg diff --git a/lecture_09/.ipynb_checkpoints/lecture_09-checkpoint.ipynb b/lecture_09/.ipynb_checkpoints/lecture_09-checkpoint.ipynb new file mode 100644 index 0000000..2fd6442 --- /dev/null +++ b/lecture_09/.ipynb_checkpoints/lecture_09-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_09/.lecture_09.md.swp b/lecture_09/.lecture_09.md.swp new file mode 100644 index 0000000000000000000000000000000000000000..4000b4f7d7714d8a4ab35d84fc5ab720a898c99a GIT binary patch literal 16384 zcmeI3TZ|-C8OLi;7UZhp18Xojuoax?xpvhK>>3;Fp7k;;-Gp6OO}5#grn{!6X1l9~ zs_NNkdV5U-HSxk4F9BkN2XE0AZO zCe$Rq?mG8#{^vX2sXEoOFnx5ctZts%XYltfICU_nwOg(qM^kst2EIR4{;+M$%uKah`ImDUd0UDUd0U zDUd0UDUd0UDUd1f7E&Nyxybk=OT&B9@1Jf;PlMT4ra-1Zra-1Z zra-1Zra-1Zra-1Zra-1Zra-2^|Dgg7FVZLI*B*Jm=ly^G`TzB+4dX?40e%8MhOfhE zsKEjphCAUV7=`QL+*OA0XLt#I1K)(l;8A!G9)MHOh5NyW7TgQ-@FBPrZiMUL8u<5> zhVd`>J-h^G;b-t8cmy7X2jElS!8{y=LtsH3u7Jzo+!coLA9xM^2G7D-cmlo#UxmBi z2<(Q7;nm9x<5%!qco2@jVYm}+g-|=HrTXOt{8>z@^_#eQ;=DX#7)8*l&%avZ$_3LRnsv3HYrT8Ax=#O&e;qEw` zc%X;A8nmiI>4@VCjo2CtxYcgP-b%Bh90uh#ny!poEp${=bDB=5%-9qa{PU#nBGPEb zM2GyOx@(hC!J;nV)%gvQ7k5<4i9>HqQ7Z7=ab=#GJ5|V=cmc}gazh&Da*DD}zrd0c zDO;_C!HOHko*VI-ioJW)k^9QQXDHD@7~oLRbx6dk%VZl z*lZ@{YRu!3v+ByoJFS*W|7yzd>kxbEF)L0OGek_pq|(x;)T#&*%DHr9Vw4jM(@Q$i&4Z6>QuQN1&3RcUlq>}jMlJ4&8%vL3yfHfWK>iK3w95!3|?b2jmZ6wwzY z{W+F6M*=tx9k6=@Y`jxJ&E)c9c5Y^DI(ML8P1DF+vYb~!chw8pk#g6Z)=HCQNr$LD zv6?F5o$sC~A_%F{xuc2?LfQrOkCqkvSjlg2AywB5{t)Qxq$w5xUHD z(2iGFPvVc;>~BNaWE^IZD)o{sDZG`D%cXYN8J=S)?FTHspw()}+CpS2=-W7)le&7|s;g>hp|TP?2jwZS@) zmG%Y}g4|7&6Gx~`)n2pdsqEM~7Qc|}_@;Nf8!xdr^gTFxk-j-F*Yu`g7<_M-$IZ7; zvLMOBBqSF&x@uJ!W^$jm={B#2NvAeOLrvFj#7n9|&pNos;XAcKD%k7EF z&6vK~6w6k(Cy~Ww!(9j+HFB6O)jc^i=f`1CZ`UN_C_8_hXG@-OUk7>q-^-W${hDX_ zXW@(R1y}|T?tltR!~5Ve_#MyaFTzvsb9fx&Illo1U_YGW+4~uI8Xg6CZvQfT8e*uy zZ6MF;H^4P;HRygNUCKT)1u_LP1u_LP1u_LP1u_LP1u_NR$_iB7mB?!bKBvg?l*H>7 zzAO4fP{KM=jtAx0iGW3pBv_GPrPq@~2T}(?gDT|R$$E)i8cb{J8QZiuoIq*a8C^38 z`nZw?!yX5gm3{=NgNVh@sZpluU*9uKc|~FvAK`q8Gv@{;VES=VpIpjm%Fr7LIl$ue zEgj}Kl}}EF_{`fq9i;;tsYp~liP8ZMk|fIFv{c4V8lOo~+fI&Xhl)~jdTJ}VbY9!y zF_(~>;p+EYM5GrR9@P79mkOrjPR_5Arjp$BO`h+G+V~nxNlcQa#n|CtTU6o*&rVL} z?Eb;rI4}RsKRJ@a?4j|BNJCmAp|oeo=}nS5iIP(_I=fScP$lh8dZcU(`olC)@_2V5 v-{Xy6f4Z6JUV#rC&q2t(Nsi1`UH literal 0 HcmV?d00001 diff --git a/lecture_09/even_odd_perm.svg b/lecture_09/even_odd_perm.svg new file mode 100644 index 0000000..eeaca19 --- /dev/null +++ b/lecture_09/even_odd_perm.svg @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + + + + 1 + 2 + 3 + 4 + 5 + 6 + + + + + even+ + odd- + + + diff --git a/lecture_09/lecture_09.ipynb b/lecture_09/lecture_09.ipynb new file mode 100644 index 0000000..4889d52 --- /dev/null +++ b/lecture_09/lecture_09.ipynb @@ -0,0 +1,1151 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Linear Algebra (Review/Introduction)\n", + "\n", + "Representation of linear equations:\n", + "\n", + "1. $5x_{1}+3x_{2} =1$\n", + "\n", + "2. $x_{1}+2x_{2}+3x_{3} =2$\n", + "\n", + "3. $x_{1}+x_{2}+x_{3} =3$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{ccc}\n", + "5 & 3 & 0 \\\\\n", + "1 & 2 & 3 \\\\\n", + "1 & 1 & 1 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\\\\n", + "x_{3}\\end{array}\\right]=\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "2 \\\\\n", + "3\\end{array}\\right]$\n", + "\n", + "$Ax=b$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Vectors \n", + "\n", + "column vector x (length of 3):\n", + "\n", + "$\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\\\\n", + "x_{3}\\end{array}\\right]$\n", + "\n", + "row vector y (length of 3):\n", + "\n", + "$\\left[\\begin{array}{ccc} \n", + "y_{1}~ \n", + "y_{2}~ \n", + "y_{3}\\end{array}\\right]$\n", + "\n", + "vector of length N:\n", + "\n", + "$\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\\\\n", + "\\vdots \\\\\n", + "x_{N}\\end{array}\\right]$\n", + "\n", + "The $i^{th}$ element of x is $x_{i}$" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x =\n", + "\n", + " 1 2 3 4 5 6 7 8 9 10\n", + "\n" + ] + } + ], + "source": [ + "x=[1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1\n", + " 2\n", + " 3\n", + " 4\n", + " 5\n", + " 6\n", + " 7\n", + " 8\n", + " 9\n", + " 10\n", + "\n" + ] + } + ], + "source": [ + "x'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Matrices\n", + "\n", + "Matrix A is 3x3:\n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "5 & 3 & 0 \\\\\n", + "1 & 2 & 3 \\\\\n", + "1 & 1 & 1 \\end{array} \\right]$\n", + "\n", + "elements in the matrix are denoted $A_{row~column}$, $A_{23}=3$\n", + "\n", + "In general, matrix, B, can be any size, $M \\times N$ (M-rows and N-columns):\n", + "\n", + "$B=\\left[ \\begin{array}{cccc}\n", + "B_{11} & B_{12} &...& B_{1N} \\\\\n", + "B_{21} & B_{22} &...& B_{2N} \\\\\n", + "\\vdots & \\vdots &\\ddots& \\vdots \\\\\n", + "B_{M1} & B_{M2} &...& B_{MN}\\end{array} \\right]$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 5 3 0\n", + " 1 2 3\n", + " 1 1 1\n", + "\n" + ] + } + ], + "source": [ + "A=[5,3,0;1,2,3;1,1,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multiplication\n", + "\n", + "A column vector is a $1\\times N$ matrix and a row vector is a $M\\times 1$ matrix\n", + "\n", + "**Multiplying matrices is not commutative**\n", + "\n", + "$A B \\neq B A$\n", + "\n", + "Inner dimensions must agree, output is outer dimensions. \n", + "\n", + "A is $M1 \\times N1$ and B is $M2 \\times N2$\n", + "\n", + "C=AB\n", + "\n", + "Therefore N1=M2 and C is $M1 \\times N2$\n", + "\n", + "If $C'=BA$, then N2=M1 and C is $M2 \\times N1$\n", + "\n", + "\n", + "e.g. \n", + "$A=\\left[ \\begin{array}{cc}\n", + "5 & 3 & 0 \\\\\n", + "1 & 2 & 3 \\end{array} \\right]$\n", + "\n", + "$B=\\left[ \\begin{array}{cccc}\n", + "1 & 2 & 3 & 4 \\\\\n", + "5 & 6 & 7 & 8 \\\\\n", + "9 & 10 & 11 & 12 \\end{array} \\right]$\n", + "\n", + "C=AB\n", + "\n", + "$[2\\times 4] = [2 \\times 3][3 \\times 4]$\n", + "\n", + "The rule for multiplying matrices, A and B, is\n", + "\n", + "$C_{ij} = \\sum_{k=1}^{n}A_{ik}B_{kj}$\n", + "\n", + "In the previous example, \n", + "\n", + "$C_{11} = A_{11}B_{11}+A_{12}B_{21}+A_{13}B_{31} = 5*1+3*5+0*9=20$\n", + "\n", + "\n", + "Multiplication is associative:\n", + "\n", + "$(AB)C = A(BC)$\n", + "\n", + "and distributive:\n", + "\n", + "$A(B+C)=AB+AC$" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 5 3 0\n", + " 1 2 3\n", + "\n", + "B =\n", + "\n", + " 1 2 3 4\n", + " 5 6 7 8\n", + " 9 10 11 12\n", + "\n" + ] + } + ], + "source": [ + "A=[5,3,0;1,2,3] \n", + "B=[1,2,3,4;5,6,7,8;9,10,11,12]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "C =\n", + "\n", + " 0 0 0 0\n", + " 0 0 0 0\n", + "\n", + "C =\n", + "\n", + " 20 28 36 44\n", + " 38 44 50 56\n", + "\n" + ] + } + ], + "source": [ + "C=zeros(2,4)\n", + "C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1);\n", + "C(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2);\n", + "\n", + "C=A*B" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "error: operator *: nonconformant arguments (op1 is 3x4, op2 is 2x3)\r\n" + ] + } + ], + "source": [ + "Cp=B*A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Representation of a problem with Matrices and Vectors\n", + "\n", + "If you have a set of known output, $y_{1},~y_{2},~...y_{N}$ and a set of equations that\n", + "relate unknown inputs, $x_{1},~x_{2},~...x_{N}$, then these can be written in a vector\n", + "matrix format as:\n", + "\n", + "$y=Ax=\\left[\\begin{array}{c} \n", + "y_{1} \\\\ \n", + "y_{2} \\\\\n", + "\\vdots \\\\\n", + "y_{N}\\end{array}\\right]\n", + "=\n", + "A\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\\\\n", + "\\vdots \\\\\n", + "x_{N}\\end{array}\\right]$\n", + "\n", + "$A=\n", + "\\left[\\begin{array}{cccc} \n", + "| & | & & | \\\\ \n", + "a_{1} & a_{2} & ... & a_{N} \\\\ \n", + "| & | & & | \\end{array}\\right]$\n", + "\n", + "or \n", + "\n", + "$y = a_{1}x_{1} + a_{2}x_{2} +...+a_{N}x_{N}$\n", + "\n", + "where each $a_{i}$ is a column vector and $x_{i}$ is a scalar taken from the $i^{th}$\n", + "element of x.\n", + "\n", + "Consider the following problem, 4 masses are connected in series to 4 springs with K=10 N/m. What are the final positions of the masses? \n", + "\n", + "![Springs-masses](mass_springs.svg)\n", + "\n", + "The masses haves the following amounts, 1, 2, 3, and 4 kg for masses 1-4. Using a FBD for each mass:\n", + "\n", + "$m_{1}g+k(x_{2}-x_{1})-kx_{1}=0$\n", + "\n", + "$m_{2}g+k(x_{3}-x_{2})-k(x_{2}-x_{1})=0$\n", + "\n", + "$m_{3}g+k(x_{4}-x_{3})-k(x_{3}-x_{2})=0$\n", + "\n", + "$m_{4}g-k(x_{4}-x_{3})=0$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{cccc}\n", + "2k & -k & 0 & 0 \\\\\n", + "-k & 2k & -k & 0 \\\\\n", + "0 & -k & 2k & -k \\\\\n", + "0 & 0 & -k & k \\end{array} \\right]\n", + "\\left[ \\begin{array}{c}\n", + "x_{1} \\\\\n", + "x_{2} \\\\\n", + "x_{3} \\\\\n", + "x_{4} \\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "m_{1}g \\\\\n", + "m_{2}g \\\\\n", + "m_{3}g \\\\\n", + "m_{4}g \\end{array} \\right]$" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n", + "y =\n", + "\n", + " 9.8100\n", + " 19.6200\n", + " 29.4300\n", + " 39.2400\n", + "\n", + "x =\n", + "\n", + " 9.8100\n", + " 18.6390\n", + " 25.5060\n", + " 29.4300\n", + "\n" + ] + } + ], + "source": [ + "k=10; % N/m\n", + "m1=1; % kg\n", + "m2=2;\n", + "m3=3;\n", + "m4=4;\n", + "g=9.81; % m/s^2\n", + "K=[2*k -k 0 0; -k 2*k -k 0; 0 -k 2*k -k; 0 0 -k k]\n", + "y=[m1*g;m2*g;m3*g;m4*g]\n", + "\n", + "x=K\\y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrix Operations\n", + "\n", + "Identity matrix `eye(M,N)` **Assume M=N unless specfied**\n", + "\n", + "$I_{ij} =1$ if $i=j$ \n", + "\n", + "$I_{ij} =0$ if $i\\neq j$ \n", + "\n", + "AI=A=IA\n", + "\n", + "Diagonal matrix, D, is similar to the identity matrix, but each diagonal element can be any\n", + "number\n", + "\n", + "$D_{ij} =d_{i}$ if $i=j$ \n", + "\n", + "$D_{ij} =0$ if $i\\neq j$ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Transpose\n", + "\n", + "The transpose of a matrix changes the rows -> columns and columns-> rows\n", + "\n", + "$(A^{T})_{ij} = A_{ji}$\n", + "\n", + "for diagonal matrices, $D^{T}=D$\n", + "\n", + "in general, the transpose has the following qualities:\n", + " \n", + "1. $(A^{T})^{T}=A$\n", + "\n", + "2. $(AB)^{T} = B^{T}A^{T}$\n", + "\n", + "3. $(A+B)^{T} = A^{T} +B^{T}$ \n", + "\n", + "All matrices have a symmetric and antisymmetric part:\n", + "\n", + "$A= 1/2(A+A^{T}) +1/2(A-A^{T})$\n", + "\n", + "If $A=A^{T}$, then A is symmetric, if $A=-A^{T}$, then A is antisymmetric." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 20 38\n", + " 28 44\n", + " 36 50\n", + " 44 56\n", + "\n", + "ans =\n", + "\n", + " 20 38\n", + " 28 44\n", + " 36 50\n", + " 44 56\n", + "\n", + "error: operator *: nonconformant arguments (op1 is 3x2, op2 is 4x3)\n" + ] + } + ], + "source": [ + "(A*B)'\n", + "\n", + "B'*A' % if this wasnt true, then inner dimensions wouldn;t match\n", + "\n", + "A'*B' == (A*B)'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Square matrix operations\n", + "\n", + "### Trace\n", + "\n", + "The trace of a square matrix is the sum of the diagonal elements\n", + "\n", + "$tr~A=\\sum_{i=1}^{N}A_{ii}$\n", + "\n", + "The trace is invariant, meaning that if you change the basis through a rotation, then the\n", + "trace remains the same. \n", + "\n", + "It also has the following properties:\n", + "\n", + "1. $tr~A=tr~A^{T}$\n", + "\n", + "2. $tr~A+tr~B=tr(A+B)$\n", + "\n", + "3. $tr(kA)=k tr~A$\n", + "\n", + "4. $tr(AB)=tr(BA)$" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "id_m =\n", + "\n", + "Diagonal Matrix\n", + "\n", + " 1 0 0\n", + " 0 1 0\n", + " 0 0 1\n", + "\n", + "ans = 3\n" + ] + } + ], + "source": [ + "id_m=eye(3)\n", + "trace(id_m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inverse\n", + "\n", + "The inverse of a square matrix, $A^{-1}$ is defined such that\n", + "\n", + "$A^{-1}A=I=AA^{-1}$\n", + "\n", + "Not all square matrices have an inverse, they can be *singular* or *non-invertible*\n", + "\n", + "The inverse has the following properties:\n", + "\n", + "1. $(A^{-1})^{-1}=A$\n", + "\n", + "2. $(AB)^{-1}=B^{-1}A^{-1}$\n", + "\n", + "3. $(A^{-1})^{T}=(A^{T})^{-1}$" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 0.5762106 0.3533174 0.7172134\n", + " 0.7061664 0.4863733 0.9423436\n", + " 0.4255961 0.0016613 0.3561407\n", + "\n" + ] + } + ], + "source": [ + "A=rand(3,3)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ainv =\n", + "\n", + " 41.5613 -30.1783 -3.8467\n", + " 36.2130 -24.2201 -8.8415\n", + " -49.8356 36.1767 7.4460\n", + "\n" + ] + } + ], + "source": [ + "Ainv=inv(A)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "B =\n", + "\n", + " 0.524529 0.470856 0.708116\n", + " 0.084491 0.730986 0.528292\n", + " 0.303545 0.782522 0.389282\n", + "\n" + ] + } + ], + "source": [ + "B=rand(3,3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " -182.185 125.738 40.598\n", + " -133.512 97.116 17.079\n", + " 282.422 -200.333 -46.861\n", + "\n", + "ans =\n", + "\n", + " -182.185 125.738 40.598\n", + " -133.512 97.116 17.079\n", + " 282.422 -200.333 -46.861\n", + "\n", + "ans =\n", + "\n", + " 41.5613 36.2130 -49.8356\n", + " -30.1783 -24.2201 36.1767\n", + " -3.8467 -8.8415 7.4460\n", + "\n", + "ans =\n", + "\n", + " 41.5613 36.2130 -49.8356\n", + " -30.1783 -24.2201 36.1767\n", + " -3.8467 -8.8415 7.4460\n", + "\n" + ] + } + ], + "source": [ + "inv(A*B)\n", + "inv(B)*inv(A)\n", + "\n", + "inv(A')\n", + "\n", + "inv(A)'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Orthogonal Matrices\n", + "\n", + "Vectors are *orthogonal* if $x^{T}$ y=0, and a vector is *normalized* if $||x||_{2}=1$. A\n", + "square matrix is *orthogonal* if all its column vectors are orthogonal to each other and\n", + "normalized. The column vectors are then called *orthonormal* and the following results\n", + "\n", + "$U^{T}U=I=UU^{T}$\n", + "\n", + "and \n", + "\n", + "$||Ux||_{2}=||x||_{2}$\n", + "\n", + "### Determinant\n", + "\n", + "The **determinant** of a matrix has 3 properties\n", + "\n", + "1. The determinant of the identity matrix is one, $|I|=1$\n", + "\n", + "2. If you multiply a single row by scalar $t$ then the determinant is $t|A|$:\n", + "\n", + "$t|A|=\\left[ \\begin{array}{cccc}\n", + "tA_{11} & tA_{12} &...& tA_{1N} \\\\\n", + "A_{21} & A_{22} &...& A_{2N} \\\\\n", + "\\vdots & \\vdots &\\ddots& \\vdots \\\\\n", + "A_{M1} & A_{M2} &...& A_{MN}\\end{array} \\right]$\n", + "\n", + "3. If you switch 2 rows, the determinant changes sign:\n", + "\n", + "\n", + "$-|A|=\\left[ \\begin{array}{cccc}\n", + "A_{21} & A_{22} &...& A_{2N} \\\\\n", + "A_{11} & A_{12} &...& A_{1N} \\\\\n", + "\\vdots & \\vdots &\\ddots& \\vdots \\\\\n", + "A_{M1} & A_{M2} &...& A_{MN}\\end{array} \\right]$\n", + "\n", + "4. inverse of the determinant is the determinant of the inverse:\n", + "\n", + "$|A^{-1}|=\\frac{1}{|A|}=|A|^{-1}$\n", + "\n", + "For a $2\\times2$ matrix, \n", + "\n", + "$|A|=\\left|\\left[ \\begin{array}{cc}\n", + "A_{11} & A_{12} \\\\\n", + "A_{21} & A_{22} \\\\\n", + "\\end{array} \\right]\\right| = A_{11}A_{22}-A_{21}A_{12}$\n", + "\n", + "For a $3\\times3$ matrix,\n", + "\n", + "$|A|=\\left|\\left[ \\begin{array}{ccc}\n", + "A_{11} & A_{12} & A_{13} \\\\\n", + "A_{21} & A_{22} & A_{23} \\\\\n", + "A_{31} & A_{32} & A_{33}\\end{array} \\right]\\right|=$\n", + "\n", + "$A_{11}A_{22}A_{33}+A_{12}A_{23}A_{31}+A_{13}A_{21}A_{32}\n", + "-A_{31}A_{22}A_{13}-A_{32}A_{23}A_{11}-A_{33}A_{21}A_{12}$\n", + "\n", + "For larger matrices, the determinant is \n", + "\n", + "$|A|=\n", + "\\frac{1}{n!}\n", + "\\sum_{i_{r}}^{N}\n", + "\\sum_{j_{r}}^{N}\n", + "\\epsilon_{i_{1}...i_{N}}\n", + "\\epsilon_{j_{1}...j_{N}}\n", + "A_{i_{1}j_{1}}\n", + "A_{i_{2}j_{2}}\n", + "...\n", + "A_{i_{N}j_{N}}$\n", + "\n", + "Where the Levi-Cevita symbol is $\\epsilon_{i_{1}i_{2}...i_{N}} = 1$ if it is an even\n", + "permutation and $\\epsilon_{i_{1}i_{2}...i_{N}} = -1$ if it is an odd permutation and\n", + "$\\epsilon_{i_{1}i_{2}...i_{N}} = 0$ if $i_{n}=i_{m}$ e.g. $i_{1}=i_{7}$\n", + "\n", + "![Levi-Cevita rule for even and odd permutations for an $N\\times N$\n", + "determinant](even_odd_perm.svg)\n", + "\n", + "So a $4\\times4$ matrix determinant,\n", + "\n", + "$|A|=\\left|\\left[ \\begin{array}{cccc}\n", + "A_{11} & A_{12} & A_{13} & A_{14} \\\\\n", + "A_{21} & A_{22} & A_{23} & A_{24} \\\\\n", + "A_{31} & A_{32} & A_{33} & A_{34} \\\\\n", + "A_{41} & A_{42} & A_{43} & A_{44} \\end{array} \\right]\\right|$\n", + "\n", + "$=\\epsilon_{1234}\\epsilon_{1234}A_{11}A_{22}A_{33}A_{44}+\n", + "\\epsilon_{2341}\\epsilon_{1234}A_{21}A_{32}A_{43}A_{14}+\n", + "\\epsilon_{3412}\\epsilon_{1234}A_{31}A_{42}A_{13}A_{24}+\n", + "\\epsilon_{4123}\\epsilon_{1234}A_{41}A_{12}A_{23}A_{34}+...\n", + "\\epsilon_{4321}\\epsilon_{4321}A_{44}A_{33}A_{22}A_{11}$\n", + "\n", + "### Special Case for determinants\n", + "\n", + "The determinant of a diagonal matrix $|D|=D_{11}D_{22}D_{33}...D_{NN}$. \n", + "\n", + "Similarly, if a matrix is upper triangular (so all values of $A_{ij}=0$ when $j +Babel <3.9q> and hyphenation patterns for 81 language(s) loaded. +! You can't use `macro parameter character #' in vertical mode. +l.2 # + Linear Algebra (Review/Introduction) +? +! Interruption. + + +l.2 # + Linear Algebra (Review/Introduction) +? xx + +Here is how much of TeX's memory you used: + 6 strings out of 493030 + 147 string characters out of 6136260 + 53067 words of memory out of 5000000 + 3641 multiletter control sequences out of 15000+600000 + 3640 words of font info for 14 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 5i,0n,1p,57b,8s stack positions out of 5000i,500n,10000p,200000b,80000s +No pages of output. diff --git a/lecture_09/lecture_09.md b/lecture_09/lecture_09.md new file mode 100644 index 0000000..a1d53d1 --- /dev/null +++ b/lecture_09/lecture_09.md @@ -0,0 +1,802 @@ + +# Linear Algebra (Review/Introduction) + +Representation of linear equations: + +1. $5x_{1}+3x_{2} =1$ + +2. $x_{1}+2x_{2}+3x_{3} =2$ + +3. $x_{1}+x_{2}+x_{3} =3$ + +in matrix form: + +$\left[ \begin{array}{ccc} +5 & 3 & 0 \\ +1 & 2 & 3 \\ +1 & 1 & 1 \end{array} \right] +\left[\begin{array}{c} +x_{1} \\ +x_{2} \\ +x_{3}\end{array}\right]=\left[\begin{array}{c} +1 \\ +2 \\ +3\end{array}\right]$ + +$Ax=b$ + +### Vectors + +column vector x (length of 3): + +$\left[\begin{array}{c} +x_{1} \\ +x_{2} \\ +x_{3}\end{array}\right]$ + +row vector y (length of 3): + +$\left[\begin{array}{ccc} +y_{1}~ +y_{2}~ +y_{3}\end{array}\right]$ + +vector of length N: + +$\left[\begin{array}{c} +x_{1} \\ +x_{2} \\ +\vdots \\ +x_{N}\end{array}\right]$ + +The $i^{th}$ element of x is $x_{i}$ + + +```octave +x=[1:10] +``` + + x = + + 1 2 3 4 5 6 7 8 9 10 + + + + +```octave +x' +``` + + ans = + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + + + +### Matrices + +Matrix A is 3x3: + +$A=\left[ \begin{array}{ccc} +5 & 3 & 0 \\ +1 & 2 & 3 \\ +1 & 1 & 1 \end{array} \right]$ + +elements in the matrix are denoted $A_{row~column}$, $A_{23}=3$ + +In general, matrix, B, can be any size, $M \times N$ (M-rows and N-columns): + +$B=\left[ \begin{array}{cccc} +B_{11} & B_{12} &...& B_{1N} \\ +B_{21} & B_{22} &...& B_{2N} \\ +\vdots & \vdots &\ddots& \vdots \\ +B_{M1} & B_{M2} &...& B_{MN}\end{array} \right]$ + + +```octave +A=[5,3,0;1,2,3;1,1,1] +``` + + A = + + 5 3 0 + 1 2 3 + 1 1 1 + + + +## Multiplication + +A column vector is a $1\times N$ matrix and a row vector is a $M\times 1$ matrix + +**Multiplying matrices is not commutative** + +$A B \neq B A$ + +Inner dimensions must agree, output is outer dimensions. + +A is $M1 \times N1$ and B is $M2 \times N2$ + +C=AB + +Therefore N1=M2 and C is $M1 \times N2$ + +If $C'=BA$, then N2=M1 and C is $M2 \times N1$ + + +e.g. +$A=\left[ \begin{array}{cc} +5 & 3 & 0 \\ +1 & 2 & 3 \end{array} \right]$ + +$B=\left[ \begin{array}{cccc} +1 & 2 & 3 & 4 \\ +5 & 6 & 7 & 8 \\ +9 & 10 & 11 & 12 \end{array} \right]$ + +C=AB + +$[2\times 4] = [2 \times 3][3 \times 4]$ + +The rule for multiplying matrices, A and B, is + +$C_{ij} = \sum_{k=1}^{n}A_{ik}B_{kj}$ + +In the previous example, + +$C_{11} = A_{11}B_{11}+A_{12}B_{21}+A_{13}B_{31} = 5*1+3*5+0*9=20$ + + +Multiplication is associative: + +$(AB)C = A(BC)$ + +and distributive: + +$A(B+C)=AB+AC$ + + +```octave +A=[5,3,0;1,2,3] +B=[1,2,3,4;5,6,7,8;9,10,11,12] +``` + + A = + + 5 3 0 + 1 2 3 + + B = + + 1 2 3 4 + 5 6 7 8 + 9 10 11 12 + + + + +```octave +C=zeros(2,4) +C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1); +C(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2); + +C=A*B +``` + + C = + + 0 0 0 0 + 0 0 0 0 + + C = + + 20 28 36 44 + 38 44 50 56 + + + + +```octave +Cp=B*A +``` + + error: operator *: nonconformant arguments (op1 is 3x4, op2 is 2x3) + + +## Representation of a problem with Matrices and Vectors + +If you have a set of known output, $y_{1},~y_{2},~...y_{N}$ and a set of equations that +relate unknown inputs, $x_{1},~x_{2},~...x_{N}$, then these can be written in a vector +matrix format as: + +$y=Ax=\left[\begin{array}{c} +y_{1} \\ +y_{2} \\ +\vdots \\ +y_{N}\end{array}\right] += +A\left[\begin{array}{c} +x_{1} \\ +x_{2} \\ +\vdots \\ +x_{N}\end{array}\right]$ + +$A= +\left[\begin{array}{cccc} +| & | & & | \\ +a_{1} & a_{2} & ... & a_{N} \\ +| & | & & | \end{array}\right]$ + +or + +$y = a_{1}x_{1} + a_{2}x_{2} +...+a_{N}x_{N}$ + +where each $a_{i}$ is a column vector and $x_{i}$ is a scalar taken from the $i^{th}$ +element of x. + +Consider the following problem, 4 masses are connected in series to 4 springs with K=10 N/m. What are the final positions of the masses? + +![Springs-masses](mass_springs.svg) + +The masses haves the following amounts, 1, 2, 3, and 4 kg for masses 1-4. Using a FBD for each mass: + +$m_{1}g+k(x_{2}-x_{1})-kx_{1}=0$ + +$m_{2}g+k(x_{3}-x_{2})-k(x_{2}-x_{1})=0$ + +$m_{3}g+k(x_{4}-x_{3})-k(x_{3}-x_{2})=0$ + +$m_{4}g-k(x_{4}-x_{3})=0$ + +in matrix form: + +$\left[ \begin{array}{cccc} +2k & -k & 0 & 0 \\ +-k & 2k & -k & 0 \\ +0 & -k & 2k & -k \\ +0 & 0 & -k & k \end{array} \right] +\left[ \begin{array}{c} +x_{1} \\ +x_{2} \\ +x_{3} \\ +x_{4} \end{array} \right]= +\left[ \begin{array}{c} +m_{1}g \\ +m_{2}g \\ +m_{3}g \\ +m_{4}g \end{array} \right]$ + + +```octave +k=10; % N/m +m1=1; % kg +m2=2; +m3=3; +m4=4; +g=9.81; % m/s^2 +K=[2*k -k 0 0; -k 2*k -k 0; 0 -k 2*k -k; 0 0 -k k] +y=[m1*g;m2*g;m3*g;m4*g] + +x=K\y +``` + + K = + + 20 -10 0 0 + -10 20 -10 0 + 0 -10 20 -10 + 0 0 -10 10 + + y = + + 9.8100 + 19.6200 + 29.4300 + 39.2400 + + x = + + 9.8100 + 18.6390 + 25.5060 + 29.4300 + + + +## Matrix Operations + +Identity matrix `eye(M,N)` **Assume M=N unless specfied** + +$I_{ij} =1$ if $i=j$ + +$I_{ij} =0$ if $i\neq j$ + +AI=A=IA + +Diagonal matrix, D, is similar to the identity matrix, but each diagonal element can be any +number + +$D_{ij} =d_{i}$ if $i=j$ + +$D_{ij} =0$ if $i\neq j$ + +### Transpose + +The transpose of a matrix changes the rows -> columns and columns-> rows + +$(A^{T})_{ij} = A_{ji}$ + +for diagonal matrices, $D^{T}=D$ + +in general, the transpose has the following qualities: + +1. $(A^{T})^{T}=A$ + +2. $(AB)^{T} = B^{T}A^{T}$ + +3. $(A+B)^{T} = A^{T} +B^{T}$ + +All matrices have a symmetric and antisymmetric part: + +$A= 1/2(A+A^{T}) +1/2(A-A^{T})$ + +If $A=A^{T}$, then A is symmetric, if $A=-A^{T}$, then A is antisymmetric. + + +```octave +(A*B)' + +B'*A' % if this wasnt true, then inner dimensions wouldn;t match + +A'*B' == (A*B)' +``` + + ans = + + 20 38 + 28 44 + 36 50 + 44 56 + + ans = + + 20 38 + 28 44 + 36 50 + 44 56 + + error: operator *: nonconformant arguments (op1 is 3x2, op2 is 4x3) + + +## Square matrix operations + +### Trace + +The trace of a square matrix is the sum of the diagonal elements + +$tr~A=\sum_{i=1}^{N}A_{ii}$ + +The trace is invariant, meaning that if you change the basis through a rotation, then the +trace remains the same. + +It also has the following properties: + +1. $tr~A=tr~A^{T}$ + +2. $tr~A+tr~B=tr(A+B)$ + +3. $tr(kA)=k tr~A$ + +4. $tr(AB)=tr(BA)$ + + +```octave +id_m=eye(3) +trace(id_m) +``` + + id_m = + + Diagonal Matrix + + 1 0 0 + 0 1 0 + 0 0 1 + + ans = 3 + + +### Inverse + +The inverse of a square matrix, $A^{-1}$ is defined such that + +$A^{-1}A=I=AA^{-1}$ + +Not all square matrices have an inverse, they can be *singular* or *non-invertible* + +The inverse has the following properties: + +1. $(A^{-1})^{-1}=A$ + +2. $(AB)^{-1}=B^{-1}A^{-1}$ + +3. $(A^{-1})^{T}=(A^{T})^{-1}$ + + +```octave +A=rand(3,3) +``` + + A = + + 0.5762106 0.3533174 0.7172134 + 0.7061664 0.4863733 0.9423436 + 0.4255961 0.0016613 0.3561407 + + + + +```octave +Ainv=inv(A) +``` + + Ainv = + + 41.5613 -30.1783 -3.8467 + 36.2130 -24.2201 -8.8415 + -49.8356 36.1767 7.4460 + + + + +```octave +B=rand(3,3) +``` + + B = + + 0.524529 0.470856 0.708116 + 0.084491 0.730986 0.528292 + 0.303545 0.782522 0.389282 + + + + +```octave +inv(A*B) +inv(B)*inv(A) + +inv(A') + +inv(A)' +``` + + ans = + + -182.185 125.738 40.598 + -133.512 97.116 17.079 + 282.422 -200.333 -46.861 + + ans = + + -182.185 125.738 40.598 + -133.512 97.116 17.079 + 282.422 -200.333 -46.861 + + ans = + + 41.5613 36.2130 -49.8356 + -30.1783 -24.2201 36.1767 + -3.8467 -8.8415 7.4460 + + ans = + + 41.5613 36.2130 -49.8356 + -30.1783 -24.2201 36.1767 + -3.8467 -8.8415 7.4460 + + + +### Orthogonal Matrices + +Vectors are *orthogonal* if $x^{T}$ y=0, and a vector is *normalized* if $||x||_{2}=1$. A +square matrix is *orthogonal* if all its column vectors are orthogonal to each other and +normalized. The column vectors are then called *orthonormal* and the following results + +$U^{T}U=I=UU^{T}$ + +and + +$||Ux||_{2}=||x||_{2}$ + +### Determinant + +The **determinant** of a matrix has 3 properties + +1. The determinant of the identity matrix is one, $|I|=1$ + +2. If you multiply a single row by scalar $t$ then the determinant is $t|A|$: + +$t|A|=\left[ \begin{array}{cccc} +tA_{11} & tA_{12} &...& tA_{1N} \\ +A_{21} & A_{22} &...& A_{2N} \\ +\vdots & \vdots &\ddots& \vdots \\ +A_{M1} & A_{M2} &...& A_{MN}\end{array} \right]$ + +3. If you switch 2 rows, the determinant changes sign: + + +$-|A|=\left[ \begin{array}{cccc} +A_{21} & A_{22} &...& A_{2N} \\ +A_{11} & A_{12} &...& A_{1N} \\ +\vdots & \vdots &\ddots& \vdots \\ +A_{M1} & A_{M2} &...& A_{MN}\end{array} \right]$ + +4. inverse of the determinant is the determinant of the inverse: + +$|A^{-1}|=\frac{1}{|A|}=|A|^{-1}$ + +For a $2\times2$ matrix, + +$|A|=\left|\left[ \begin{array}{cc} +A_{11} & A_{12} \\ +A_{21} & A_{22} \\ +\end{array} \right]\right| = A_{11}A_{22}-A_{21}A_{12}$ + +For a $3\times3$ matrix, + +$|A|=\left|\left[ \begin{array}{ccc} +A_{11} & A_{12} & A_{13} \\ +A_{21} & A_{22} & A_{23} \\ +A_{31} & A_{32} & A_{33}\end{array} \right]\right|=$ + +$A_{11}A_{22}A_{33}+A_{12}A_{23}A_{31}+A_{13}A_{21}A_{32} +-A_{31}A_{22}A_{13}-A_{32}A_{23}A_{11}-A_{33}A_{21}A_{12}$ + +For larger matrices, the determinant is + +$|A|= +\frac{1}{n!} +\sum_{i_{r}}^{N} +\sum_{j_{r}}^{N} +\epsilon_{i_{1}...i_{N}} +\epsilon_{j_{1}...j_{N}} +A_{i_{1}j_{1}} +A_{i_{2}j_{2}} +... +A_{i_{N}j_{N}}$ + +Where the Levi-Cevita symbol is $\epsilon_{i_{1}i_{2}...i_{N}} = 1$ if it is an even +permutation and $\epsilon_{i_{1}i_{2}...i_{N}} = -1$ if it is an odd permutation and +$\epsilon_{i_{1}i_{2}...i_{N}} = 0$ if $i_{n}=i_{m}$ e.g. $i_{1}=i_{7}$ + +![Levi-Cevita rule for even and odd permutations for an $N\times N$ +determinant](even_odd_perm.svg) + +So a $4\times4$ matrix determinant, + +$|A|=\left|\left[ \begin{array}{cccc} +A_{11} & A_{12} & A_{13} & A_{14} \\ +A_{21} & A_{22} & A_{23} & A_{24} \\ +A_{31} & A_{32} & A_{33} & A_{34} \\ +A_{41} & A_{42} & A_{43} & A_{44} \end{array} \right]\right|$ + +$=\epsilon_{1234}\epsilon_{1234}A_{11}A_{22}A_{33}A_{44}+ +\epsilon_{2341}\epsilon_{1234}A_{21}A_{32}A_{43}A_{14}+ +\epsilon_{3412}\epsilon_{1234}A_{31}A_{42}A_{13}A_{24}+ +\epsilon_{4123}\epsilon_{1234}A_{41}A_{12}A_{23}A_{34}+... +\epsilon_{4321}\epsilon_{4321}A_{44}A_{33}A_{22}A_{11}$ + +### Special Case for determinants + +The determinant of a diagonal matrix $|D|=D_{11}D_{22}D_{33}...D_{NN}$. + +Similarly, if a matrix is upper triangular (so all values of $A_{ij}=0$ when $j{i-l?Q^_J>s~ zzpCr1wMgZKMQIplS)fRd?yldU80ZP;3G56lp}4u}L@lhHO&sY&tqq(_giVa>j7{jI zO>E7a%?TLjIaqjkp`4r@O$=H*K-m5PWXc?i@l~$#Hfp{=(DDp-@HwumpDx z2^3IRY5CK}{2_hVb#tGOtkPMJIB4cKz}9v!3pJb3W@r2yi+A`CFa`Z~WYwwH8@U>m zGBy{;H$B7-)eWkzUV(}>JA}8Z@?hGwUL|f;c|?CLay#5jf(l$!C~4JC0;3T)G79W#2I0Uv=Qrq*o?LfplfBQb0yPj@c_0o$+`cwO*HA8K0SL zR-3jP{~}rMs;$kGYdU$1Qk$Iid^X_Po>HB>oChQUpY>s-Wfn)Y(PQx=54*`aHbrty z{9cw}hU;pE<9)zh$N z<5|Ju01C&XB=I*iT^v~iMtxW_0v{ZLP{UJPY|IJq2n7)s;tvL6TUtAgAVH&#ccR8P zp-IRYQdQRwm^}D8;o6CY2l8$}TQq@`_wCrYT~xL^qoXDe8RPL{0T%?H-j#D2N60LG z_95|5-%u}(y9O5|qa!3IBE#gg4a0i1S=Z8%t?K2l$ck$SYd(oee5XD^vkAQD2n|a( zdA2wnMAoOqwE_aCrt+{BF;eqR+Y13fqCYpKzXSldKUHCd1ndNgv~zrE?L~yD>zelv z@%Hl=8k~;kOD+4ZP#aX9tfnlI1 z;5!Xw&^HRgcMahzkmx6AguO7eBrry{(_SLRG#ZqaCl~izOb+#pBfCa;(9_TNy}i;5 zzTzl*@w>m!nC)#98?kUEV`&NQ&}I*Ech>U20oa*OLX` z)Y#>`d_|HPx3mqxM*?!3s%Z9i@cVA^NW}y~&eJ)wh9oxap<$8*7P(H##}@qbAZ9^? zjyh;z(7Dx2*w*V_`FfBP1^!G#P|5hGy#a4FG6?ofr0T)`7DOdP*Q*MpT!`pV8mGJF z3gAcVRaX>nx4#uY{DMDj&bCQZ=)m$1XkTQUP%oyWJdgFEu+mE!5a)M5?DerMSu zd7K;7j4G*#LfH)6z*{adAs7`b9tXvfi^Z)eO*?}@V(D^d0#_|n9cLX`9cvwJov(7y ziaNl}ZS?@7F&53m&;Hl!>kJ|3{R6M*qPe2A2PXk&=s{vxmJ2o$@~~ z2BH6fP0XzH9RJFu9Cc`AWV4N2jB#n2LK7@5i1S7nhWajoO;d>lNF+`a_Q2Us&a;vYXuB zFSD79q>S6o+*gmh*9RYDJO*Fx{=<7=-m0GM*4pgD$9dIT|L|~s{fvP}czntuz^y%` zP3&MBs#(_Q+rS+9gvO=fuZh zzKrsi1rbTpL`P?k8w?aB!v6?TX|(iju5Me^7@ug;;g4%t6f=_%2p;sX(F>xH z+$V!d5T`6?BqE4JlNeqJAQgwhqz+G@BuscDqDo5m3uBVPChm(Yyb)NSu+gg_k;WuU zCQE*45h+Ou8UYa*mGmd7hX|u#qBO9jGsW$OQ4krCDlkBC(~c5jOlTEEtAGuU6&jMR z6}DYwGQ>6*05)Xnl)%7Cp%A*8))Sf2olY+{tN~~gDAp}bI;Boy>%52ZwP#cHy_0*4T>6)nhX>EMM9yo-T~8XOEQH5< z^bPO*qN8$?cqGyy$w8*kCCv5_L*x!h?`Rw1HTeJju$%2*4Me?#uSvfl10EJ15|bef zNezJ*5-~)$huD*tAE+2Y-DCA5)FIm;+#)?jyoSF<91lqvqV7vp6RsfH26OETRF6_% zL)aM-k8A|bdxz5usTyMMOT8gBwMS!%RTC%+qs|Xz{Y`od9i@Et?oITw>Arkp=Q8V} z15qi4?#S&HvMJio(|lM+faIX-`*EC^RJ($g(PmP(q~F~iB1x0@PC6f_sr%Ybv5NIF z?*;Dk`C!GzHEV-V+m5-3`7zx^KiBJDwXZsRoOpC;yYTA$;_Qvh;H9%~a#n5DilqJn zEO8yZ6JldK-Ot8XeCOD_&-!b`s_lO6EhMG1n*lx@4rC0!s>mCMm&gn8W&GiGKR=ar zyLwyh(&~=VF_5S4@X_c~RfsNXr}r!dQ;#i!BwB&g*h*qT8+E_NUd9}AUj21B3qGq+ z7lG4A!_AC&AM!vEqODtJZr-}W#zIw%Xb7IgS!)w)d&mM)RB6CVg|9(leA-o?v}Vmv zPp2|%{%G~cRlp97lKF_583>gyaEQnylZ`;;ZEud2H9k>%JDrF7Myyyg7pt}F8$a#|pHby4&>qfYux{6|-E$J&`x&~DwhB?i5f6(| zjC=Rs3c$~Mu|-7@s2Hu8tTvsv&c$-|fpZk#oes{&;tQlkDNOsFU6P|3pqHI@>+4Fj zNI-E;%eSn{1yZ<~_x1;E@WCIo8rMqBfykv0x@L_2DEwyUsY~qFeJPd38Yx{aU30bt z&j0Ld4{i2%C%5(hMtrfUhn>MRMlb zp~AUzN*Y7+UpM-Fby4sw|2{V##-$An2N=(Mwi|JCn`n-eGcECXz8&_>HP}2wH#P5x zhn$sx+PCXXF%Fl4Ji2>p2X5MCW~7eJTaC(Ts-_e*Z|+%<6T>2Vh>JI0Bl%(%!w zsc(^$;=#%ydXPLe?**?D_eYU-LBcLlHuZo-R|pvme8!0~&~2WW37YN`JB53jUYq$b zA_MW^?7P41Ha~@J=r)G9{yCxzGi*Bog3QPLa^_S-tJ*$`XPWkBNCt9m4$hWW(RCdss%h@V7oN68v?`<`zi# z8el#zvfb8KH6AX& zG=BHhNG2LQijYPV|Q?okXKv;4T**Oa%_m!a+ zKsXDTPg^ay_M?`oWvPr{h~C<)QpoQP-eeZw@V^3+q8r;SmoHUj!zc)b3SPqj5-d(U zP#6htMxE4^mt*gxFs zZnn9?5kre+aNyt|qosWDx8;W?P!6aX8TnGn$I060ar+&MrXraILMb+DR76vXq$y=9 zW|mJfNJlPlDNW4` zfV1MuF1)GZoso4dq(%b0LXlPm^J32+#aWy&L-i0foh4_q(j#cHFDUdCV3E5scu|S%G$)4pZ=IfAb z0!L{NnT1&qHuRu;i3@bToA0!w%+#n__De>G!7C&a_;KO#EPe5>nB&wOyQ2Q)zM;MH zt9~K9k6KFFWYEbno@;n#h3XdYDzst?S&zCt>o|2-lcI0K^(LSg)C%9yk%B=K^glVtt3lbvi1Z6_TaJ8HgOC6$SH@3<`jPx@4ycg_F`UGO<}FFVV}OpZr;hv*~{9h8{foi_4qIgG8Z> z`Tcr3ZZCmKDI0Gpl&Ss2o*ev~Sw6LVtTDC!GB|&I9z?(i;u2cfh~KLp%hI+TNJlA5 z)AwAu2zMtH9=p>WagPOGB68x`)Uq!xLM}fTWJP-Q1}lYbr!%h|1HHv%`OW+8Q7dEo@Emhj; zh7xKTK|8RhQ;N){q7@Y_3hx8^nktz3#hOy!nA_+qO)XjUD#eebQ# zpcB}K4T)gOOnSLw50=XMcPBmOM*1i>S!YicG~SBn>LoGl;d;##iF-MtaVy7YGz{Nf zcF7UjkA^l8zrAszBI&pS)?PMvW8Qdyeylgu=#?d64Czv$%#+>>Z%s|xUj@T>Gb{e$ z!L5d(Z@J;Uie`|)Tiq+?XI<6S31P+c1f|LDIG8!~K$qqr%w{}bLS{d~cMp`hvrT8* z{@!pQsZq&3m3k_oXFST4o;fQ!0S5?iDX=RyT-0f9a+f%auJyIf)es%Bl`86TSl*C% zSq1&<@!{byiW#(>1~;UCVkWdU^(FD)IzH(i?!@M^7# zvk%#g#}%=#YnUO=j+@47YI-Zp#@#(CgY&WrUM&Ti<|C~`iE|F};z+i`*CxFp>>_Ds zg2n)HV8hX$Pn8xOBiJWH-JaF}t9)4bx{fiGh1#;pkOUp{j~N);$M3m_>%UI3XU#^_ zttiyq5lZawSy}*j5%KU5x*Oh(%nUCkH&W^+Gx=UeiwpMrqoR~G^1!jW(f_P(WE>D!;$>N4!xIos}n`xp9EEzChZ~UizDdX63(GUnPfz!;Hj~+FEwgl917+8s@1IwUIFNPZ3Fg%OPJIU_H}0Hl z@n54OO^-PP1d1u~?bbBNzJ&F@u)+R7e6<>*-ZBfaaw5MpD)mlA29R=r^#H}?unGGxYPQ|?(g!@VAEaJ)=2 zLWjNrP4n1Ic=mb(Ucr8SZ?s$~q-`~tjFaEIp3v*Bxxd&q8Sv{XqRIU(R#%&CgXNcS z-}z^4kdVs#dRL>AGfZfx;bgm>S57tq^uG>pQLQkXw|^ch0QrUKJ5MS zl!%o{)54Tg0tJopOvT6K01|KpkY9(b9nE}+EKV|{og*&medZ3<95_(U9c$-aIp>`T zs}&}h0>NJJC$2{Fa_hFczT{zKDl^@soUd~aUa7Jti~h{XJhy4gvd^c5^1^Kr#zKr+o5DzQ0N8+&89ZZGH^r6a#nW zdd9xmr~l5KP#ANKqtfiJX4l_+014d^Bq<^$Whdjp7w!p5|6)R&^Az4J1QEA{6K%j8lxy={UwJf=zi{~hX$=FF&8bb;jU&4hwI-st5Xk(?PIUv&4jS^aQ`(sG(~eAXz%$OekrZMj58 zQASx7$gOB7R)IDLqB5xTlAKQEo-jDFEFC@x<@hrMdNXA!nOI{+ik}ZAsuS)eOq`s8 zVbv1G0nOA9!tNb|w}4vAvYM%dq}HYUB==IQ6SqgWQAfv$OJRqq5u0Ce_3F9}B$U!H zqHgov{9*0eFVgI9fkRbWzOw9~K7$eEg!)&5ZK73GDH95kNPJReTK3+ARC;75y4~I^ zRah+JXhm8|l!rDF=_^6QF3UoujeP-WDFQ}t%PbWIL;4++fU1QPdTsow(j>gGs3)m% zQPQ~P59;VyQI+F#=EYH=F=C^c+QH9pW`*RqB>4PK`6f^hC0*Z|wk=H^3q~Ecv9AHT zmDBZE^MJ8YCqq(U8vI@--B5!R^?)|`(whu1W|7o#Dc0hIa8Xz)A>KtF&6XE^4OxL5 zuA@OCmE%PFFQ@bf*0sRQ>Uy6jm_F-i6-S$@PPQr*!~x; z5)%_W`+sqjRH4!=aDnbg6mXYU~$*ATsmLhASY<@icj;SeA z>fJ@ARKiq|n_TrQ+VPUbca-6oqiD2p=2DvSfG+JAvSlo9VtGfZqEI^V7yIA{EQLYM zh;e_{F-9WSMEPurs${D=&B{4r!vua*A6vRI+v{9Y#}xVPv=#Ms(U5 z;+-sp_R{N#y+a|Tgr2H}YOz|6mwNXx>DRwyKz|Nxc4v9k_Zhc$#9Gl}nYyp8e^(9F zI`LP6_Tk!5m(K4ek^tl}4N_IKm*1MW6}c-MMUa6!Y7RkDkenV0(vX%RPMx1y{3|@1 zEEQogqAc9qkftF)oPZUP4k;_5<{!TajwnK$%oW)yyywlAsv%B&D2gi3J(q$MD*`b< z8zFoR!Ql@h>%&SmHzCaxDx`=|adfxXdAX94(uwO-(J9AC&#(V}0DK{iq4VdeI95cc zY2#VRtSR1tw>n&OPTzIjyAKX1 zJyGcU>z|CACt=B~0wX;&!#m79ianGNNUQcSUF662=LV&s+gBaSUZBJ$oZ@Lh`Y15_77pxXbc&RdKxoP38xdj6X@H>cn>l?3RB!v ziqk3JNMDmzh6BhlCtrEhc?Wm~jZf+tBxCeC|Hn*^6J20lie zaFsJCUdudoaNCPfnJQfKUA^Ot-u?bv7YZEF)znN;no1v^r5A^nCnl2EMvrA!#f(n- zg2r&}+pl?KiZSnzr)1esZx z`Vf_1g0U@$GsEDNrqY%ycectsH$XAHfyFsTtn>EH1zJQQ3DsJZu_Zq0Xvj*6#WRb7m2BXz*$70j zg?t4M^~&^Vzl)xP##Mx12G!j17SiC|3O}Bn`93{kAQ6o#1gHPi(=NE?x~L3JY}fPH z*zV3>%*>y5nU5e%znp$u52{sKpj}`&x)_yNKE-p)vu88vV3l`EoEe!wiC3s#Ejyym z8V|U*v9J^J6T%m-`zxR7rsK^pC~}IcIKY%V)Z@$j-C2#j;UmEJ%n(@^^{^z;!GDbM z+=~UQq*Gv(lOzL!mUYawDWpR9G}?7$Ry6NspYDl5BO$E86n0km5$v5Kqtw(Snkka& z;@st}DxSKdCo339TtQaS6`3&9%Sn>FCWl2%r8_9C2v#ubSM5{%dZh0+`}B4P+b&Qr z2Fr#%nVerWwL*@kuXySV58oCC>~d(luz(Tq-5|8dYN*I@9g56uG@fd8)?^h@a7OPb z-x%owBD46Mb{Ps>r^d#VSXI}I`qsz~`eCW0QJJcdlh}m6BCq{5&2q-D&KwL}7VDg2 zY%L(8(W?W#K#pujG%iN0lx9R`P(5d5E1r4$Iqu1QvKB`7=uLj7yh7MeoK*9f<;}sM zakk2abrC}_4VW{nFClK^S^?9wH;VGQ##J?^tpVS>&+PXMXtYa^Y<&`i?KQu6ZVSTa z-2O({)BzZmMe93(^J329%9ouaiN$d*@*$t;Ia?~EhIl`G&$Mb>*KfXW|55E&TX0%B zpZEx*8X&uDefyB^@tRNkD~o+{QZs=If<2TCBmX_pVsNL75&<@)4;X|^knLpYB1KMeah^4 zd`L~6V8Z!v)@LUSJtsF8I7p%R;Ppbm6;|7ot)LaWsjUf$Dt|D8A#UZ1NpVxKO!p@O z(B*M|r+a2Vb@M(_#tYNR#RU*WP*v>S`TZj(+8Av1o||6YYG*eHBiaANC%E{wEM|B@ zy3i!{j~c1`Mxs6im?p4HK`ETt+%kyTzT@m0JL$Wpef>MT^dXo<<#lm;Gv&us!&9Cu zW4V%|6WOj$*Y8lrKbLN2KdM*};F7vK-7GH87e^6#!~E@5#`!HZ21{(9Ul*>y^F8yq zbKvG4PhsX9qkDqwsOYLsN#0dNEMF!Uy8XQLCSN zHYHcT*avtKB9nHes`l7yBjoKuZF_gyJy%2@c0-Y6Ffn0AcWgW5`0hd-NB8&ptG^9= zpBk8MD1PpMv-zyPSZ#ZR?*)fpKq3(&TlG0(m$R3X<~#szeqou34`y!kw~2`&EYEQk zPb^+I?pir5*{0|@Xwd~C;sIzPg$&s$w7k5zQKzaulUPq6noh68PcV^MZc$ojN)GY9 zUdG66$;g*VZ6xKtkUX&`@Y!8hgLJF(A2di`C~A}+&{K9u7QHlb4MtumPkvQWOzwa* z&U@9AJm+{`JlSc5z{SRwdvAADjl^>b^M)6&j4t7=9}_$#1j|ASAykK_;2Cn_z6VpG zzZbW2N)(Jp-{hSVp9$*gwKZ~plx_BhJ0%SDHp=&@$F6`*jg8wt>&lv{H?|sBIJVP} zn{|wm3M_4Jg8RnH8u5i^@U^~}z;;!Ga$zej^b`CN*f5Gl#9}k!BYV$8b_Vw3K`90u zr0vs_2O}b#l}&S&F3JAPHO)3uVCz5pAAZvjmce%M_A6XC>9o*{86q2zJ|a8HZip!I z5=X7h2D~2Y257%a?ebtj_j4xX^ zawemD<$WzFc@%KnvCz0rHVT`@cj8L;o)9ri0XO>j+g$Ra*#v6rFC8}dFXAdkkY-WT z^02Iw%Ip)ClE@vX(KNfN`U;~(+#{aFtts%^db<~RuX|BA*A!t$;m-$IV%gU-rcz>^ z%G{5!#6z|t@sw~MrRG=?*j{x-$Km_5jD4t}vG1B&y?gdTadqdr@=S}&IM%ifad$f_ z2dH-a;QBRbiV4Uwu4>4+4vOV2s-2ci?1V}M%~*fx>=~cXn)I4OrCLxmp{w5)HmJl@ zYHCUgOSg0rqMJGVE7$SOlXD&*9I~NtP1t9Ky|V{r@XY2;*u;lJ3NlUwxrB(; zyT?Yzf2b{Qmbjbu0x122a_Z(!<01v2F9KbD%HPL6=lp<&gkahJjez3#UkE4$R%W*U zBA}A|tg+27M`tCj+KHibn55kJudx?PRjxU~Q04<9H?3`$67^R~WClA|8fITQW^xX> zMjZ~`UgI8leo}^9kwzOHi!{2KWwrz~mYc2f12L?Dn)}mPBV@u0BJYa~?bA5SvzrMlr zM2BX_hH_-W%WIKYo{2W{dpq6)lysi?pTlm&cKAqkBM4l!a$3&5jA;@#OTxEkLPi$3 z5Ik^+gpL{&*6ECI$9BBTZ%<#g=>lA@cY4ZFT05?a$EOb9uXp?KZ(a8BDc^`egfc0< zcrEDp)h)E}1sc5W4?zN&Oo7-ERe|ijLtm7&P8Gg>igI+`6atB^IH_x0o-`$Rc4RLg zBMDviMK@x#_`dp|nN0{Z5=+y2-Uz`~_oHLxk`~Ae<>l5a2k^E;*FMEV6Gqs__sF_p z4IzPN7T6`uYv6=n>87zQB8P2UH5WcfL?lZ}FjMC@C9tEUgs+Lkc%Q~HU94j!;}fG7 zMJ-AKR=6yey{j8I6AkTCF^sLUb%EI8qo*sKB(y10re$q4?CD8NI%Rf)HX)N{Z0nJx zRChKiwrb&j+bUgHvzA+0(sneT8S;!V2Q0U|KH+})v=T_Z^kjnC4qIvopMNSorWnyMlL^Pn62KEwi(x%r&IM%&dB$2bqm~Gj8dcY+UB3Uh+0L_E+qv_83{9Yh zO$olrEdO(DE)ms(ty4K|lhwzB>js-7Fol`$%F>GS<%5(DGLgDYM6zci+p*-%$bsW# zMiA8hwx;ZGoH`c?)qUWtLVb!A5a)C+&W-UZgc7<9$mtp?WI;Jy6Str&31DB9TFUo+ zgaO}Ay@t+q6MuD2V2K^!l86nJ#<4;eq)J0N& zgL=Z&s8hrib|Iim2I|iGSIJlBL8-fsYCO4O3W=&jaoQ1Z9c;fJHzxA3ra*YG?SjH{3p&@Lz@_ED zU@6iwI?8kd8&~*x&$Id8LQDCBr{I53W{#NSW8&gwzLm%Fi=xg=C@4<7m1tQYb5dWB zO)bY-YIjmQ?Y)~OmZO`sdeNc=pKk{C;ZrLLuZR+tQlm z*4$11sfEgJlzZ2ao_6{s&&!UR0ogj;8zDU|FHWw|V_(>i!vQk2p1L4|umxOHaJTV_FZM)xHBW-HsmN#?MPKPK z2rcHxanReo981KbN1IJ3Cv9icZs#L~;I_gS_PUnW^Wv^3pLsJ^cbT7)7jO1W$-JqF zB$pbpObY55_qoH1&wRu6Ja(0@Au+XgURfzAzWXu{Q-t&Pzwcp;4F8KgjEUpFY+)?1 zJyL`G7-6^8(RvNO`iKgPTEUT6MMRnk1;X2v@&c#o@JjSD5o$`qw1N2`AOgu~HdmF~ zoo82kdpCtq`9FYeEO4bIwD4cL?)Z2R>~Q=Lo2$f=6ALHdNHH>F%Y)8aJii~bjnlcJ28+fd z5nzY!@K|5(Sv46FL24>FMO#cOM2F{;ECOXvSXvu0o(i!<{|2H{03f~*9Ieo zd5PgqK8*)dH(VJRJ<;>yziIcoW=H41cEUFgon8f+tY=i8rEV!Iu^MTq_RoM;w7pg5 zIN)@}BlDnMQ!7=#-MhfZyzxz$zvg!R!fUl=@A(nr}1@`5A&G*gb(J~%~lGV{h zc6YgKJMVrhsCJ_Sql=lNYjt3XnHSvh_$fZ*TK<~_X8g|u{{JszW@M)S*F%Ype7|f6 zJwo>@^~+l{0}TdG0vS}Iy}RWVF_vA4PJKkP3?=xFF2xZpw{ufhPR7(9nyktOG9Vv# zS;*))>?&YcTR5nK!GBnEoF5Z8np}xhLf*_R^-CoN@!`sk=sP7tno4=FwzeanfB^8(KqbrY$KG?Hb}-B46^$9p2%Np8L>!yJ>ofZ#7`9Fj9e_wFP!Thf=G&0sVFwi$PK8k{Z zgLQ#kb$xM(p=Sn&NJpRari?exd36H2gf|Jrr;6rN&hRZ~_(d>FFwxilg9MTg@kPL> z2_Vim1_)W|NC<`}D(cH&Bh?l^^wmgS=Szl4N@iA;dQ@DRLSj-Xenwg$XB*FXrob7!Y5IuG|KGw}apS1>M1;Z4np^x0!-TrrG#C` zA%F9XUVjSZW9q;2*`a^2LoI%v)|`dl-^vg5ckUe=Kd$@trqA|9S)sq4NN{uWPf?E! zD`w0NzJC`$0BG@p3;ml6V*Oua5F;ZK>%XRukE)lw@-k*$mdp(g5!l%Aiu%(IJCu@@ zfN%phvPTj@A$K68DTM?tAZU4&SisW@+WqBdDr0B7NtEFh^lvey{ z{NuyVm&ZFXs2utkROy+^6T%=PqI2(D`i$qItIK=`3~z?Ptl?+%KVFrls}!~XRbW~- z9ocKn+QWHhoj%ma0`VcaVgO`%@MMkNN-Ux4$J%fYdMl9Otma?KHh@I-b53;QJy96C zuTP0afh)8eA_DSn%IpoyI;fTKuss*|uX5#=c378rB+!`lfiFxd=i){qOH5XiqqXE^ z$F@}(6O?PuoE0l^D0ay(++2iU`Jp|lgEW&I=5`!g`=WHp>I2ld5^KBpWf&l9^I`{wYDH67BXuCJU^+?fgYg&2{KzaHcQQ^7;ghFs8{U)m5RcvEoqt1 zZ@}FVzkN|LQNG}+GyJI8+RAvSWjSWymhk}l>bzUiPHk2E_U=J7$UTkrLdP3XRWR3^ zstpq^!-^*X7KD_KEAwd6U)T3ZH7Pcm-7Z;n5S89GS#?jYEmuSiOau}9w<`%3VaRe_ zKW$0{cZKO^eEM(9Tyl4e$)f=1E-q3#GJ5==-R9xt{Lc}0F%If|m=OHw^J*#uJ{$fj>A5V|_ zAC=F%D(&S0wzC4z7RE?^uS9$ahjzSK6mceL+0@qscaw<%+7GfInxre4ZkXNuJ3Q}b z2fzYA3dCzn#4Ey{wvc43xvM;`{v&!o#j~kVkczx{7dH5N345`RK%sG^okjoNuXe-3 zi3J{$0R?yBIc95zjBbL!QDQ*=(w6yBvY1+fak&&Wd%T&f5opugKFaM`HKCRU)gVXA zp1hGNrN+lac2THDz%QCpEJrv`@UUKtK2PBIQ#aQd09;chj0B?6OTRL@g!WdCGZ71q zh-N`gNh+*Vs(UzTpI=;4Q%S#ggg*2a=G7$v1;cjRlZO`g(RaT7(PN%X1+JzN$3aeC zo+aar1&XP)VOsc(4#7Msu2iUmP4z4TzR`y(4!AJ$r2aKqM)7w=iI8TnVn<`+>`q=E z_Eqz5Sq3zF_=^&!A#Uh34t1{Ss_fdt#736K&>(OU&=wOQdJx;XwI8n`Pedgzk?*d9MU*&$$`@b zpx9JeUiw^ps1tIRWfJ)WKmN!W5$8$hzw9o}h271r@O{t|ewz%T;R^f97GM48SKQ;) znz^WVkg~5s0tf8y0G1qc*eLwY2`|FH(*`MpBFoC2It;ODKd5$p;|{TT z@pem%6c`Bk>xtJ6gxk;;g2C3V+;nE*6ZcIOo2H8mZLxEWI12{n0m~)q=FELU+x__p z24&^q-7VKJ5l|M5BFE2z&%DJEd)gAYFLB0q6q7yU|f= zWmT$7cgI?&YiH{R-=Y(fcRSZrZu;gYVdO&98_%z4hbIGOz~HhpRCShrnsnb+5mz6}HMrLeB*F!%Td=~Z#^q-8p0c=XIPt~)qnf3%tzK;{pHN^! z%j&i^1;%eTKOJ05WC{z}cB2|PDJv*Uyu%JDj2dH2Yxsn~_#8@r{(`pWyd z#Sz=_`s*|!_WDSNZ&f?5uJ&cM-v{V06b$g+4@36rxW3 zY1lxN703=GsFX;j9!NJ54rGULidUOJP-g)u{#)M?Z9b7QMn2qD?-oT)y* za+crSkm(kTKIWiv}6htqt&j|yA0SgS#gvCw|64camMmvj! ztj84$gW9jSq0?dy2N#r$+-s|5TSa7aK$J+@EY3`Vp8VDFw(KY1 zD!D2ngz2}5b4x6a$wS$`1RATM=TQ9KO<6=iUggml+mowAtQ;6b*cSTFdtFaAb7-s2u{S z|8&Zw9xDZ$3b(`@iEy|_IGJsJjlw(N5X zV&c5Eo6MtL8H^ur>(uZR%ojh+?uMt#o8#6&6$VZ7-puoqvRLjZjAA+{P7O{fG``fg zas=w{TYX)@pVXsY1BQMOhfcZZyL0vYzL#Z{{`$7+_8OUUF@dPs!JNYhnP_1$(ryq? z$$A2@s<*Sr9|T+SGs}dBC7yxJ-v}&S%$Phv`0MDO+4drsF zV8@Qw(qnZ_&dVP`uu(&?!I5hO6zW!$iF0Wn8`4`)GhJ&|N-I`R+H<%JQFKCwHIZd+*YklfPMcZ)u^dRS^W*e(~o zR1M$wx-<`}xvk^>Je2q`V#<_7b3VhN+-gf!(~^$3@v`ppUQ%z2L;=wk7z`po)kYL* zNOg`|(K$mr*zK4Hx%_uPF){t8V*7sqrLJgVN~dUN_Yau@@(Q3YI6SWY!2k#fa`t4+>4x?>Sk#9RSE36#$cK z4?H*1;@CZw7VmxcL4 ld;`uBg@XO>QF3xNaCCNeG%@|BDV3d#35t|dL{1dy{{b6aBO?F+ literal 0 HcmV?d00001 diff --git a/lecture_09/mass_springs.svg b/lecture_09/mass_springs.svg new file mode 100644 index 0000000..2bec8a4 --- /dev/null +++ b/lecture_09/mass_springs.svg @@ -0,0 +1,214 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + m1 + m2 + m3 + + + m4 + + + + + + + + +