diff --git a/HW4/README.md b/HW4/README.md index 7f04a9a..4a06ed0 100644 --- a/HW4/README.md +++ b/HW4/README.md @@ -1,4 +1,4 @@ -# Homework #3 +# Homework #4 ## due 3/1/17 by 11:59pm diff --git a/HW5/README.html b/HW5/README.html new file mode 100644 index 0000000..96595a9 --- /dev/null +++ b/HW5/README.html @@ -0,0 +1,53 @@ + + + + + + + + + + + +

Homework #5

+

due 3/28/17 by 11:59pm

+

Include all work as either an m-file script, m-file function, or example code included with ``` and document your code in the README.md file

+
    +
  1. Create a new github repository called ‘linear_algebra’.

    +
      +
    1. Add rcc02007 and pez16103 as collaborators.

    2. +
    3. Clone the repository to your computer.

    4. +
  2. +
  3. Create an LU-decomposition function called lu_tridiag.m that takes 3 vectors as inputs and calculates the LU-decomposition of a tridiagonal matrix. The output should be 3 vectors, the diagonal of the Upper matrix, and the two off-diagonal vectors of the Lower and Upper matrices.

    +

    [ud,uo,lo]=lu_tridiag(e,f,g);

  4. +
  5. Use the output from lu_tridiag.m to create a forward substitution and back-substitution function called solve_tridiag.m that provides the solution of Ax=b given the vectors from the output of [ud,uo,lo]=lu_tridiag(e,f,g). Note: do not use the backslash solver \, create an algebraic solution

    +

    x=solve_tridiag(ud,uo,lo,b);

  6. +
  7. Test your function on the matrices A3, A4, …, A10 generated with test_arrays.m Solving for b=ones(N,1); where N is the size of A. In your README.md file, compare the norm of the error between your result and the result of AN.

  8. +
+
| size of A | norm(error) |
+|-----------|-------------|
+|  3 | ... |
+| 4 | ... |
+
+Spring-mass system for analysis +

Spring-mass system for analysis

+
+
    +
  1. In the system shown above, determine the three differential equations for the position of masses 1, 2, and 3. Solve for the vibrational modes of the spring-mass system if k1=10 N/m, k2=k3=20 N/m, and k4=10 N/m. The masses are m1=1 kg, m2=2 kg and m3=4 kg. Determine the eigenvalues and natural frequencies.

  2. +
  3. The curvature of a slender column subject to an axial load P (Fig. P13.10) can be modeled by

  4. +
+

\(\frac{d^{2}y}{dx^{2}} + p^{2} y = 0\)

+

where \(p^{2} = \frac{P}{EI}\)

+

where E = the modulus of elasticity, and I = the moment of inertia of the cross section about its neutral axis.

+

This model can be converted into an eigenvalue problem by substituting a centered finite-difference approximation for the second derivative to give \(\frac{y_{i+1} − 2y_{i} + y_{i−1} }{\Delta x^{2}}+ p^{2} y_{i}\)

+

where i = a node located at a position along the rod’s interior, and \(\Delta x\) = the spacing between nodes. This equation can be expressed as \(y_{i−1} − (2 − \Delta x^{2} p^{2} )y_{i} + y_{i+1} = 0\) Writing this equation for a series of interior nodes along the axis of the column yields a homogeneous system of equations. (See 13.10 for 4 interior-node example)

+

Determine the eigenvalues for a 5-segment (4-interior nodes), 6-segment (5-interior nodes), and 10-segment (9-interior nodes). Using the modulus and moment of inertia of a pole for pole-vaulting ( http://people.bath.ac.uk/taf21/sports_whole.htm) E=76E9 Pa, I=4E-8 m^4, and L= 5m.

+

Include a table in the README.md that shows the following results: What are the largest and smallest eigenvalues for the beam? How many eigenvalues are there?

+
| # of segments | largest | smallest | # of eigenvalues |
+| --- | --- | --- | --- |
+| 5 | ... | ... | ... |
+| 6 | ... | ... | ... |
+| 10 | ... | ... | ... |
+

If the segment length approaches 0, how many eigenvalues would there be?

+ + diff --git a/HW5/README.md b/HW5/README.md new file mode 100644 index 0000000..a8495ea --- /dev/null +++ b/HW5/README.md @@ -0,0 +1,83 @@ +# Homework #5 +## due 3/28/17 by 11:59pm + +*Include all work as either an m-file script, m-file function, or example code included +with \`\`\` and document your code in the README.md file* + +1. Create a new github repository called 'linear_algebra'. + + a. Add rcc02007 and pez16103 as collaborators. + + b. Clone the repository to your computer. + +2. Create an LU-decomposition function called `lu_tridiag.m` that takes 3 vectors as inputs +and calculates the LU-decomposition of a tridiagonal matrix. The output should be 3 +vectors, the diagonal of the Upper matrix, and the two off-diagonal vectors of the Lower +and Upper matrices. + + ```[ud,uo,lo]=lu_tridiag(e,f,g);``` + +3. Use the output from `lu_tridiag.m` to create a forward substitution and +back-substitution function called `solve_tridiag.m` that provides the solution of +Ax=b given the vectors from the output of [ud,uo,lo]=lu_tridiag(e,f,g). *Note: do not use +the backslash solver `\`, create an algebraic solution* + + ```x=solve_tridiag(ud,uo,lo,b);``` + +4. Test your function on the matrices A3, A4, ..., A10 generated with `test_arrays.m` +Solving for `b=ones(N,1);` where N is the size of A. In your `README.md` file, compare +the norm of the error between your result and the result of AN\b. + +``` +| size of A | norm(error) | +|-----------|-------------| +| 3 | ... | +| 4 | ... | +``` + +![Spring-mass system for analysis](spring_mass.png) + +5. In the system shown above, determine the three differential equations for the position +of masses 1, 2, and 3. Solve for the vibrational modes of the spring-mass system if k1=10 +N/m, k2=k3=20 N/m, and k4=10 N/m. The masses are m1=1 kg, m2=2 kg and m3=4 kg. Determine +the eigenvalues and natural frequencies. + +6. The curvature of a slender column subject to an axial load P (Fig. P13.10) can be +modeled by + +$\frac{d^{2}y}{dx^{2}} + p^{2} y = 0$ + +where $p^{2} = \frac{P}{EI}$ + +where E = the modulus of elasticity, and I = the moment of inertia of the cross section +about its neutral axis. + +This model can be converted into an eigenvalue problem by +substituting a centered finite-difference approximation for the second derivative to give +$\frac{y_{i+1} -2y_{i} + y_{i-1} }{\Delta x^{2}}+ p^{2} y_{i}$ + +where i = a node located at a position along the rod’s interior, and $\Delta x$ = the +spacing between nodes. This equation can be expressed as $y_{i-1} - (2 - \Delta x^{2} +p^{2} )y_{i} y_{i+1} = 0$ Writing this equation for a series of interior nodes along the +axis of the column yields a homogeneous system of equations. (See 13.10 for 4 +interior-node example) + +Determine the eigenvalues for a 5-segment (4-interior nodes), 6-segment (5-interior +nodes), and 10-segment (9-interior nodes). Using the modulus and moment of inertia of a +pole for pole-vaulting ( +[http://people.bath.ac.uk/taf21/sports_whole.htm](http://people.bath.ac.uk/taf21/sports_whole.htm)) +E=76E9 Pa, I=4E-8 m^4, and L= 5m. + +Include a table in the `README.md` that shows the following results: +What are the largest and smallest eigenvalues for the beam? How many eigenvalues are +there? + +``` +| # of segments | largest | smallest | # of eigenvalues | +| --- | --- | --- | --- | +| 5 | ... | ... | ... | +| 6 | ... | ... | ... | +| 10 | ... | ... | ... | +``` + +If the segment length ($\Delta x$) approaches 0, how many eigenvalues would there be? diff --git a/HW5/README.pdf b/HW5/README.pdf new file mode 100644 index 0000000..fdb31a3 Binary files /dev/null and b/HW5/README.pdf differ diff --git a/HW5/lu_tridiag.m b/HW5/lu_tridiag.m new file mode 100644 index 0000000..1339973 --- /dev/null +++ b/HW5/lu_tridiag.m @@ -0,0 +1,12 @@ +function [ud,uo,lo]=lu_tridiag(e,f,g);``` + % lu_tridiag calculates the components for LU-decomposition of a tridiagonal matrix + % given its off-diagonal vectors, e and g + % and diagonal vector f + % the output is + % the diagonal of the Upper matrix, ud + % the off-diagonal of the Upper matrix, uo + % and the off-diagonal of the Lower matrix, lo + % note: the diagonal of the Lower matrix is all ones + +end + diff --git a/HW5/solve_tridiag.m b/HW5/solve_tridiag.m new file mode 100644 index 0000000..0c9e510 --- /dev/null +++ b/HW5/solve_tridiag.m @@ -0,0 +1,11 @@ +function x=solve_tridiag(ud,uo,lo,b);``` + % solve_tridiag solves Ax=b for x + % given + % the diagonal of the Upper matrix, ud + % the off-diagonal of the Upper matrix, uo + % the off-diagonal of the Lower matrix, lo + % the vector b + % note: the diagonal of the Lower matrix is all ones + +end + diff --git a/HW5/spring_mass.png b/HW5/spring_mass.png new file mode 100644 index 0000000..274c049 Binary files /dev/null and b/HW5/spring_mass.png differ diff --git a/HW5/spring_mass.svg b/HW5/spring_mass.svg new file mode 100644 index 0000000..b854162 --- /dev/null +++ b/HW5/spring_mass.svg @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + x1 + x2 + x3 + + + + + m1 + m2 + m3 + k1 + k2 + k3 + k4 + + diff --git a/HW5/test_arrays.m b/HW5/test_arrays.m new file mode 100644 index 0000000..002d79c --- /dev/null +++ b/HW5/test_arrays.m @@ -0,0 +1,8 @@ +rand("seed",1); + +for i = 3:10 + e=sort(randi(6,[i-1,1])); + f=sort(randi(10,[i,1])); + g=sort(randi(9,[i-1,1])); + eval(['A',int2str(i),'=diag(f)+diag(e,-1)+diag(g,1);']); +end diff --git a/README.md b/README.md index 73ca14a..134beea 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Computational Mechanics ## ME 3255 Spring 2017 ### Github page: [https://github.uconn.edu/rcc02007/ME3255S2017.git] +### Public (ipynb rendering)[https://github.com/cooperrc/ME3255S2017] ### Course Description This course introduces students to scientific programming utilizing Matlab/Octave. @@ -48,7 +49,7 @@ Jupiter notebook (with matlab or octave kernel) ### Note on Homework and online forms -The Homeworks are graded based upon effort and completeness. The forms are not graded at +The Homeworks are graded based upon effort, correctness, and completeness. The forms are not graded at all, if they are completed you get credit. It is *your* responsibility to make sure your answers are correct. Use the homeworks and forms as a study guide for the exams. In general, I will not post homework solutions. @@ -79,10 +80,10 @@ general, I will not post homework solutions. | |2/16|8|Linear Algebra| |6|2/21|9|Linear systems: Gauss elimination| | |2/23|10|Linear Systems: LU factorization| -|7|2/28||Midterm Review| -| |3/2||Midterm| -|8|3/7|11|Linear Systems: Error analysis| -| |3/9|13|Eigenvalues| +|7|2/28|11|Linear Systems: Error analysis| +| |3/2|12|Eigenvalues| +|8|3/7|1-10 |Midterm Review| +| |3/9|1-10|Midterm| |9|3/14| N/A |Spring Break!| | |3/16| N/A |Spring Break!| |10|3/21|12|Linear Systems: Iterative methods| diff --git a/lecture_01/lecture_01.ipynb b/lecture_01/lecture_01.ipynb new file mode 100644 index 0000000..307bc0c --- /dev/null +++ b/lecture_01/lecture_01.ipynb @@ -0,0 +1,366 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Freefall Model\n", + "## Octave solution (will run same on Matlab)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "set (0, \"defaultaxesfontname\", \"Helvetica\")\n", + "set (0, \"defaultaxesfontsize\", 18)\n", + "set (0, \"defaulttextfontname\", \"Helvetica\")\n", + "set (0, \"defaulttextfontsize\", 18) \n", + "set (0, \"defaultlinelinewidth\", 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define time from 0 to 12 seconds" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "t =\n", + "\n", + " 0\n", + " 2\n", + " 4\n", + " 6\n", + " 8\n", + " 10\n", + " 12\n", + "\n" + ] + } + ], + "source": [ + "t=[0,2,4,6,8,10,12]'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define constants and analytical solution (meters-kilogram-sec)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v_analytical =\n", + "\n", + " 0.00000\n", + " 18.61630\n", + " 32.45521\n", + " 40.64183\n", + " 44.84646\n", + " 46.84974\n", + " 47.77002\n", + "\n" + ] + } + ], + "source": [ + "c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c);\n", + "\n", + "v_analytical = v_terminal*tanh(g*t/v_terminal)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v_numerical =\n", + "\n", + " 0.00000\n", + " 19.62000\n", + " 36.03213\n", + " 44.83284\n", + " 47.70298\n", + " 48.35986\n", + " 48.49089\n", + "\n" + ] + } + ], + "source": [ + "v_numerical=zeros(length(t),1);\n", + "for i=1:length(t)-1\n", + " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*2;\n", + "end\n", + "v_numerical" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Display time, velocity (analytical) and velocity (numerical)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)|vel analytical (m/s)|vel numerical (m/s)\n", + "-----------------------------------------------\n", + " 0.0 | 0.00 | 0.00\n", + " 2.0 | 18.62 | 19.62\n", + " 4.0 | 32.46 | 36.03\n", + " 6.0 | 40.64 | 44.83\n", + " 8.0 | 44.85 | 47.70\n", + " 10.0 | 46.85 | 48.36\n", + " 12.0 | 47.77 | 48.49\n" + ] + } + ], + "source": [ + "fprintf('time (s)|vel analytical (m/s)|vel numerical (m/s)\\n')\n", + "fprintf('-----------------------------------------------')\n", + "M=[t,v_analytical,v_numerical];\n", + "fprintf('%7.1f | %18.2f | %15.2f\\n',M(:,1:3)');" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t12\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(t,v_analytical,'-',t,v_numerical,'o-')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_02/lecture_02.ipynb b/lecture_02/lecture_02.ipynb index 3e0a9e6..e34d82f 100644 --- a/lecture_02/lecture_02.ipynb +++ b/lecture_02/lecture_02.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -18,15 +18,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "ans =\n", - "\n", - " 1 2 3\n", - "\n" + "ans = 14\r\n" ] } ], "source": [ - "[1,2,3]" + "[1,2,3]*[1;2;3]" ] }, { diff --git a/lecture_04/lecture_4.ipynb b/lecture_04/lecture_4.ipynb new file mode 100644 index 0000000..7ba7af7 --- /dev/null +++ b/lecture_04/lecture_4.ipynb @@ -0,0 +1,913 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## When using the command prompt, anything in your path or working directory can be run either as a script, function or class (to define objects)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Questions from last class:\n", + "- I downloaded GitHub to my desktop but I cannot sign into my UConn account like I can online. \n", + "- I checked my grades on HuskyCt recently and I received a 0 / 100 for Homework 1.\n", + "- It is very hard to tell if what I'm doing on github is right or wrong.\n", + "- How often will be using our laptops during the lecture?\n", + "- How many frogs would it take to move a car that is stuck in the snow? And what would be the approximate cost to do so\n", + "\n", + "$m_{frog}$=22.7 g (https://en.wikipedia.org/wiki/Common_frog)\n", + "\n", + "$v_{frog}$=17 kph = 4.72 m/s (http://purelyfacts.com/question/14/is-a-toad-faster-than-a-frog?DDA=113&DDB=40)\n", + "\n", + "$m_{car}$=1000 kg (reasonable guess)\n", + "\n", + "conservation of momentum:\n", + "\n", + "$mv_{1} +mv_{2} = mv_{1}'+mv_{2}' = m_{total}v_{2}'$" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number_of_frogs =\n", + "\n", + " 5221\n" + ] + } + ], + "source": [ + "number_of_frogs = 1;\n", + "v2=0;\n", + "while v2 < 0.5 % 0.5 m/s\n", + " m_frogs=number_of_frogs*22.7e-3;\n", + " number_of_frogs=number_of_frogs+1;\n", + " p1=(m_frogs)*4.72; % momentum 1\n", + " v2=p1/(m_frogs+1000); % p2=p1, so v2=p1/m_total\n", + "end\n", + "number_of_frogs\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "That seems better\n" + ] + } + ], + "source": [ + "if 1==2\n", + " fprintf('I dont think so')\n", + "elseif 1==1\n", + " fprintf('That seems better')\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%myscript" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When using the GUI, your command history is saved, but it is better to save your work either as a script or a function or combination of both\n", + "\n", + "Creating a default graph script: `setdefaults.m`\n", + "\n", + "```matlab\n", + "set(0, 'defaultAxesFontSize', 16)\n", + "set(0,'defaultTextFontSize',14)\n", + "set(0,'defaultLineLineWidth',3)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "set(0, 'defaultAxesFontSize', 16)\n", + "set(0,'defaultTextFontSize',14)\n", + "set(0,'defaultLineLineWidth',3)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t_linear=linspace(0,10,100);\n", + "plot(t_linear,t_linear.^2)\n", + "xlabel('time (s)')\n", + "ylabel('displacement (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#EOL" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Graphics can be produced with a number of functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2-D plots, 3-D plots, contour plots, 3D contour plots ... " + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z =\n", + "\n", + " Columns 1 through 7\n", + "\n", + " 0 0.1710 0.2880 0.3570 0.3840 0.3750 0.3360\n", + " -0.1710 0 0.1224 0.2016 0.2430 0.2520 0.2340\n", + " -0.2880 -0.1224 0 0.0840 0.1344 0.1560 0.1536\n", + " -0.3570 -0.2016 -0.0840 0 0.0546 0.0840 0.0924\n", + " -0.3840 -0.2430 -0.1344 -0.0546 0 0.0330 0.0480\n", + " -0.3750 -0.2520 -0.1560 -0.0840 -0.0330 0 0.0180\n", + " -0.3360 -0.2340 -0.1536 -0.0924 -0.0480 -0.0180 0\n", + " -0.2730 -0.1944 -0.1320 -0.0840 -0.0486 -0.0240 -0.0084\n", + " -0.1920 -0.1386 -0.0960 -0.0630 -0.0384 -0.0210 -0.0096\n", + " -0.0990 -0.0720 -0.0504 -0.0336 -0.0210 -0.0120 -0.0060\n", + " 0 0 0 0 0 0 0\n", + " 0.0990 0.0720 0.0504 0.0336 0.0210 0.0120 0.0060\n", + " 0.1920 0.1386 0.0960 0.0630 0.0384 0.0210 0.0096\n", + " 0.2730 0.1944 0.1320 0.0840 0.0486 0.0240 0.0084\n", + " 0.3360 0.2340 0.1536 0.0924 0.0480 0.0180 0.0000\n", + " 0.3750 0.2520 0.1560 0.0840 0.0330 0 -0.0180\n", + " 0.3840 0.2430 0.1344 0.0546 -0.0000 -0.0330 -0.0480\n", + " 0.3570 0.2016 0.0840 0 -0.0546 -0.0840 -0.0924\n", + " 0.2880 0.1224 0 -0.0840 -0.1344 -0.1560 -0.1536\n", + " 0.1710 0.0000 -0.1224 -0.2016 -0.2430 -0.2520 -0.2340\n", + " 0 -0.1710 -0.2880 -0.3570 -0.3840 -0.3750 -0.3360\n", + "\n", + " Columns 8 through 14\n", + "\n", + " 0.2730 0.1920 0.0990 0 -0.0990 -0.1920 -0.2730\n", + " 0.1944 0.1386 0.0720 0 -0.0720 -0.1386 -0.1944\n", + " 0.1320 0.0960 0.0504 0 -0.0504 -0.0960 -0.1320\n", + " 0.0840 0.0630 0.0336 0 -0.0336 -0.0630 -0.0840\n", + " 0.0486 0.0384 0.0210 0 -0.0210 -0.0384 -0.0486\n", + " 0.0240 0.0210 0.0120 0 -0.0120 -0.0210 -0.0240\n", + " 0.0084 0.0096 0.0060 0 -0.0060 -0.0096 -0.0084\n", + " 0 0.0030 0.0024 0 -0.0024 -0.0030 0\n", + " -0.0030 0 0.0006 0 -0.0006 0 0.0030\n", + " -0.0024 -0.0006 0 0 0.0000 0.0006 0.0024\n", + " 0 0 0 0 0 0 0\n", + " 0.0024 0.0006 -0.0000 0 0 -0.0006 -0.0024\n", + " 0.0030 0 -0.0006 0 0.0006 0 -0.0030\n", + " 0 -0.0030 -0.0024 0 0.0024 0.0030 0\n", + " -0.0084 -0.0096 -0.0060 0 0.0060 0.0096 0.0084\n", + " -0.0240 -0.0210 -0.0120 0 0.0120 0.0210 0.0240\n", + " -0.0486 -0.0384 -0.0210 0 0.0210 0.0384 0.0486\n", + " -0.0840 -0.0630 -0.0336 0 0.0336 0.0630 0.0840\n", + " -0.1320 -0.0960 -0.0504 0 0.0504 0.0960 0.1320\n", + " -0.1944 -0.1386 -0.0720 0 0.0720 0.1386 0.1944\n", + " -0.2730 -0.1920 -0.0990 0 0.0990 0.1920 0.2730\n", + "\n", + " Columns 15 through 21\n", + "\n", + " -0.3360 -0.3750 -0.3840 -0.3570 -0.2880 -0.1710 0\n", + " -0.2340 -0.2520 -0.2430 -0.2016 -0.1224 -0.0000 0.1710\n", + " -0.1536 -0.1560 -0.1344 -0.0840 0 0.1224 0.2880\n", + " -0.0924 -0.0840 -0.0546 0 0.0840 0.2016 0.3570\n", + " -0.0480 -0.0330 0.0000 0.0546 0.1344 0.2430 0.3840\n", + " -0.0180 0 0.0330 0.0840 0.1560 0.2520 0.3750\n", + " -0.0000 0.0180 0.0480 0.0924 0.1536 0.2340 0.3360\n", + " 0.0084 0.0240 0.0486 0.0840 0.1320 0.1944 0.2730\n", + " 0.0096 0.0210 0.0384 0.0630 0.0960 0.1386 0.1920\n", + " 0.0060 0.0120 0.0210 0.0336 0.0504 0.0720 0.0990\n", + " 0 0 0 0 0 0 0\n", + " -0.0060 -0.0120 -0.0210 -0.0336 -0.0504 -0.0720 -0.0990\n", + " -0.0096 -0.0210 -0.0384 -0.0630 -0.0960 -0.1386 -0.1920\n", + " -0.0084 -0.0240 -0.0486 -0.0840 -0.1320 -0.1944 -0.2730\n", + " 0 -0.0180 -0.0480 -0.0924 -0.1536 -0.2340 -0.3360\n", + " 0.0180 0 -0.0330 -0.0840 -0.1560 -0.2520 -0.3750\n", + " 0.0480 0.0330 0 -0.0546 -0.1344 -0.2430 -0.3840\n", + " 0.0924 0.0840 0.0546 0 -0.0840 -0.2016 -0.3570\n", + " 0.1536 0.1560 0.1344 0.0840 0 -0.1224 -0.2880\n", + " 0.2340 0.2520 0.2430 0.2016 0.1224 0 -0.1710\n", + " 0.3360 0.3750 0.3840 0.3570 0.2880 0.1710 0\n" + ] + } + ], + "source": [ + "x=linspace(-1,1,21); y=linspace(-1,1,21);\n", + "[X,Y]=meshgrid(x,y);\n", + "Z=(X.*Y.^3-X.^3.*Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MESHGRID Cartesian grid in 2-D/3-D space\n", + " [X,Y] = MESHGRID(xgv,ygv) replicates the grid vectors xgv and ygv to \n", + " produce the coordinates of a rectangular grid (X, Y). The grid vector\n", + " xgv is replicated numel(ygv) times to form the columns of X. The grid \n", + " vector ygv is replicated numel(xgv) times to form the rows of Y.\n", + " \n", + " [X,Y,Z] = MESHGRID(xgv,ygv,zgv) replicates the grid vectors xgv, ygv, zgv \n", + " to produce the coordinates of a 3D rectangular grid (X, Y, Z). The grid \n", + " vectors xgv,ygv,zgv form the columns of X, rows of Y, and pages of Z \n", + " respectively. (X,Y,Z) are of size numel(ygv)-by-numel(xgv)-by(numel(zgv).\n", + " \n", + " [X,Y] = MESHGRID(gv) is equivalent to [X,Y] = MESHGRID(gv,gv).\n", + " [X,Y,Z] = MESHGRID(gv) is equivalent to [X,Y,Z] = MESHGRID(gv,gv,gv).\n", + " \n", + " The coordinate arrays are typically used for the evaluation of functions \n", + " of two or three variables and for surface and volumetric plots.\n", + " \n", + " MESHGRID and NDGRID are similar, though MESHGRID is restricted to 2-D \n", + " and 3-D while NDGRID supports 1-D to N-D. In 2-D and 3-D the coordinates \n", + " output by each function are the same, the difference is the shape of the \n", + " output arrays. For grid vectors xgv, ygv and zgv of length M, N and P \n", + " respectively, NDGRID(xgv, ygv) will output arrays of size M-by-N while \n", + " MESHGRID(xgv, ygv) outputs arrays of size N-by-M. Similarly, \n", + " NDGRID(xgv, ygv, zgv) will output arrays of size M-by-N-by-P while \n", + " MESHGRID(xgv, ygv, zgv) outputs arrays of size N-by-M-by-P. \n", + " \n", + " Example: Evaluate the function x*exp(-x^2-y^2) \n", + " over the range -2 < x < 2, -4 < y < 4,\n", + " \n", + " [X,Y] = meshgrid(-2:.2:2, -4:.4:4);\n", + " Z = X .* exp(-X.^2 - Y.^2);\n", + " surf(X,Y,Z)\n", + " \n", + " \n", + " Class support for inputs xgv,ygv,zgv:\n", + " float: double, single\n", + " integer: uint8, int8, uint16, int16, uint32, int32, uint64, int64\n", + " \n", + " See also SURF, SLICE, NDGRID.\n", + "\n", + " Reference page in Doc Center\n", + " doc meshgrid\n", + "\n", + " Other functions named meshgrid\n", + "\n", + " codistributed/meshgrid gpuArray/meshgrid\n" + ] + } + ], + "source": [ + "help meshgrid" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Y =\n", + "\n", + " Columns 1 through 7\n", + "\n", + " -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000\n", + " -0.9000 -0.9000 -0.9000 -0.9000 -0.9000 -0.9000 -0.9000\n", + " -0.8000 -0.8000 -0.8000 -0.8000 -0.8000 -0.8000 -0.8000\n", + " -0.7000 -0.7000 -0.7000 -0.7000 -0.7000 -0.7000 -0.7000\n", + " -0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000\n", + " -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000\n", + " -0.4000 -0.4000 -0.4000 -0.4000 -0.4000 -0.4000 -0.4000\n", + " -0.3000 -0.3000 -0.3000 -0.3000 -0.3000 -0.3000 -0.3000\n", + " -0.2000 -0.2000 -0.2000 -0.2000 -0.2000 -0.2000 -0.2000\n", + " -0.1000 -0.1000 -0.1000 -0.1000 -0.1000 -0.1000 -0.1000\n", + " 0 0 0 0 0 0 0\n", + " 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000\n", + " 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000\n", + " 0.3000 0.3000 0.3000 0.3000 0.3000 0.3000 0.3000\n", + " 0.4000 0.4000 0.4000 0.4000 0.4000 0.4000 0.4000\n", + " 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000\n", + " 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000\n", + " 0.7000 0.7000 0.7000 0.7000 0.7000 0.7000 0.7000\n", + " 0.8000 0.8000 0.8000 0.8000 0.8000 0.8000 0.8000\n", + " 0.9000 0.9000 0.9000 0.9000 0.9000 0.9000 0.9000\n", + " 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000\n", + "\n", + " Columns 8 through 14\n", + "\n", + " -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000\n", + " -0.9000 -0.9000 -0.9000 -0.9000 -0.9000 -0.9000 -0.9000\n", + " -0.8000 -0.8000 -0.8000 -0.8000 -0.8000 -0.8000 -0.8000\n", + " -0.7000 -0.7000 -0.7000 -0.7000 -0.7000 -0.7000 -0.7000\n", + " -0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000\n", + " -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000\n", + " -0.4000 -0.4000 -0.4000 -0.4000 -0.4000 -0.4000 -0.4000\n", + " -0.3000 -0.3000 -0.3000 -0.3000 -0.3000 -0.3000 -0.3000\n", + " -0.2000 -0.2000 -0.2000 -0.2000 -0.2000 -0.2000 -0.2000\n", + " -0.1000 -0.1000 -0.1000 -0.1000 -0.1000 -0.1000 -0.1000\n", + " 0 0 0 0 0 0 0\n", + " 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000\n", + " 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000\n", + " 0.3000 0.3000 0.3000 0.3000 0.3000 0.3000 0.3000\n", + " 0.4000 0.4000 0.4000 0.4000 0.4000 0.4000 0.4000\n", + " 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000\n", + " 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000\n", + " 0.7000 0.7000 0.7000 0.7000 0.7000 0.7000 0.7000\n", + " 0.8000 0.8000 0.8000 0.8000 0.8000 0.8000 0.8000\n", + " 0.9000 0.9000 0.9000 0.9000 0.9000 0.9000 0.9000\n", + " 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000\n", + "\n", + " Columns 15 through 21\n", + "\n", + " -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000\n", + " -0.9000 -0.9000 -0.9000 -0.9000 -0.9000 -0.9000 -0.9000\n", + " -0.8000 -0.8000 -0.8000 -0.8000 -0.8000 -0.8000 -0.8000\n", + " -0.7000 -0.7000 -0.7000 -0.7000 -0.7000 -0.7000 -0.7000\n", + " -0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000\n", + " -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000\n", + " -0.4000 -0.4000 -0.4000 -0.4000 -0.4000 -0.4000 -0.4000\n", + " -0.3000 -0.3000 -0.3000 -0.3000 -0.3000 -0.3000 -0.3000\n", + " -0.2000 -0.2000 -0.2000 -0.2000 -0.2000 -0.2000 -0.2000\n", + " -0.1000 -0.1000 -0.1000 -0.1000 -0.1000 -0.1000 -0.1000\n", + " 0 0 0 0 0 0 0\n", + " 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000\n", + " 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000 0.2000\n", + " 0.3000 0.3000 0.3000 0.3000 0.3000 0.3000 0.3000\n", + " 0.4000 0.4000 0.4000 0.4000 0.4000 0.4000 0.4000\n", + " 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000\n", + " 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000 0.6000\n", + " 0.7000 0.7000 0.7000 0.7000 0.7000 0.7000 0.7000\n", + " 0.8000 0.8000 0.8000 0.8000 0.8000 0.8000 0.8000\n", + " 0.9000 0.9000 0.9000 0.9000 0.9000 0.9000 0.9000\n", + " 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000\n" + ] + } + ], + "source": [ + "Y" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "contour(X,Y,Z)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n1gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mesh(X,Y,Z)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[0;31mOperands to the || and && operators must be convertible to logical scalar values.\n", + "\u001b[0m" + ] + } + ], + "source": [ + "pcolor(X,Y,Z)\n", + "colorbar([0 0 0],[1,1,1])" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "COLORMAP Color look-up table.\n", + " COLORMAP(MAP) sets the current figure's colormap to MAP.\n", + " COLORMAP('default') sets the current figure's colormap to\n", + " the root's default, whose setting is PARULA.\n", + " MAP = COLORMAP returns the three-column matrix of RGB triplets defining \n", + " the colormap for the current figure.\n", + " COLORMAP(FIG,...) sets the colormap for the figure specified by FIG.\n", + " COLORMAP(AX,...) sets the colormap for the axes specified by AX. \n", + " Each axes within a figure can have a unique colormap. After you set\n", + " an axes colormap, changing the figure colormap does not affect the axes.\n", + " MAP = COLORMAP(FIG) returns the colormap for the figure specified by FIG.\n", + " MAP = COLORMAP(AX) returns the colormap for the axes specified by AX.\n", + " \n", + " A color map matrix may have any number of rows, but it must have\n", + " exactly 3 columns. Each row is interpreted as a color, with the\n", + " first element specifying the intensity of red light, the second\n", + " green, and the third blue. Color intensity can be specified on the\n", + " interval 0.0 to 1.0.\n", + " For example, [0 0 0] is black, [1 1 1] is white,\n", + " [1 0 0] is pure red, [.5 .5 .5] is gray, and\n", + " [127/255 1 212/255] is aquamarine.\n", + " \n", + " Graphics objects that use pseudocolor -- SURFACE and PATCH objects,\n", + " which are created by the functions MESH, SURF, and PCOLOR -- map\n", + " a color matrix, C, whose values are in the range [Cmin, Cmax],\n", + " to an array of indices, k, in the range [1, m].\n", + " The values of Cmin and Cmax are either min(min(C)) and max(max(C)),\n", + " or are specified by CAXIS. The mapping is linear, with Cmin\n", + " mapping to index 1 and Cmax mapping to index m. The indices are\n", + " then used with the colormap to determine the color associated\n", + " with each matrix element. See CAXIS for details.\n", + " \n", + " Type HELP GRAPH3D to see a number of useful colormaps.\n", + " \n", + " COLORMAP is a function that sets the Colormap property of a figure.\n", + " \n", + " See also HSV, CAXIS, SPINMAP, BRIGHTEN, RGBPLOT, FIGURE, COLORMAPEDITOR.\n", + "\n", + " Reference page in Doc Center\n", + " doc colormap\n" + ] + } + ], + "source": [ + "help colormap" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far, everything has been executed as a script, or calling a built-in function. Now we begin building our own functions.\n", + "\n", + "Functions are saved in memory (or better yet) in a folder in your path or current directory\n", + "\n", + "Example of storing function in memory\n", + "\n", + "$f(x,y) = (xy^{3}-x^{3}y)$" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "f = \n", + "\n", + " @(x,y)(x.*y.^3-x.^3.*y)\n" + ] + } + ], + "source": [ + "f= @(x,y) (x.*y.^3-x.^3.*y)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " Columns 1 through 7\n", + "\n", + " 0 0.1710 0.2880 0.3570 0.3840 0.3750 0.3360\n", + " -0.1710 0 0.1224 0.2016 0.2430 0.2520 0.2340\n", + " -0.2880 -0.1224 0 0.0840 0.1344 0.1560 0.1536\n", + " -0.3570 -0.2016 -0.0840 0 0.0546 0.0840 0.0924\n", + " -0.3840 -0.2430 -0.1344 -0.0546 0 0.0330 0.0480\n", + " -0.3750 -0.2520 -0.1560 -0.0840 -0.0330 0 0.0180\n", + " -0.3360 -0.2340 -0.1536 -0.0924 -0.0480 -0.0180 0\n", + " -0.2730 -0.1944 -0.1320 -0.0840 -0.0486 -0.0240 -0.0084\n", + " -0.1920 -0.1386 -0.0960 -0.0630 -0.0384 -0.0210 -0.0096\n", + " -0.0990 -0.0720 -0.0504 -0.0336 -0.0210 -0.0120 -0.0060\n", + " 0 0 0 0 0 0 0\n", + " 0.0990 0.0720 0.0504 0.0336 0.0210 0.0120 0.0060\n", + " 0.1920 0.1386 0.0960 0.0630 0.0384 0.0210 0.0096\n", + " 0.2730 0.1944 0.1320 0.0840 0.0486 0.0240 0.0084\n", + " 0.3360 0.2340 0.1536 0.0924 0.0480 0.0180 0.0000\n", + " 0.3750 0.2520 0.1560 0.0840 0.0330 0 -0.0180\n", + " 0.3840 0.2430 0.1344 0.0546 -0.0000 -0.0330 -0.0480\n", + " 0.3570 0.2016 0.0840 0 -0.0546 -0.0840 -0.0924\n", + " 0.2880 0.1224 0 -0.0840 -0.1344 -0.1560 -0.1536\n", + " 0.1710 0.0000 -0.1224 -0.2016 -0.2430 -0.2520 -0.2340\n", + " 0 -0.1710 -0.2880 -0.3570 -0.3840 -0.3750 -0.3360\n", + "\n", + " Columns 8 through 14\n", + "\n", + " 0.2730 0.1920 0.0990 0 -0.0990 -0.1920 -0.2730\n", + " 0.1944 0.1386 0.0720 0 -0.0720 -0.1386 -0.1944\n", + " 0.1320 0.0960 0.0504 0 -0.0504 -0.0960 -0.1320\n", + " 0.0840 0.0630 0.0336 0 -0.0336 -0.0630 -0.0840\n", + " 0.0486 0.0384 0.0210 0 -0.0210 -0.0384 -0.0486\n", + " 0.0240 0.0210 0.0120 0 -0.0120 -0.0210 -0.0240\n", + " 0.0084 0.0096 0.0060 0 -0.0060 -0.0096 -0.0084\n", + " 0 0.0030 0.0024 0 -0.0024 -0.0030 0\n", + " -0.0030 0 0.0006 0 -0.0006 0 0.0030\n", + " -0.0024 -0.0006 0 0 0.0000 0.0006 0.0024\n", + " 0 0 0 0 0 0 0\n", + " 0.0024 0.0006 -0.0000 0 0 -0.0006 -0.0024\n", + " 0.0030 0 -0.0006 0 0.0006 0 -0.0030\n", + " 0 -0.0030 -0.0024 0 0.0024 0.0030 0\n", + " -0.0084 -0.0096 -0.0060 0 0.0060 0.0096 0.0084\n", + " -0.0240 -0.0210 -0.0120 0 0.0120 0.0210 0.0240\n", + " -0.0486 -0.0384 -0.0210 0 0.0210 0.0384 0.0486\n", + " -0.0840 -0.0630 -0.0336 0 0.0336 0.0630 0.0840\n", + " -0.1320 -0.0960 -0.0504 0 0.0504 0.0960 0.1320\n", + " -0.1944 -0.1386 -0.0720 0 0.0720 0.1386 0.1944\n", + " -0.2730 -0.1920 -0.0990 0 0.0990 0.1920 0.2730\n", + "\n", + " Columns 15 through 21\n", + "\n", + " -0.3360 -0.3750 -0.3840 -0.3570 -0.2880 -0.1710 0\n", + " -0.2340 -0.2520 -0.2430 -0.2016 -0.1224 -0.0000 0.1710\n", + " -0.1536 -0.1560 -0.1344 -0.0840 0 0.1224 0.2880\n", + " -0.0924 -0.0840 -0.0546 0 0.0840 0.2016 0.3570\n", + " -0.0480 -0.0330 0.0000 0.0546 0.1344 0.2430 0.3840\n", + " -0.0180 0 0.0330 0.0840 0.1560 0.2520 0.3750\n", + " -0.0000 0.0180 0.0480 0.0924 0.1536 0.2340 0.3360\n", + " 0.0084 0.0240 0.0486 0.0840 0.1320 0.1944 0.2730\n", + " 0.0096 0.0210 0.0384 0.0630 0.0960 0.1386 0.1920\n", + " 0.0060 0.0120 0.0210 0.0336 0.0504 0.0720 0.0990\n", + " 0 0 0 0 0 0 0\n", + " -0.0060 -0.0120 -0.0210 -0.0336 -0.0504 -0.0720 -0.0990\n", + " -0.0096 -0.0210 -0.0384 -0.0630 -0.0960 -0.1386 -0.1920\n", + " -0.0084 -0.0240 -0.0486 -0.0840 -0.1320 -0.1944 -0.2730\n", + " 0 -0.0180 -0.0480 -0.0924 -0.1536 -0.2340 -0.3360\n", + " 0.0180 0 -0.0330 -0.0840 -0.1560 -0.2520 -0.3750\n", + " 0.0480 0.0330 0 -0.0546 -0.1344 -0.2430 -0.3840\n", + " 0.0924 0.0840 0.0546 0 -0.0840 -0.2016 -0.3570\n", + " 0.1536 0.1560 0.1344 0.0840 0 -0.1224 -0.2880\n", + " 0.2340 0.2520 0.2430 0.2016 0.1224 0 -0.1710\n", + " 0.3360 0.3750 0.3840 0.3570 0.2880 0.1710 0\n" + ] + } + ], + "source": [ + "f(X,Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we will save a function called `my_function` as `my_function.m`\n", + "\n", + "```matlab \n", + "function [vx,vy] = my_function(x,y,t)\n", + " % Help documentation of \"my_function\"\n", + " % This function computes the velocity in the x- and y-directions given\n", + " % three vectors of position in x- and y-directions as a function of time\n", + " % x = x-position\n", + " % y = y-position\n", + " % t = time\n", + " % output\n", + " % vx = velocity in x-direction\n", + " % vy = velocity in y-direction\n", + " \n", + " vx=zeros(length(t),1);\n", + " vy=zeros(length(t),1);\n", + " \n", + " vx(1:end-1) = diff(x)./diff(t); % calculate vx as delta x/delta t\n", + " vy(1:end-1) = diff(y)./diff(t); % calculate vy as delta y/delta t\n", + " \n", + " vx(end) = vx(end-1);\n", + " vy(end) = vy(end-1);\n", + "\n", + "end\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help documentation of \"my_function\"\n", + " This function computes the velocity in the x- and y-directions given\n", + " three vectors of position in x- and y-directions as a function of time\n", + " x = x-position\n", + " y = y-position\n", + " t = time\n", + " output\n", + " vx = velocity in x-direction\n", + " vy = velocity in y-direction\n" + ] + } + ], + "source": [ + "help my_function" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "t=linspace(0,10,100)'; \n", + "x=t.^3; % vx = 3*t^2\n", + "y=t.^2/2; % vy = t\n", + "[vx,vy]=my_function(x,y,t);" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\niYi9ehErWj58ibeK5YO/soL74RRhCIHkA49kj5VGSIhoT22r+4lHG/bUs13s5FLJw1enCXwO6yex\nMTRDuopthMpG1UoLZgiEGQCIk+qm+yhCSkRd3+93P/Go9d+b2baqEqk8/kc/D0D7RAYnxvrG73aa\nnvr4KCv/fFZKnl4zPWVE5YmOVyqaXt7Xd7jk//2/8auu1QasiQAQCC3bn23Z+gwrx11zR2zObVHa\nKd2137Ub32r79HV2fdTtj6kXPRy4NooFAslnlr5x8JWKJk9375mp+fttQ9mxFACCXdP6h9t3v+Xp\nbtz8JaML/uLP9ogWAsmXXvqi4Xc7auvbup0vjlUpVi/QuR9tDgDho23nP1q2P2truWjXLtmoMaNu\n+xXeHnEQSAAAIAqY1AAAAKKAQAIAAFFAIAEAgCggkAAAQBSwdZDo2O32L7744uTJk01NTSkpKYmJ\nibNnz46IwK8OQcNut/f29vZbTSqV4h+r2PT29trtdiKKiIiQSqWDehbfXO8hkMTlH//4R3FxcUvL\nRWe2jho1atmyZXfccUegWgWD8uGHHz766KP9VnvhhReuvfZaP7QHBPT09JSVlR05cuSbb7756quv\nmpr6lhLefPPNTz/99MA/B99cn0AgicjDDz/88cc8232fPn26qKjowIEDf/7zn/3fKoBQtWPHjgcf\nfND7z8E311cQSGKxYcMG7t/pvLy8m2++WavVmkymt99++9VXXyWiDz/8cPz48QUFBQFtJgzCuHHj\npk7lPaGeiGj06NH+bAy4s9lcD9WUSqUDGW51hm+uDyGQRMFkMhUXF7Py73//+0WL+nYInjx58hNP\nPHHJJZc89dRTRLRhw4abbropLU1oh1YQj6uuuor9gwPRSk5Ovuyyy6ZOnZqRkTF79uw1a9a89ZbH\nPX5cmEwmIsI314fwwk0UNm3axH4vmz17NvfvNOe2226bOXMmEfX29r7yyisBaB9AKLrhhht27979\n3HPP/eIXv8jJyVEqlYN6fNOmTfjm+hYCKfDsdvs///lPVr7nnnt46+Tn57PCu+++y2YBAUAAsa8t\nvrm+hUAKvIqKirNnzxKRTCabN28eb53s7GyZTEZEHR0d3377rV/bBwBu2NcW31zfQiAF3vfff88K\nU6dO9bRqQSqVTps2zaU+AASK89cQ31xfQSAFXlVVFSuMGTNGoFpKSgor4PesYHHw4MFHHnnk+uuv\n1+v18+fPf+CBB4qLi+vq+M+5h+DCfW0J31zfwSy7wOvo6GCF2NhYgWrcXa4+iFxlZWVlZSUrt7e3\nnzhxYufOnc8999yiRYsef/xx4X/cIHLOX0N8c30FPaTA6+npYYVx48YJVNPpdKxw7ty5YW8T+EhM\nTMyUKVMSEhIiIyO5i2+//faSJUvMZnMAGwZe4r62hG+u76CHFHjc6ryRI0cKVIuJiWEFzNUROalU\nesstt1xzzTXZ2dlyuZxdtNvtFRUV69ev379/PxHV1NSsWLFiy5YtAW0pDJ3zolp8c30FPSQAH7vx\nxhv/8Ic/XHvttVwaEVFERMTMmTNfffXVn/70p+zKF198sWvXrgC1EUCMEEiBx2aFUn9DzNxd7B8c\n1J544okpU6aw8sA3BQCx4b62hG+u7+BvUOBxv0cfO3ZMoBp31/ltBASju+66ixXKysoC2xIYMufu\nL765voJACjxuALq9vV2gGndXeMAaxI/bcdVqtQ52K08QCeevIb65voJACrzMzExWEF6hcuLECVbg\n1tlBkEpMTOTKeNEdpLivLeGb6zsIpMCbNGkSKxw8eNDT78u9vb3fffedS30IUtwCSalUOthjSUEk\nnL+G+Ob6CgIp8K644go2MdRms3366ae8dT799FM2zTQ2Nnb69Ol+bR/42oEDB1ghJSUFL7qDFPva\n4pvrW/gyBF5ERMSPf/xjVi4pKeGts2nTJla45ZZb/NMqGCaNjY3s3DYiysnJCWxjYMjY1xbfXN9C\nIIlCfn4+G7r58ssv3c9N+cc//sF2oJHJZEuXLg1A+2DA9u3b9/7773t6M/TDDz/ccccd3BbRd999\nt39bB76Un5+Pb65vSRwOR6DbAERExcXFzz33HCvfeuutt9xyy6RJkw4ePPjee+9xq1WWL19+//33\nB66N0L/t27evWrUqJibGYDBMnz59zJgxcrncbre3tLR8+umnzithV61ahUAKuF/96ldWq5X748GD\nB9kchJSUFOdpC1KplPt6usA314cQSCLy2GOPvffee57uLlq06Pe//70/2wNDwAJJuI5UKn388ceR\nRmIwY8YM1mEVFhkZKbBXN765voJAEpc333yzuLi4qanJ+WJKSsoDDzzgfkAyiFB1dfWLL764e/du\n59+7OTKZ7Cc/+ck999yTkZHh/7aBO58EEuGb6yMIJDH6+uuvjx8/3t3dHRUVNXbsWEzOCUYNDQ2H\nDh06c+ZMd3e3VCqNiopKSkqaMWMGptWFMHxzvYRAAgAAUcAvawAAIAoIJAAAEAUEEgAAiAICCQAA\nRAGBBAAAooBAAgAAUUAgAQCAKCCQAABAFBBIAAAgCggkAAAQBQQSAACIAgIJAABEAYEEAACigEAC\nAABRkAW6AQCi1t3d3dvbS0TsTKNANwcglKGHBCDk6aefzsrKysrK+uUvfxnotgCEOAQSAACIAgIJ\nws7q1aunTZs2bdq0goKCQLcFAC7AOyQIOzab7dy5c0TEXg4BgEggkACErFq16je/+Q0RRURgOAFg\neCGQAIRIpVKpVBroVgCEBfzSBwAAooAeEoSRsrIyIjp58iT7Y2trK7viLCkpKSMjg/ujyWRqaGgg\nori4uMzMTJfKR44caW5uJqKEhISJEyeyi3v27Nm1a1dLS4vD4YiJibnmmmvmz5/vPuJXUVFhNBob\nGhpsNptSqbzqqqsWLFgw8KVOVVVVX3zxxeHDh7u6uiQSSXR09MyZM+fNmzdq1KgBfgKA2EgcDkeg\n2wDgJ1xmCLj55puffvpp7o+//e1vX3vtNSKaO3fu5s2bXSo/9thj7733HhFdd911GzZsqKqq+vWv\nf11TU+NSTafTbdiwgcs5k8n0yCOPVFVVuVRLSkpau3btzJkzhVtYVlb29NNPf//99+63pFLpkiVL\nli9fHhsb2+9fKYDYYMgOwDcqKiruvPNO9zQiotra2ttvv531tCorKxcvXuyeRkTU3Nz8i1/8orq6\nWuCnPPfcc/n5+bxpRES9vb2vvfbaLbfccurUqSH9RQAEEobsIIy88MILRPTaa6+xkbrMzEz3pUga\njWYIn2w2mx966KGurq5JkybdcccdaWlpMpmstbX1zTff3LNnDxG1t7cXFhb+4Q9/WLZsWUdHh06n\nu/3229PT0yMjI8+ePfvee+99/PHHRGS1WletWvXOO+/w/pTnn3++uLiYlZOSku66666srKypU6fa\n7fby8vKdO3e+/fbbRFRXV7d06dJ3330Xex1BcEEgQRi59tprichoNLI/JiYmsive+/LLL4nozjvv\nfOqpp5yvL1iwgBvW++9//7tixYqWlpYf/ehHTz/9tFwu56rl5OQ888wzL7/8MhFVVVVVVFRcccUV\nLj+ioqKCBSoRXXPNNX/+85+jo6OdPyEnJ2fhwoUFBQU2m62mpmbjxo0PPfSQT/7qAPwDQ3YAvjF7\n9myXNGIee+wxbuL4/v37J02a9MwzzzinEeP84mfnzp3un7NmzRpWmDRp0vr1653TiJOdnf3II4+w\n8qZNm3p6eob0lwIQGAgkAN9Yvnw573W1Wn355Zdzf3zwwQd5FzbJ5fK5c+eycl1dncvdb7/99uDB\ng6y8atUqgaVReXl5MTExRNTV1bV79+7B/BUABBgCCcAHYmJisrKyPN1NSUlhBZlMNn/+fE/VuEmA\n7nMW/vOf/7DCqFGjhKfhSaXSefPmsbL7pHYAMUMgAfjArFmzBO5yA3QajUZgC6LRo0ezQkdHh8ut\nw4cPs4JzZ8uTuLg4VmBrpACCBSY1APiA8PZCkZGRrKDT6QSqyWR930f3XV+//vprVvj0009nzJgh\n3Jju7m5WwDskCC4IJAD/GfIOrWfPnmUFm81ms9l81yIAEUEgAQSTcePGTZ06dYCVJ0+ePKyNAfAt\nBBJAEIiJibFarUR0xRVX/P73vw90cwCGBSY1AASB6dOns8Lx48cD2xKA4YNAgrATjEftcYNvBw4c\nMJvNgW0MwDAJvm8mgJdUKhUrBNGs6IULF7JCb2/vq6++GtjGAAwTBBKEnfHjx7PCkSNH7HZ7YBsz\nQBMnTuT2cdi4cWNlZWW/jwTLXxoAB4EEYWfSpEmscO7cOW7zbPErLCxUKpVE1Nvb+7Of/ezdd9/1\nVNNsNm/evNlX+8YC+A1m2UHYmThx4pQpU9jWcOvXr//b3/526aWXcnuVzp49Oz8/P6AN5KfVap99\n9tkHHnjAZrOdPXv28ccf37hxY05OzrRp05RKpcPh6Ojo+Pbbb7///vsDBw64L60FED8EEoSjP/7x\nj/n5+S0tLURktVr379/P3YqPjw9cu/qRk5OzadMmdoYFEdXW1tbW1ga6UQA+gyE7CEcTJ0786KOP\nli9fbjAYYmJiuD17xG/WrFk7dux48MEHR40a5anOhAkTfvnLX/773//2Z8MAvCdxOByBbgMADEVV\nVdWxY8caGxtPnDihVqvT0tLi4+P1ej3vUUkA4odAAgAAUcCQHQAAiAICCQAARAGBBAAAooBAAgAA\nUUAgAQCAKCCQAABAFP4/JHGsrwmk9SMAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "yyaxis left\n", + "plot(t(1:10:end),vx(1:10:end),'o',t,3*t.^2)\n", + "ylabel('v_{x}')\n", + "yyaxis right\n", + "plot(t(1:10:end),vy(1:10:end),'s',t, t)\n", + "ylabel('v_{y}')\n", + "xlabel('time')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, create a new function that calls 'my_function' called, `my_caller.m`" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help documentation of \"my_caller\"\n", + " This function computes the acceleration in the x- and y-directions given\n", + " three vectors of position in x- and y-directions as a function of time\n", + " x = x-position\n", + " y = y-position\n", + " t = time\n", + " output\n", + " ax = velocity in x-direction\n", + " ay = velocity in y-direction\n" + ] + } + ], + "source": [ + "help my_caller" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "[ax,ay]=my_caller(x,y,t);" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "yyaxis left\n", + "plot(t(1:10:end),ax(1:10:end),'o',t,6*t)\n", + "ylabel('a_{x}')\n", + "yyaxis right\n", + "plot(t(1:10:end),ay(1:10:end),'s',t, 1*t./t)\n", + "ylabel('a_{y}')\n", + "xlabel('time')\n", + "axis([0,10,0,3])" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[0;31mUndefined function 'diff_match_dims' for input arguments of type 'double'.\n", + "\u001b[0m" + ] + } + ], + "source": [ + "diff_match_dims(x,t)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Matlab", + "language": "matlab", + "name": "matlab" + }, + "language_info": { + "codemirror_mode": "octave", + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "matlab", + "version": "0.11.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_09/mass_springs.png b/lecture_09/mass_springs.png new file mode 100644 index 0000000..d0dc65c Binary files /dev/null and b/lecture_09/mass_springs.png differ diff --git a/lecture_10/octave-workspace b/lecture_10/octave-workspace index 8a9aba2..8c437bb 100644 Binary files a/lecture_10/octave-workspace and b/lecture_10/octave-workspace differ diff --git a/lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb b/lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb new file mode 100644 index 0000000..e2aa425 --- /dev/null +++ b/lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb @@ -0,0 +1,699 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What is the determinant of A?\n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "10 & 2 & 1 \\\\\n", + "0 & 1 & 1 \\\\\n", + "0 & 0 & 10\\end{array} \\right]$\n", + "\n", + "![responses to determinant of A](det_A.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LU Decomposition\n", + "### efficient storage of matrices for solutions\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "Assume that we can perform Gauss elimination and achieve this formula:\n", + "\n", + "$Ux=d$ \n", + "\n", + "Where, $U$ is an upper triangular matrix that we derived from Gauss elimination and $d$ is the set of dependent variables after Gauss elimination. \n", + "\n", + "Assume there is a lower triangular matrix, $L$, with ones on the diagonal and same dimensions of $U$ and the following is true:\n", + "\n", + "$L(Ux-d)=Ax-y=0$\n", + "\n", + "Now, $Ax=LUx$, so $A=LU$, and $y=Ld$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "f21=0.5\n", + "\n", + "A(2,1)=1-1 = 0 \n", + "\n", + "A(2,2)=3-0.5=2.5\n", + "\n", + "y(2)=1-0.5=0.5\n", + "\n", + "$L(Ux-d)=\n", + "\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0.5 & 1 \\end{array} \\right]\n", + "\\left(\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "0 & 2.5 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]-\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "0.5\\end{array}\\right]\\right)=0$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000\n", + " 0.50000 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 1.00000\n", + " 0.00000 2.50000\n", + "\n", + "ans =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "d =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + "\n", + "y =\n", + "\n", + " 1\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "L=[1,0;0.5,1]\n", + "U=[2,1;0,2.5]\n", + "L*U\n", + "\n", + "d=[1;0.5]\n", + "y=L*d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pivoting for LU factorization\n", + "\n", + "LU factorization uses the same method as Gauss elimination so it is also necessary to perform partial pivoting when creating the lower and upper triangular matrices. \n", + "\n", + "Matlab and Octave use pivoting in the command \n", + "\n", + "`[L,U,P]=lu(A)`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'lu' is a built-in function from the file libinterp/corefcn/lu.cc\n", + "\n", + " -- Built-in Function: [L, U] = lu (A)\n", + " -- Built-in Function: [L, U, P] = lu (A)\n", + " -- Built-in Function: [L, U, P, Q] = lu (S)\n", + " -- Built-in Function: [L, U, P, Q, R] = lu (S)\n", + " -- Built-in Function: [...] = lu (S, THRES)\n", + " -- Built-in Function: Y = lu (...)\n", + " -- Built-in Function: [...] = lu (..., \"vector\")\n", + " Compute the LU decomposition of A.\n", + "\n", + " If A is full subroutines from LAPACK are used and if A is sparse\n", + " then UMFPACK is used.\n", + "\n", + " The result is returned in a permuted form, according to the\n", + " optional return value P. For example, given the matrix 'a = [1, 2;\n", + " 3, 4]',\n", + "\n", + " [l, u, p] = lu (A)\n", + "\n", + " returns\n", + "\n", + " l =\n", + "\n", + " 1.00000 0.00000\n", + " 0.33333 1.00000\n", + "\n", + " u =\n", + "\n", + " 3.00000 4.00000\n", + " 0.00000 0.66667\n", + "\n", + " p =\n", + "\n", + " 0 1\n", + " 1 0\n", + "\n", + " The matrix is not required to be square.\n", + "\n", + " When called with two or three output arguments and a spare input\n", + " matrix, 'lu' does not attempt to perform sparsity preserving column\n", + " permutations. Called with a fourth output argument, the sparsity\n", + " preserving column transformation Q is returned, such that 'P * A *\n", + " Q = L * U'.\n", + "\n", + " Called with a fifth output argument and a sparse input matrix, 'lu'\n", + " attempts to use a scaling factor R on the input matrix such that 'P\n", + " * (R \\ A) * Q = L * U'. This typically leads to a sparser and more\n", + " stable factorization.\n", + "\n", + " An additional input argument THRES, that defines the pivoting\n", + " threshold can be given. THRES can be a scalar, in which case it\n", + " defines the UMFPACK pivoting tolerance for both symmetric and\n", + " unsymmetric cases. If THRES is a 2-element vector, then the first\n", + " element defines the pivoting tolerance for the unsymmetric UMFPACK\n", + " pivoting strategy and the second for the symmetric strategy. By\n", + " default, the values defined by 'spparms' are used ([0.1, 0.001]).\n", + "\n", + " Given the string argument \"vector\", 'lu' returns the values of P\n", + " and Q as vector values, such that for full matrix, 'A (P,:) = L *\n", + " U', and 'R(P,:) * A (:, Q) = L * U'.\n", + "\n", + " With two output arguments, returns the permuted forms of the upper\n", + " and lower triangular matrices, such that 'A = L * U'. With one\n", + " output argument Y, then the matrix returned by the LAPACK routines\n", + " is returned. If the input matrix is sparse then the matrix L is\n", + " embedded into U to give a return value similar to the full case.\n", + " For both full and sparse matrices, 'lu' loses the permutation\n", + " information.\n", + "\n", + " See also: luupdate, ilu, chol, hess, qr, qz, schur, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help lu" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5e-05\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.00015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.00025\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0003\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tLU decomp\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tLU decomp\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tOctave \\\\\n", + "\n", + "\t\n", + "\t\tOctave \\\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% time LU solution vs backslash\n", + "t_lu=zeros(100,1);\n", + "t_bs=zeros(100,1);\n", + "for N=1:100\n", + " A=rand(N,N);\n", + " y=rand(N,1);\n", + " [L,U,P]=lu(A);\n", + "\n", + " tic; d=L\\y; x=U\\d; t_lu(N)=toc;\n", + "\n", + " tic; x=A\\y; t_bs(N)=toc;\n", + "end\n", + "plot([1:100],t_lu,[1:100],t_bs) \n", + "legend('LU decomp','Octave \\\\')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 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](../lecture_09/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": 24, + "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" + ] + } + ], + "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]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This matrix, K, is symmetric. \n", + "\n", + "`K(i,j)==K(j,i)`\n", + "\n", + "Now we can use,\n", + "\n", + "## Cholesky Factorization\n", + "\n", + "We can decompose the matrix, K into two matrices, $U$ and $U^{T}$, where\n", + "\n", + "$K=U^{T}U$\n", + "\n", + "each of the components of U can be calculated with the following equations:\n", + "\n", + "$u_{ii}=\\sqrt{a_{ii}-\\sum_{k=1}^{i-1}u_{ki}^{2}}$\n", + "\n", + "$u_{ij}=\\frac{a_{ij}-\\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}$\n", + "\n", + "so for K" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "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" + ] + } + ], + "source": [ + "K" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "u11 = 4.4721\n", + "u12 = -2.2361\n", + "u13 = 0\n", + "u14 = 0\n", + "u22 = 3.8730\n", + "u23 = -2.5820\n", + "u24 = 0\n", + "u33 = 3.6515\n", + "u34 = -2.7386\n", + "u44 = 1.5811\n", + "U =\n", + "\n", + " 4.47214 -2.23607 0.00000 0.00000\n", + " 0.00000 3.87298 -2.58199 0.00000\n", + " 0.00000 0.00000 3.65148 -2.73861\n", + " 0.00000 0.00000 0.00000 1.58114\n", + "\n" + ] + } + ], + "source": [ + "u11=sqrt(K(1,1))\n", + "u12=(K(1,2))/u11\n", + "u13=(K(1,3))/u11\n", + "u14=(K(1,4))/u11\n", + "u22=sqrt(K(2,2)-u12^2)\n", + "u23=(K(2,3)-u12*u13)/u22\n", + "u24=(K(2,4)-u12*u14)/u22\n", + "u33=sqrt(K(3,3)-u13^2-u23^2)\n", + "u34=(K(3,4)-u13*u14-u23*u24)/u33\n", + "u44=sqrt(K(4,4)-u14^2-u24^2-u34^2)\n", + "U=[u11,u12,u13,u14;0,u22,u23,u24;0,0,u33,u34;0,0,0,u44]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 20.00000 -10.00000 0.00000 0.00000\n", + " -10.00000 20.00000 -10.00000 0.00000\n", + " 0.00000 -10.00000 20.00000 -10.00000\n", + " 0.00000 0.00000 -10.00000 10.00000\n", + "\n" + ] + } + ], + "source": [ + "U'*U" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average time spent for Cholesky factored solution = 1.623154e-05+/-1.166726e-05\n", + "average time spent for backslash solution = 1.675844e-05+/-1.187234e-05\n" + ] + } + ], + "source": [ + "% time solution for Cholesky vs backslash\n", + "t_chol=zeros(1000,1);\n", + "t_bs=zeros(1000,1);\n", + "for i=1:1000\n", + " tic; d=U'*y; x=U\\d; t_chol(i)=toc;\n", + " tic; x=K\\y; t_bs(i)=toc;\n", + "end\n", + "fprintf('average time spent for Cholesky factored solution = %e+/-%e',mean(t_chol),std(t_chol))\n", + "\n", + "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_11/det_A.png b/lecture_11/det_A.png new file mode 100644 index 0000000..50f6ac1 Binary files /dev/null and b/lecture_11/det_A.png differ diff --git a/lecture_11/lecture_11.aux b/lecture_11/lecture_11.aux index cf3c530..a9c4771 100644 --- a/lecture_11/lecture_11.aux +++ b/lecture_11/lecture_11.aux @@ -17,12 +17,22 @@ \providecommand\HyField@AuxAddToFields[1]{} \providecommand\HyField@AuxAddToCoFields[2]{} \providecommand \oddpage@label [2]{} -\@writefile{toc}{\contentsline {section}{\numberline {1}LU Decomposition}{1}{section.1}} -\newlabel{lu-decomposition}{{1}{1}{LU Decomposition}{section.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.0.1}efficient storage of matrices for solutions}{1}{subsubsection.1.0.1}} -\newlabel{efficient-storage-of-matrices-for-solutions}{{1.0.1}{1}{efficient storage of matrices for solutions}{subsubsection.1.0.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Pivoting for LU factorization}{2}{subsection.1.1}} -\newlabel{pivoting-for-lu-factorization}{{1.1}{2}{Pivoting for LU factorization}{subsection.1.1}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Springs-masses\relax }}{5}{figure.caption.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Cholesky Factorization}{6}{subsection.1.2}} -\newlabel{cholesky-factorization}{{1.2}{6}{Cholesky Factorization}{subsection.1.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.1}My question from last class}{1}{subsection.0.1}} +\newlabel{my-question-from-last-class}{{0.1}{1}{My question from last class}{subsection.0.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces responses to determinant of A\relax }}{1}{figure.caption.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.2}Your questions from last class}{1}{subsection.0.2}} +\newlabel{your-questions-from-last-class}{{0.2}{1}{Your questions from last class}{subsection.0.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.3}Midterm preference}{2}{subsection.0.3}} +\newlabel{midterm-preference}{{0.3}{2}{Midterm preference}{subsection.0.3}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces responses to midterm date\relax }}{2}{figure.caption.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {0.3.1}Midterm Questions}{2}{subsubsection.0.3.1}} +\newlabel{midterm-questions}{{0.3.1}{2}{Midterm Questions}{subsubsection.0.3.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1}LU Decomposition}{2}{section.1}} +\newlabel{lu-decomposition}{{1}{2}{LU Decomposition}{section.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.0.1}efficient storage of matrices for solutions}{2}{subsubsection.1.0.1}} +\newlabel{efficient-storage-of-matrices-for-solutions}{{1.0.1}{2}{efficient storage of matrices for solutions}{subsubsection.1.0.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Pivoting for LU factorization}{4}{subsection.1.1}} +\newlabel{pivoting-for-lu-factorization}{{1.1}{4}{Pivoting for LU factorization}{subsection.1.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Springs-masses\relax }}{7}{figure.caption.3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Cholesky Factorization}{8}{subsection.1.2}} +\newlabel{cholesky-factorization}{{1.2}{8}{Cholesky Factorization}{subsection.1.2}{}} diff --git a/lecture_11/lecture_11.ipynb b/lecture_11/lecture_11.ipynb index c290a47..41f1870 100644 --- a/lecture_11/lecture_11.ipynb +++ b/lecture_11/lecture_11.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 18, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -22,6 +22,51 @@ "setdefaults" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "10 & 2 & 1 \\\\\n", + "0 & 1 & 1 \\\\\n", + "0 & 0 & 10\\end{array} \\right]$\n", + "\n", + "![responses to determinant of A](det_A.png)\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Need more linear algebra review\n", + " \n", + " -We will keep doing Linear Algebra, try the practice problems in 'linear_algebra'\n", + "\n", + "2. How do I do HW3? \n", + " \n", + " -demo today\n", + "\n", + "3. For hw4 is the spring constant (K) suppose to be given? \n", + " \n", + " -yes, its 30 N/m\n", + " \n", + "4. Deapool or Joker?\n", + "\n", + "\n", + "## Midterm preference\n", + "\n", + "![responses to midterm date](midterm_date.png)\n", + "\n", + "### Midterm Questions\n", + "\n", + "1. Notes allowed\n", + " \n", + " -no\n", + "\n", + "2. Will there be a review/study sheet\n", + "\n", + " -yes" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -137,6 +182,35 @@ "y=L*d" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 5.0000\n", + "ans = 1\n", + "ans = 5\n", + "ans = 5\n", + "ans = 5.0000\n" + ] + } + ], + "source": [ + "% what is the determinant of L, U and A?\n", + "\n", + "det(A)\n", + "det(L)\n", + "det(U)\n", + "det(L)*det(U)\n", + "det(L*U)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -250,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -297,68 +371,58 @@ "\n", "\n", "\t\n", - "\t\t\n", + "\t\t\n", "\t\n", "\n", "\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t0\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t5e-05\n", + "\t\t\n", + "\t\t0.0005\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.0001\n", + "\t\t\n", + "\t\t0.001\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.00015\n", + "\t\t\n", + "\t\t0.0015\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.0002\n", + "\t\t\n", + "\t\t0.002\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.00025\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t0.0003\n", - "\t\n", - "\n", - "\n", - "\t\t\n", + "\t\t\n", "\t\t0\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t20\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t40\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t60\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t80\n", "\t\n", "\n", @@ -370,7 +434,7 @@ "\n", "\n", "\n", - "\t\n", + "\t\n", "\n", "\n", "\n", @@ -386,7 +450,7 @@ "\t\n", "\n", "\n", - "\t\n", + "\t\n", "\t\n", "\tOctave \\\\\n", "\n", @@ -395,7 +459,7 @@ "\t\n", "\n", "\n", - "\t\n", + "\t\n", "\t\n", "\n", "\n", @@ -425,9 +489,9 @@ " y=rand(N,1);\n", " [L,U,P]=lu(A);\n", "\n", - " tic; d=L\\y; x=U\\d; t_lu(N)=toc;\n", + " tic; d=inv(L)*y; x=inv(U)*d; t_lu(N)=toc;\n", "\n", - " tic; x=A\\y; t_bs(N)=toc;\n", + " tic; x=inv(A)*y; t_bs(N)=toc;\n", "end\n", "plot([1:100],t_lu,[1:100],t_bs) \n", "legend('LU decomp','Octave \\\\')" @@ -474,7 +538,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -538,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -563,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -608,7 +672,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -619,21 +683,21 @@ "text": [ "ans =\n", "\n", - " 20.00000 -10.00000 0.00000 0.00000\n", - " -10.00000 20.00000 -10.00000 0.00000\n", - " 0.00000 -10.00000 20.00000 -10.00000\n", - " 0.00000 0.00000 -10.00000 10.00000\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", "\n" ] } ], "source": [ - "U'*U" + "(U'*U)'==U'*U" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -642,8 +706,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "average time spent for Cholesky factored solution = 1.623154e-05+/-1.166726e-05\n", - "average time spent for backslash solution = 1.675844e-05+/-1.187234e-05\n" + "average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06\n", + "average time spent for backslash solution = 1.555967e-05+/-1.048561e-05\n" ] } ], @@ -659,6 +723,15 @@ "\n", "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/lecture_11/lecture_11.log b/lecture_11/lecture_11.log index 10423a7..981cd40 100644 --- a/lecture_11/lecture_11.log +++ b/lecture_11/lecture_11.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex 2017.1.11) 22 FEB 2017 22:01 +This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex 2017.1.11) 27 FEB 2017 11:55 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -734,76 +734,89 @@ LaTeX Font Info: Try loading font information for T1+cmtt on input line 279. (/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions ) -LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <14.4> not available -(Font) Font shape `T1/ppl/b/n' tried instead on input line 287. -LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <10.95> not available -(Font) Font shape `T1/ppl/b/n' tried instead on input line 290. - - -Package hyperref Warning: Difference (2) between bookmark levels is greater -(hyperref) than one, level fixed on input line 290. - +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <12> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 288. LaTeX Font Info: Font shape `U/msa/m/n' will be -(Font) scaled to size 11.40997pt on input line 294. +(Font) scaled to size 11.40997pt on input line 290. LaTeX Font Info: Font shape `U/msa/m/n' will be -(Font) scaled to size 8.33606pt on input line 294. +(Font) scaled to size 8.33606pt on input line 290. LaTeX Font Info: Font shape `U/msa/m/n' will be -(Font) scaled to size 6.25204pt on input line 294. +(Font) scaled to size 6.25204pt on input line 290. LaTeX Font Info: Font shape `U/msb/m/n' will be -(Font) scaled to size 11.40997pt on input line 294. +(Font) scaled to size 11.40997pt on input line 290. LaTeX Font Info: Font shape `U/msb/m/n' will be -(Font) scaled to size 8.33606pt on input line 294. +(Font) scaled to size 8.33606pt on input line 290. LaTeX Font Info: Font shape `U/msb/m/n' will be -(Font) scaled to size 6.25204pt on input line 294. -[1 +(Font) scaled to size 6.25204pt on input line 290. + + +File: det_A.png Graphic file (type png) + +Package pdftex.def Info: det_A.png used on input line 294. +(pdftex.def) Requested size: 375.80544pt x 202.3582pt. + [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./det_A.png>] + +File: midterm_date.png Graphic file (type png) + +Package pdftex.def Info: midterm_date.png used on input line 324. +(pdftex.def) Requested size: 375.80544pt x 171.71808pt. +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <10.95> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 328. +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <14.4> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 342. -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] -LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <12> not available -(Font) Font shape `T1/ppl/b/n' tried instead on input line 372. -LaTeX Font Info: Try loading font information for TS1+cmtt on input line 387 + +Package hyperref Warning: Difference (2) between bookmark levels is greater +(hyperref) than one, level fixed on input line 345. + +[2 <./midterm_date.png>] [3] +LaTeX Font Info: Try loading font information for TS1+cmtt on input line 461 . (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmtt.fd File: ts1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions -) [2] [3] +) [4] [5] LaTeX Font Info: Font shape `T1/cmtt/bx/n' in size <10.95> not available -(Font) Font shape `T1/cmtt/m/n' tried instead on input line 473. +(Font) Font shape `T1/cmtt/m/n' tried instead on input line 547. - -File: lecture_11_files/lecture_11_6_0.pdf Graphic file (type pdf) + +File: lecture_11_files/lecture_11_8_0.pdf Graphic file (type pdf) - -Package pdftex.def Info: lecture_11_files/lecture_11_6_0.pdf used on input line - 487. + +Package pdftex.def Info: lecture_11_files/lecture_11_8_0.pdf used on input line + 561. (pdftex.def) Requested size: 449.6789pt x 337.25917pt. - [4] -Underfull \hbox (badness 10000) in paragraph at lines 489--490 + +Underfull \hbox (badness 10000) in paragraph at lines 563--564 [] - -File: mass_springs.png Graphic file (type png) - -Package pdftex.def Info: mass_springs.png used on input line 497. -(pdftex.def) Requested size: 89.93611pt x 152.576pt. +<../lecture_09/mass_springs.png, id=80, 112.42pt x 190.7125pt> +File: ../lecture_09/mass_springs.png Graphic file (type png) -[5 <./lecture_11_files/lecture_11_6_0.pdf> <./mass_springs.png>] [6] [7] -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 656. + +Package pdftex.def Info: ../lecture_09/mass_springs.png used on input line 571. -[8] -Package atveryend Info: Empty hook `AfterLastShipout' on input line 656. +(pdftex.def) Requested size: 89.93611pt x 152.576pt. + [6 <./lecture_11_files/lecture_11_8_0.pdf>] [7 <../lecture_09/mass_springs.png +>] [8] +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 734. + [9] +Package atveryend Info: Empty hook `AfterLastShipout' on input line 734. (./lecture_11.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 656. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 656. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 734. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 734. Package rerunfilecheck Info: File `lecture_11.out' has not changed. -(rerunfilecheck) Checksum: 06B2288B56AA590C3216AAE67971C54B;297. -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 656. +(rerunfilecheck) Checksum: 41743ED7C91140C56E53FBD51DB19D65;568. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 734. ) Here is how much of TeX's memory you used: - 10920 strings out of 493029 - 163179 string characters out of 6136234 - 268780 words of memory out of 5000000 - 14206 multiletter control sequences out of 15000+600000 + 10955 strings out of 493029 + 163773 string characters out of 6136234 + 268999 words of memory out of 5000000 + 14228 multiletter control sequences out of 15000+600000 39052 words of font info for 103 fonts, out of 8000000 for 9000 1141 hyphenation exceptions out of 8191 36i,9n,77p,460b,465s stack positions out of 5000i,500n,10000p,200000b,80000s @@ -817,10 +830,10 @@ hare/texmf/fonts/type1/public/cm-super/sfit1095.pfb> -Output written on lecture_11.pdf (8 pages, 154124 bytes). +Output written on lecture_11.pdf (9 pages, 191934 bytes). PDF statistics: - 117 PDF objects out of 1000 (max. 8388607) - 92 compressed objects within 1 object stream - 14 named destinations out of 1000 (max. 500000) - 43 words of extra memory for PDF output out of 10000 (max. 10000000) + 152 PDF objects out of 1000 (max. 8388607) + 121 compressed objects within 2 object streams + 27 named destinations out of 1000 (max. 500000) + 85 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/lecture_11/lecture_11.out b/lecture_11/lecture_11.out index 41c2cd3..481e738 100644 --- a/lecture_11/lecture_11.out +++ b/lecture_11/lecture_11.out @@ -1,4 +1,8 @@ -\BOOKMARK [1][-]{section.1}{LU Decomposition}{}% 1 -\BOOKMARK [2][-]{subsubsection.1.0.1}{efficient storage of matrices for solutions}{section.1}% 2 -\BOOKMARK [2][-]{subsection.1.1}{Pivoting for LU factorization}{section.1}% 3 -\BOOKMARK [2][-]{subsection.1.2}{Cholesky Factorization}{section.1}% 4 +\BOOKMARK [2][-]{subsection.0.1}{My question from last class}{}% 1 +\BOOKMARK [2][-]{subsection.0.2}{Your questions from last class}{}% 2 +\BOOKMARK [2][-]{subsection.0.3}{Midterm preference}{}% 3 +\BOOKMARK [3][-]{subsubsection.0.3.1}{Midterm Questions}{subsection.0.3}% 4 +\BOOKMARK [1][-]{section.1}{LU Decomposition}{}% 5 +\BOOKMARK [2][-]{subsubsection.1.0.1}{efficient storage of matrices for solutions}{section.1}% 6 +\BOOKMARK [2][-]{subsection.1.1}{Pivoting for LU factorization}{section.1}% 7 +\BOOKMARK [2][-]{subsection.1.2}{Cholesky Factorization}{section.1}% 8 diff --git a/lecture_11/lecture_11.pdf b/lecture_11/lecture_11.pdf index 3e2c828..9fa1342 100644 Binary files a/lecture_11/lecture_11.pdf and b/lecture_11/lecture_11.pdf differ diff --git a/lecture_11/lecture_11.tex b/lecture_11/lecture_11.tex index 22d4064..318852d 100644 --- a/lecture_11/lecture_11.tex +++ b/lecture_11/lecture_11.tex @@ -277,13 +277,68 @@ \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}18}]:} \PY{c}{\PYZpc{}plot \PYZhy{}\PYZhy{}format svg} +{\color{incolor}In [{\color{incolor}1}]:} \PY{c}{\PYZpc{}plot \PYZhy{}\PYZhy{}format svg} \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}19}]:} \PY{n}{setdefaults} +{\color{incolor}In [{\color{incolor}2}]:} \PY{n}{setdefaults} \end{Verbatim} + \subsection{My question from last +class}\label{my-question-from-last-class} + +\(A=\left[ \begin{array}{ccc} 10 & 2 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 10\end{array} \right]\) + +\begin{figure}[htbp] +\centering +\includegraphics{det_A.png} +\caption{responses to determinant of A} +\end{figure} + +\subsection{Your questions from last +class}\label{your-questions-from-last-class} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Need more linear algebra review + + -We will keep doing Linear Algebra, try the practice problems in + 'linear\_algebra' +\item + How do I do HW3? + + -demo today +\item + For hw4 is the spring constant (K) suppose to be given? + + -yes, its 30 N/m +\item + Deapool or Joker? +\end{enumerate} + +\subsection{Midterm preference}\label{midterm-preference} + +\begin{figure}[htbp] +\centering +\includegraphics{midterm_date.png} +\caption{responses to midterm date} +\end{figure} + +\subsubsection{Midterm Questions}\label{midterm-questions} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Notes allowed + + -no +\item + Will there be a review/study sheet + + -yes +\end{enumerate} + \section{LU Decomposition}\label{lu-decomposition} \subsubsection{efficient storage of matrices for @@ -366,6 +421,25 @@ \subsubsection{efficient storage of matrices for 1 + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}5}]:} \PY{c}{\PYZpc{} what is the determinant of L, U and A?} + + \PY{n+nb}{det}\PY{p}{(}\PY{n}{A}\PY{p}{)} + \PY{n+nb}{det}\PY{p}{(}\PY{n}{L}\PY{p}{)} + \PY{n+nb}{det}\PY{p}{(}\PY{n}{U}\PY{p}{)} + \PY{n+nb}{det}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{o}{*}\PY{n+nb}{det}\PY{p}{(}\PY{n}{U}\PY{p}{)} + \PY{n+nb}{det}\PY{p}{(}\PY{n}{L}\PY{o}{*}\PY{n}{U}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ans = 5.0000 +ans = 1 +ans = 5 +ans = 5 +ans = 5.0000 + \end{Verbatim} \subsection{Pivoting for LU @@ -467,24 +541,24 @@ \subsubsection{efficient storage of matrices for \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}22}]:} \PY{c}{\PYZpc{} time LU solution vs backslash} - \PY{n}{t\PYZus{}lu}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} - \PY{n}{t\PYZus{}bs}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} - \PY{k}{for} \PY{n}{N}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100} - \PY{n}{A}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{n}{N}\PY{p}{)}\PY{p}{;} - \PY{n}{y}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} - \PY{p}{[}\PY{n}{L}\PY{p}{,}\PY{n}{U}\PY{p}{,}\PY{n}{P}\PY{p}{]}\PY{p}{=}\PY{n+nb}{lu}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{;} - - \PY{n+nb}{tic}\PY{p}{;} \PY{n}{d}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{n}{y}\PY{p}{;} \PY{n}{x}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d}\PY{p}{;} \PY{n}{t\PYZus{}lu}\PY{p}{(}\PY{n}{N}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} - - \PY{n+nb}{tic}\PY{p}{;} \PY{n}{x}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZbs{}}\PY{n}{y}\PY{p}{;} \PY{n}{t\PYZus{}bs}\PY{p}{(}\PY{n}{N}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} - \PY{k}{end} - \PY{n+nb}{plot}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100}\PY{p}{]}\PY{p}{,}\PY{n}{t\PYZus{}lu}\PY{p}{,}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100}\PY{p}{]}\PY{p}{,}\PY{n}{t\PYZus{}bs}\PY{p}{)} - \PY{n+nb}{legend}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{LU decomp\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Octave \PYZbs{}\PYZbs{}\PYZsq{}}\PY{p}{)} +{\color{incolor}In [{\color{incolor}9}]:} \PY{c}{\PYZpc{} time LU solution vs backslash} + \PY{n}{t\PYZus{}lu}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{t\PYZus{}bs}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{k}{for} \PY{n}{N}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100} + \PY{n}{A}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{n}{N}\PY{p}{)}\PY{p}{;} + \PY{n}{y}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{p}{[}\PY{n}{L}\PY{p}{,}\PY{n}{U}\PY{p}{,}\PY{n}{P}\PY{p}{]}\PY{p}{=}\PY{n+nb}{lu}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{;} + + \PY{n+nb}{tic}\PY{p}{;} \PY{n}{d}\PY{p}{=}\PY{n+nb}{inv}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{o}{*}\PY{n}{y}\PY{p}{;} \PY{n}{x}\PY{p}{=}\PY{n+nb}{inv}\PY{p}{(}\PY{n}{U}\PY{p}{)}\PY{o}{*}\PY{n}{d}\PY{p}{;} \PY{n}{t\PYZus{}lu}\PY{p}{(}\PY{n}{N}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} + + \PY{n+nb}{tic}\PY{p}{;} \PY{n}{x}\PY{p}{=}\PY{n+nb}{inv}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{o}{*}\PY{n}{y}\PY{p}{;} \PY{n}{t\PYZus{}bs}\PY{p}{(}\PY{n}{N}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} + \PY{k}{end} + \PY{n+nb}{plot}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100}\PY{p}{]}\PY{p}{,}\PY{n}{t\PYZus{}lu}\PY{p}{,}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100}\PY{p}{]}\PY{p}{,}\PY{n}{t\PYZus{}bs}\PY{p}{)} + \PY{n+nb}{legend}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{LU decomp\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Octave \PYZbs{}\PYZbs{}\PYZsq{}}\PY{p}{)} \end{Verbatim} \begin{center} - \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_11_files/lecture_11_6_0.pdf} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_11_files/lecture_11_8_0.pdf} \end{center} { \hspace*{\fill} \\} @@ -494,7 +568,7 @@ \subsubsection{efficient storage of matrices for \begin{figure}[htbp] \centering -\includegraphics{mass_springs.png} +\includegraphics{../lecture_09/mass_springs.png} \caption{Springs-masses} \end{figure} @@ -514,7 +588,7 @@ \subsubsection{efficient storage of matrices for \(\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]\) \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}24}]:} \PY{n}{k}\PY{p}{=}\PY{l+m+mi}{10}\PY{p}{;} \PY{c}{\PYZpc{} N/m} +{\color{incolor}In [{\color{incolor}10}]:} \PY{n}{k}\PY{p}{=}\PY{l+m+mi}{10}\PY{p}{;} \PY{c}{\PYZpc{} N/m} \PY{n}{m1}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} \PY{c}{\PYZpc{} kg} \PY{n}{m2}\PY{p}{=}\PY{l+m+mi}{2}\PY{p}{;} \PY{n}{m3}\PY{p}{=}\PY{l+m+mi}{3}\PY{p}{;} @@ -565,7 +639,7 @@ \subsection{Cholesky Factorization}\label{cholesky-factorization} so for K \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}25}]:} \PY{n}{K} +{\color{incolor}In [{\color{incolor}11}]:} \PY{n}{K} \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] @@ -580,7 +654,7 @@ \subsection{Cholesky Factorization}\label{cholesky-factorization} \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}26}]:} \PY{n}{u11}\PY{p}{=}\PY{n+nb}{sqrt}\PY{p}{(}\PY{n}{K}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{)} +{\color{incolor}In [{\color{incolor}12}]:} \PY{n}{u11}\PY{p}{=}\PY{n+nb}{sqrt}\PY{p}{(}\PY{n}{K}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{)} \PY{n}{u12}\PY{p}{=}\PY{p}{(}\PY{n}{K}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{o}{/}\PY{n}{u11} \PY{n}{u13}\PY{p}{=}\PY{p}{(}\PY{n}{K}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}\PY{o}{/}\PY{n}{u11} \PY{n}{u14}\PY{p}{=}\PY{p}{(}\PY{n}{K}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{)}\PY{p}{)}\PY{o}{/}\PY{n}{u11} @@ -615,22 +689,22 @@ \subsection{Cholesky Factorization}\label{cholesky-factorization} \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}27}]:} \PY{n}{U}\PY{o}{\PYZsq{}}\PY{o}{*}\PY{n}{U} +{\color{incolor}In [{\color{incolor}17}]:} \PY{p}{(}\PY{n}{U}\PY{o}{\PYZsq{}}\PY{o}{*}\PY{n}{U}\PY{p}{)}\PY{o}{\PYZsq{}}\PY{o}{==}\PY{n}{U}\PY{o}{\PYZsq{}}\PY{o}{*}\PY{n}{U} \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] ans = - 20.00000 -10.00000 0.00000 0.00000 - -10.00000 20.00000 -10.00000 0.00000 - 0.00000 -10.00000 20.00000 -10.00000 - 0.00000 0.00000 -10.00000 10.00000 + 1 1 1 1 + 1 1 1 1 + 1 1 1 1 + 1 1 1 1 \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] -{\color{incolor}In [{\color{incolor}37}]:} \PY{c}{\PYZpc{} time solution for Cholesky vs backslash} +{\color{incolor}In [{\color{incolor}18}]:} \PY{c}{\PYZpc{} time solution for Cholesky vs backslash} \PY{n}{t\PYZus{}chol}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{1000}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} \PY{n}{t\PYZus{}bs}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{1000}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} \PY{k}{for} \PY{n}{i}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{1000} @@ -643,11 +717,15 @@ \subsection{Cholesky Factorization}\label{cholesky-factorization} \end{Verbatim} \begin{Verbatim}[commandchars=\\\{\}] -average time spent for Cholesky factored solution = 1.623154e-05+/-1.166726e-05 -average time spent for backslash solution = 1.675844e-05+/-1.187234e-05 +average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06 +average time spent for backslash solution = 1.555967e-05+/-1.048561e-05 \end{Verbatim} + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor} }]:} +\end{Verbatim} + % Add a bibliography block to the postdoc diff --git a/lecture_11/lecture_11_files/lecture_11_8_0.pdf b/lecture_11/lecture_11_files/lecture_11_8_0.pdf new file mode 100644 index 0000000..7f562c6 Binary files /dev/null and b/lecture_11/lecture_11_files/lecture_11_8_0.pdf differ diff --git a/lecture_11/lecture_11_files/lecture_11_8_0.svg b/lecture_11/lecture_11_files/lecture_11_8_0.svg new file mode 100644 index 0000000..37a1c3f --- /dev/null +++ b/lecture_11/lecture_11_files/lecture_11_8_0.svg @@ -0,0 +1,139 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 0.0005 + + + + + 0.001 + + + + + 0.0015 + + + + + 0.002 + + + + + 0 + + + + + 20 + + + + + 40 + + + + + 60 + + + + + 80 + + + + + 100 + + + + + + + + + + + + + LU decomp + + + + + LU decomp + + + + + + Octave \\ + + + Octave \ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_11/midterm_date.png b/lecture_11/midterm_date.png new file mode 100644 index 0000000..4dd0663 Binary files /dev/null and b/lecture_11/midterm_date.png differ diff --git a/lecture_11/octave-workspace b/lecture_11/octave-workspace index 2e1bdfa..8c437bb 100644 Binary files a/lecture_11/octave-workspace and b/lecture_11/octave-workspace differ diff --git a/lecture_12/.ipynb_checkpoints/lecture_12-checkpoint.ipynb b/lecture_12/.ipynb_checkpoints/lecture_12-checkpoint.ipynb new file mode 100644 index 0000000..1332b29 --- /dev/null +++ b/lecture_12/.ipynb_checkpoints/lecture_12-checkpoint.ipynb @@ -0,0 +1,1483 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Need more linear algebra review\n", + " \n", + " -We will keep doing Linear Algebra, try the practice problems in 'linear_algebra'\n", + "\n", + "2. How do I do HW3? \n", + " \n", + " -demo today\n", + "\n", + "3. For hw4 is the spring constant (K) suppose to be given? \n", + " \n", + " -yes, its 30 N/m\n", + " \n", + "4. Deapool or Joker?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrix Inverse and Condition\n", + "\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "If we know that $A^{-1}A=I$, then \n", + "\n", + "$A^{-1}y=A^{-1}Ax=x$\n", + "\n", + "so \n", + "\n", + "$x=A^{-1}y$\n", + "\n", + "Where, $A^{-1}$ is the inverse of matrix $A$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "$Ax=y$\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "$A^{-1}=\\frac{1}{2*3-1*1}\\left[ \\begin{array}{cc}\n", + "3 & 1 \\\\\n", + "-1 & 2 \\end{array} \\right]=\n", + "\\left[ \\begin{array}{cc}\n", + "3/5 & -1/5 \\\\\n", + "-1/5 & 2/5 \\end{array} \\right]$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "invA =\n", + "\n", + " 0.60000 -0.20000\n", + " -0.20000 0.40000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000\n", + " 0.00000 1.00000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000\n", + " 0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "invA=1/5*[3,-1;-1,2]\n", + "\n", + "A*invA\n", + "invA*A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How did we know the inverse of A? \n", + "\n", + "for 2$\\times$2 matrices, it is always:\n", + "\n", + "$A=\\left[ \\begin{array}{cc}\n", + "A_{11} & A_{12} \\\\\n", + "A_{21} & A_{22} \\end{array} \\right]$\n", + "\n", + "$A^{-1}=\\frac{1}{det(A)}\\left[ \\begin{array}{cc}\n", + "A_{22} & -A_{12} \\\\\n", + "-A_{21} & A_{11} \\end{array} \\right]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$AA^{-1}=\\frac{1}{A_{11}A_{22}-A_{21}A_{12}}\\left[ \\begin{array}{cc}\n", + "A_{11}A_{22}-A_{21}A_{12} & -A_{11}A_{12}+A_{12}A_{11} \\\\\n", + "A_{21}A_{22}-A_{22}A_{21} & -A_{21}A_{12}+A_{22}A_{11} \\end{array} \\right]\n", + "=\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0 & 1 \\end{array} \\right]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about bigger matrices?\n", + "\n", + "We can use the LU-decomposition\n", + "\n", + "$A=LU$\n", + "\n", + "$A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$\n", + "\n", + "if we divide $A^{-1}$ into n-column vectors, $a_{n}$, then\n", + "\n", + "$Aa_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$Aa_{2}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$Aa_{n}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "1 \\end{array} \\right]$\n", + "\n", + "\n", + "Which we can solve for each $a_{n}$ with LU-decomposition, knowing the lower and upper triangular decompositions, then \n", + "\n", + "$A^{-1}=\\left[ \\begin{array}{cccc}\n", + "| & | & & | \\\\\n", + "a_{1} & a_{2} & \\cdots & a_{3} \\\\\n", + "| & | & & | \\end{array} \\right]$\n", + "\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{1}=d_{1}$\n", + "\n", + "$Ld_{2}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{2}=d_{2}$\n", + "\n", + "$Ld_{n}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "n \\end{array} \\right]$\n", + "$;~Ua_{n}=d_{n}$\n", + "\n", + "Consider the following matrix:\n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "2 & -1 & 0\\\\\n", + "-1 & 2 & -1\\\\\n", + "0 & -1 & 1 \\end{array} \\right]$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 -1 0\n", + " -1 2 -1\n", + " 0 -1 1\n", + "\n", + "U =\n", + "\n", + " 2.00000 -1.00000 0.00000\n", + " 0.00000 1.50000 -1.00000\n", + " 0.00000 -1.00000 1.00000\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " -0.50000 1.00000 0.00000\n", + " 0.00000 0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "A=[2,-1,0;-1,2,-1;0,-1,1]\n", + "U=A;\n", + "L=eye(3,3);\n", + "U(2,:)=U(2,:)-U(2,1)/U(1,1)*U(1,:)\n", + "L(2,1)=A(2,1)/A(1,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " -0.50000 1.00000 0.00000\n", + " 0.00000 -0.66667 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 -1.00000 0.00000\n", + " 0.00000 1.50000 -1.00000\n", + " 0.00000 0.00000 0.33333\n", + "\n" + ] + } + ], + "source": [ + "L(3,2)=U(3,2)/U(2,2)\n", + "U(3,:)=U(3,:)-U(3,2)/U(2,2)*U(2,:)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now solve for $d_1$ then $a_1$, $d_2$ then $a_2$, and $d_3$ then $a_{3}$\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{1}=d_{1}$" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d1 =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + " 0.33333\n", + "\n" + ] + } + ], + "source": [ + "d1=zeros(3,1);\n", + "d1(1)=1;\n", + "d1(2)=0-L(2,1)*d1(1);\n", + "d1(3)=0-L(3,1)*d1(1)-L(3,2)*d1(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a1 =\n", + "\n", + " 1.00000\n", + " 1.00000\n", + " 1.00000\n", + "\n" + ] + } + ], + "source": [ + "a1=zeros(3,1);\n", + "a1(3)=d1(3)/U(3,3);\n", + "a1(2)=1/U(2,2)*(d1(2)-U(2,3)*a1(3));\n", + "a1(1)=1/U(1,1)*(d1(1)-U(1,2)*a1(2)-U(1,3)*a1(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d2 =\n", + "\n", + " 0.00000\n", + " 1.00000\n", + " 0.66667\n", + "\n" + ] + } + ], + "source": [ + "d2=zeros(3,1);\n", + "d2(1)=0;\n", + "d2(2)=1-L(2,1)*d2(1);\n", + "d2(3)=0-L(3,1)*d2(1)-L(3,2)*d2(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a2 =\n", + "\n", + " 1.0000\n", + " 2.0000\n", + " 2.0000\n", + "\n" + ] + } + ], + "source": [ + "a2=zeros(3,1);\n", + "a2(3)=d2(3)/U(3,3);\n", + "a2(2)=1/U(2,2)*(d2(2)-U(2,3)*a2(3));\n", + "a2(1)=1/U(1,1)*(d2(1)-U(1,2)*a2(2)-U(1,3)*a2(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d3 =\n", + "\n", + " 0\n", + " 0\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "d3=zeros(3,1);\n", + "d3(1)=0;\n", + "d3(2)=0-L(2,1)*d3(1);\n", + "d3(3)=1-L(3,1)*d3(1)-L(3,2)*d3(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a3 =\n", + "\n", + " 1.00000\n", + " 2.00000\n", + " 3.00000\n", + "\n" + ] + } + ], + "source": [ + "a3=zeros(3,1);\n", + "a3(3)=d3(3)/U(3,3);\n", + "a3(2)=1/U(2,2)*(d3(2)-U(2,3)*a3(3));\n", + "a3(1)=1/U(1,1)*(d3(1)-U(1,2)*a3(2)-U(1,3)*a3(3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Final solution for $A^{-1}$ is $[a_{1}~a_{2}~a_{3}]$" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invA =\n", + "\n", + " 1.00000 1.00000 1.00000\n", + " 1.00000 2.00000 2.00000\n", + " 1.00000 2.00000 3.00000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " 0.00000 1.00000 -0.00000\n", + " -0.00000 -0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "invA=[a1,a2,a3]\n", + "A*invA" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the solution of $x$ to $Ax=y$ is $x=A^{-1}y$" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 1\n", + " 2\n", + " 3\n", + "\n", + "x =\n", + "\n", + " 6.0000\n", + " 11.0000\n", + " 14.0000\n", + "\n", + "xbs =\n", + "\n", + " 6.0000\n", + " 11.0000\n", + " 14.0000\n", + "\n", + "ans =\n", + "\n", + " -3.5527e-15\n", + " -8.8818e-15\n", + " -1.0658e-14\n", + "\n", + "ans = 2.2204e-16\n" + ] + } + ], + "source": [ + "y=[1;2;3]\n", + "x=invA*y\n", + "xbs=A\\y\n", + "x-xbs\n", + "eps" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tinversion\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tinversion\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tbackslash\n", + "\n", + "\t\n", + "\t\tbackslash\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tmultiplication\n", + "\n", + "\t\n", + "\t\tmultiplication\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N=100;\n", + "n=[1:N];\n", + "t_inv=zeros(N,1);\n", + "t_bs=zeros(N,1);\n", + "t_mult=zeros(N,1);\n", + "for i=1:N\n", + " A=rand(i,i);\n", + " tic\n", + " invA=inv(A);\n", + " t_inv(i)=toc;\n", + " b=rand(i,1);\n", + " tic;\n", + " x=A\\b;\n", + " t_bs(i)=toc;\n", + " tic;\n", + " x=invA*b;\n", + " t_mult(i)=toc;\n", + "end\n", + "plot(n,t_inv,n,t_bs,n,t_mult)\n", + "axis([0 100 0 0.002])\n", + "legend('inversion','backslash','multiplication','Location','NorthWest')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Condition of a matrix \n", + "### *just checked in to see what condition my condition was in*\n", + "### Matrix norms\n", + "\n", + "The Euclidean norm of a vector is measure of the magnitude (in 3D this would be: $|x|=\\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general the equation is:\n", + "\n", + "$||x||_{e}=\\sqrt{\\sum_{i=1}^{n}x_{i}^{2}}$\n", + "\n", + "For a matrix, A, the same norm is called the Frobenius norm:\n", + "\n", + "$||A||_{f}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{2}}$\n", + "\n", + "In general we can calculate any $p$-norm where\n", + "\n", + "$||A||_{p}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{p}}$\n", + "\n", + "so the p=1, 1-norm is \n", + "\n", + "$||A||_{1}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{1}}=\\sum_{i=1}^{n}\\sum_{i=1}^{m}|A_{i,j}|$\n", + "\n", + "$||A||_{\\infty}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{\\infty}}=\\max_{1\\le i \\le n}\\sum_{j=1}^{m}|A_{i,j}|$\n", + "\n", + "### Condition of Matrix\n", + "\n", + "The matrix condition is the product of \n", + "\n", + "$Cond(A) = ||A||\\cdot||A^{-1}||$ \n", + "\n", + "So each norm will have a different condition number, but the limit is $Cond(A)\\ge 1$\n", + "\n", + "An estimate of the rounding error is based on the condition of A:\n", + "\n", + "$\\frac{||\\Delta x||}{x} \\le Cond(A) \\frac{||\\Delta A||}{||A||}$\n", + "\n", + "So if the coefficients of A have accuracy to $10^{-t}\n", + "\n", + "and the condition of A, $Cond(A)=10^{c}$\n", + "\n", + "then the solution for x can have rounding errors up to $10^{c-t}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 1.00000 0.50000 0.33333\n", + " 0.50000 0.33333 0.25000\n", + " 0.33333 0.25000 0.20000\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " 0.50000 1.00000 0.00000\n", + " 0.33333 1.00000 1.00000\n", + "\n", + "U =\n", + "\n", + " 1.00000 0.50000 0.33333\n", + " 0.00000 0.08333 0.08333\n", + " 0.00000 -0.00000 0.00556\n", + "\n" + ] + } + ], + "source": [ + "A=[1,1/2,1/3;1/2,1/3,1/4;1/3,1/4,1/5]\n", + "[L,U]=LU_naive(A)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "invA=" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000\n", + " 0.50000 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 1.00000\n", + " 0.00000 2.50000\n", + "\n", + "ans =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "d =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + "\n", + "y =\n", + "\n", + " 1\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "L=[1,0;0.5,1]\n", + "U=[2,1;0,2.5]\n", + "L*U\n", + "\n", + "d=[1;0.5]\n", + "y=L*d" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 5.0000\n", + "ans = 1\n", + "ans = 5\n", + "ans = 5\n", + "ans = 5.0000\n" + ] + } + ], + "source": [ + "% what is the determinant of L, U and A?\n", + "\n", + "det(A)\n", + "det(L)\n", + "det(U)\n", + "det(L)*det(U)\n", + "det(L*U)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pivoting for LU factorization\n", + "\n", + "LU factorization uses the same method as Gauss elimination so it is also necessary to perform partial pivoting when creating the lower and upper triangular matrices. \n", + "\n", + "Matlab and Octave use pivoting in the command \n", + "\n", + "`[L,U,P]=lu(A)`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'lu' is a built-in function from the file libinterp/corefcn/lu.cc\n", + "\n", + " -- Built-in Function: [L, U] = lu (A)\n", + " -- Built-in Function: [L, U, P] = lu (A)\n", + " -- Built-in Function: [L, U, P, Q] = lu (S)\n", + " -- Built-in Function: [L, U, P, Q, R] = lu (S)\n", + " -- Built-in Function: [...] = lu (S, THRES)\n", + " -- Built-in Function: Y = lu (...)\n", + " -- Built-in Function: [...] = lu (..., \"vector\")\n", + " Compute the LU decomposition of A.\n", + "\n", + " If A is full subroutines from LAPACK are used and if A is sparse\n", + " then UMFPACK is used.\n", + "\n", + " The result is returned in a permuted form, according to the\n", + " optional return value P. For example, given the matrix 'a = [1, 2;\n", + " 3, 4]',\n", + "\n", + " [l, u, p] = lu (A)\n", + "\n", + " returns\n", + "\n", + " l =\n", + "\n", + " 1.00000 0.00000\n", + " 0.33333 1.00000\n", + "\n", + " u =\n", + "\n", + " 3.00000 4.00000\n", + " 0.00000 0.66667\n", + "\n", + " p =\n", + "\n", + " 0 1\n", + " 1 0\n", + "\n", + " The matrix is not required to be square.\n", + "\n", + " When called with two or three output arguments and a spare input\n", + " matrix, 'lu' does not attempt to perform sparsity preserving column\n", + " permutations. Called with a fourth output argument, the sparsity\n", + " preserving column transformation Q is returned, such that 'P * A *\n", + " Q = L * U'.\n", + "\n", + " Called with a fifth output argument and a sparse input matrix, 'lu'\n", + " attempts to use a scaling factor R on the input matrix such that 'P\n", + " * (R \\ A) * Q = L * U'. This typically leads to a sparser and more\n", + " stable factorization.\n", + "\n", + " An additional input argument THRES, that defines the pivoting\n", + " threshold can be given. THRES can be a scalar, in which case it\n", + " defines the UMFPACK pivoting tolerance for both symmetric and\n", + " unsymmetric cases. If THRES is a 2-element vector, then the first\n", + " element defines the pivoting tolerance for the unsymmetric UMFPACK\n", + " pivoting strategy and the second for the symmetric strategy. By\n", + " default, the values defined by 'spparms' are used ([0.1, 0.001]).\n", + "\n", + " Given the string argument \"vector\", 'lu' returns the values of P\n", + " and Q as vector values, such that for full matrix, 'A (P,:) = L *\n", + " U', and 'R(P,:) * A (:, Q) = L * U'.\n", + "\n", + " With two output arguments, returns the permuted forms of the upper\n", + " and lower triangular matrices, such that 'A = L * U'. With one\n", + " output argument Y, then the matrix returned by the LAPACK routines\n", + " is returned. If the input matrix is sparse then the matrix L is\n", + " embedded into U to give a return value similar to the full case.\n", + " For both full and sparse matrices, 'lu' loses the permutation\n", + " information.\n", + "\n", + " See also: luupdate, ilu, chol, hess, qr, qz, schur, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help lu" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tLU decomp\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tLU decomp\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tOctave \\\\\n", + "\n", + "\t\n", + "\t\tOctave \\\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% time LU solution vs backslash\n", + "t_lu=zeros(100,1);\n", + "t_bs=zeros(100,1);\n", + "for N=1:100\n", + " A=rand(N,N);\n", + " y=rand(N,1);\n", + " [L,U,P]=lu(A);\n", + "\n", + " tic; d=inv(L)*y; x=inv(U)*d; t_lu(N)=toc;\n", + "\n", + " tic; x=inv(A)*y; t_bs(N)=toc;\n", + "end\n", + "plot([1:100],t_lu,[1:100],t_bs) \n", + "legend('LU decomp','Octave \\\\')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 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](../lecture_09/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": 10, + "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" + ] + } + ], + "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]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This matrix, K, is symmetric. \n", + "\n", + "`K(i,j)==K(j,i)`\n", + "\n", + "Now we can use,\n", + "\n", + "## Cholesky Factorization\n", + "\n", + "We can decompose the matrix, K into two matrices, $U$ and $U^{T}$, where\n", + "\n", + "$K=U^{T}U$\n", + "\n", + "each of the components of U can be calculated with the following equations:\n", + "\n", + "$u_{ii}=\\sqrt{a_{ii}-\\sum_{k=1}^{i-1}u_{ki}^{2}}$\n", + "\n", + "$u_{ij}=\\frac{a_{ij}-\\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}$\n", + "\n", + "so for K" + ] + }, + { + "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" + ] + } + ], + "source": [ + "K" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "u11 = 4.4721\n", + "u12 = -2.2361\n", + "u13 = 0\n", + "u14 = 0\n", + "u22 = 3.8730\n", + "u23 = -2.5820\n", + "u24 = 0\n", + "u33 = 3.6515\n", + "u34 = -2.7386\n", + "u44 = 1.5811\n", + "U =\n", + "\n", + " 4.47214 -2.23607 0.00000 0.00000\n", + " 0.00000 3.87298 -2.58199 0.00000\n", + " 0.00000 0.00000 3.65148 -2.73861\n", + " 0.00000 0.00000 0.00000 1.58114\n", + "\n" + ] + } + ], + "source": [ + "u11=sqrt(K(1,1))\n", + "u12=(K(1,2))/u11\n", + "u13=(K(1,3))/u11\n", + "u14=(K(1,4))/u11\n", + "u22=sqrt(K(2,2)-u12^2)\n", + "u23=(K(2,3)-u12*u13)/u22\n", + "u24=(K(2,4)-u12*u14)/u22\n", + "u33=sqrt(K(3,3)-u13^2-u23^2)\n", + "u34=(K(3,4)-u13*u14-u23*u24)/u33\n", + "u44=sqrt(K(4,4)-u14^2-u24^2-u34^2)\n", + "U=[u11,u12,u13,u14;0,u22,u23,u24;0,0,u33,u34;0,0,0,u44]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + "\n" + ] + } + ], + "source": [ + "(U'*U)'==U'*U" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06\n", + "average time spent for backslash solution = 1.555967e-05+/-1.048561e-05\n" + ] + } + ], + "source": [ + "% time solution for Cholesky vs backslash\n", + "t_chol=zeros(1000,1);\n", + "t_bs=zeros(1000,1);\n", + "for i=1:1000\n", + " tic; d=U'*y; x=U\\d; t_chol(i)=toc;\n", + " tic; x=K\\y; t_bs(i)=toc;\n", + "end\n", + "fprintf('average time spent for Cholesky factored solution = %e+/-%e',mean(t_chol),std(t_chol))\n", + "\n", + "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_12/LU_naive.m b/lecture_12/LU_naive.m new file mode 100644 index 0000000..92efde6 --- /dev/null +++ b/lecture_12/LU_naive.m @@ -0,0 +1,27 @@ +function [L, U] = LU_naive(A) +% GaussNaive: naive Gauss elimination +% x = GaussNaive(A,b): Gauss elimination without pivoting. +% input: +% A = coefficient matrix +% y = right hand side vector +% output: +% x = solution vector +[m,n] = size(A); +if m~=n, error('Matrix A must be square'); end +nb = n; +L=diag(ones(n,1)); +U=A; +% forward elimination +for k = 1:n-1 + for i = k+1:n + fik = U(i,k)/U(k,k); + L(i,k)=fik; + U(i,k:nb) = U(i,k:nb)-fik*U(k,k:nb); + end +end +%% back substitution +%x = zeros(n,1); +%x(n) = Aug(n,nb)/Aug(n,n); +%for i = n-1:-1:1 +% x(i) = (Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i); +%end diff --git a/lecture_12/chol_pre.png b/lecture_12/chol_pre.png new file mode 100644 index 0000000..67d2493 Binary files /dev/null and b/lecture_12/chol_pre.png differ diff --git a/lecture_12/det_L.png b/lecture_12/det_L.png new file mode 100644 index 0000000..aaac5a2 Binary files /dev/null and b/lecture_12/det_L.png differ diff --git a/lecture_12/lecture_12.aux b/lecture_12/lecture_12.aux new file mode 100644 index 0000000..4aa3a49 --- /dev/null +++ b/lecture_12/lecture_12.aux @@ -0,0 +1,38 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand \oddpage@label [2]{} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.1}My question from last class}{2}{subsection.0.1}} +\newlabel{my-question-from-last-class}{{0.1}{2}{My question from last class}{subsection.0.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces q1\relax }}{2}{figure.caption.1}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces q2\relax }}{3}{figure.caption.2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.2}Your questions from last class}{3}{subsection.0.2}} +\newlabel{your-questions-from-last-class}{{0.2}{3}{Your questions from last class}{subsection.0.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Matrix Inverse and Condition}{3}{section.1}} +\newlabel{matrix-inverse-and-condition}{{1}{3}{Matrix Inverse and Condition}{section.1}{}} +\newlabel{note-on-solving-for-a-1-column-1}{{1}{5}{\texorpdfstring {Note on solving for \(A^{-1}\) column 1}{Note on solving for A\^{}\{-1\} column 1}}{section*.3}{}} +\@writefile{toc}{\contentsline {paragraph}{Note on solving for \(A^{-1}\) column 1}{5}{section*.3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Condition of a matrix}{10}{subsection.1.1}} +\newlabel{condition-of-a-matrix}{{1.1}{10}{Condition of a matrix}{subsection.1.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.1}\emph {just checked in to see what condition my condition was in}}{10}{subsubsection.1.1.1}} +\newlabel{just-checked-in-to-see-what-condition-my-condition-was-in}{{1.1.1}{10}{\texorpdfstring {\emph {just checked in to see what condition my condition was in}}{just checked in to see what condition my condition was in}}{subsubsection.1.1.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.2}Matrix norms}{10}{subsubsection.1.1.2}} +\newlabel{matrix-norms}{{1.1.2}{10}{Matrix norms}{subsubsection.1.1.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.3}Condition of Matrix}{11}{subsubsection.1.1.3}} +\newlabel{condition-of-matrix}{{1.1.3}{11}{Condition of Matrix}{subsubsection.1.1.3}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Springs-masses\relax }}{13}{figure.caption.4}} diff --git a/lecture_12/lecture_12.bbl b/lecture_12/lecture_12.bbl new file mode 100644 index 0000000..e69de29 diff --git a/lecture_12/lecture_12.blg b/lecture_12/lecture_12.blg new file mode 100644 index 0000000..beafcd1 --- /dev/null +++ b/lecture_12/lecture_12.blg @@ -0,0 +1,48 @@ +This is BibTeX, Version 0.99d (TeX Live 2015/Debian) +Capacity: max_strings=35307, hash_size=35307, hash_prime=30011 +The top-level auxiliary file: lecture_12.aux +I found no \citation commands---while reading file lecture_12.aux +I found no \bibdata command---while reading file lecture_12.aux +I found no \bibstyle command---while reading file lecture_12.aux +You've used 0 entries, + 0 wiz_defined-function locations, + 83 strings with 494 characters, +and the built_in function-call counts, 0 in all, are: += -- 0 +> -- 0 +< -- 0 ++ -- 0 +- -- 0 +* -- 0 +:= -- 0 +add.period$ -- 0 +call.type$ -- 0 +change.case$ -- 0 +chr.to.int$ -- 0 +cite$ -- 0 +duplicate$ -- 0 +empty$ -- 0 +format.name$ -- 0 +if$ -- 0 +int.to.chr$ -- 0 +int.to.str$ -- 0 +missing$ -- 0 +newline$ -- 0 +num.names$ -- 0 +pop$ -- 0 +preamble$ -- 0 +purify$ -- 0 +quote$ -- 0 +skip$ -- 0 +stack$ -- 0 +substring$ -- 0 +swap$ -- 0 +text.length$ -- 0 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 0 +warning$ -- 0 +while$ -- 0 +width$ -- 0 +write$ -- 0 +(There were 3 error messages) diff --git a/lecture_12/lecture_12.ipynb b/lecture_12/lecture_12.ipynb new file mode 100644 index 0000000..2937e47 --- /dev/null +++ b/lecture_12/lecture_12.ipynb @@ -0,0 +1,1248 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 0.447394 0.357071 0.720915 0.499926\n", + " 0.648313 0.323276 0.521677 0.288345\n", + " 0.084982 0.581513 0.466420 0.142342\n", + " 0.576580 0.658089 0.916987 0.923165\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000 0.00000\n", + " 0.13108 1.00000 0.00000 0.00000\n", + " 0.69009 0.24851 1.00000 0.00000\n", + " 0.88935 0.68736 0.68488 1.00000\n", + "\n", + "U =\n", + "\n", + " 0.64831 0.32328 0.52168 0.28834\n", + " 0.00000 0.53914 0.39804 0.10455\n", + " 0.00000 0.00000 0.26199 0.27496\n", + " 0.00000 0.00000 0.00000 0.40655\n", + "\n", + "P =\n", + "\n", + "Permutation Matrix\n", + "\n", + " 0 1 0 0\n", + " 0 0 1 0\n", + " 1 0 0 0\n", + " 0 0 0 1\n", + "\n", + "ans = 1\n" + ] + } + ], + "source": [ + "A=rand(4,4)\n", + "\n", + "[L,U,P]=lu(A)\n", + "\n", + "det(L)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 4 4\n", + "\n", + "ans = 23.586\n", + "ans = 35.826\n", + "ans = 14.869\n", + "C =\n", + "\n", + " 5.98549 4.28555 4.35707 4.31359\n", + " 0.00000 3.63950 1.35005 1.45342\n", + " 0.00000 0.00000 3.62851 1.50580\n", + " 0.00000 0.00000 0.00000 3.21911\n", + "\n" + ] + } + ], + "source": [ + "A=rand(4,100)';\n", + "A=A'*A;\n", + "size(A)\n", + "min(min(A))\n", + "max(max(A))\n", + "cond(A)\n", + "C=chol(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "![q1](det_L.png)\n", + "\n", + "![q2](chol_pre.png)\n", + "\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Will the exam be more theoretical or problem based?\n", + "\n", + "2. Writing code is difficult \n", + "\n", + "3. What format can we expect for the midterm? \n", + "\n", + "2. Could we go over some example questions for the exam?\n", + "\n", + "3. Will the use of GitHub be tested on the Midterm exam? Or is it more focused on linear algebra techniques/what was covered in the lectures?\n", + "\n", + "4. This is not my strong suit, getting a bit overwhelmed with matrix multiplication.\n", + "\n", + "5. I forgot how much I learned in linear algebra.\n", + "\n", + "6. What's the most exciting project you've ever worked on with Matlab/Octave?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrix Inverse and Condition\n", + "\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "If we know that $A^{-1}A=I$, then \n", + "\n", + "$A^{-1}y=A^{-1}Ax=x$\n", + "\n", + "so \n", + "\n", + "$x=A^{-1}y$\n", + "\n", + "Where, $A^{-1}$ is the inverse of matrix $A$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "$Ax=y$\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "$A^{-1}=\\frac{1}{2*3-1*1}\\left[ \\begin{array}{cc}\n", + "3 & -1 \\\\\n", + "-1 & 2 \\end{array} \\right]=\n", + "\\left[ \\begin{array}{cc}\n", + "3/5 & -1/5 \\\\\n", + "-1/5 & 2/5 \\end{array} \\right]$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "invA =\n", + "\n", + " 0.60000 -0.20000\n", + " -0.20000 0.40000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000\n", + " 0.00000 1.00000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000\n", + " 0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "invA=1/5*[3,-1;-1,2]\n", + "\n", + "A*invA\n", + "invA*A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How did we know the inverse of A? \n", + "\n", + "for 2$\\times$2 matrices, it is always:\n", + "\n", + "$A=\\left[ \\begin{array}{cc}\n", + "A_{11} & A_{12} \\\\\n", + "A_{21} & A_{22} \\end{array} \\right]$\n", + "\n", + "$A^{-1}=\\frac{1}{det(A)}\\left[ \\begin{array}{cc}\n", + "A_{22} & -A_{12} \\\\\n", + "-A_{21} & A_{11} \\end{array} \\right]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$AA^{-1}=\\frac{1}{A_{11}A_{22}-A_{21}A_{12}}\\left[ \\begin{array}{cc}\n", + "A_{11}A_{22}-A_{21}A_{12} & -A_{11}A_{12}+A_{12}A_{11} \\\\\n", + "A_{21}A_{22}-A_{22}A_{21} & -A_{21}A_{12}+A_{22}A_{11} \\end{array} \\right]\n", + "=\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0 & 1 \\end{array} \\right]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about bigger matrices?\n", + "\n", + "We can use the LU-decomposition\n", + "\n", + "$A=LU$\n", + "\n", + "$A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$\n", + "\n", + "if we divide $A^{-1}$ into n-column vectors, $a_{n}$, then\n", + "\n", + "$Aa_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$Aa_{2}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$Aa_{n}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "1 \\end{array} \\right]$\n", + "\n", + "\n", + "Which we can solve for each $a_{n}$ with LU-decomposition, knowing the lower and upper triangular decompositions, then \n", + "\n", + "$A^{-1}=\\left[ \\begin{array}{cccc}\n", + "| & | & & | \\\\\n", + "a_{1} & a_{2} & \\cdots & a_{n} \\\\\n", + "| & | & & | \\end{array} \\right]$\n", + "\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{1}=d_{1}$\n", + "\n", + "$Ld_{2}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{2}=d_{2}$\n", + "\n", + "$Ld_{n}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "n \\end{array} \\right]$\n", + "$;~Ua_{n}=d_{n}$\n", + "\n", + "Consider the following matrix:\n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "2 & -1 & 0\\\\\n", + "-1 & 2 & -1\\\\\n", + "0 & -1 & 1 \\end{array} \\right]$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Note on solving for $A^{-1}$ column 1\n", + "\n", + "$Aa_1=I(:,1)$\n", + "\n", + "$LUa_1=I(:,1)$\n", + "\n", + "$(LUa_1-I(:,1))=0$\n", + "\n", + "$L(Ua_1-d_1)=0$\n", + "\n", + "$I(:,1)=Ld_1$" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 -1 0\n", + " -1 2 -1\n", + " 0 -1 1\n", + "\n", + "U =\n", + "\n", + " 2.00000 -1.00000 0.00000\n", + " 0.00000 1.50000 -1.00000\n", + " 0.00000 -1.00000 1.00000\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " -0.50000 1.00000 0.00000\n", + " 0.00000 0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "A=[2,-1,0;-1,2,-1;0,-1,1]\n", + "U=A;\n", + "L=eye(3,3);\n", + "U(2,:)=U(2,:)-U(2,1)/U(1,1)*U(1,:)\n", + "L(2,1)=A(2,1)/A(1,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " -0.50000 1.00000 0.00000\n", + " 0.00000 -0.66667 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 -1.00000 0.00000\n", + " 0.00000 1.50000 -1.00000\n", + " 0.00000 0.00000 0.33333\n", + "\n" + ] + } + ], + "source": [ + "L(3,2)=U(3,2)/U(2,2)\n", + "U(3,:)=U(3,:)-U(3,2)/U(2,2)*U(2,:)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now solve for $d_1$ then $a_1$, $d_2$ then $a_2$, and $d_3$ then $a_{3}$\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]=\n", + "\\left[\\begin{array}{ccc} \n", + "1 & 0 & 0 \\\\ \n", + "-1/2 & 1 & 0 \\\\\n", + "0 & -2/3 & 1 \\end{array} \\right]\\left[\\begin{array}{c} \n", + "d1(1) \\\\ \n", + "d1(2) \\\\ \n", + "d1(3)\\end{array} \\right]=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "0 \\end{array} \\right]\n", + ";~Ua_{1}=d_{1}$" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d1 =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + " 0.33333\n", + "\n" + ] + } + ], + "source": [ + "d1=zeros(3,1);\n", + "d1(1)=1;\n", + "d1(2)=0-L(2,1)*d1(1);\n", + "d1(3)=0-L(3,1)*d1(1)-L(3,2)*d1(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a1 =\n", + "\n", + " 1.00000\n", + " 1.00000\n", + " 1.00000\n", + "\n" + ] + } + ], + "source": [ + "a1=zeros(3,1);\n", + "a1(3)=d1(3)/U(3,3);\n", + "a1(2)=1/U(2,2)*(d1(2)-U(2,3)*a1(3));\n", + "a1(1)=1/U(1,1)*(d1(1)-U(1,2)*a1(2)-U(1,3)*a1(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d2 =\n", + "\n", + " 0.00000\n", + " 1.00000\n", + " 0.66667\n", + "\n" + ] + } + ], + "source": [ + "d2=zeros(3,1);\n", + "d2(1)=0;\n", + "d2(2)=1-L(2,1)*d2(1);\n", + "d2(3)=0-L(3,1)*d2(1)-L(3,2)*d2(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a2 =\n", + "\n", + " 1.0000\n", + " 2.0000\n", + " 2.0000\n", + "\n" + ] + } + ], + "source": [ + "a2=zeros(3,1);\n", + "a2(3)=d2(3)/U(3,3);\n", + "a2(2)=1/U(2,2)*(d2(2)-U(2,3)*a2(3));\n", + "a2(1)=1/U(1,1)*(d2(1)-U(1,2)*a2(2)-U(1,3)*a2(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d3 =\n", + "\n", + " 0\n", + " 0\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "d3=zeros(3,1);\n", + "d3(1)=0;\n", + "d3(2)=0-L(2,1)*d3(1);\n", + "d3(3)=1-L(3,1)*d3(1)-L(3,2)*d3(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a3 =\n", + "\n", + " 1.00000\n", + " 2.00000\n", + " 3.00000\n", + "\n" + ] + } + ], + "source": [ + "a3=zeros(3,1);\n", + "a3(3)=d3(3)/U(3,3);\n", + "a3(2)=1/U(2,2)*(d3(2)-U(2,3)*a3(3));\n", + "a3(1)=1/U(1,1)*(d3(1)-U(1,2)*a3(2)-U(1,3)*a3(3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Final solution for $A^{-1}$ is $[a_{1}~a_{2}~a_{3}]$" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invA =\n", + "\n", + " 1.00000 1.00000 1.00000\n", + " 1.00000 2.00000 2.00000\n", + " 1.00000 2.00000 3.00000\n", + "\n", + "I_app =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " 0.00000 1.00000 -0.00000\n", + " -0.00000 -0.00000 1.00000\n", + "\n", + "ans = -4.4409e-16\n", + "ans = 2.2204e-16\n", + "ans = 0.0039062\n" + ] + } + ], + "source": [ + "invA=[a1,a2,a3]\n", + "I_app=A*invA\n", + "I_app(2,3)\n", + "eps\n", + "\n", + "2^-8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the solution of $x$ to $Ax=y$ is $x=A^{-1}y$" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 1\n", + " 2\n", + " 3\n", + "\n", + "x =\n", + "\n", + " 6.0000\n", + " 11.0000\n", + " 14.0000\n", + "\n", + "xbs =\n", + "\n", + " 6.0000\n", + " 11.0000\n", + " 14.0000\n", + "\n", + "ans =\n", + "\n", + " -3.5527e-15\n", + " -8.8818e-15\n", + " -1.0658e-14\n", + "\n", + "ans = 2.2204e-16\n" + ] + } + ], + "source": [ + "y=[1;2;3]\n", + "x=invA*y\n", + "xbs=A\\y\n", + "x-xbs\n", + "eps" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tinversion\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tinversion\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tbackslash\n", + "\n", + "\t\n", + "\t\tbackslash\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tmultiplication\n", + "\n", + "\t\n", + "\t\tmultiplication\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N=100;\n", + "n=[1:N];\n", + "t_inv=zeros(N,1);\n", + "t_bs=zeros(N,1);\n", + "t_mult=zeros(N,1);\n", + "for i=1:N\n", + " A=rand(i,i);\n", + " tic\n", + " invA=inv(A);\n", + " t_inv(i)=toc;\n", + " b=rand(i,1);\n", + " tic;\n", + " x=A\\b;\n", + " t_bs(i)=toc;\n", + " tic;\n", + " x=invA*b;\n", + " t_mult(i)=toc;\n", + "end\n", + "plot(n,t_inv,n,t_bs,n,t_mult)\n", + "axis([0 100 0 0.002])\n", + "legend('inversion','backslash','multiplication','Location','NorthWest')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Condition of a matrix \n", + "### *just checked in to see what condition my condition was in*\n", + "### Matrix norms\n", + "\n", + "The Euclidean norm of a vector is measure of the magnitude (in 3D this would be: $|x|=\\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general the equation is:\n", + "\n", + "$||x||_{e}=\\sqrt{\\sum_{i=1}^{n}x_{i}^{2}}$\n", + "\n", + "For a matrix, A, the same norm is called the Frobenius norm:\n", + "\n", + "$||A||_{f}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{2}}$\n", + "\n", + "In general we can calculate any $p$-norm where\n", + "\n", + "$||A||_{p}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{p}}$\n", + "\n", + "so the p=1, 1-norm is \n", + "\n", + "$||A||_{1}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{1}}=\\sum_{i=1}^{n}\\sum_{i=1}^{m}|A_{i,j}|$\n", + "\n", + "$||A||_{\\infty}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{\\infty}}=\\max_{1\\le i \\le n}\\sum_{j=1}^{m}|A_{i,j}|$\n", + "\n", + "### Condition of Matrix\n", + "\n", + "The matrix condition is the product of \n", + "\n", + "$Cond(A) = ||A||\\cdot||A^{-1}||$ \n", + "\n", + "So each norm will have a different condition number, but the limit is $Cond(A)\\ge 1$\n", + "\n", + "An estimate of the rounding error is based on the condition of A:\n", + "\n", + "$\\frac{||\\Delta x||}{x} \\le Cond(A) \\frac{||\\Delta A||}{||A||}$\n", + "\n", + "So if the coefficients of A have accuracy to $10^{-t}\n", + "\n", + "and the condition of A, $Cond(A)=10^{c}$\n", + "\n", + "then the solution for x can have rounding errors up to $10^{c-t}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 1.00000 0.50000 0.33333\n", + " 0.50000 0.33333 0.25000\n", + " 0.33333 0.25000 0.20000\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " 0.50000 1.00000 0.00000\n", + " 0.33333 1.00000 1.00000\n", + "\n", + "U =\n", + "\n", + " 1.00000 0.50000 0.33333\n", + " 0.00000 0.08333 0.08333\n", + " 0.00000 -0.00000 0.00556\n", + "\n" + ] + } + ], + "source": [ + "A=[1,1/2,1/3;1/2,1/3,1/4;1/3,1/4,1/5]\n", + "[L,U]=LU_naive(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Then, $A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c}\n", + "1 \\\\\n", + "0 \\\\\n", + "0 \\end{array}\\right]$, $Ux_{1}=d_{1}$ ..." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invA =\n", + "\n", + " 9.0000 -36.0000 30.0000\n", + " -36.0000 192.0000 -180.0000\n", + " 30.0000 -180.0000 180.0000\n", + "\n", + "ans =\n", + "\n", + " 1.0000e+00 3.5527e-15 2.9976e-15\n", + " -1.3249e-14 1.0000e+00 -9.1038e-15\n", + " 8.5117e-15 7.1054e-15 1.0000e+00\n", + "\n" + ] + } + ], + "source": [ + "invA=zeros(3,3);\n", + "d1=L\\[1;0;0];\n", + "d2=L\\[0;1;0];\n", + "d3=L\\[0;0;1];\n", + "invA(:,1)=U\\d1;\n", + "invA(:,2)=U\\d2;\n", + "invA(:,3)=U\\d3\n", + "invA*A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find the condition of A, $cond(A)$" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normf_A = 1.4136\n", + "normf_invA = 372.21\n", + "cond_f_A = 526.16\n", + "ans = 1.4136\n", + "norm1_A = 1.8333\n", + "norm1_invA = 30.000\n", + "ans = 1.8333\n", + "cond_1_A = 55.000\n", + "norminf_A = 1.8333\n", + "norminf_invA = 30.000\n", + "ans = 1.8333\n", + "cond_inf_A = 55.000\n" + ] + } + ], + "source": [ + "% Frobenius norm\n", + "normf_A = sqrt(sum(sum(A.^2)))\n", + "normf_invA = sqrt(sum(sum(invA.^2)))\n", + "\n", + "cond_f_A = normf_A*normf_invA\n", + "\n", + "norm(A,'fro')\n", + "\n", + "% p=1, column sum norm\n", + "norm1_A = max(sum(A,2))\n", + "norm1_invA = max(sum(invA,2))\n", + "norm(A,1)\n", + "\n", + "cond_1_A=norm1_A*norm1_invA\n", + "\n", + "% p=inf, row sum norm\n", + "norminf_A = max(sum(A,1))\n", + "norminf_invA = max(sum(invA,1))\n", + "norm(A,inf)\n", + "\n", + "cond_inf_A=norminf_A*norminf_invA\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with spring constants $K_{i}$. What does a high condition number mean for this problem? \n", + "\n", + "![Springs-masses](../lecture_09/mass_springs.png)\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_{2}(x_{2}-x_{1})-k_{1}x_{1}=0$\n", + "\n", + "$m_{2}g+k_{3}(x_{3}-x_{2})-k_{2}(x_{2}-x_{1})=0$\n", + "\n", + "$m_{3}g+k_{4}(x_{4}-x_{3})-k_{3}(x_{3}-x_{2})=0$\n", + "\n", + "$m_{4}g-k_{4}(x_{4}-x_{3})=0$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{cccc}\n", + "k_{1}+k_{2} & -k_{2} & 0 & 0 \\\\\n", + "-k_{2} & k_{2}+k_{3} & -k_{3} & 0 \\\\\n", + "0 & -k_{3} & k_{3}+k_{4} & -k_{4} \\\\\n", + "0 & 0 & -k_{4} & k_{4} \\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": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 100010 -100000 0 0\n", + " -100000 100010 -10 0\n", + " 0 -10 11 -1\n", + " 0 0 -1 1\n", + "\n", + "y =\n", + "\n", + " 9.8100\n", + " 19.6200\n", + " 29.4300\n", + " 39.2400\n", + "\n" + ] + } + ], + "source": [ + "k1=10; % N/m\n", + "k2=100000;\n", + "k3=10;\n", + "k4=1;\n", + "m1=1; % kg\n", + "m2=2;\n", + "m3=3;\n", + "m4=4;\n", + "g=9.81; % m/s^2\n", + "K=[k1+k2 -k2 0 0; -k2 k2+k3 -k3 0; 0 -k3 k3+k4 -k4; 0 0 -k4 k4]\n", + "y=[m1*g;m2*g;m3*g;m4*g]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 3.2004e+05\n", + "ans = 3.2004e+05\n", + "ans = 2.5925e+05\n", + "ans = 2.5293e+05\n" + ] + } + ], + "source": [ + "cond(K,inf)\n", + "cond(K,1)\n", + "cond(K,'fro')\n", + "cond(K,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "e =\n", + "\n", + " 7.9078e-01\n", + " 3.5881e+00\n", + " 1.7621e+01\n", + " 2.0001e+05\n", + "\n", + "ans = 2.5293e+05\n" + ] + } + ], + "source": [ + "e=eig(K)\n", + "max(e)/min(e)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_12/lecture_12.log b/lecture_12/lecture_12.log new file mode 100644 index 0000000..c4a5ed3 --- /dev/null +++ b/lecture_12/lecture_12.log @@ -0,0 +1,841 @@ +This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex 2017.1.11) 28 FEB 2017 14:24 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**lecture_12.tex +(./lecture_12.tex +LaTeX2e <2016/02/01> +Babel <3.9q> and hyphenation patterns for 81 language(s) loaded. +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo +File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 48. +)) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks14 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2016/01/03 v1.0q Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +) +Package graphics Info: Driver file: pdftex.def on input line 95. + +(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +) +\Gread@gobject=\count87 +)) +\Gin@req@height=\dimen103 +\Gin@req@width=\dimen104 +) +(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty +Package: caption 2016/02/21 v3.3-144 Customizing captions (AR) + +(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty +Package: caption3 2016/02/04 v1.7-139 caption3 kernel (AR) +Package caption3 Info: TeX engine: e-TeX on input line 67. +\captionmargin=\dimen105 +\captionmargin@=\dimen106 +\captionwidth=\dimen107 +\caption@tempdima=\dimen108 +\caption@indent=\dimen109 +\caption@parindent=\dimen110 +\caption@hangindent=\dimen111 +) +\c@ContinuedFloat=\count88 +) +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/adjustbox.sty +Package: adjustbox 2012/05/21 v1.0 Adjusting TeX boxes (trim, clip, ...) + +(/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty +Package: xkeyval 2014/12/03 v2.7a package option processing (HA) + +(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex +(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex +\XKV@toks=\toks15 +\XKV@tempa@toks=\toks16 +) +\XKV@depth=\count89 +File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) +)) +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/adjcalc.sty +Package: adjcalc 2012/05/16 v1.1 Provides advanced setlength with multiple back +-ends (calc, etex, pgfmath) +) +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/trimclip.sty +Package: trimclip 2012/05/16 v1.0 Trim and clip general TeX material + +(/usr/share/texlive/texmf-dist/tex/latex/collectbox/collectbox.sty +Package: collectbox 2012/05/17 v0.4b Collect macro arguments as boxes +\collectedbox=\box26 +) +\tc@llx=\dimen112 +\tc@lly=\dimen113 +\tc@urx=\dimen114 +\tc@ury=\dimen115 +Package trimclip Info: Using driver 'tc-pdftex.def'. + +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/tc-pdftex.def +File: tc-pdftex.def 2012/05/13 v1.0 Clipping driver for pdftex +)) +\adjbox@Width=\dimen116 +\adjbox@Height=\dimen117 +\adjbox@Depth=\dimen118 +\adjbox@Totalheight=\dimen119 + +(/usr/share/texlive/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +Package: ifoddpage 2011/09/13 v1.0 Conditionals for odd/even page detection +\c@checkoddpage=\count90 +) +(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty +Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages +\@vwid@box=\box27 +\sift@deathcycles=\count91 +\@vwid@loff=\dimen120 +\@vwid@roff=\dimen121 +)) +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive +) +Package xcolor Info: Driver file: pdftex.def on input line 225. +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. +Package xcolor Info: Model `RGB' extended on input line 1353. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/enumerate.sty +Package: enumerate 2015/07/23 v3.00 enumerate extensions (DPC) +\@enLab=\toks17 +) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in PDF mode is detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count92 +\Gm@cntv=\count93 +\c@Gm@tempcnt=\count94 +\Gm@bindingoffset=\dimen122 +\Gm@wd@mp=\dimen123 +\Gm@odd@mp=\dimen124 +\Gm@even@mp=\dimen125 +\Gm@layoutwidth=\dimen126 +\Gm@layoutheight=\dimen127 +\Gm@layouthoffset=\dimen128 +\Gm@layoutvoffset=\dimen129 +\Gm@dimlist=\toks18 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2016/03/03 v2.15a AMS math features +\@mathmargin=\skip43 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks19 +\ex@=\dimen130 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen131 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 1999/12/14 v2.01 operator names +) +\inf@bad=\count95 +LaTeX Info: Redefining \frac on input line 199. +\uproot@=\count96 +\leftroot@=\count97 +LaTeX Info: Redefining \overline on input line 297. +\classnum@=\count98 +\DOTSCASE@=\count99 +LaTeX Info: Redefining \ldots on input line 394. +LaTeX Info: Redefining \dots on input line 397. +LaTeX Info: Redefining \cdots on input line 518. +\Mathstrutbox@=\box28 +\strutbox@=\box29 +\big@size=\dimen132 +LaTeX Font Info: Redeclaring font encoding OML on input line 630. +LaTeX Font Info: Redeclaring font encoding OMS on input line 631. +\macc@depth=\count100 +\c@MaxMatrixCols=\count101 +\dotsspace@=\muskip10 +\c@parentequation=\count102 +\dspbrk@lvl=\count103 +\tag@help=\toks20 +\row@=\count104 +\column@=\count105 +\maxfields@=\count106 +\andhelp@=\toks21 +\eqnshift@=\dimen133 +\alignsep@=\dimen134 +\tagshift@=\dimen135 +\tagwidth@=\dimen136 +\totwidth@=\dimen137 +\lineht@=\dimen138 +\@envbody=\toks22 +\multlinegap=\skip44 +\multlinetaggap=\skip45 +\mathdisplay@stack=\toks23 +LaTeX Info: Redefining \[ on input line 2735. +LaTeX Info: Redefining \] on input line 2736. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup5 +\symAMSb=\mathgroup6 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +Package: textcomp 2005/09/27 v1.99g Standard LaTeX package +Package textcomp Info: Sub-encoding information: +(textcomp) 5 = only ISO-Adobe without \textcurrency +(textcomp) 4 = 5 + \texteuro +(textcomp) 3 = 4 + \textohm +(textcomp) 2 = 3 + \textestimated + \textcurrency +(textcomp) 1 = TS1 - \textcircled - \t +(textcomp) 0 = TS1 (full) +(textcomp) Font families with sub-encoding setting implement +(textcomp) only a restricted character set as indicated. +(textcomp) Family '?' is the default used for unknown fonts. +(textcomp) See the documentation for details. +Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79. + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file +) +LaTeX Info: Redefining \oldstylenums on input line 334. +Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349. +Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350. +Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351. +Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352. +Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353. +Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354. +Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355. +Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356. +Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357. +Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358. +Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359. +Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360. +Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361. +Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362. +Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363. +Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364. +Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365. +Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366. +Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367. +Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368. +Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369. +Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370. +Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371. +Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372. + +Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373. +Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374. +Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375. +Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376. +Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377. +Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378. +Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379. +Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380. +Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381. +Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382. +Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383. +Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384. +Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385. +Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386. +Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387. +Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388. +Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389. +Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390. +Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391. +Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392. +Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409. +) +(/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty +Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba +tim +) +(/usr/share/texlive/texmf-dist/tex/latex/eurosym/eurosym.sty +Package: eurosym 1998/08/06 v1.1 European currency symbol ``Euro'' +\@eurobox=\box30 +) +(/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty +Package: ucs 2013/05/11 v2.2 UCS: Unicode input support + +(/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def +File: uni-global.def 2013/05/13 UCS: Unicode global data +) +\uc@secondtry=\count107 +\uc@combtoks=\toks24 +\uc@combtoksb=\toks25 +\uc@temptokena=\toks26 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2015/03/17 v1.2c Input encoding file +\inpenc@prehook=\toks27 +\inpenc@posthook=\toks28 + +(/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def +File: utf8x.def 2004/10/17 UCS: Input encoding UTF-8 +)) +(/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +Package: fancyvrb 2008/02/07 + +Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix +<2008/02/07> (tvz) +\FV@CodeLineNo=\count108 +\FV@InFile=\read1 +\FV@TabBox=\box31 +\c@FancyVerbLine=\count109 +\FV@StepNumber=\count110 +\FV@OutFile=\write3 +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grffile.sty +Package: grffile 2012/04/05 v1.16 Extended file name support for graphics (HO) + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +))) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +) +Package grffile Info: Option `multidot' is set to `true'. +Package grffile Info: Option `extendedchars' is set to `false'. +Package grffile Info: Option `space' is set to `true'. +Package grffile Info: \Gin@ii of package `graphicx' fixed on input line 486. +) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) + + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package hobsub Info: Skipping package `infwarerr' (already loaded). +Package hobsub Info: Skipping package `ltxcmds' (already loaded). +Package hobsub Info: Skipping package `ifluatex' (already loaded). +Package hobsub Info: Skipping package `ifvtex' (already loaded). +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) +Package hobsub Info: Skipping package `ifpdf' (already loaded). +Package hobsub Info: Skipping package `etexcmds' (already loaded). +Package hobsub Info: Skipping package `kvsetkeys' (already loaded). +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) +Package hobsub Info: Skipping package `pdftexcmds' (already loaded). +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +) +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +) +Package hobsub Info: Skipping package `hobsub' (already loaded). +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) +Package: xcolor-patch 2011/01/30 xcolor patch +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) +) +\@linkdim=\dimen139 +\Hy@linkcounter=\count111 +\Hy@pagecounter=\count112 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) +) +\Hy@SavedSpaceFactor=\count113 + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +) +Package hyperref Info: Hyper figures OFF on input line 4443. +Package hyperref Info: Link nesting OFF on input line 4448. +Package hyperref Info: Hyper index ON on input line 4451. +Package hyperref Info: Plain pages OFF on input line 4458. +Package hyperref Info: Backreferencing OFF on input line 4463. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4688. +\c@Hy@tempcnt=\count114 + +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip11 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 5041. +\XeTeXLinkMargin=\dimen140 +\Fld@menulength=\count115 +\Field@Width=\dimen141 +\Fld@charsize=\dimen142 +Package hyperref Info: Hyper figures OFF on input line 6295. +Package hyperref Info: Link nesting OFF on input line 6300. +Package hyperref Info: Hyper index ON on input line 6303. +Package hyperref Info: backreferencing OFF on input line 6310. +Package hyperref Info: Link coloring OFF on input line 6315. +Package hyperref Info: Link coloring with OCG OFF on input line 6320. +Package hyperref Info: PDF/A mode OFF on input line 6325. +LaTeX Info: Redefining \ref on input line 6365. +LaTeX Info: Redefining \pageref on input line 6369. +\Hy@abspage=\count116 +\c@Item=\count117 +\c@Hfootnote=\count118 +) + +Package hyperref Message: Driver (autodetected): hpdftex. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX +\Fld@listcount=\count119 +\c@bookmark@seq@number=\count120 + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +82. +) +\Hy@SectionHShift=\skip46 +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty +Package: longtable 2014/10/28 v4.11 Multi-page Table package (DPC) +\LTleft=\skip47 +\LTright=\skip48 +\LTpre=\skip49 +\LTpost=\skip50 +\LTchunksize=\count121 +\LTcapwidth=\dimen143 +\LT@head=\box32 +\LT@firsthead=\box33 +\LT@foot=\box34 +\LT@lastfoot=\box35 +\LT@cols=\count122 +\LT@rows=\count123 +\c@LT@tables=\count124 +\c@LT@chunks=\count125 +\LT@p@ftn=\toks29 +) +(/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty +Package: booktabs 2005/04/14 v1.61803 publication quality tables +\heavyrulewidth=\dimen144 +\lightrulewidth=\dimen145 +\cmidrulewidth=\dimen146 +\belowrulesep=\dimen147 +\belowbottomsep=\dimen148 +\aboverulesep=\dimen149 +\abovetopsep=\dimen150 +\cmidrulesep=\dimen151 +\cmidrulekern=\dimen152 +\defaultaddspace=\dimen153 +\@cmidla=\count126 +\@cmidlb=\count127 +\@aboverulesep=\dimen154 +\@belowrulesep=\dimen155 +\@thisruleclass=\count128 +\@lastruleclass=\count129 +\@thisrulewidth=\dimen156 +) +(/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty +Package: enumitem 2011/09/28 v3.5.2 Customized lists +\labelindent=\skip51 +\enit@outerparindent=\dimen157 +\enit@toks=\toks30 +\enit@inbox=\box36 +\enitdp@description=\count130 +) +(/usr/share/texlive/texmf-dist/tex/generic/ulem/ulem.sty +\UL@box=\box37 +\UL@hyphenbox=\box38 +\UL@skip=\skip52 +\UL@hook=\toks31 +\UL@height=\dimen158 +\UL@pe=\count131 +\UL@pixel=\dimen159 +\ULC@box=\box39 +Package: ulem 2012/05/18 +\ULdepth=\dimen160 +) +Package hyperref Info: Option `breaklinks' set `true' on input line 264. +Package hyperref Info: Option `colorlinks' set `true' on input line 264. + (./lecture_12.aux) +\openout1 = `lecture_12.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 271. +LaTeX Font Info: Try loading font information for TS1+cmr on input line 271. + + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Try loading font information for T1+ppl on input line 271. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count132 +\scratchdimen=\dimen161 +\scratchbox=\box40 +\nofMPsegments=\count133 +\nofMParguments=\count134 +\everyMPshowfont=\toks32 +\MPscratchCnt=\count135 +\MPscratchDim=\dimen162 +\MPnumerator=\count136 +\makeMPintoPDFobject=\count137 +\everyMPtoPDFconversion=\toks33 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) +) +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 452. + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: hyperref package is loaded. +Package caption Info: longtable package is loaded. + +(/usr/share/texlive/texmf-dist/tex/latex/caption/ltcaption.sty +Package: ltcaption 2013/06/09 v1.4-94 longtable captions (AR) +) +Package caption Info: End \AtBeginDocument code. + +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) +* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) +* \paperwidth=614.295pt +* \paperheight=794.96999pt +* \textwidth=469.75502pt +* \textheight=650.43001pt +* \oddsidemargin=0.0pt +* \evensidemargin=0.0pt +* \topmargin=-37.0pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=11.0pt +* \footskip=30.0pt +* \marginparwidth=59.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +(/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def +File: ucsencs.def 2011/01/21 Fixes to fontencodings LGR, T3 +) +\AtBeginShipoutBox=\box41 +Package hyperref Info: Link coloring ON on input line 271. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) +) +\c@section@level=\count138 +) +LaTeX Info: Redefining \ref on input line 271. +LaTeX Info: Redefining \pageref on input line 271. +LaTeX Info: Redefining \nameref on input line 271. + +(./lecture_12.out) (./lecture_12.out) +\@outlinefile=\write4 +\openout4 = `lecture_12.out'. + +LaTeX Font Info: Try loading font information for OT1+ppl on input line 275. + + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +) +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 12.50409pt on input line 275. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 9.37807pt on input line 275. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 7.29405pt on input line 275. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 12.50409pt on input line 275. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 9.37807pt on input line 275. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 7.29405pt on input line 275. + + +LaTeX Warning: No \author given. + +LaTeX Font Info: Try loading font information for T1+cmtt on input line 279. + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] +LaTeX Font Info: Try loading font information for TS1+cmtt on input line 331 +. + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmtt.fd +File: ts1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <12> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 359. + + +File: det_L.png Graphic file (type png) + +Package pdftex.def Info: det_L.png used on input line 363. +(pdftex.def) Requested size: 375.80544pt x 183.64162pt. + + +File: chol_pre.png Graphic file (type png) + +Package pdftex.def Info: chol_pre.png used on input line 369. +(pdftex.def) Requested size: 375.80544pt x 183.9047pt. + [2 <./det_L.png>] +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <14.4> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 400. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 11.40997pt on input line 404. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 8.33606pt on input line 404. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 6.25204pt on input line 404. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 11.40997pt on input line 404. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 8.33606pt on input line 404. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 6.25204pt on input line 404. + [3 <./chol_pre.png>] [4] +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <10.95> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 503. + [5] [6] [7] [8] +LaTeX Font Info: Font shape `T1/cmtt/bx/n' in size <10.95> not available +(Font) Font shape `T1/cmtt/m/n' tried instead on input line 746. + + +File: lecture_12_files/lecture_12_24_0.pdf Graphic file (type pdf) + + +Package pdftex.def Info: lecture_12_files/lecture_12_24_0.pdf used on input lin +e 765. +(pdftex.def) Requested size: 449.6789pt x 337.25917pt. + [9] +Underfull \hbox (badness 10000) in paragraph at lines 767--768 + + [] + +LaTeX Font Info: Font shape `T1/ppl/bx/it' in size <10.95> not available +(Font) Font shape `T1/ppl/b/it' tried instead on input line 773. +[10 <./lecture_12_files/lecture_12_24_0.pdf>] [11] [12] +<../lecture_09/mass_springs.png, id=118, 112.42pt x 190.7125pt> +File: ../lecture_09/mass_springs.png Graphic file (type png) + + +Package pdftex.def Info: ../lecture_09/mass_springs.png used on input line 923. + +(pdftex.def) Requested size: 89.93611pt x 152.576pt. + [13 <../lecture_09/mass_springs.png>] +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1015. + +[14] +Package atveryend Info: Empty hook `AfterLastShipout' on input line 1015. + (./lecture_12.aux) +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1015. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1015. + +Package rerunfilecheck Info: File `lecture_12.out' has not changed. +(rerunfilecheck) Checksum: 2BDB89EC075D3A42B038A5DAC39843C7;535. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1015. + ) +Here is how much of TeX's memory you used: + 10955 strings out of 493029 + 163811 string characters out of 6136234 + 270140 words of memory out of 5000000 + 14229 multiletter control sequences out of 15000+600000 + 37652 words of font info for 95 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 36i,9n,77p,512b,465s stack positions out of 5000i,500n,10000p,200000b,80000s +{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/share/texmf/ +fonts/enc/dvips/cm-super/cm-super-ts1.enc}{/usr/share/texmf/fonts/enc/dvips/cm- +super/cm-super-t1.enc} +Output written on lecture_12.pdf (14 pages, 232410 bytes). +PDF statistics: + 177 PDF objects out of 1000 (max. 8388607) + 140 compressed objects within 2 object streams + 34 named destinations out of 1000 (max. 500000) + 77 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/lecture_12/lecture_12.md b/lecture_12/lecture_12.md new file mode 100644 index 0000000..82f9bea --- /dev/null +++ b/lecture_12/lecture_12.md @@ -0,0 +1,772 @@ + + +```octave +%plot --format svg +``` + + +```octave +setdefaults +``` + + +```octave +A=rand(4,4) + +[L,U,P]=lu(A) + +det(L) +``` + + A = + + 0.447394 0.357071 0.720915 0.499926 + 0.648313 0.323276 0.521677 0.288345 + 0.084982 0.581513 0.466420 0.142342 + 0.576580 0.658089 0.916987 0.923165 + + L = + + 1.00000 0.00000 0.00000 0.00000 + 0.13108 1.00000 0.00000 0.00000 + 0.69009 0.24851 1.00000 0.00000 + 0.88935 0.68736 0.68488 1.00000 + + U = + + 0.64831 0.32328 0.52168 0.28834 + 0.00000 0.53914 0.39804 0.10455 + 0.00000 0.00000 0.26199 0.27496 + 0.00000 0.00000 0.00000 0.40655 + + P = + + Permutation Matrix + + 0 1 0 0 + 0 0 1 0 + 1 0 0 0 + 0 0 0 1 + + ans = 1 + + + +```octave +A=rand(4,100)'; +A=A'*A; +size(A) +min(min(A)) +max(max(A)) +cond(A) +C=chol(A) +``` + + ans = + + 4 4 + + ans = 23.586 + ans = 35.826 + ans = 14.869 + C = + + 5.98549 4.28555 4.35707 4.31359 + 0.00000 3.63950 1.35005 1.45342 + 0.00000 0.00000 3.62851 1.50580 + 0.00000 0.00000 0.00000 3.21911 + + + +## My question from last class + +![q1](det_L.png) + +![q2](chol_pre.png) + + +## Your questions from last class + +1. Will the exam be more theoretical or problem based? + +2. Writing code is difficult + +3. What format can we expect for the midterm? + +2. Could we go over some example questions for the exam? + +3. Will the use of GitHub be tested on the Midterm exam? Or is it more focused on linear algebra techniques/what was covered in the lectures? + +4. This is not my strong suit, getting a bit overwhelmed with matrix multiplication. + +5. I forgot how much I learned in linear algebra. + +6. What's the most exciting project you've ever worked on with Matlab/Octave? + +# Matrix Inverse and Condition + + +Considering the same solution set: + +$y=Ax$ + +If we know that $A^{-1}A=I$, then + +$A^{-1}y=A^{-1}Ax=x$ + +so + +$x=A^{-1}y$ + +Where, $A^{-1}$ is the inverse of matrix $A$. + +$2x_{1}+x_{2}=1$ + +$x_{1}+3x_{2}=1$ + +$Ax=y$ + +$\left[ \begin{array}{cc} +2 & 1 \\ +1 & 3 \end{array} \right] +\left[\begin{array}{c} +x_{1} \\ +x_{2} \end{array}\right]= +\left[\begin{array}{c} +1 \\ +1\end{array}\right]$ + +$A^{-1}=\frac{1}{2*3-1*1}\left[ \begin{array}{cc} +3 & -1 \\ +-1 & 2 \end{array} \right]= +\left[ \begin{array}{cc} +3/5 & -1/5 \\ +-1/5 & 2/5 \end{array} \right]$ + + + +```octave +A=[2,1;1,3] +invA=1/5*[3,-1;-1,2] + +A*invA +invA*A +``` + + A = + + 2 1 + 1 3 + + invA = + + 0.60000 -0.20000 + -0.20000 0.40000 + + ans = + + 1.00000 0.00000 + 0.00000 1.00000 + + ans = + + 1.00000 0.00000 + 0.00000 1.00000 + + + +How did we know the inverse of A? + +for 2$\times$2 matrices, it is always: + +$A=\left[ \begin{array}{cc} +A_{11} & A_{12} \\ +A_{21} & A_{22} \end{array} \right]$ + +$A^{-1}=\frac{1}{det(A)}\left[ \begin{array}{cc} +A_{22} & -A_{12} \\ +-A_{21} & A_{11} \end{array} \right]$ + +$AA^{-1}=\frac{1}{A_{11}A_{22}-A_{21}A_{12}}\left[ \begin{array}{cc} +A_{11}A_{22}-A_{21}A_{12} & -A_{11}A_{12}+A_{12}A_{11} \\ +A_{21}A_{22}-A_{22}A_{21} & -A_{21}A_{12}+A_{22}A_{11} \end{array} \right] +=\left[ \begin{array}{cc} +1 & 0 \\ +0 & 1 \end{array} \right]$ + +What about bigger matrices? + +We can use the LU-decomposition + +$A=LU$ + +$A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$ + +if we divide $A^{-1}$ into n-column vectors, $a_{n}$, then + +$Aa_{1}=\left[\begin{array}{c} +1 \\ +0 \\ +\vdots \\ +0 \end{array} \right]$ +$Aa_{2}=\left[\begin{array}{c} +0 \\ +1 \\ +\vdots \\ +0 \end{array} \right]$ +$Aa_{n}=\left[\begin{array}{c} +0 \\ +0 \\ +\vdots \\ +1 \end{array} \right]$ + + +Which we can solve for each $a_{n}$ with LU-decomposition, knowing the lower and upper triangular decompositions, then + +$A^{-1}=\left[ \begin{array}{cccc} +| & | & & | \\ +a_{1} & a_{2} & \cdots & a_{n} \\ +| & | & & | \end{array} \right]$ + + +$Ld_{1}=\left[\begin{array}{c} +1 \\ +0 \\ +\vdots \\ +0 \end{array} \right]$ +$;~Ua_{1}=d_{1}$ + +$Ld_{2}=\left[\begin{array}{c} +0 \\ +1 \\ +\vdots \\ +0 \end{array} \right]$ +$;~Ua_{2}=d_{2}$ + +$Ld_{n}=\left[\begin{array}{c} +0 \\ +1 \\ +\vdots \\ +n \end{array} \right]$ +$;~Ua_{n}=d_{n}$ + +Consider the following matrix: + +$A=\left[ \begin{array}{ccc} +2 & -1 & 0\\ +-1 & 2 & -1\\ +0 & -1 & 1 \end{array} \right]$ + + +#### Note on solving for $A^{-1}$ column 1 + +$Aa_1=I(:,1)$ + +$LUa_1=I(:,1)$ + +$(LUa_1-I(:,1))=0$ + +$L(Ua_1-d_1)=0$ + +$I(:,1)=Ld_1$ + + +```octave +A=[2,-1,0;-1,2,-1;0,-1,1] +U=A; +L=eye(3,3); +U(2,:)=U(2,:)-U(2,1)/U(1,1)*U(1,:) +L(2,1)=A(2,1)/A(1,1) +``` + + A = + + 2 -1 0 + -1 2 -1 + 0 -1 1 + + U = + + 2.00000 -1.00000 0.00000 + 0.00000 1.50000 -1.00000 + 0.00000 -1.00000 1.00000 + + L = + + 1.00000 0.00000 0.00000 + -0.50000 1.00000 0.00000 + 0.00000 0.00000 1.00000 + + + + +```octave +L(3,2)=U(3,2)/U(2,2) +U(3,:)=U(3,:)-U(3,2)/U(2,2)*U(2,:) + +``` + + L = + + 1.00000 0.00000 0.00000 + -0.50000 1.00000 0.00000 + 0.00000 -0.66667 1.00000 + + U = + + 2.00000 -1.00000 0.00000 + 0.00000 1.50000 -1.00000 + 0.00000 0.00000 0.33333 + + + +Now solve for $d_1$ then $a_1$, $d_2$ then $a_2$, and $d_3$ then $a_{3}$ + +$Ld_{1}=\left[\begin{array}{c} +1 \\ +0 \\ +\vdots \\ +0 \end{array} \right]= +\left[\begin{array}{ccc} +1 & 0 & 0 \\ +-1/2 & 1 & 0 \\ +0 & -2/3 & 1 \end{array} \right]\left[\begin{array}{c} +d1(1) \\ +d1(2) \\ +d1(3)\end{array} \right]=\left[\begin{array}{c} +1 \\ +0 \\ +0 \end{array} \right] +;~Ua_{1}=d_{1}$ + + +```octave +d1=zeros(3,1); +d1(1)=1; +d1(2)=0-L(2,1)*d1(1); +d1(3)=0-L(3,1)*d1(1)-L(3,2)*d1(2) +``` + + d1 = + + 1.00000 + 0.50000 + 0.33333 + + + + +```octave +a1=zeros(3,1); +a1(3)=d1(3)/U(3,3); +a1(2)=1/U(2,2)*(d1(2)-U(2,3)*a1(3)); +a1(1)=1/U(1,1)*(d1(1)-U(1,2)*a1(2)-U(1,3)*a1(3)) +``` + + a1 = + + 1.00000 + 1.00000 + 1.00000 + + + + +```octave +d2=zeros(3,1); +d2(1)=0; +d2(2)=1-L(2,1)*d2(1); +d2(3)=0-L(3,1)*d2(1)-L(3,2)*d2(2) +``` + + d2 = + + 0.00000 + 1.00000 + 0.66667 + + + + +```octave +a2=zeros(3,1); +a2(3)=d2(3)/U(3,3); +a2(2)=1/U(2,2)*(d2(2)-U(2,3)*a2(3)); +a2(1)=1/U(1,1)*(d2(1)-U(1,2)*a2(2)-U(1,3)*a2(3)) +``` + + a2 = + + 1.0000 + 2.0000 + 2.0000 + + + + +```octave +d3=zeros(3,1); +d3(1)=0; +d3(2)=0-L(2,1)*d3(1); +d3(3)=1-L(3,1)*d3(1)-L(3,2)*d3(2) +``` + + d3 = + + 0 + 0 + 1 + + + + +```octave +a3=zeros(3,1); +a3(3)=d3(3)/U(3,3); +a3(2)=1/U(2,2)*(d3(2)-U(2,3)*a3(3)); +a3(1)=1/U(1,1)*(d3(1)-U(1,2)*a3(2)-U(1,3)*a3(3)) +``` + + a3 = + + 1.00000 + 2.00000 + 3.00000 + + + +Final solution for $A^{-1}$ is $[a_{1}~a_{2}~a_{3}]$ + + +```octave +invA=[a1,a2,a3] +I_app=A*invA +I_app(2,3) +eps + +2^-8 +``` + + invA = + + 1.00000 1.00000 1.00000 + 1.00000 2.00000 2.00000 + 1.00000 2.00000 3.00000 + + I_app = + + 1.00000 0.00000 0.00000 + 0.00000 1.00000 -0.00000 + -0.00000 -0.00000 1.00000 + + ans = -4.4409e-16 + ans = 2.2204e-16 + ans = 0.0039062 + + +Now the solution of $x$ to $Ax=y$ is $x=A^{-1}y$ + + +```octave +y=[1;2;3] +x=invA*y +xbs=A\y +x-xbs +eps +``` + + y = + + 1 + 2 + 3 + + x = + + 6.0000 + 11.0000 + 14.0000 + + xbs = + + 6.0000 + 11.0000 + 14.0000 + + ans = + + -3.5527e-15 + -8.8818e-15 + -1.0658e-14 + + ans = 2.2204e-16 + + + +```octave +N=100; +n=[1:N]; +t_inv=zeros(N,1); +t_bs=zeros(N,1); +t_mult=zeros(N,1); +for i=1:N + A=rand(i,i); + tic + invA=inv(A); + t_inv(i)=toc; + b=rand(i,1); + tic; + x=A\b; + t_bs(i)=toc; + tic; + x=invA*b; + t_mult(i)=toc; +end +plot(n,t_inv,n,t_bs,n,t_mult) +axis([0 100 0 0.002]) +legend('inversion','backslash','multiplication','Location','NorthWest') +``` + + +![svg](lecture_12_files/lecture_12_24_0.svg) + + +## Condition of a matrix +### *just checked in to see what condition my condition was in* +### Matrix norms + +The Euclidean norm of a vector is measure of the magnitude (in 3D this would be: $|x|=\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general the equation is: + +$||x||_{e}=\sqrt{\sum_{i=1}^{n}x_{i}^{2}}$ + +For a matrix, A, the same norm is called the Frobenius norm: + +$||A||_{f}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{2}}$ + +In general we can calculate any $p$-norm where + +$||A||_{p}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{p}}$ + +so the p=1, 1-norm is + +$||A||_{1}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{1}}=\sum_{i=1}^{n}\sum_{i=1}^{m}|A_{i,j}|$ + +$||A||_{\infty}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{\infty}}=\max_{1\le i \le n}\sum_{j=1}^{m}|A_{i,j}|$ + +### Condition of Matrix + +The matrix condition is the product of + +$Cond(A) = ||A||\cdot||A^{-1}||$ + +So each norm will have a different condition number, but the limit is $Cond(A)\ge 1$ + +An estimate of the rounding error is based on the condition of A: + +$\frac{||\Delta x||}{x} \le Cond(A) \frac{||\Delta A||}{||A||}$ + +So if the coefficients of A have accuracy to $10^{-t} + +and the condition of A, $Cond(A)=10^{c}$ + +then the solution for x can have rounding errors up to $10^{c-t}$ + + + +```octave +A=[1,1/2,1/3;1/2,1/3,1/4;1/3,1/4,1/5] +[L,U]=LU_naive(A) +``` + + A = + + 1.00000 0.50000 0.33333 + 0.50000 0.33333 0.25000 + 0.33333 0.25000 0.20000 + + L = + + 1.00000 0.00000 0.00000 + 0.50000 1.00000 0.00000 + 0.33333 1.00000 1.00000 + + U = + + 1.00000 0.50000 0.33333 + 0.00000 0.08333 0.08333 + 0.00000 -0.00000 0.00556 + + + +Then, $A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$ + +$Ld_{1}=\left[\begin{array}{c} +1 \\ +0 \\ +0 \end{array}\right]$, $Ux_{1}=d_{1}$ ... + + +```octave +invA=zeros(3,3); +d1=L\[1;0;0]; +d2=L\[0;1;0]; +d3=L\[0;0;1]; +invA(:,1)=U\d1; +invA(:,2)=U\d2; +invA(:,3)=U\d3 +invA*A +``` + + invA = + + 9.0000 -36.0000 30.0000 + -36.0000 192.0000 -180.0000 + 30.0000 -180.0000 180.0000 + + ans = + + 1.0000e+00 3.5527e-15 2.9976e-15 + -1.3249e-14 1.0000e+00 -9.1038e-15 + 8.5117e-15 7.1054e-15 1.0000e+00 + + + +Find the condition of A, $cond(A)$ + + +```octave +% Frobenius norm +normf_A = sqrt(sum(sum(A.^2))) +normf_invA = sqrt(sum(sum(invA.^2))) + +cond_f_A = normf_A*normf_invA + +norm(A,'fro') + +% p=1, column sum norm +norm1_A = max(sum(A,2)) +norm1_invA = max(sum(invA,2)) +norm(A,1) + +cond_1_A=norm1_A*norm1_invA + +% p=inf, row sum norm +norminf_A = max(sum(A,1)) +norminf_invA = max(sum(invA,1)) +norm(A,inf) + +cond_inf_A=norminf_A*norminf_invA + +``` + + normf_A = 1.4136 + normf_invA = 372.21 + cond_f_A = 526.16 + ans = 1.4136 + norm1_A = 1.8333 + norm1_invA = 30.000 + ans = 1.8333 + cond_1_A = 55.000 + norminf_A = 1.8333 + norminf_invA = 30.000 + ans = 1.8333 + cond_inf_A = 55.000 + + +Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with spring constants $K_{i}$. What does a high condition number mean for this problem? + +![Springs-masses](../lecture_09/mass_springs.png) + +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_{2}(x_{2}-x_{1})-k_{1}x_{1}=0$ + +$m_{2}g+k_{3}(x_{3}-x_{2})-k_{2}(x_{2}-x_{1})=0$ + +$m_{3}g+k_{4}(x_{4}-x_{3})-k_{3}(x_{3}-x_{2})=0$ + +$m_{4}g-k_{4}(x_{4}-x_{3})=0$ + +in matrix form: + +$\left[ \begin{array}{cccc} +k_{1}+k_{2} & -k_{2} & 0 & 0 \\ +-k_{2} & k_{2}+k_{3} & -k_{3} & 0 \\ +0 & -k_{3} & k_{3}+k_{4} & -k_{4} \\ +0 & 0 & -k_{4} & k_{4} \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 +k1=10; % N/m +k2=100000; +k3=10; +k4=1; +m1=1; % kg +m2=2; +m3=3; +m4=4; +g=9.81; % m/s^2 +K=[k1+k2 -k2 0 0; -k2 k2+k3 -k3 0; 0 -k3 k3+k4 -k4; 0 0 -k4 k4] +y=[m1*g;m2*g;m3*g;m4*g] +``` + + K = + + 100010 -100000 0 0 + -100000 100010 -10 0 + 0 -10 11 -1 + 0 0 -1 1 + + y = + + 9.8100 + 19.6200 + 29.4300 + 39.2400 + + + + +```octave +cond(K,inf) +cond(K,1) +cond(K,'fro') +cond(K,2) +``` + + ans = 3.2004e+05 + ans = 3.2004e+05 + ans = 2.5925e+05 + ans = 2.5293e+05 + + + +```octave +e=eig(K) +max(e)/min(e) +``` + + e = + + 7.9078e-01 + 3.5881e+00 + 1.7621e+01 + 2.0001e+05 + + ans = 2.5293e+05 + + + +```octave + +``` diff --git a/lecture_12/lecture_12.out b/lecture_12/lecture_12.out new file mode 100644 index 0000000..e7b5af8 --- /dev/null +++ b/lecture_12/lecture_12.out @@ -0,0 +1,7 @@ +\BOOKMARK [2][-]{subsection.0.1}{My question from last class}{}% 1 +\BOOKMARK [2][-]{subsection.0.2}{Your questions from last class}{}% 2 +\BOOKMARK [1][-]{section.1}{Matrix Inverse and Condition}{}% 3 +\BOOKMARK [2][-]{subsection.1.1}{Condition of a matrix}{section.1}% 4 +\BOOKMARK [3][-]{subsubsection.1.1.1}{just checked in to see what condition my condition was in}{subsection.1.1}% 5 +\BOOKMARK [3][-]{subsubsection.1.1.2}{Matrix norms}{subsection.1.1}% 6 +\BOOKMARK [3][-]{subsubsection.1.1.3}{Condition of Matrix}{subsection.1.1}% 7 diff --git a/lecture_12/lecture_12.pdf b/lecture_12/lecture_12.pdf new file mode 100644 index 0000000..e0b4e6c Binary files /dev/null and b/lecture_12/lecture_12.pdf differ diff --git a/lecture_12/lecture_12.tex b/lecture_12/lecture_12.tex new file mode 100644 index 0000000..1265a06 --- /dev/null +++ b/lecture_12/lecture_12.tex @@ -0,0 +1,1015 @@ + +% Default to the notebook output style + + + + +% Inherit from the specified cell style. + + + + + +\documentclass[11pt]{article} + + + + \usepackage[T1]{fontenc} + % Nicer default font (+ math font) than Computer Modern for most use cases + \usepackage{mathpazo} + + % Basic figure setup, for now with no caption control since it's done + % automatically by Pandoc (which extracts ![](path) syntax from Markdown). + \usepackage{graphicx} + % We will generate all images so they have a width \maxwidth. This means + % that they will get their normal width if they fit onto the page, but + % are scaled down if they would overflow the margins. + \makeatletter + \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth + \else\Gin@nat@width\fi} + \makeatother + \let\Oldincludegraphics\includegraphics + % Set max figure width to be 80% of text width, for now hardcoded. + \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=.8\maxwidth]{#1}} + % Ensure that by default, figures have no caption (until we provide a + % proper Figure object with a Caption API and a way to capture that + % in the conversion process - todo). + \usepackage{caption} + \DeclareCaptionLabelFormat{nolabel}{} + \captionsetup{labelformat=nolabel} + + \usepackage{adjustbox} % Used to constrain images to a maximum size + \usepackage{xcolor} % Allow colors to be defined + \usepackage{enumerate} % Needed for markdown enumerations to work + \usepackage{geometry} % Used to adjust the document margins + \usepackage{amsmath} % Equations + \usepackage{amssymb} % Equations + \usepackage{textcomp} % defines textquotesingle + % Hack from http://tex.stackexchange.com/a/47451/13684: + \AtBeginDocument{% + \def\PYZsq{\textquotesingle}% Upright quotes in Pygmentized code + } + \usepackage{upquote} % Upright quotes for verbatim code + \usepackage{eurosym} % defines \euro + \usepackage[mathletters]{ucs} % Extended unicode (utf-8) support + \usepackage[utf8x]{inputenc} % Allow utf-8 characters in the tex document + \usepackage{fancyvrb} % verbatim replacement that allows latex + \usepackage{grffile} % extends the file name processing of package graphics + % to support a larger range + % The hyperref package gives us a pdf with properly built + % internal navigation ('pdf bookmarks' for the table of contents, + % internal cross-reference links, web links for URLs, etc.) + \usepackage{hyperref} + \usepackage{longtable} % longtable support required by pandoc >1.10 + \usepackage{booktabs} % table support for pandoc > 1.12.2 + \usepackage[inline]{enumitem} % IRkernel/repr support (it uses the enumerate* environment) + \usepackage[normalem]{ulem} % ulem is needed to support strikethroughs (\sout) + % normalem makes italics be italics, not underlines + + + + + % Colors for the hyperref package + \definecolor{urlcolor}{rgb}{0,.145,.698} + \definecolor{linkcolor}{rgb}{.71,0.21,0.01} + \definecolor{citecolor}{rgb}{.12,.54,.11} + + % ANSI colors + \definecolor{ansi-black}{HTML}{3E424D} + \definecolor{ansi-black-intense}{HTML}{282C36} + \definecolor{ansi-red}{HTML}{E75C58} + \definecolor{ansi-red-intense}{HTML}{B22B31} + \definecolor{ansi-green}{HTML}{00A250} + \definecolor{ansi-green-intense}{HTML}{007427} + \definecolor{ansi-yellow}{HTML}{DDB62B} + \definecolor{ansi-yellow-intense}{HTML}{B27D12} + \definecolor{ansi-blue}{HTML}{208FFB} + \definecolor{ansi-blue-intense}{HTML}{0065CA} + \definecolor{ansi-magenta}{HTML}{D160C4} + \definecolor{ansi-magenta-intense}{HTML}{A03196} + \definecolor{ansi-cyan}{HTML}{60C6C8} + \definecolor{ansi-cyan-intense}{HTML}{258F8F} + \definecolor{ansi-white}{HTML}{C5C1B4} + \definecolor{ansi-white-intense}{HTML}{A1A6B2} + + % commands and environments needed by pandoc snippets + % extracted from the output of `pandoc -s` + \providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} + \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} + % Add ',fontsize=\small' for more characters per line + \newenvironment{Shaded}{}{} + \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} + \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} + \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} + \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} + \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} + \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} + \newcommand{\RegionMarkerTok}[1]{{#1}} + \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} + \newcommand{\NormalTok}[1]{{#1}} + + % Additional commands for more recent versions of Pandoc + \newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}} + \newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}} + \newcommand{\ImportTok}[1]{{#1}} + \newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}} + \newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}} + \newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} + \newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}} + \newcommand{\BuiltInTok}[1]{{#1}} + \newcommand{\ExtensionTok}[1]{{#1}} + \newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}} + \newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}} + \newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + + + % Define a nice break command that doesn't care if a line doesn't already + % exist. + \def\br{\hspace*{\fill} \\* } + % Math Jax compatability definitions + \def\gt{>} + \def\lt{<} + % Document parameters + \title{lecture\_12} + + + + + % Pygments definitions + +\makeatletter +\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% + \let\PY@ul=\relax \let\PY@tc=\relax% + \let\PY@bc=\relax \let\PY@ff=\relax} +\def\PY@tok#1{\csname PY@tok@#1\endcsname} +\def\PY@toks#1+{\ifx\relax#1\empty\else% + \PY@tok{#1}\expandafter\PY@toks\fi} +\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% + \PY@it{\PY@bf{\PY@ff{#1}}}}}}} +\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} + +\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} +\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} +\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} +\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} +\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} +\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} +\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} +\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} +\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} +\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} +\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} +\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} +\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} +\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} +\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} +\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} +\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} +\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} +\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} + +\def\PYZbs{\char`\\} +\def\PYZus{\char`\_} +\def\PYZob{\char`\{} +\def\PYZcb{\char`\}} +\def\PYZca{\char`\^} +\def\PYZam{\char`\&} +\def\PYZlt{\char`\<} +\def\PYZgt{\char`\>} +\def\PYZsh{\char`\#} +\def\PYZpc{\char`\%} +\def\PYZdl{\char`\$} +\def\PYZhy{\char`\-} +\def\PYZsq{\char`\'} +\def\PYZdq{\char`\"} +\def\PYZti{\char`\~} +% for compatibility with earlier versions +\def\PYZat{@} +\def\PYZlb{[} +\def\PYZrb{]} +\makeatother + + + % Exact colors from NB + \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} + \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} + + + + + % Prevent overflowing lines due to hard-to-break entities + \sloppy + % Setup hyperref package + \hypersetup{ + breaklinks=true, % so long urls are correctly broken across lines + colorlinks=true, + urlcolor=urlcolor, + linkcolor=linkcolor, + citecolor=citecolor, + } + % Slightly bigger margins than the latex defaults + + \geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in} + + + + \begin{document} + + + \maketitle + + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}27}]:} \PY{c}{\PYZpc{}plot \PYZhy{}\PYZhy{}format svg} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}28}]:} \PY{n}{setdefaults} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}29}]:} \PY{n}{A}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{)} + + \PY{p}{[}\PY{n}{L}\PY{p}{,}\PY{n}{U}\PY{p}{,}\PY{n}{P}\PY{p}{]}\PY{p}{=}\PY{n+nb}{lu}\PY{p}{(}\PY{n}{A}\PY{p}{)} + + \PY{n+nb}{det}\PY{p}{(}\PY{n}{L}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 0.447394 0.357071 0.720915 0.499926 + 0.648313 0.323276 0.521677 0.288345 + 0.084982 0.581513 0.466420 0.142342 + 0.576580 0.658089 0.916987 0.923165 + +L = + + 1.00000 0.00000 0.00000 0.00000 + 0.13108 1.00000 0.00000 0.00000 + 0.69009 0.24851 1.00000 0.00000 + 0.88935 0.68736 0.68488 1.00000 + +U = + + 0.64831 0.32328 0.52168 0.28834 + 0.00000 0.53914 0.39804 0.10455 + 0.00000 0.00000 0.26199 0.27496 + 0.00000 0.00000 0.00000 0.40655 + +P = + +Permutation Matrix + + 0 1 0 0 + 0 0 1 0 + 1 0 0 0 + 0 0 0 1 + +ans = 1 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}44}]:} \PY{n}{A}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{)}\PY{o}{\PYZsq{}}\PY{p}{;} + \PY{n}{A}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZsq{}}\PY{o}{*}\PY{n}{A}\PY{p}{;} + \PY{n+nb}{size}\PY{p}{(}\PY{n}{A}\PY{p}{)} + \PY{n+nb}{min}\PY{p}{(}\PY{n+nb}{min}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{max}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{A}\PY{p}{)} + \PY{n}{C}\PY{p}{=}\PY{n+nb}{chol}\PY{p}{(}\PY{n}{A}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ans = + + 4 4 + +ans = 23.586 +ans = 35.826 +ans = 14.869 +C = + + 5.98549 4.28555 4.35707 4.31359 + 0.00000 3.63950 1.35005 1.45342 + 0.00000 0.00000 3.62851 1.50580 + 0.00000 0.00000 0.00000 3.21911 + + + \end{Verbatim} + + \subsection{My question from last +class}\label{my-question-from-last-class} + +\begin{figure}[htbp] +\centering +\includegraphics{det_L.png} +\caption{q1} +\end{figure} + +\begin{figure}[htbp] +\centering +\includegraphics{chol_pre.png} +\caption{q2} +\end{figure} + +\subsection{Your questions from last +class}\label{your-questions-from-last-class} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Will the exam be more theoretical or problem based? +\item + Writing code is difficult +\item + What format can we expect for the midterm? +\item + Could we go over some example questions for the exam? +\item + Will the use of GitHub be tested on the Midterm exam? Or is it more + focused on linear algebra techniques/what was covered in the lectures? +\item + This is not my strong suit, getting a bit overwhelmed with matrix + multiplication. +\item + I forgot how much I learned in linear algebra. +\item + What's the most exciting project you've ever worked on with + Matlab/Octave? +\end{enumerate} + + \section{Matrix Inverse and +Condition}\label{matrix-inverse-and-condition} + +Considering the same solution set: + +\(y=Ax\) + +If we know that \(A^{-1}A=I\), then + +\(A^{-1}y=A^{-1}Ax=x\) + +so + +\(x=A^{-1}y\) + +Where, \(A^{-1}\) is the inverse of matrix \(A\). + +\(2x_{1}+x_{2}=1\) + +\(x_{1}+3x_{2}=1\) + +\(Ax=y\) + +\(\left[ \begin{array}{cc} 2 & 1 \\ 1 & 3 \end{array} \right] \left[\begin{array}{c} x_{1} \\ x_{2} \end{array}\right]= \left[\begin{array}{c} 1 \\ 1\end{array}\right]\) + +\(A^{-1}=\frac{1}{2*3-1*1}\left[ \begin{array}{cc} 3 & -1 \\ -1 & 2 \end{array} \right]= \left[ \begin{array}{cc} 3/5 & -1/5 \\ -1/5 & 2/5 \end{array} \right]\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}45}]:} \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{]} + \PY{n}{invA}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{5}\PY{o}{*}\PY{p}{[}\PY{l+m+mi}{3}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{;}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{]} + + \PY{n}{A}\PY{o}{*}\PY{n}{invA} + \PY{n}{invA}\PY{o}{*}\PY{n}{A} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 2 1 + 1 3 + +invA = + + 0.60000 -0.20000 + -0.20000 0.40000 + +ans = + + 1.00000 0.00000 + 0.00000 1.00000 + +ans = + + 1.00000 0.00000 + 0.00000 1.00000 + + + \end{Verbatim} + + How did we know the inverse of A? + +for 2$\times$2 matrices, it is always: + +$A=\left[ \begin{array}{cc} A_{11} & A_{12} \\ A_{21} & A_{22} \end{array} \right]$ + +$A^{-1}=\frac{1}{det(A)}\left[ \begin{array}{cc} A_{22} & -A_{12} \\ -A_{21} & A_{11} \end{array} \right]$ + + $AA^{-1}=\frac{1}{A_{11}A_{22}-A_{21}A_{12}}\left[ \begin{array}{cc} A_{11}A_{22}-A_{21}A_{12} & -A_{11}A_{12}+A_{12}A_{11} \\ A_{21}A_{22}-A_{22}A_{21} & -A_{21}A_{12}+A_{22}A_{11} \end{array} \right] =\left[ \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right]$ + + What about bigger matrices? + +We can use the LU-decomposition + +\(A=LU\) + +\(A^{-1}=(LU)^{-1}=U^{-1}L^{-1}\) + +if we divide \(A^{-1}\) into n-column vectors, \(a_{n}\), then + +\(Aa_{1}=\left[\begin{array}{c} 1 \\ 0 \\ \vdots \\ 0 \end{array} \right]\) +\(Aa_{2}=\left[\begin{array}{c} 0 \\ 1 \\ \vdots \\ 0 \end{array} \right]\) +\(Aa_{n}=\left[\begin{array}{c} 0 \\ 0 \\ \vdots \\ 1 \end{array} \right]\) + +Which we can solve for each \(a_{n}\) with LU-decomposition, knowing the +lower and upper triangular decompositions, then + +\(A^{-1}=\left[ \begin{array}{cccc} | & | & & | \\ a_{1} & a_{2} & \cdots & a_{n} \\ | & | & & | \end{array} \right]\) + +\(Ld_{1}=\left[\begin{array}{c} 1 \\ 0 \\ \vdots \\ 0 \end{array} \right]\) +\(;~Ua_{1}=d_{1}\) + +\(Ld_{2}=\left[\begin{array}{c} 0 \\ 1 \\ \vdots \\ 0 \end{array} \right]\) +\(;~Ua_{2}=d_{2}\) + +\(Ld_{n}=\left[\begin{array}{c} 0 \\ 1 \\ \vdots \\ n \end{array} \right]\) +\(;~Ua_{n}=d_{n}\) + +Consider the following matrix: + +\(A=\left[ \begin{array}{ccc} 2 & -1 & 0\\ -1 & 2 & -1\\ 0 & -1 & 1 \end{array} \right]\) + + \paragraph{\texorpdfstring{Note on solving for \(A^{-1}\) column +1}{Note on solving for A\^{}\{-1\} column 1}}\label{note-on-solving-for-a-1-column-1} + +\(Aa_1=I(:,1)\) + +\(LUa_1=I(:,1)\) + +\((LUa_1-I(:,1))=0\) + +\(L(Ua_1-d_1)=0\) + +\(I(:,1)=Ld_1\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}56}]:} \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{2}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{;}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{]} + \PY{n}{U}\PY{p}{=}\PY{n}{A}\PY{p}{;} + \PY{n}{L}\PY{p}{=}\PY{n+nb}{eye}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{p}{:}\PY{p}{)} + \PY{n}{L}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 2 -1 0 + -1 2 -1 + 0 -1 1 + +U = + + 2.00000 -1.00000 0.00000 + 0.00000 1.50000 -1.00000 + 0.00000 -1.00000 1.00000 + +L = + + 1.00000 0.00000 0.00000 + -0.50000 1.00000 0.00000 + 0.00000 0.00000 1.00000 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}57}]:} \PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} + \PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +L = + + 1.00000 0.00000 0.00000 + -0.50000 1.00000 0.00000 + 0.00000 -0.66667 1.00000 + +U = + + 2.00000 -1.00000 0.00000 + 0.00000 1.50000 -1.00000 + 0.00000 0.00000 0.33333 + + + \end{Verbatim} + + Now solve for \(d_1\) then \(a_1\), \(d_2\) then \(a_2\), and \(d_3\) +then \(a_{3}\) + +\(Ld_{1}=\left[\begin{array}{c} 1 \\ 0 \\ \vdots \\ 0 \end{array} \right]= \left[\begin{array}{ccc} 1 & 0 & 0 \\ -1/2 & 1 & 0 \\ 0 & -2/3 & 1 \end{array} \right]\left[\begin{array}{c} d1(1) \\ d1(2) \\ d1(3)\end{array} \right]=\left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array} \right] ;~Ua_{1}=d_{1}\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}58}]:} \PY{n}{d1}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} + \PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{0}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{0}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +d1 = + + 1.00000 + 0.50000 + 0.33333 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}59}]:} \PY{n}{a1}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{a1}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{a1}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{p}{(}\PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{*}\PY{n}{a1}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}\PY{p}{;} + \PY{n}{a1}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{p}{(}\PY{n}{d1}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{a1}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{*}\PY{n}{a1}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +a1 = + + 1.00000 + 1.00000 + 1.00000 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}60}]:} \PY{n}{d2}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{0}\PY{p}{;} + \PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{0}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +d2 = + + 0.00000 + 1.00000 + 0.66667 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}61}]:} \PY{n}{a2}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{a2}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{a2}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{p}{(}\PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{*}\PY{n}{a2}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}\PY{p}{;} + \PY{n}{a2}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{p}{(}\PY{n}{d2}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{a2}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{*}\PY{n}{a2}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +a2 = + + 1.0000 + 2.0000 + 2.0000 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}62}]:} \PY{n}{d3}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{0}\PY{p}{;} + \PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{0}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{L}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +d3 = + + 0 + 0 + 1 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}63}]:} \PY{n}{a3}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{a3}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{a3}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{p}{(}\PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{*}\PY{n}{a3}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}\PY{p}{;} + \PY{n}{a3}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{*}\PY{p}{(}\PY{n}{d3}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{*}\PY{n}{a3}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{U}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{*}\PY{n}{a3}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +a3 = + + 1.00000 + 2.00000 + 3.00000 + + + \end{Verbatim} + + Final solution for \(A^{-1}\) is \([a_{1}~a_{2}~a_{3}]\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}69}]:} \PY{n}{invA}\PY{p}{=}\PY{p}{[}\PY{n}{a1}\PY{p}{,}\PY{n}{a2}\PY{p}{,}\PY{n}{a3}\PY{p}{]} + \PY{n}{I\PYZus{}app}\PY{p}{=}\PY{n}{A}\PY{o}{*}\PY{n}{invA} + \PY{n}{I\PYZus{}app}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} + \PY{n+nb}{eps} + + \PY{l+m+mi}{2}\PYZca{}\PY{o}{\PYZhy{}}\PY{l+m+mi}{8} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +invA = + + 1.00000 1.00000 1.00000 + 1.00000 2.00000 2.00000 + 1.00000 2.00000 3.00000 + +I\_app = + + 1.00000 0.00000 0.00000 + 0.00000 1.00000 -0.00000 + -0.00000 -0.00000 1.00000 + +ans = -4.4409e-16 +ans = 2.2204e-16 +ans = 0.0039062 + + \end{Verbatim} + + Now the solution of \(x\) to \(Ax=y\) is \(x=A^{-1}y\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}70}]:} \PY{n}{y}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{2}\PY{p}{;}\PY{l+m+mi}{3}\PY{p}{]} + \PY{n}{x}\PY{p}{=}\PY{n}{invA}\PY{o}{*}\PY{n}{y} + \PY{n}{xbs}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZbs{}}\PY{n}{y} + \PY{n}{x}\PY{o}{\PYZhy{}}\PY{n}{xbs} + \PY{n+nb}{eps} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +y = + + 1 + 2 + 3 + +x = + + 6.0000 + 11.0000 + 14.0000 + +xbs = + + 6.0000 + 11.0000 + 14.0000 + +ans = + + -3.5527e-15 + -8.8818e-15 + -1.0658e-14 + +ans = 2.2204e-16 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}71}]:} \PY{n}{N}\PY{p}{=}\PY{l+m+mi}{100}\PY{p}{;} + \PY{n}{n}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{:}\PY{n}{N}\PY{p}{]}\PY{p}{;} + \PY{n}{t\PYZus{}inv}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{t\PYZus{}bs}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{t\PYZus{}mult}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{n}{N}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{k}{for} \PY{n}{i}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{n}{N} + \PY{n}{A}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{n}{i}\PY{p}{,}\PY{n}{i}\PY{p}{)}\PY{p}{;} + \PY{n+nb}{tic} + \PY{n}{invA}\PY{p}{=}\PY{n+nb}{inv}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{;} + \PY{n}{t\PYZus{}inv}\PY{p}{(}\PY{n}{i}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} + \PY{n}{b}\PY{p}{=}\PY{n+nb}{rand}\PY{p}{(}\PY{n}{i}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n+nb}{tic}\PY{p}{;} + \PY{n}{x}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZbs{}}\PY{n}{b}\PY{p}{;} + \PY{n}{t\PYZus{}bs}\PY{p}{(}\PY{n}{i}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} + \PY{n+nb}{tic}\PY{p}{;} + \PY{n}{x}\PY{p}{=}\PY{n}{invA}\PY{o}{*}\PY{n}{b}\PY{p}{;} + \PY{n}{t\PYZus{}mult}\PY{p}{(}\PY{n}{i}\PY{p}{)}\PY{p}{=}\PY{n+nb}{toc}\PY{p}{;} + \PY{k}{end} + \PY{n+nb}{plot}\PY{p}{(}\PY{n}{n}\PY{p}{,}\PY{n}{t\PYZus{}inv}\PY{p}{,}\PY{n}{n}\PY{p}{,}\PY{n}{t\PYZus{}bs}\PY{p}{,}\PY{n}{n}\PY{p}{,}\PY{n}{t\PYZus{}mult}\PY{p}{)} + \PY{n+nb}{axis}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{0} \PY{l+m+mi}{100} \PY{l+m+mi}{0} \PY{l+m+mf}{0.002}\PY{p}{]}\PY{p}{)} + \PY{n+nb}{legend}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{inversion\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{backslash\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{multiplication\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{Location\PYZsq{}}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{NorthWest\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_12_files/lecture_12_24_0.pdf} + \end{center} + { \hspace*{\fill} \\} + + \subsection{Condition of a matrix}\label{condition-of-a-matrix} + +\subsubsection{\texorpdfstring{\emph{just checked in to see what +condition my condition was +in}}{just checked in to see what condition my condition was in}}\label{just-checked-in-to-see-what-condition-my-condition-was-in} + +\subsubsection{Matrix norms}\label{matrix-norms} + +The Euclidean norm of a vector is measure of the magnitude (in 3D this +would be: \(|x|=\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}\)) in general the +equation is: + +\(||x||_{e}=\sqrt{\sum_{i=1}^{n}x_{i}^{2}}\) + +For a matrix, A, the same norm is called the Frobenius norm: + +\(||A||_{f}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{2}}\) + +In general we can calculate any \(p\)-norm where + +\(||A||_{p}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{p}}\) + +so the p=1, 1-norm is + +\(||A||_{1}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{1}}=\sum_{i=1}^{n}\sum_{i=1}^{m}|A_{i,j}|\) + +\(||A||_{\infty}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{\infty}}=\max_{1\le i \le n}\sum_{j=1}^{m}|A_{i,j}|\) + +\subsubsection{Condition of Matrix}\label{condition-of-matrix} + +The matrix condition is the product of + +\(Cond(A) = ||A||\cdot||A^{-1}||\) + +So each norm will have a different condition number, but the limit is +\(Cond(A)\ge 1\) + +An estimate of the rounding error is based on the condition of A: + +\(\frac{||\Delta x||}{x} \le Cond(A) \frac{||\Delta A||}{||A||}\) + +So if the coefficients of A have accuracy to \$10\^{}\{-t\} + +and the condition of A, \(Cond(A)=10^{c}\) + +then the solution for x can have rounding errors up to \(10^{c-t}\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}72}]:} \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{;}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{4}\PY{p}{;}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{5}\PY{p}{]} + \PY{p}{[}\PY{n}{L}\PY{p}{,}\PY{n}{U}\PY{p}{]}\PY{p}{=}\PY{n}{LU\PYZus{}naive}\PY{p}{(}\PY{n}{A}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 1.00000 0.50000 0.33333 + 0.50000 0.33333 0.25000 + 0.33333 0.25000 0.20000 + +L = + + 1.00000 0.00000 0.00000 + 0.50000 1.00000 0.00000 + 0.33333 1.00000 1.00000 + +U = + + 1.00000 0.50000 0.33333 + 0.00000 0.08333 0.08333 + 0.00000 -0.00000 0.00556 + + + \end{Verbatim} + + Then, \(A^{-1}=(LU)^{-1}=U^{-1}L^{-1}\) + +\(Ld_{1}=\left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array}\right]\), +\(Ux_{1}=d_{1}\) ... + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}75}]:} \PY{n}{invA}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{d1}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{;} + \PY{n}{d2}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{;} + \PY{n}{d3}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{;} + \PY{n}{invA}\PY{p}{(}\PY{p}{:}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d1}\PY{p}{;} + \PY{n}{invA}\PY{p}{(}\PY{p}{:}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d2}\PY{p}{;} + \PY{n}{invA}\PY{p}{(}\PY{p}{:}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d3} + \PY{n}{invA}\PY{o}{*}\PY{n}{A} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +invA = + + 9.0000 -36.0000 30.0000 + -36.0000 192.0000 -180.0000 + 30.0000 -180.0000 180.0000 + +ans = + + 1.0000e+00 3.5527e-15 2.9976e-15 + -1.3249e-14 1.0000e+00 -9.1038e-15 + 8.5117e-15 7.1054e-15 1.0000e+00 + + + \end{Verbatim} + + Find the condition of A, \(cond(A)\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}74}]:} \PY{c}{\PYZpc{} Frobenius norm} + \PY{n}{normf\PYZus{}A} \PY{p}{=} \PY{n+nb}{sqrt}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{A}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{)} + \PY{n}{normf\PYZus{}invA} \PY{p}{=} \PY{n+nb}{sqrt}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{invA}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{)} + + \PY{n}{cond\PYZus{}f\PYZus{}A} \PY{p}{=} \PY{n}{normf\PYZus{}A}\PY{o}{*}\PY{n}{normf\PYZus{}invA} + + \PY{n+nb}{norm}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{fro\PYZsq{}}\PY{p}{)} + + \PY{c}{\PYZpc{} p=1, column sum norm} + \PY{n}{norm1\PYZus{}A} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)} + \PY{n}{norm1\PYZus{}invA} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{invA}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{norm}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} + + \PY{n}{cond\PYZus{}1\PYZus{}A}\PY{p}{=}\PY{n}{norm1\PYZus{}A}\PY{o}{*}\PY{n}{norm1\PYZus{}invA} + + \PY{c}{\PYZpc{} p=inf, row sum norm} + \PY{n}{norminf\PYZus{}A} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{)} + \PY{n}{norminf\PYZus{}invA} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{invA}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{norm}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{n+nb}{inf}\PY{p}{)} + + \PY{n}{cond\PYZus{}inf\PYZus{}A}\PY{p}{=}\PY{n}{norminf\PYZus{}A}\PY{o}{*}\PY{n}{norminf\PYZus{}invA} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +normf\_A = 1.4136 +normf\_invA = 372.21 +cond\_f\_A = 526.16 +ans = 1.4136 +norm1\_A = 1.8333 +norm1\_invA = 30.000 +ans = 1.8333 +cond\_1\_A = 55.000 +norminf\_A = 1.8333 +norminf\_invA = 30.000 +ans = 1.8333 +cond\_inf\_A = 55.000 + + \end{Verbatim} + + Consider the problem again from the intro to Linear Algebra, 4 masses +are connected in series to 4 springs with spring constants \(K_{i}\). +What does a high condition number mean for this problem? + +\begin{figure}[htbp] +\centering +\includegraphics{../lecture_09/mass_springs.png} +\caption{Springs-masses} +\end{figure} + +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_{2}(x_{2}-x_{1})-k_{1}x_{1}=0\) + +\(m_{2}g+k_{3}(x_{3}-x_{2})-k_{2}(x_{2}-x_{1})=0\) + +\(m_{3}g+k_{4}(x_{4}-x_{3})-k_{3}(x_{3}-x_{2})=0\) + +\(m_{4}g-k_{4}(x_{4}-x_{3})=0\) + +in matrix form: + +\(\left[ \begin{array}{cccc} k_{1}+k_{2} & -k_{2} & 0 & 0 \\ -k_{2} & k_{2}+k_{3} & -k_{3} & 0 \\ 0 & -k_{3} & k_{3}+k_{4} & -k_{4} \\ 0 & 0 & -k_{4} & k_{4} \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]\) + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}21}]:} \PY{n}{k1}\PY{p}{=}\PY{l+m+mi}{10}\PY{p}{;} \PY{c}{\PYZpc{} N/m} + \PY{n}{k2}\PY{p}{=}\PY{l+m+mi}{100000}\PY{p}{;} + \PY{n}{k3}\PY{p}{=}\PY{l+m+mi}{10}\PY{p}{;} + \PY{n}{k4}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} + \PY{n}{m1}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} \PY{c}{\PYZpc{} kg} + \PY{n}{m2}\PY{p}{=}\PY{l+m+mi}{2}\PY{p}{;} + \PY{n}{m3}\PY{p}{=}\PY{l+m+mi}{3}\PY{p}{;} + \PY{n}{m4}\PY{p}{=}\PY{l+m+mi}{4}\PY{p}{;} + \PY{n}{g}\PY{p}{=}\PY{l+m+mf}{9.81}\PY{p}{;} \PY{c}{\PYZpc{} m/s\PYZca{}2} + \PY{n}{K}\PY{p}{=}\PY{p}{[}\PY{n}{k1}\PY{o}{+}\PY{n}{k2} \PY{o}{\PYZhy{}}\PY{n}{k2} \PY{l+m+mi}{0} \PY{l+m+mi}{0}\PY{p}{;} \PY{o}{\PYZhy{}}\PY{n}{k2} \PY{n}{k2}\PY{o}{+}\PY{n}{k3} \PY{o}{\PYZhy{}}\PY{n}{k3} \PY{l+m+mi}{0}\PY{p}{;} \PY{l+m+mi}{0} \PY{o}{\PYZhy{}}\PY{n}{k3} \PY{n}{k3}\PY{o}{+}\PY{n}{k4} \PY{o}{\PYZhy{}}\PY{n}{k4}\PY{p}{;} \PY{l+m+mi}{0} \PY{l+m+mi}{0} \PY{o}{\PYZhy{}}\PY{n}{k4} \PY{n}{k4}\PY{p}{]} + \PY{n}{y}\PY{p}{=}\PY{p}{[}\PY{n}{m1}\PY{o}{*}\PY{n}{g}\PY{p}{;}\PY{n}{m2}\PY{o}{*}\PY{n}{g}\PY{p}{;}\PY{n}{m3}\PY{o}{*}\PY{n}{g}\PY{p}{;}\PY{n}{m4}\PY{o}{*}\PY{n}{g}\PY{p}{]} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +K = + + 100010 -100000 0 0 + -100000 100010 -10 0 + 0 -10 11 -1 + 0 0 -1 1 + +y = + + 9.8100 + 19.6200 + 29.4300 + 39.2400 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}25}]:} \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{n+nb}{inf}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{fro\PYZsq{}}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ans = 3.2004e+05 +ans = 3.2004e+05 +ans = 2.5925e+05 +ans = 2.5293e+05 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}26}]:} \PY{n+nb}{e}\PY{p}{=}\PY{n+nb}{eig}\PY{p}{(}\PY{n}{K}\PY{p}{)} + \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{e}\PY{p}{)}\PY{o}{/}\PY{n+nb}{min}\PY{p}{(}\PY{n+nb}{e}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +e = + + 7.9078e-01 + 3.5881e+00 + 1.7621e+01 + 2.0001e+05 + +ans = 2.5293e+05 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor} }]:} +\end{Verbatim} + + + % Add a bibliography block to the postdoc + + + + \end{document} diff --git a/lecture_12/lecture_12_files/lecture_12_21_0.pdf b/lecture_12/lecture_12_files/lecture_12_21_0.pdf new file mode 100644 index 0000000..6480131 Binary files /dev/null and b/lecture_12/lecture_12_files/lecture_12_21_0.pdf differ diff --git a/lecture_12/lecture_12_files/lecture_12_21_0.png b/lecture_12/lecture_12_files/lecture_12_21_0.png new file mode 100644 index 0000000..2633731 Binary files /dev/null and b/lecture_12/lecture_12_files/lecture_12_21_0.png differ diff --git a/lecture_12/lecture_12_files/lecture_12_21_0.svg b/lecture_12/lecture_12_files/lecture_12_21_0.svg new file mode 100644 index 0000000..44ef608 --- /dev/null +++ b/lecture_12/lecture_12_files/lecture_12_21_0.svg @@ -0,0 +1,148 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 0.0005 + + + + + 0.001 + + + + + 0.0015 + + + + + 0.002 + + + + + 0 + + + + + 20 + + + + + 40 + + + + + 60 + + + + + 80 + + + + + 100 + + + + + + + + + + + + + inversion + + + + + inversion + + + + + + backslash + + + backslash + + + + + + multiplication + + + multiplication + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_12/lecture_12_files/lecture_12_24_0.pdf b/lecture_12/lecture_12_files/lecture_12_24_0.pdf new file mode 100644 index 0000000..e2d1d9b Binary files /dev/null and b/lecture_12/lecture_12_files/lecture_12_24_0.pdf differ diff --git a/lecture_12/lecture_12_files/lecture_12_24_0.png b/lecture_12/lecture_12_files/lecture_12_24_0.png new file mode 100644 index 0000000..c8959a7 Binary files /dev/null and b/lecture_12/lecture_12_files/lecture_12_24_0.png differ diff --git a/lecture_12/lecture_12_files/lecture_12_24_0.svg b/lecture_12/lecture_12_files/lecture_12_24_0.svg new file mode 100644 index 0000000..4705883 --- /dev/null +++ b/lecture_12/lecture_12_files/lecture_12_24_0.svg @@ -0,0 +1,148 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 0.0005 + + + + + 0.001 + + + + + 0.0015 + + + + + 0.002 + + + + + 0 + + + + + 20 + + + + + 40 + + + + + 60 + + + + + 80 + + + + + 100 + + + + + + + + + + + + + inversion + + + + + inversion + + + + + + backslash + + + backslash + + + + + + multiplication + + + multiplication + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_12/nohup.out b/lecture_12/nohup.out new file mode 100644 index 0000000..f0d30e1 --- /dev/null +++ b/lecture_12/nohup.out @@ -0,0 +1,2 @@ + +(evince:8926): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -71 and height 20 diff --git a/lecture_12/octave-workspace b/lecture_12/octave-workspace new file mode 100644 index 0000000..8c437bb Binary files /dev/null and b/lecture_12/octave-workspace differ diff --git a/lecture_13/.GS_rel.m.swp b/lecture_13/.GS_rel.m.swp new file mode 100644 index 0000000..58db6b3 Binary files /dev/null and b/lecture_13/.GS_rel.m.swp differ diff --git a/lecture_13/.GaussSeidel.m.swp b/lecture_13/.GaussSeidel.m.swp new file mode 100644 index 0000000..43abe04 Binary files /dev/null and b/lecture_13/.GaussSeidel.m.swp differ diff --git a/lecture_13/.Jacobi_rel.m.swp b/lecture_13/.Jacobi_rel.m.swp new file mode 100644 index 0000000..8f17e8f Binary files /dev/null and b/lecture_13/.Jacobi_rel.m.swp differ diff --git a/lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb b/lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb new file mode 100644 index 0000000..6a5dc68 --- /dev/null +++ b/lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb @@ -0,0 +1,737 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Need more linear algebra review\n", + " \n", + " -We will keep doing Linear Algebra, try the practice problems in 'linear_algebra'\n", + "\n", + "2. How do I do HW3? \n", + " \n", + " -demo today\n", + "\n", + "3. For hw4 is the spring constant (K) suppose to be given? \n", + " \n", + " -yes, its 30 N/m\n", + " \n", + "4. Deapool or Joker?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LU Decomposition\n", + "### efficient storage of matrices for solutions\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "Assume that we can perform Gauss elimination and achieve this formula:\n", + "\n", + "$Ux=d$ \n", + "\n", + "Where, $U$ is an upper triangular matrix that we derived from Gauss elimination and $d$ is the set of dependent variables after Gauss elimination. \n", + "\n", + "Assume there is a lower triangular matrix, $L$, with ones on the diagonal and same dimensions of $U$ and the following is true:\n", + "\n", + "$L(Ux-d)=Ax-y=0$\n", + "\n", + "Now, $Ax=LUx$, so $A=LU$, and $y=Ld$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "f21=0.5\n", + "\n", + "A(2,1)=1-1 = 0 \n", + "\n", + "A(2,2)=3-0.5=2.5\n", + "\n", + "y(2)=1-0.5=0.5\n", + "\n", + "$L(Ux-d)=\n", + "\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0.5 & 1 \\end{array} \\right]\n", + "\\left(\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "0 & 2.5 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]-\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "0.5\\end{array}\\right]\\right)=0$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000\n", + " 0.50000 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 1.00000\n", + " 0.00000 2.50000\n", + "\n", + "ans =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "d =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + "\n", + "y =\n", + "\n", + " 1\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "L=[1,0;0.5,1]\n", + "U=[2,1;0,2.5]\n", + "L*U\n", + "\n", + "d=[1;0.5]\n", + "y=L*d" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 5.0000\n", + "ans = 1\n", + "ans = 5\n", + "ans = 5\n", + "ans = 5.0000\n" + ] + } + ], + "source": [ + "% what is the determinant of L, U and A?\n", + "\n", + "det(A)\n", + "det(L)\n", + "det(U)\n", + "det(L)*det(U)\n", + "det(L*U)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pivoting for LU factorization\n", + "\n", + "LU factorization uses the same method as Gauss elimination so it is also necessary to perform partial pivoting when creating the lower and upper triangular matrices. \n", + "\n", + "Matlab and Octave use pivoting in the command \n", + "\n", + "`[L,U,P]=lu(A)`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'lu' is a built-in function from the file libinterp/corefcn/lu.cc\n", + "\n", + " -- Built-in Function: [L, U] = lu (A)\n", + " -- Built-in Function: [L, U, P] = lu (A)\n", + " -- Built-in Function: [L, U, P, Q] = lu (S)\n", + " -- Built-in Function: [L, U, P, Q, R] = lu (S)\n", + " -- Built-in Function: [...] = lu (S, THRES)\n", + " -- Built-in Function: Y = lu (...)\n", + " -- Built-in Function: [...] = lu (..., \"vector\")\n", + " Compute the LU decomposition of A.\n", + "\n", + " If A is full subroutines from LAPACK are used and if A is sparse\n", + " then UMFPACK is used.\n", + "\n", + " The result is returned in a permuted form, according to the\n", + " optional return value P. For example, given the matrix 'a = [1, 2;\n", + " 3, 4]',\n", + "\n", + " [l, u, p] = lu (A)\n", + "\n", + " returns\n", + "\n", + " l =\n", + "\n", + " 1.00000 0.00000\n", + " 0.33333 1.00000\n", + "\n", + " u =\n", + "\n", + " 3.00000 4.00000\n", + " 0.00000 0.66667\n", + "\n", + " p =\n", + "\n", + " 0 1\n", + " 1 0\n", + "\n", + " The matrix is not required to be square.\n", + "\n", + " When called with two or three output arguments and a spare input\n", + " matrix, 'lu' does not attempt to perform sparsity preserving column\n", + " permutations. Called with a fourth output argument, the sparsity\n", + " preserving column transformation Q is returned, such that 'P * A *\n", + " Q = L * U'.\n", + "\n", + " Called with a fifth output argument and a sparse input matrix, 'lu'\n", + " attempts to use a scaling factor R on the input matrix such that 'P\n", + " * (R \\ A) * Q = L * U'. This typically leads to a sparser and more\n", + " stable factorization.\n", + "\n", + " An additional input argument THRES, that defines the pivoting\n", + " threshold can be given. THRES can be a scalar, in which case it\n", + " defines the UMFPACK pivoting tolerance for both symmetric and\n", + " unsymmetric cases. If THRES is a 2-element vector, then the first\n", + " element defines the pivoting tolerance for the unsymmetric UMFPACK\n", + " pivoting strategy and the second for the symmetric strategy. By\n", + " default, the values defined by 'spparms' are used ([0.1, 0.001]).\n", + "\n", + " Given the string argument \"vector\", 'lu' returns the values of P\n", + " and Q as vector values, such that for full matrix, 'A (P,:) = L *\n", + " U', and 'R(P,:) * A (:, Q) = L * U'.\n", + "\n", + " With two output arguments, returns the permuted forms of the upper\n", + " and lower triangular matrices, such that 'A = L * U'. With one\n", + " output argument Y, then the matrix returned by the LAPACK routines\n", + " is returned. If the input matrix is sparse then the matrix L is\n", + " embedded into U to give a return value similar to the full case.\n", + " For both full and sparse matrices, 'lu' loses the permutation\n", + " information.\n", + "\n", + " See also: luupdate, ilu, chol, hess, qr, qz, schur, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help lu" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tLU decomp\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tLU decomp\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tOctave \\\\\n", + "\n", + "\t\n", + "\t\tOctave \\\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% time LU solution vs backslash\n", + "t_lu=zeros(100,1);\n", + "t_bs=zeros(100,1);\n", + "for N=1:100\n", + " A=rand(N,N);\n", + " y=rand(N,1);\n", + " [L,U,P]=lu(A);\n", + "\n", + " tic; d=inv(L)*y; x=inv(U)*d; t_lu(N)=toc;\n", + "\n", + " tic; x=inv(A)*y; t_bs(N)=toc;\n", + "end\n", + "plot([1:100],t_lu,[1:100],t_bs) \n", + "legend('LU decomp','Octave \\\\')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 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](../lecture_09/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": 10, + "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" + ] + } + ], + "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]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This matrix, K, is symmetric. \n", + "\n", + "`K(i,j)==K(j,i)`\n", + "\n", + "Now we can use,\n", + "\n", + "## Cholesky Factorization\n", + "\n", + "We can decompose the matrix, K into two matrices, $U$ and $U^{T}$, where\n", + "\n", + "$K=U^{T}U$\n", + "\n", + "each of the components of U can be calculated with the following equations:\n", + "\n", + "$u_{ii}=\\sqrt{a_{ii}-\\sum_{k=1}^{i-1}u_{ki}^{2}}$\n", + "\n", + "$u_{ij}=\\frac{a_{ij}-\\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}$\n", + "\n", + "so for K" + ] + }, + { + "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" + ] + } + ], + "source": [ + "K" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "u11 = 4.4721\n", + "u12 = -2.2361\n", + "u13 = 0\n", + "u14 = 0\n", + "u22 = 3.8730\n", + "u23 = -2.5820\n", + "u24 = 0\n", + "u33 = 3.6515\n", + "u34 = -2.7386\n", + "u44 = 1.5811\n", + "U =\n", + "\n", + " 4.47214 -2.23607 0.00000 0.00000\n", + " 0.00000 3.87298 -2.58199 0.00000\n", + " 0.00000 0.00000 3.65148 -2.73861\n", + " 0.00000 0.00000 0.00000 1.58114\n", + "\n" + ] + } + ], + "source": [ + "u11=sqrt(K(1,1))\n", + "u12=(K(1,2))/u11\n", + "u13=(K(1,3))/u11\n", + "u14=(K(1,4))/u11\n", + "u22=sqrt(K(2,2)-u12^2)\n", + "u23=(K(2,3)-u12*u13)/u22\n", + "u24=(K(2,4)-u12*u14)/u22\n", + "u33=sqrt(K(3,3)-u13^2-u23^2)\n", + "u34=(K(3,4)-u13*u14-u23*u24)/u33\n", + "u44=sqrt(K(4,4)-u14^2-u24^2-u34^2)\n", + "U=[u11,u12,u13,u14;0,u22,u23,u24;0,0,u33,u34;0,0,0,u44]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + "\n" + ] + } + ], + "source": [ + "(U'*U)'==U'*U" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06\n", + "average time spent for backslash solution = 1.555967e-05+/-1.048561e-05\n" + ] + } + ], + "source": [ + "% time solution for Cholesky vs backslash\n", + "t_chol=zeros(1000,1);\n", + "t_bs=zeros(1000,1);\n", + "for i=1:1000\n", + " tic; d=U'*y; x=U\\d; t_chol(i)=toc;\n", + " tic; x=K\\y; t_bs(i)=toc;\n", + "end\n", + "fprintf('average time spent for Cholesky factored solution = %e+/-%e',mean(t_chol),std(t_chol))\n", + "\n", + "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_13/.lambda_fcn.m.swp b/lecture_13/.lambda_fcn.m.swp new file mode 100644 index 0000000..5031365 Binary files /dev/null and b/lecture_13/.lambda_fcn.m.swp differ diff --git a/lecture_13/GS_rel.m b/lecture_13/GS_rel.m new file mode 100644 index 0000000..4a6daf4 --- /dev/null +++ b/lecture_13/GS_rel.m @@ -0,0 +1,36 @@ +function [x,ea,iter] = GS_rel(A,b,lambda,es,maxit) +% GaussSeidel: Gauss Seidel method +% x = GaussSeidel(A,b): Gauss Seidel without relaxation +% input: +% A = coefficient matrix +% b = right hand side vector +% es = stop criterion (default = 0.00001%) +% maxit = max iterations (default = 50) +% output: +% x = solution vector +if nargin<3,error('at least 2 input arguments required'),end +if nargin<5|isempty(maxit),maxit=50;end +if nargin<4|isempty(es),es=0.00001;end +[m,n] = size(A); +if m~=n, error('Matrix A must be square'); end +C = A-diag(diag(A)); +x=zeros(n,1); +for i = 1:n + C(i,1:n) = C(i,1:n)/A(i,i); +end + +d = b./diag(A); + +iter = 0; +while (1) + xold = x; + for i = 1:n + x(i) = d(i)-C(i,:)*x; + x(i) = lambda*x(i)+(1-lambda)*xold(i); + if x(i) ~= 0 + ea(i) = abs((x(i) - xold(i))/x(i)) * 100; + end + end + iter = iter+1; + if max(ea)<=es | iter >= maxit, break, end +end diff --git a/lecture_13/GaussSeidel.m b/lecture_13/GaussSeidel.m new file mode 100644 index 0000000..2be52e1 --- /dev/null +++ b/lecture_13/GaussSeidel.m @@ -0,0 +1,35 @@ +function x = GaussSeidel(A,b,es,maxit) +% GaussSeidel: Gauss Seidel method +% x = GaussSeidel(A,b): Gauss Seidel without relaxation +% input: +% A = coefficient matrix +% b = right hand side vector +% es = stop criterion (default = 0.00001%) +% maxit = max iterations (default = 50) +% output: +% x = solution vector +if nargin<2,error('at least 2 input arguments required'),end +if nargin<4|isempty(maxit),maxit=50;end +if nargin<3|isempty(es),es=0.00001;end +[m,n] = size(A); +if m~=n, error('Matrix A must be square'); end +C = A-diag(diag(A)); +x=zeros(n,1); +for i = 1:n + C(i,1:n) = C(i,1:n)/A(i,i); +end + +d = b./diag(A); + +iter = 0; +while (1) + xold = x; + for i = 1:n + x(i) = d(i)-C(i,:)*x; + if x(i) ~= 0 + ea(i) = abs((x(i) - xold(i))/x(i)) * 100; + end + end + iter = iter+1; + if max(ea)<=es | iter >= maxit, break, end +end diff --git a/lecture_13/Jacobi.m b/lecture_13/Jacobi.m new file mode 100644 index 0000000..8a7b4ae --- /dev/null +++ b/lecture_13/Jacobi.m @@ -0,0 +1,39 @@ +function x = Jacobi(A,b,es,maxit) +% GaussSeidel: Gauss Seidel method +% x = GaussSeidel(A,b): Gauss Seidel without relaxation +% input: +% A = coefficient matrix +% b = right hand side vector +% es = stop criterion (default = 0.00001%) +% maxit = max iterations (default = 50) +% output: +% x = solution vector +if nargin<2,error('at least 2 input arguments required'),end +if nargin<4|isempty(maxit),maxit=50;end +if nargin<3|isempty(es),es=0.00001;end +[m,n] = size(A); +if m~=n, error('Matrix A must be square'); end +C = A-diag(diag(A)); +x=zeros(n,1); +for i = 1:n + C(i,1:n) = C(i,1:n)/A(i,i); +end + +d = b./diag(A); + +iter = 0; +while (1) + xold = x; + x = d-C*x; + % if any values of x are zero, we add 1 to denominator so error is well-behaved + i_zero=find(x==0); + i=find(x~=0); + if length(i_zero)>0 + ea(i_zero)=abs((x-xold)./(1+x)*100); + ea(i) = abs((x(i) - xold(i))./x(i)) * 100; + else + ea = abs((x - xold)./x) * 100; + end + iter = iter+1; + if max(ea)<=es | iter >= maxit, break, end +end diff --git a/lecture_13/Jacobi_rel.m b/lecture_13/Jacobi_rel.m new file mode 100644 index 0000000..5cdec33 --- /dev/null +++ b/lecture_13/Jacobi_rel.m @@ -0,0 +1,41 @@ +function [x,ea,iter]= Jacobi_rel(A,b,lambda,es,maxit) +% GaussSeidel: Gauss Seidel method +% x = GaussSeidel(A,b): Gauss Seidel without relaxation +% input: +% A = coefficient matrix +% b = right hand side vector +% es = stop criterion (default = 0.00001%) +% maxit = max iterations (default = 50) +% output: +% x = solution vector +if nargin<3,error('at least 2 input arguments required'),end +if nargin<5|isempty(maxit),maxit=50;end +if nargin<4|isempty(es),es=0.00001;end +[m,n] = size(A); +if m~=n, error('Matrix A must be square'); end +C = A-diag(diag(A)); +x=zeros(n,1); +for i = 1:n + C(i,1:n) = C(i,1:n)/A(i,i); +end + +d = b./diag(A); + +iter = 0; +while (1) + xold = x; + x = d-C*x; + % Add relaxation parameter lambda to current iteration + x = lambda*x+(1-lambda)*xold; + % if any values of x are zero, we add 1 to denominator so error is well-behaved + i_zero=find(x==0); + i=find(x~=0); + if length(i_zero)>0 + ea(i_zero)=abs((x-xold)./(1+x)*100); + ea(i) = abs((x(i) - xold(i))./x(i)) * 100; + else + ea = abs((x - xold)./x) * 100; + end + iter = iter+1; + if max(ea)<=es | iter >= maxit, break, end +end diff --git a/lecture_13/LU_naive.m b/lecture_13/LU_naive.m new file mode 100644 index 0000000..92efde6 --- /dev/null +++ b/lecture_13/LU_naive.m @@ -0,0 +1,27 @@ +function [L, U] = LU_naive(A) +% GaussNaive: naive Gauss elimination +% x = GaussNaive(A,b): Gauss elimination without pivoting. +% input: +% A = coefficient matrix +% y = right hand side vector +% output: +% x = solution vector +[m,n] = size(A); +if m~=n, error('Matrix A must be square'); end +nb = n; +L=diag(ones(n,1)); +U=A; +% forward elimination +for k = 1:n-1 + for i = k+1:n + fik = U(i,k)/U(k,k); + L(i,k)=fik; + U(i,k:nb) = U(i,k:nb)-fik*U(k,k:nb); + end +end +%% back substitution +%x = zeros(n,1); +%x(n) = Aug(n,nb)/Aug(n,n); +%for i = n-1:-1:1 +% x(i) = (Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i); +%end diff --git a/lecture_13/efficient_soln.png b/lecture_13/efficient_soln.png new file mode 100644 index 0000000..ef24ece Binary files /dev/null and b/lecture_13/efficient_soln.png differ diff --git a/lecture_13/gp_image_01.png b/lecture_13/gp_image_01.png new file mode 100644 index 0000000..ef291b5 Binary files /dev/null and b/lecture_13/gp_image_01.png differ diff --git a/lecture_13/lambda_fcn.m b/lecture_13/lambda_fcn.m new file mode 100644 index 0000000..435f9e9 --- /dev/null +++ b/lecture_13/lambda_fcn.m @@ -0,0 +1,8 @@ +function iters = lambda_fcn(A,b,lambda) + % function to minimize the number of iterations for a given Ax=b solution + % using default Jacobi_rel parameters of es=0.00001 and maxit=50 + + [x,ea,iters]= Jacobi_rel(A,b,lambda,1e-8); +end + + diff --git a/lecture_13/lecture_13.aux b/lecture_13/lecture_13.aux new file mode 100644 index 0000000..30cf1b4 --- /dev/null +++ b/lecture_13/lecture_13.aux @@ -0,0 +1,63 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand \oddpage@label [2]{} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.1}My question from last class}{1}{subsection.0.1}} +\newlabel{my-question-from-last-class}{{0.1}{1}{My question from last class}{subsection.0.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces q1\relax }}{1}{figure.caption.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {0.2}Your questions from last class}{1}{subsection.0.2}} +\newlabel{your-questions-from-last-class}{{0.2}{1}{Your questions from last class}{subsection.0.2}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces q2\relax }}{2}{figure.caption.2}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Markdown examples}{2}{section.1}} +\newlabel{markdown-examples}{{1}{2}{Markdown examples}{section.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Condition of a matrix}{3}{subsection.1.1}} +\newlabel{condition-of-a-matrix}{{1.1}{3}{Condition of a matrix}{subsection.1.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.1}\emph {just checked in to see what condition my condition was in}}{3}{subsubsection.1.1.1}} +\newlabel{just-checked-in-to-see-what-condition-my-condition-was-in}{{1.1.1}{3}{\texorpdfstring {\emph {just checked in to see what condition my condition was in}}{just checked in to see what condition my condition was in}}{subsubsection.1.1.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.2}Matrix norms}{3}{subsubsection.1.1.2}} +\newlabel{matrix-norms}{{1.1.2}{3}{Matrix norms}{subsubsection.1.1.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.3}Condition of Matrix}{3}{subsubsection.1.1.3}} +\newlabel{condition-of-matrix}{{1.1.3}{3}{Condition of Matrix}{subsubsection.1.1.3}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Springs-masses\relax }}{5}{figure.caption.3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}P=2 norm is ratio of biggest eigenvalue to smallest eigenvalue!}{7}{subsection.1.2}} +\newlabel{p2-norm-is-ratio-of-biggest-eigenvalue-to-smallest-eigenvalue}{{1.2}{7}{P=2 norm is ratio of biggest eigenvalue to smallest eigenvalue!}{subsection.1.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Iterative Methods}{7}{section.2}} +\newlabel{iterative-methods}{{2}{7}{Iterative Methods}{section.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Gauss-Seidel method}{7}{subsection.2.1}} +\newlabel{gauss-seidel-method}{{2.1}{7}{Gauss-Seidel method}{subsection.2.1}{}} +\gdef \LT@i {\LT@entry + {1}{52.97838pt}\LT@entry + {1}{181.1121pt}\LT@entry + {1}{35.4892pt}\LT@entry + {1}{179.80707pt}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}Gauss-Seidel Iterative approach}{8}{subsubsection.2.1.1}} +\newlabel{gauss-seidel-iterative-approach}{{2.1.1}{8}{Gauss-Seidel Iterative approach}{subsubsection.2.1.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Jacobi method}{8}{subsubsection.2.1.2}} +\newlabel{jacobi-method}{{2.1.2}{8}{Jacobi method}{subsubsection.2.1.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Gauss-Seidel with Relaxation}{11}{subsection.2.2}} +\newlabel{gauss-seidel-with-relaxation}{{2.2}{11}{Gauss-Seidel with Relaxation}{subsection.2.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Nonlinear Systems}{13}{subsection.2.3}} +\newlabel{nonlinear-systems}{{2.3}{13}{Nonlinear Systems}{subsection.2.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Newton-Raphson part II}{14}{subsection.2.4}} +\newlabel{newton-raphson-part-ii}{{2.4}{14}{Newton-Raphson part II}{subsection.2.4}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.4.1}Solution is again in the form Ax=b}{15}{subsubsection.2.4.1}} +\newlabel{solution-is-again-in-the-form-axb}{{2.4.1}{15}{Solution is again in the form Ax=b}{subsubsection.2.4.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}Example of Jacobian calculation}{15}{subsection.2.5}} +\newlabel{example-of-jacobian-calculation}{{2.5}{15}{Example of Jacobian calculation}{subsection.2.5}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.1}Nonlinear springs supporting two masses in series}{15}{subsubsection.2.5.1}} +\newlabel{nonlinear-springs-supporting-two-masses-in-series}{{2.5.1}{15}{Nonlinear springs supporting two masses in series}{subsubsection.2.5.1}{}} diff --git a/lecture_13/lecture_13.bbl b/lecture_13/lecture_13.bbl new file mode 100644 index 0000000..e69de29 diff --git a/lecture_13/lecture_13.blg b/lecture_13/lecture_13.blg new file mode 100644 index 0000000..fb66ca0 --- /dev/null +++ b/lecture_13/lecture_13.blg @@ -0,0 +1,48 @@ +This is BibTeX, Version 0.99d (TeX Live 2015/Debian) +Capacity: max_strings=35307, hash_size=35307, hash_prime=30011 +The top-level auxiliary file: lecture_13.aux +I found no \citation commands---while reading file lecture_13.aux +I found no \bibdata command---while reading file lecture_13.aux +I found no \bibstyle command---while reading file lecture_13.aux +You've used 0 entries, + 0 wiz_defined-function locations, + 83 strings with 494 characters, +and the built_in function-call counts, 0 in all, are: += -- 0 +> -- 0 +< -- 0 ++ -- 0 +- -- 0 +* -- 0 +:= -- 0 +add.period$ -- 0 +call.type$ -- 0 +change.case$ -- 0 +chr.to.int$ -- 0 +cite$ -- 0 +duplicate$ -- 0 +empty$ -- 0 +format.name$ -- 0 +if$ -- 0 +int.to.chr$ -- 0 +int.to.str$ -- 0 +missing$ -- 0 +newline$ -- 0 +num.names$ -- 0 +pop$ -- 0 +preamble$ -- 0 +purify$ -- 0 +quote$ -- 0 +skip$ -- 0 +stack$ -- 0 +substring$ -- 0 +swap$ -- 0 +text.length$ -- 0 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 0 +warning$ -- 0 +while$ -- 0 +width$ -- 0 +write$ -- 0 +(There were 3 error messages) diff --git a/lecture_13/lecture_13.ipynb b/lecture_13/lecture_13.ipynb new file mode 100644 index 0000000..913f44f --- /dev/null +++ b/lecture_13/lecture_13.ipynb @@ -0,0 +1,5325 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "![q1](efficient_soln.png)\n", + "\n", + "![A](https://lh4.googleusercontent.com/fmG7EnFxpvvjSgijOuwz8osuiH3cBDgOzTE64KnfQeeDDSG2oE86-BzcpYIQMVkkAgRRGEDEGi6-Nkr8qmEMeaAk-gcjEmXe42WFYUdOa5XoUaBkXRakkA77_XrkRjArCGZIFhjjDRoO7x0)\n", + "\n", + "![q2](norm_A.png)\n", + "\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Do we have to submit a link for HW #4 somewhere or is uploading to Github sufficient?\n", + " \n", + " -no, your submission from HW 3 is sufficient\n", + "\n", + "2. How do I get the formulas/formatting in markdown files to show up on github?\n", + " \n", + " -no luck for markdown equations in github, this is an ongoing request\n", + " \n", + "3. Confused about the p=1 norm part and ||A||_1\n", + "\n", + "4. When's the exam?\n", + " \n", + " -next week (3/9)\n", + "\n", + "5. What do you recommend doing to get better at figuring out the homeworks?\n", + "\n", + " -time and experimenting (try going through the lecture examples, verify my work)\n", + " \n", + "6. Could we have an hw or extra credit with a video lecture to learn some simple python?\n", + " \n", + " -Sounds great! how simple? \n", + " \n", + " -[Installing Python and Jupyter Notebook (via Anaconda) - https://www.continuum.io/downloads](https://www.continuum.io/downloads)\n", + " \n", + " -[Running Matlab kernel in Jupyter - https://anneurai.net/2015/11/12/matlab-based-ipython-notebooks/](https://anneurai.net/2015/11/12/matlab-based-ipython-notebooks/)\n", + " \n", + " -[Running Octave kernel in Jupyter - https://anaconda.org/pypi/octave_kernel](https://anaconda.org/pypi/octave_kernel)\n", + " \n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Markdown examples\n", + "\n", + "` \" ' ` `\n", + "\n", + "```matlab\n", + "x=linspace(0,1);\n", + "y=x.^2;\n", + "plot(x,y)\n", + "for i = 1:10\n", + " fprintf('markdown is pretty')\n", + "end\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Condition of a matrix \n", + "### *just checked in to see what condition my condition was in*\n", + "### Matrix norms\n", + "\n", + "The Euclidean norm of a vector is measure of the magnitude (in 3D this would be: $|x|=\\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general the equation is:\n", + "\n", + "$||x||_{e}=\\sqrt{\\sum_{i=1}^{n}x_{i}^{2}}$\n", + "\n", + "For a matrix, A, the same norm is called the Frobenius norm:\n", + "\n", + "$||A||_{f}=\\sqrt{\\sum_{i=1}^{n}\\sum_{j=1}^{m}A_{i,j}^{2}}$\n", + "\n", + "In general we can calculate any $p$-norm where\n", + "\n", + "$||A||_{p}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{p}}$\n", + "\n", + "so the p=1, 1-norm is \n", + "\n", + "$||A||_{1}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{1}}=\\sum_{i=1}^{n}\\sum_{i=1}^{m}|A_{i,j}|$\n", + "\n", + "$||A||_{\\infty}=\\sqrt{\\sum_{i=1}^{n}\\sum_{i=1}^{m}A_{i,j}^{\\infty}}=\\max_{1\\le i \\le n}\\sum_{j=1}^{m}|A_{i,j}|$\n", + "\n", + "### Condition of Matrix\n", + "\n", + "The matrix condition is the product of \n", + "\n", + "$Cond(A) = ||A||\\cdot||A^{-1}||$ \n", + "\n", + "So each norm will have a different condition number, but the limit is $Cond(A)\\ge 1$\n", + "\n", + "An estimate of the rounding error is based on the condition of A:\n", + "\n", + "$\\frac{||\\Delta x||}{x} \\le Cond(A) \\frac{||\\Delta A||}{||A||}$\n", + "\n", + "So if the coefficients of A have accuracy to $10^{-t}\n", + "\n", + "and the condition of A, $Cond(A)=10^{c}$\n", + "\n", + "then the solution for x can have rounding errors up to $10^{c-t}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 1.00000 0.50000 0.33333\n", + " 0.50000 0.33333 0.25000\n", + " 0.33333 0.25000 0.20000\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " 0.50000 1.00000 0.00000\n", + " 0.33333 1.00000 1.00000\n", + "\n", + "U =\n", + "\n", + " 1.00000 0.50000 0.33333\n", + " 0.00000 0.08333 0.08333\n", + " 0.00000 -0.00000 0.00556\n", + "\n" + ] + } + ], + "source": [ + "A=[1,1/2,1/3;1/2,1/3,1/4;1/3,1/4,1/5]\n", + "[L,U]=LU_naive(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Then, $A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c}\n", + "1 \\\\\n", + "0 \\\\\n", + "0 \\end{array}\\right]$, $Ux_{1}=d_{1}$ ..." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invA =\n", + "\n", + " 9.0000 -36.0000 30.0000\n", + " -36.0000 192.0000 -180.0000\n", + " 30.0000 -180.0000 180.0000\n", + "\n", + "ans =\n", + "\n", + " 1.0000e+00 3.5527e-15 2.9976e-15\n", + " -1.3249e-14 1.0000e+00 -9.1038e-15\n", + " 8.5117e-15 7.1054e-15 1.0000e+00\n", + "\n" + ] + } + ], + "source": [ + "invA=zeros(3,3);\n", + "d1=L\\[1;0;0];\n", + "d2=L\\[0;1;0];\n", + "d3=L\\[0;0;1];\n", + "invA(:,1)=U\\d1; % shortcut invA(:,1)=A\\[1;0;0]\n", + "invA(:,2)=U\\d2;\n", + "invA(:,3)=U\\d3\n", + "invA*A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find the condition of A, $cond(A)$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "normf_A = 1.4136\n", + "normf_invA = 372.21\n", + "cond_f_A = 526.16\n", + "ans = 1.4136\n", + "norm1_A = 1.8333\n", + "norm1_invA = 30.000\n", + "ans = 1.8333\n", + "cond_1_A = 55.000\n", + "norminf_A = 1.8333\n", + "norminf_invA = 30.000\n", + "ans = 1.8333\n", + "cond_inf_A = 55.000\n" + ] + } + ], + "source": [ + "% Frobenius norm\n", + "normf_A = sqrt(sum(sum(A.^2)))\n", + "normf_invA = sqrt(sum(sum(invA.^2)))\n", + "\n", + "cond_f_A = normf_A*normf_invA\n", + "\n", + "norm(A,'fro')\n", + "\n", + "% p=1, column sum norm\n", + "norm1_A = max(sum(A,2))\n", + "norm1_invA = max(sum(invA,2))\n", + "norm(A,1)\n", + "\n", + "cond_1_A=norm1_A*norm1_invA\n", + "\n", + "% p=inf, row sum norm\n", + "norminf_A = max(sum(A,1))\n", + "norminf_invA = max(sum(invA,1))\n", + "norm(A,inf)\n", + "\n", + "cond_inf_A=norminf_A*norminf_invA\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with spring constants $K_{i}$. What does a high condition number mean for this problem? \n", + "\n", + "![Springs-masses](../lecture_09/mass_springs.png)\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_{2}(x_{2}-x_{1})-k_{1}x_{1}=0$\n", + "\n", + "$m_{2}g+k_{3}(x_{3}-x_{2})-k_{2}(x_{2}-x_{1})=0$\n", + "\n", + "$m_{3}g+k_{4}(x_{4}-x_{3})-k_{3}(x_{3}-x_{2})=0$\n", + "\n", + "$m_{4}g-k_{4}(x_{4}-x_{3})=0$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{cccc}\n", + "k_{1}+k_{2} & -k_{2} & 0 & 0 \\\\\n", + "-k_{2} & k_{2}+k_{3} & -k_{3} & 0 \\\\\n", + "0 & -k_{3} & k_{3}+k_{4} & -k_{4} \\\\\n", + "0 & 0 & -k_{4} & k_{4} \\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": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 100010 -100000 0 0\n", + " -100000 100010 -10 0\n", + " 0 -10 11 -1\n", + " 0 0 -1 1\n", + "\n", + "y =\n", + "\n", + " 9.8100\n", + " 19.6200\n", + " 29.4300\n", + " 39.2400\n", + "\n" + ] + } + ], + "source": [ + "k1=10; % N/m\n", + "k2=100000;\n", + "k3=10;\n", + "k4=1;\n", + "m1=1; % kg\n", + "m2=2;\n", + "m3=3;\n", + "m4=4;\n", + "g=9.81; % m/s^2\n", + "K=[k1+k2 -k2 0 0; -k2 k2+k3 -k3 0; 0 -k3 k3+k4 -k4; 0 0 -k4 k4]\n", + "y=[m1*g;m2*g;m3*g;m4*g]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 3.2004e+05\n", + "ans = 3.2004e+05\n", + "ans = 2.5925e+05\n", + "ans = 2.5293e+05\n" + ] + } + ], + "source": [ + "cond(K,inf)\n", + "cond(K,1)\n", + "cond(K,'fro')\n", + "cond(K,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "e =\n", + "\n", + " 7.9078e-01\n", + " 3.5881e+00\n", + " 1.7621e+01\n", + " 2.0001e+05\n", + "\n", + "ans = 2.5293e+05\n" + ] + } + ], + "source": [ + "e=eig(K)\n", + "max(e)/min(e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## P=2 norm is ratio of biggest eigenvalue to smallest eigenvalue!\n", + "\n", + "no need to calculate the inv(K)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Iterative Methods\n", + "\n", + "## Gauss-Seidel method\n", + "\n", + "If we have an intial guess for each value of a vector $x$ that we are trying to solve, then it is easy enough to solve for one component given the others. \n", + "\n", + "Take a 3$\\times$3 matrix \n", + "\n", + "$Ax=b$\n", + "\n", + "$\\left[ \\begin{array}{ccc}\n", + "3 & -0.1 & -0.2 \\\\\n", + "0.1 & 7 & -0.3 \\\\\n", + "0.3 & -0.2 & 10 \\end{array} \\right]\n", + "\\left[ \\begin{array}{c}\n", + "x_{1} \\\\\n", + "x_{2} \\\\\n", + "x_{3} \\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "7.85 \\\\\n", + "-19.3 \\\\\n", + "71.4\\end{array} \\right]$\n", + "\n", + "$x_{1}=\\frac{7.85+0.1x_{2}+0.2x_{3}}{3}$\n", + "\n", + "$x_{2}=\\frac{-19.3-0.1x_{1}+0.3x_{3}}{7}$\n", + "\n", + "$x_{3}=\\frac{71.4+0.1x_{1}+0.2x_{2}}{10}$" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 3.00000 -0.10000 -0.20000\n", + " 0.10000 7.00000 -0.30000\n", + " 0.30000 -0.20000 10.00000\n", + "\n", + "b =\n", + "\n", + " 7.8500\n", + " -19.3000\n", + " 71.4000\n", + "\n", + "x =\n", + "\n", + " 3.0000\n", + " -2.5000\n", + " 7.0000\n", + "\n" + ] + } + ], + "source": [ + "A=[3 -0.1 -0.2;0.1 7 -0.3;0.3 -0.2 10]\n", + "b=[7.85;-19.3;71.4]\n", + "\n", + "x=A\\b" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Gauss-Seidel Iterative approach\n", + "\n", + "As a first guess, we can use $x_{1}=x_{2}=x_{3}=0$\n", + "\n", + "$x_{1}=\\frac{7.85+0.1(0)+0.3(0)}{3}=2.6167$\n", + "\n", + "$x_{2}=\\frac{-19.3-0.1(2.6167)+0.3(0)}{7}=-2.7945$\n", + "\n", + "$x_{3}=\\frac{71.4+0.1(2.6167)+0.2(-2.7945)}{10}=7.0056$\n", + "\n", + "Then, we update the guess:\n", + "\n", + "$x_{1}=\\frac{7.85+0.1(-2.7945)+0.3(7.0056)}{3}=2.9906$\n", + "\n", + "$x_{2}=\\frac{-19.3-0.1(2.9906)+0.3(7.0056)}{7}=-2.4996$\n", + "\n", + "$x_{3}=\\frac{71.4+0.1(2.9906)+0.2(-2.4966)}{10}=7.00029$\n", + "\n", + "The results are conveerging to the solution we found with `\\` of $x_{1}=3,~x_{2}=-2.5,~x_{3}=7$\n", + "\n", + "We could also use an iterative method that solves for all of the x-components in one step:\n", + "\n", + "### Jacobi method\n", + "\n", + "$x_{1}^{i}=\\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$\n", + "\n", + "$x_{2}^{i}=\\frac{-19.3-0.1x_{1}^{i-1}+0.3x_{3}^{i-1}}{7}$\n", + "\n", + "$x_{3}^{i}=\\frac{71.4+0.1x_{1}^{i-1}+0.2x_{2}^{i-1}}{10}$\n", + "\n", + "Here the solution is a matrix multiplication and vector addition\n", + "\n", + "$\\left[ \\begin{array}{c}\n", + "x_{1}^{i} \\\\\n", + "x_{2}^{i} \\\\\n", + "x_{3}^{i} \\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "7.85/3 \\\\\n", + "-19.3/7 \\\\\n", + "71.4/10\\end{array} \\right]-\n", + "\\left[ \\begin{array}{ccc}\n", + "0 & 0.1/3 & 0.2/3 \\\\\n", + "0.1/7 & 0 & -0.3/7 \\\\\n", + "0.3/10 & -0.2/10 & 0 \\end{array} \\right]\n", + "\\left[ \\begin{array}{c}\n", + "x_{1}^{i-1} \\\\\n", + "x_{2}^{i-1} \\\\\n", + "x_{3}^{i-1} \\end{array} \\right]$\n", + "\n", + "|x_{j}|Jacobi method |vs| Gauss-Seidel |\n", + "|--------|------------------------------|---|-------------------------------|\n", + "|$x_{1}^{i}=$ | $\\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$ | | $\\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$|\n", + "|$x_{2}^{i}=$ | $\\frac{-19.3-0.1x_{1}^{i-1}+0.3x_{3}^{i-1}}{7}$ | | $\\frac{-19.3-0.1x_{1}^{i}+0.3x_{3}^{i-1}}{7}$ |\n", + "|$x_{3}^{i}=$ | $\\frac{71.4+0.1x_{1}^{i-1}+0.2x_{2}^{i-1}}{10}$ | | $\\frac{71.4+0.1x_{1}^{i}+0.2x_{2}^{i}}{10}$|" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ba =\n", + "\n", + " 2.6167\n", + " -2.7571\n", + " 7.1400\n", + "\n", + "sA =\n", + "\n", + " 0.00000 -0.10000 -0.20000\n", + " 0.10000 0.00000 -0.30000\n", + " 0.30000 -0.20000 0.00000\n", + "\n", + "sA =\n", + "\n", + " 0.000000 -0.033333 -0.066667\n", + " 0.014286 0.000000 -0.042857\n", + " 0.030000 -0.020000 0.000000\n", + "\n", + "x1 =\n", + "\n", + " 2.6167\n", + " -2.7571\n", + " 7.1400\n", + "\n", + "x2 =\n", + "\n", + " 3.0008\n", + " -2.4885\n", + " 7.0064\n", + "\n", + "x3 =\n", + "\n", + " 3.0008\n", + " -2.4997\n", + " 7.0002\n", + "\n", + "solution is converging to [3,-2.5,7]]\n" + ] + } + ], + "source": [ + "ba=b./diag(A) % or ba=b./[A(1,1);A(2,2);A(3,3)]\n", + "sA=A-diag(diag(A)) % A with zeros on diagonal\n", + "sA(1,:)=sA(1,:)/A(1,1);\n", + "sA(2,:)=sA(2,:)/A(2,2);\n", + "sA(3,:)=sA(3,:)/A(3,3)\n", + "x0=[0;0;0];\n", + "x1=ba-sA*x0\n", + "x2=ba-sA*x1\n", + "x3=ba-sA*x2\n", + "fprintf('solution is converging to [3,-2.5,7]]\\n')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 3\n", + " 7\n", + " 10\n", + "\n", + "ans =\n", + "\n", + "Diagonal Matrix\n", + "\n", + " 3 0 0\n", + " 0 7 0\n", + " 0 0 10\n", + "\n" + ] + } + ], + "source": [ + "diag(A)\n", + "diag(diag(A))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This method works if problem is diagonally dominant, \n", + "\n", + "$|a_{ii}|>\\sum_{j=1,j\\ne i}^{n}|a_{ij}|$\n", + "\n", + "If this condition is true, then Jacobi or Gauss-Seidel should converge\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 0.10000 1.00000 3.00000\n", + " 1.00000 0.20000 3.00000\n", + " 5.00000 2.00000 0.30000\n", + "\n", + "b =\n", + "\n", + " 12\n", + " 2\n", + " 4\n", + "\n", + "ans =\n", + "\n", + " -2.9393\n", + " 9.1933\n", + " 1.0336\n", + "\n" + ] + } + ], + "source": [ + "A=[0.1,1,3;1,0.2,3;5,2,0.3]\n", + "b=[12;2;4]\n", + "A\\b" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ba =\n", + "\n", + " 120.000\n", + " 10.000\n", + " 13.333\n", + "\n", + "sA =\n", + "\n", + " 0 1 3\n", + " 1 0 3\n", + " 5 2 0\n", + "\n", + "sA =\n", + "\n", + " 0.00000 10.00000 30.00000\n", + " 5.00000 0.00000 15.00000\n", + " 16.66667 6.66667 0.00000\n", + "\n", + "x1 =\n", + "\n", + " 120.000\n", + " 10.000\n", + " 13.333\n", + "\n", + "x2 =\n", + "\n", + " -380.00\n", + " -790.00\n", + " -2053.33\n", + "\n", + "x3 =\n", + "\n", + " 6.9620e+04\n", + " 3.2710e+04\n", + " 1.1613e+04\n", + "\n", + "solution is not converging to [-2.93,9.19,1.03]\n" + ] + } + ], + "source": [ + "ba=b./diag(A) % or ba=b./[A(1,1);A(2,2);A(3,3)]\n", + "sA=A-diag(diag(A)) % A with zeros on diagonal\n", + "sA(1,:)=sA(1,:)/A(1,1);\n", + "sA(2,:)=sA(2,:)/A(2,2);\n", + "sA(3,:)=sA(3,:)/A(3,3)\n", + "x0=[0;0;0];\n", + "x1=ba-sA*x0\n", + "x2=ba-sA*x1\n", + "x3=ba-sA*x2\n", + "fprintf('solution is not converging to [-2.93,9.19,1.03]\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gauss-Seidel with Relaxation\n", + "\n", + "In order to force the solution to converge faster, we can introduce a relaxation term $\\lambda$. \n", + "\n", + "where the new x values are weighted between the old and new:\n", + "\n", + "$x^{i}=\\lambda x^{i}+(1-\\lambda)x^{i-1}$\n", + "\n", + "after solving for x, lambda weights the current approximation with the previous approximation for the updated x\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 3.00000 -0.10000 -0.20000\n", + " 0.10000 7.00000 -0.30000\n", + " 0.30000 -0.20000 10.00000\n", + "\n", + "b =\n", + "\n", + " 7.8500\n", + " -19.3000\n", + " 71.4000\n", + "\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% rearrange A and b\n", + "A=[3 -0.1 -0.2;0.1 7 -0.3;0.3 -0.2 10]\n", + "b=[7.85;-19.3;71.4]\n", + "\n", + "iters=zeros(100,1);\n", + "for i=1:100\n", + " lambda=2/100*i;\n", + " [x,ea,iters(i)]=Jacobi_rel(A,b,lambda);\n", + "end\n", + "plot([1:100]*2/100,iters) " + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "l = 0.99158\r\n" + ] + } + ], + "source": [ + "l=fminbnd(@(l) lambda_fcn(A,b,l),0.5,1.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 3.0000\n", + " -2.5000\n", + " 7.0000\n", + "\n" + ] + } + ], + "source": [ + "A\\b" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x =\n", + "\n", + " 3.0000\n", + " -2.5000\n", + " 7.0000\n", + "\n", + "ea =\n", + "\n", + " 1.8289e-07\n", + " 2.1984e-08\n", + " 2.3864e-08\n", + "\n", + "iter = 8\n", + "x =\n", + "\n", + " 3.0000\n", + " -2.5000\n", + " 7.0000\n", + "\n", + "ea =\n", + "\n", + " 1.9130e-08\n", + " 7.6449e-08\n", + " 3.3378e-08\n", + "\n", + "iter = 8\n" + ] + } + ], + "source": [ + "[x,ea,iter]=Jacobi_rel(A,b,l,0.000001)\n", + "[x,ea,iter]=Jacobi_rel(A,b,1,0.000001)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Nonlinear Systems\n", + "\n", + "Consider two simultaneous nonlinear equations with two unknowns:\n", + "\n", + "$x_{1}^{2}+x_{1}x_{2}=10$\n", + "\n", + "$x_{2}+3x_{1}x_{2}^{2}=57$\n", + "\n", + "Graphically, we are looking for the solution:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tx2\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx1\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\t \n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x11=linspace(0.5,3);\n", + "x12=(10-x11.^2)./x11;\n", + "\n", + "x22=linspace(2,8);\n", + "x21=(57-x22).*x22.^-2/3;\n", + "\n", + "plot(x11,x12,x21,x22)\n", + "% Solution at x_1=2, x_2=3\n", + "hold on;\n", + "plot(2,3,'o')\n", + "xlabel('x_1')\n", + "ylabel('x_2')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Newton-Raphson part II\n", + "\n", + "Remember the first order approximation for the next point in a function is:\n", + "\n", + "$f(x_{i+1})=f(x_{i})+(x_{i+1}-x_{i})f'(x_{i})$\n", + "\n", + "then, $f(x_{i+1})=0$ so we are left with:\n", + "\n", + "$x_{i+1}=x_{i}-\\frac{f(x_{i})}{f'(x_{i})}$\n", + "\n", + "We can use the same formula, but now we have multiple dimensions so we need to determine the Jacobian\n", + "\n", + "$[J]=\\left[ \\begin{array}{cccc}\n", + "\\frac{\\partial f_{1,i}}{\\partial x_{1}} & \\frac{\\partial f_{1,i}}{\\partial x_{2}} & \n", + "\\cdots & \\frac{\\partial f_{1,i}}{\\partial x_{n}} \\\\\n", + "\\frac{\\partial f_{2,i}}{\\partial x_{1}} & \\frac{\\partial f_{2,i}}{\\partial x_{2}} & \n", + "\\cdots & \\frac{\\partial f_{2,i}}{\\partial x_{n}} \\\\\n", + "\\vdots & \\vdots & & \\vdots \\\\\n", + "\\frac{\\partial f_{n,i}}{\\partial x_{1}} & \\frac{\\partial f_{n,i}}{\\partial x_{2}} & \n", + "\\cdots & \\frac{\\partial f_{n,i}}{\\partial x_{n}} \\\\\n", + "\\end{array} \\right]$\n", + "\n", + "$\\left[ \\begin{array}{c}\n", + "f_{1,i+1} \\\\\n", + "f_{2,i+1} \\\\\n", + "\\vdots \\\\\n", + "f_{n,i+1}\\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "f_{1,i} \\\\\n", + "f_{2,i} \\\\\n", + "\\vdots \\\\\n", + "f_{n,i}\\end{array} \\right]+\n", + "\\left[ \\begin{array}{cccc}\n", + "\\frac{\\partial f_{1,i}}{\\partial x_{1}} & \\frac{\\partial f_{1,i}}{\\partial x_{2}} & \n", + "\\cdots & \\frac{\\partial f_{1,i}}{\\partial x_{n}} \\\\\n", + "\\frac{\\partial f_{2,i}}{\\partial x_{1}} & \\frac{\\partial f_{2,i}}{\\partial x_{2}} & \n", + "\\cdots & \\frac{\\partial f_{2,i}}{\\partial x_{n}} \\\\\n", + "\\vdots & \\vdots & & \\vdots \\\\\n", + "\\frac{\\partial f_{n,i}}{\\partial x_{1}} & \\frac{\\partial f_{n,i}}{\\partial x_{2}} & \n", + "\\cdots & \\frac{\\partial f_{n,i}}{\\partial x_{n}} \\\\\n", + "\\end{array} \\right]\n", + "\\left( \\left[ \\begin{array}{c}\n", + "x_{i+1} \\\\\n", + "x_{i+1} \\\\\n", + "\\vdots \\\\\n", + "x_{i+1}\\end{array} \\right]-\n", + "\\left[ \\begin{array}{c}\n", + "x_{1,i} \\\\\n", + "x_{2,i} \\\\\n", + "\\vdots \\\\\n", + "x_{n,i}\\end{array} \\right]\\right)$\n", + "\n", + "### Solution is again in the form Ax=b\n", + "\n", + "$[J]([x_{i+1}]-[x_{i}])=-[f]$\n", + "\n", + "so\n", + "\n", + "$[x_{i+1}]= [x_{i}]-[J]^{-1}[f]$\n", + "\n", + "## Example of Jacobian calculation\n", + "\n", + "### Nonlinear springs supporting two masses in series\n", + "\n", + "Two springs are connected to two masses, with $m_1$=1 kg and $m_{2}$=2 kg. The springs are identical, but they have nonlinear spring constants, of $k_1$=100 N/m and $k_2$=-10 N/m\n", + "\n", + "We want to solve for the final position of the masses ($x_1$ and $x_2$)\n", + "\n", + "$m_{1}g+k_{1}(x_{2}-x_{1})+k_{2}(x_{2}-x_{1})^{2}+k_{1}x_{1}+k_{2}x_{1}^{2}=0$\n", + "\n", + "$m_{2}g-k_{1}(x_{2}-x_{1})-k_{2}(x_2-x_1)^{2}=0$\n", + "\n", + "$J(1,1)=\\frac{\\partial f_{1}}{\\partial x_{1}}=-k_{1}-2k_{2}(x_{2}-x_{1})+k_{1}+2k_{2}x_{1}$\n", + "\n", + "$J(1,2)=\\frac{\\partial f_1}{\\partial x_{2}}=k_{1}+2k_{2}(x_{2}-x_{1})$\n", + "\n", + "$J(2,1)=\\frac{\\partial f_2}{\\partial x_{1}}=k_{1}+2k_{2}(x_{2}-x_{1})$\n", + "\n", + "$J(2,2)=\\frac{\\partial f_2}{\\partial x_{2}}=-k_{1}-2k_{2}(x_{2}-x_{1})$\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m1=1; % kg \n", + "m2=2; % kg\n", + "k1=100; % N/m\n", + "k2=-10; % N/m^2" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function [f,J]=mass_spring(x)\n", + " % Function to calculate function values f1 and f2 as well as Jacobian \n", + " % for 2 masses and 2 identical nonlinear springs\n", + " m1=1; % kg \n", + " m2=2; % kg\n", + " k1=100; % N/m\n", + " k2=-10; % N/m^2\n", + " g=9.81; % m/s^2\n", + " x1=x(1);\n", + " x2=x(2);\n", + " J=[-k1-2*k2*(x2-x1)-k1-2*k2*x1,k1+2*k2*(x2-x1);\n", + " k1+2*k2*(x2-x1),-k1-2*k2*(x2-x1)];\n", + " f=[m1*g+k1*(x2-x1)+k2*(x2-x1).^2-k1*x1-k2*x1^2;\n", + " m2*g-k1*(x2-x1)-k2*(x2-x1).^2];\n", + "end\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "f =\n", + "\n", + " -190.19\n", + " 129.62\n", + "\n", + "J =\n", + "\n", + " -200 120\n", + " 120 -120\n", + "\n" + ] + } + ], + "source": [ + "[f,J]=mass_spring([1,0])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x1 =\n", + "\n", + " -1.5142\n", + " -1.4341\n", + "\n", + "ea =\n", + "\n", + " 2.9812\n", + " 2.3946\n", + "\n", + "x2 =\n", + "\n", + " 0.049894\n", + " 0.248638\n", + "\n", + "ea =\n", + "\n", + " 31.3492\n", + " 6.7678\n", + "\n", + "x3 =\n", + "\n", + " 0.29701\n", + " 0.49722\n", + "\n", + "ea =\n", + "\n", + " 0.83201\n", + " 0.49995\n", + "\n", + "x =\n", + "\n", + " 0.29701\n", + " 0.49722\n", + "\n", + "ea =\n", + "\n", + " 0.021392\n", + " 0.012890\n", + "\n", + "ea =\n", + "\n", + " 1.4786e-05\n", + " 8.9091e-06\n", + "\n", + "ea =\n", + "\n", + " 7.0642e-12\n", + " 4.2565e-12\n", + "\n" + ] + } + ], + "source": [ + "x0=[3;2];\n", + "[f0,J0]=mass_spring(x0);\n", + "x1=x0-J0\\f0\n", + "ea=(x1-x0)./x1\n", + "[f1,J1]=mass_spring(x1);\n", + "x2=x1-J1\\f1\n", + "ea=(x2-x1)./x2\n", + "[f2,J2]=mass_spring(x2);\n", + "x3=x2-J2\\f2\n", + "ea=(x3-x2)./x3\n", + "x=x3\n", + "for i=1:3\n", + " xold=x;\n", + " [f,J]=mass_spring(x);\n", + " x=x-J\\f;\n", + " ea=(x-xold)./x\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x =\n", + "\n", + " 0.30351\n", + " 0.50372\n", + "\n", + "X0 =\n", + "\n", + " 0.30351\n", + " 0.50372\n", + "\n" + ] + } + ], + "source": [ + "x\n", + "X0=fsolve(@(x) mass_spring(x),[3;5])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx1\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t1000\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t1500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t2000\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t2500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1b\n", + "\n", + "\n", + "\n", + ";\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1000\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2000\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx1\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-2000\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-1500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-1000\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t500\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1b\n", + "\n", + "\n", + "\n", + ";\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-1500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-1000\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "[X,Y]=meshgrid(linspace(0,10,20),linspace(0,10,20));\n", + "[N,M]=size(X);\n", + "F=zeros(size(X));\n", + "for i=1:N\n", + " for j=1:M\n", + " [f,~]=mass_spring([X(i,j),Y(i,j)]);\n", + " F1(i,j)=f(1);\n", + " F2(i,j)=f(2);\n", + " end\n", + "end\n", + "mesh(X,Y,F1)\n", + "xlabel('x_1')\n", + "ylabel('x_2')\n", + "colorbar()\n", + "figure()\n", + "mesh(X,Y,F2)\n", + "xlabel('x_1')\n", + "ylabel('x_2')\n", + "colorbar()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_13/lecture_13.log b/lecture_13/lecture_13.log new file mode 100644 index 0000000..a86b4c3 --- /dev/null +++ b/lecture_13/lecture_13.log @@ -0,0 +1,889 @@ +This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex 2017.1.11) 2 MAR 2017 11:41 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**lecture_13.tex +(./lecture_13.tex +LaTeX2e <2016/02/01> +Babel <3.9q> and hyphenation patterns for 81 language(s) loaded. +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo +File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 48. +)) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks14 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2016/01/03 v1.0q Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +) +Package graphics Info: Driver file: pdftex.def on input line 95. + +(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +) +\Gread@gobject=\count87 +)) +\Gin@req@height=\dimen103 +\Gin@req@width=\dimen104 +) +(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty +Package: caption 2016/02/21 v3.3-144 Customizing captions (AR) + +(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty +Package: caption3 2016/02/04 v1.7-139 caption3 kernel (AR) +Package caption3 Info: TeX engine: e-TeX on input line 67. +\captionmargin=\dimen105 +\captionmargin@=\dimen106 +\captionwidth=\dimen107 +\caption@tempdima=\dimen108 +\caption@indent=\dimen109 +\caption@parindent=\dimen110 +\caption@hangindent=\dimen111 +) +\c@ContinuedFloat=\count88 +) +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/adjustbox.sty +Package: adjustbox 2012/05/21 v1.0 Adjusting TeX boxes (trim, clip, ...) + +(/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty +Package: xkeyval 2014/12/03 v2.7a package option processing (HA) + +(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex +(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex +\XKV@toks=\toks15 +\XKV@tempa@toks=\toks16 +) +\XKV@depth=\count89 +File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) +)) +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/adjcalc.sty +Package: adjcalc 2012/05/16 v1.1 Provides advanced setlength with multiple back +-ends (calc, etex, pgfmath) +) +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/trimclip.sty +Package: trimclip 2012/05/16 v1.0 Trim and clip general TeX material + +(/usr/share/texlive/texmf-dist/tex/latex/collectbox/collectbox.sty +Package: collectbox 2012/05/17 v0.4b Collect macro arguments as boxes +\collectedbox=\box26 +) +\tc@llx=\dimen112 +\tc@lly=\dimen113 +\tc@urx=\dimen114 +\tc@ury=\dimen115 +Package trimclip Info: Using driver 'tc-pdftex.def'. + +(/usr/share/texlive/texmf-dist/tex/latex/adjustbox/tc-pdftex.def +File: tc-pdftex.def 2012/05/13 v1.0 Clipping driver for pdftex +)) +\adjbox@Width=\dimen116 +\adjbox@Height=\dimen117 +\adjbox@Depth=\dimen118 +\adjbox@Totalheight=\dimen119 + +(/usr/share/texlive/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +Package: ifoddpage 2011/09/13 v1.0 Conditionals for odd/even page detection +\c@checkoddpage=\count90 +) +(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty +Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages +\@vwid@box=\box27 +\sift@deathcycles=\count91 +\@vwid@loff=\dimen120 +\@vwid@roff=\dimen121 +)) +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive +) +Package xcolor Info: Driver file: pdftex.def on input line 225. +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. +Package xcolor Info: Model `RGB' extended on input line 1353. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/enumerate.sty +Package: enumerate 2015/07/23 v3.00 enumerate extensions (DPC) +\@enLab=\toks17 +) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in PDF mode is detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count92 +\Gm@cntv=\count93 +\c@Gm@tempcnt=\count94 +\Gm@bindingoffset=\dimen122 +\Gm@wd@mp=\dimen123 +\Gm@odd@mp=\dimen124 +\Gm@even@mp=\dimen125 +\Gm@layoutwidth=\dimen126 +\Gm@layoutheight=\dimen127 +\Gm@layouthoffset=\dimen128 +\Gm@layoutvoffset=\dimen129 +\Gm@dimlist=\toks18 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2016/03/03 v2.15a AMS math features +\@mathmargin=\skip43 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks19 +\ex@=\dimen130 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen131 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 1999/12/14 v2.01 operator names +) +\inf@bad=\count95 +LaTeX Info: Redefining \frac on input line 199. +\uproot@=\count96 +\leftroot@=\count97 +LaTeX Info: Redefining \overline on input line 297. +\classnum@=\count98 +\DOTSCASE@=\count99 +LaTeX Info: Redefining \ldots on input line 394. +LaTeX Info: Redefining \dots on input line 397. +LaTeX Info: Redefining \cdots on input line 518. +\Mathstrutbox@=\box28 +\strutbox@=\box29 +\big@size=\dimen132 +LaTeX Font Info: Redeclaring font encoding OML on input line 630. +LaTeX Font Info: Redeclaring font encoding OMS on input line 631. +\macc@depth=\count100 +\c@MaxMatrixCols=\count101 +\dotsspace@=\muskip10 +\c@parentequation=\count102 +\dspbrk@lvl=\count103 +\tag@help=\toks20 +\row@=\count104 +\column@=\count105 +\maxfields@=\count106 +\andhelp@=\toks21 +\eqnshift@=\dimen133 +\alignsep@=\dimen134 +\tagshift@=\dimen135 +\tagwidth@=\dimen136 +\totwidth@=\dimen137 +\lineht@=\dimen138 +\@envbody=\toks22 +\multlinegap=\skip44 +\multlinetaggap=\skip45 +\mathdisplay@stack=\toks23 +LaTeX Info: Redefining \[ on input line 2735. +LaTeX Info: Redefining \] on input line 2736. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup5 +\symAMSb=\mathgroup6 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +Package: textcomp 2005/09/27 v1.99g Standard LaTeX package +Package textcomp Info: Sub-encoding information: +(textcomp) 5 = only ISO-Adobe without \textcurrency +(textcomp) 4 = 5 + \texteuro +(textcomp) 3 = 4 + \textohm +(textcomp) 2 = 3 + \textestimated + \textcurrency +(textcomp) 1 = TS1 - \textcircled - \t +(textcomp) 0 = TS1 (full) +(textcomp) Font families with sub-encoding setting implement +(textcomp) only a restricted character set as indicated. +(textcomp) Family '?' is the default used for unknown fonts. +(textcomp) See the documentation for details. +Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79. + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file +) +LaTeX Info: Redefining \oldstylenums on input line 334. +Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349. +Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350. +Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351. +Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352. +Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353. +Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354. +Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355. +Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356. +Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357. +Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358. +Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359. +Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360. +Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361. +Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362. +Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363. +Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364. +Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365. +Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366. +Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367. +Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368. +Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369. +Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370. +Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371. +Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372. + +Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373. +Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374. +Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375. +Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376. +Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377. +Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378. +Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379. +Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380. +Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381. +Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382. +Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383. +Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384. +Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385. +Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386. +Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387. +Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388. +Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389. +Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390. +Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391. +Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392. +Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409. +) +(/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty +Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba +tim +) +(/usr/share/texlive/texmf-dist/tex/latex/eurosym/eurosym.sty +Package: eurosym 1998/08/06 v1.1 European currency symbol ``Euro'' +\@eurobox=\box30 +) +(/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty +Package: ucs 2013/05/11 v2.2 UCS: Unicode input support + +(/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def +File: uni-global.def 2013/05/13 UCS: Unicode global data +) +\uc@secondtry=\count107 +\uc@combtoks=\toks24 +\uc@combtoksb=\toks25 +\uc@temptokena=\toks26 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2015/03/17 v1.2c Input encoding file +\inpenc@prehook=\toks27 +\inpenc@posthook=\toks28 + +(/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def +File: utf8x.def 2004/10/17 UCS: Input encoding UTF-8 +)) +(/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +Package: fancyvrb 2008/02/07 + +Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix +<2008/02/07> (tvz) +\FV@CodeLineNo=\count108 +\FV@InFile=\read1 +\FV@TabBox=\box31 +\c@FancyVerbLine=\count109 +\FV@StepNumber=\count110 +\FV@OutFile=\write3 +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grffile.sty +Package: grffile 2012/04/05 v1.16 Extended file name support for graphics (HO) + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +))) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +) +Package grffile Info: Option `multidot' is set to `true'. +Package grffile Info: Option `extendedchars' is set to `false'. +Package grffile Info: Option `space' is set to `true'. +Package grffile Info: \Gin@ii of package `graphicx' fixed on input line 486. +) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) + + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package hobsub Info: Skipping package `infwarerr' (already loaded). +Package hobsub Info: Skipping package `ltxcmds' (already loaded). +Package hobsub Info: Skipping package `ifluatex' (already loaded). +Package hobsub Info: Skipping package `ifvtex' (already loaded). +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) +Package hobsub Info: Skipping package `ifpdf' (already loaded). +Package hobsub Info: Skipping package `etexcmds' (already loaded). +Package hobsub Info: Skipping package `kvsetkeys' (already loaded). +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) +Package hobsub Info: Skipping package `pdftexcmds' (already loaded). +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +) +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +) +Package hobsub Info: Skipping package `hobsub' (already loaded). +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) +Package: xcolor-patch 2011/01/30 xcolor patch +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) +) +\@linkdim=\dimen139 +\Hy@linkcounter=\count111 +\Hy@pagecounter=\count112 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) +) +\Hy@SavedSpaceFactor=\count113 + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +) +Package hyperref Info: Hyper figures OFF on input line 4443. +Package hyperref Info: Link nesting OFF on input line 4448. +Package hyperref Info: Hyper index ON on input line 4451. +Package hyperref Info: Plain pages OFF on input line 4458. +Package hyperref Info: Backreferencing OFF on input line 4463. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4688. +\c@Hy@tempcnt=\count114 + +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip11 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 5041. +\XeTeXLinkMargin=\dimen140 +\Fld@menulength=\count115 +\Field@Width=\dimen141 +\Fld@charsize=\dimen142 +Package hyperref Info: Hyper figures OFF on input line 6295. +Package hyperref Info: Link nesting OFF on input line 6300. +Package hyperref Info: Hyper index ON on input line 6303. +Package hyperref Info: backreferencing OFF on input line 6310. +Package hyperref Info: Link coloring OFF on input line 6315. +Package hyperref Info: Link coloring with OCG OFF on input line 6320. +Package hyperref Info: PDF/A mode OFF on input line 6325. +LaTeX Info: Redefining \ref on input line 6365. +LaTeX Info: Redefining \pageref on input line 6369. +\Hy@abspage=\count116 +\c@Item=\count117 +\c@Hfootnote=\count118 +) + +Package hyperref Message: Driver (autodetected): hpdftex. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX +\Fld@listcount=\count119 +\c@bookmark@seq@number=\count120 + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +82. +) +\Hy@SectionHShift=\skip46 +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty +Package: longtable 2014/10/28 v4.11 Multi-page Table package (DPC) +\LTleft=\skip47 +\LTright=\skip48 +\LTpre=\skip49 +\LTpost=\skip50 +\LTchunksize=\count121 +\LTcapwidth=\dimen143 +\LT@head=\box32 +\LT@firsthead=\box33 +\LT@foot=\box34 +\LT@lastfoot=\box35 +\LT@cols=\count122 +\LT@rows=\count123 +\c@LT@tables=\count124 +\c@LT@chunks=\count125 +\LT@p@ftn=\toks29 +) +(/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty +Package: booktabs 2005/04/14 v1.61803 publication quality tables +\heavyrulewidth=\dimen144 +\lightrulewidth=\dimen145 +\cmidrulewidth=\dimen146 +\belowrulesep=\dimen147 +\belowbottomsep=\dimen148 +\aboverulesep=\dimen149 +\abovetopsep=\dimen150 +\cmidrulesep=\dimen151 +\cmidrulekern=\dimen152 +\defaultaddspace=\dimen153 +\@cmidla=\count126 +\@cmidlb=\count127 +\@aboverulesep=\dimen154 +\@belowrulesep=\dimen155 +\@thisruleclass=\count128 +\@lastruleclass=\count129 +\@thisrulewidth=\dimen156 +) +(/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty +Package: enumitem 2011/09/28 v3.5.2 Customized lists +\labelindent=\skip51 +\enit@outerparindent=\dimen157 +\enit@toks=\toks30 +\enit@inbox=\box36 +\enitdp@description=\count130 +) +(/usr/share/texlive/texmf-dist/tex/generic/ulem/ulem.sty +\UL@box=\box37 +\UL@hyphenbox=\box38 +\UL@skip=\skip52 +\UL@hook=\toks31 +\UL@height=\dimen158 +\UL@pe=\count131 +\UL@pixel=\dimen159 +\ULC@box=\box39 +Package: ulem 2012/05/18 +\ULdepth=\dimen160 +) +Package hyperref Info: Option `breaklinks' set `true' on input line 264. +Package hyperref Info: Option `colorlinks' set `true' on input line 264. + (./lecture_13.aux) +\openout1 = `lecture_13.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 271. +LaTeX Font Info: Try loading font information for TS1+cmr on input line 271. + + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 271. +LaTeX Font Info: ... okay on input line 271. +LaTeX Font Info: Try loading font information for T1+ppl on input line 271. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count132 +\scratchdimen=\dimen161 +\scratchbox=\box40 +\nofMPsegments=\count133 +\nofMParguments=\count134 +\everyMPshowfont=\toks32 +\MPscratchCnt=\count135 +\MPscratchDim=\dimen162 +\MPnumerator=\count136 +\makeMPintoPDFobject=\count137 +\everyMPtoPDFconversion=\toks33 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) +) +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 452. + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: hyperref package is loaded. +Package caption Info: longtable package is loaded. + +(/usr/share/texlive/texmf-dist/tex/latex/caption/ltcaption.sty +Package: ltcaption 2013/06/09 v1.4-94 longtable captions (AR) +) +Package caption Info: End \AtBeginDocument code. + +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt) +* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt) +* \paperwidth=614.295pt +* \paperheight=794.96999pt +* \textwidth=469.75502pt +* \textheight=650.43001pt +* \oddsidemargin=0.0pt +* \evensidemargin=0.0pt +* \topmargin=-37.0pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=11.0pt +* \footskip=30.0pt +* \marginparwidth=59.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +(/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def +File: ucsencs.def 2011/01/21 Fixes to fontencodings LGR, T3 +) +\AtBeginShipoutBox=\box41 +Package hyperref Info: Link coloring ON on input line 271. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) +) +\c@section@level=\count138 +) +LaTeX Info: Redefining \ref on input line 271. +LaTeX Info: Redefining \pageref on input line 271. +LaTeX Info: Redefining \nameref on input line 271. + +(./lecture_13.out) (./lecture_13.out) +\@outlinefile=\write4 +\openout4 = `lecture_13.out'. + +LaTeX Font Info: Try loading font information for OT1+ppl on input line 275. + + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 275 +. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +) +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 12.50409pt on input line 275. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 9.37807pt on input line 275. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 7.29405pt on input line 275. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 12.50409pt on input line 275. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 9.37807pt on input line 275. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 7.29405pt on input line 275. + + +LaTeX Warning: No \author given. + +LaTeX Font Info: Try loading font information for T1+cmtt on input line 279. + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <12> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 288. + + +File: efficient_soln.png Graphic file (type png) + +Package pdftex.def Info: efficient_soln.png used on input line 292. +(pdftex.def) Requested size: 375.80544pt x 201.02519pt. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 11.40997pt on input line 297. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 8.33606pt on input line 297. +LaTeX Font Info: Font shape `U/msa/m/n' will be +(Font) scaled to size 6.25204pt on input line 297. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 11.40997pt on input line 297. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 8.33606pt on input line 297. +LaTeX Font Info: Font shape `U/msb/m/n' will be +(Font) scaled to size 6.25204pt on input line 297. + + +File: norm_A.png Graphic file (type png) + +Package pdftex.def Info: norm_A.png used on input line 305. +(pdftex.def) Requested size: 375.80544pt x 177.55602pt. + [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./efficient_soln.png>] +Underfull \hbox (badness 10000) in paragraph at lines 343--345 +[]\T1/ppl/m/n/10.95 -[][]Installing Python and Jupyter Note-book (via Ana-conda +) - + [] + + +Underfull \hbox (badness 1681) in paragraph at lines 346--349 +[]\T1/ppl/m/n/10.95 -[][]Running Mat-lab ker-nel in Jupyter - https://anneurai. +net/2015/11/12/matlab-based- + [] + +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <14.4> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 354. +LaTeX Font Info: Try loading font information for TS1+cmtt on input line 356 +. +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmtt.fd +File: ts1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <10.95> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 373. +LaTeX Font Info: Font shape `T1/ppl/bx/it' in size <10.95> not available +(Font) Font shape `T1/ppl/b/it' tried instead on input line 373. + [2 <./norm_A.png>] +[3] [4] <../lecture_09/mass_springs.png, id=122, 112.42pt x 190.7125pt> +File: ../lecture_09/mass_springs.png Graphic file (type png) + + +Package pdftex.def Info: ../lecture_09/mass_springs.png used on input line 523. + +(pdftex.def) Requested size: 89.93611pt x 152.576pt. + [5 <../lecture_09/mass_springs.png>] +[6] [7] [8] [9] [10] +LaTeX Font Info: Font shape `T1/cmtt/bx/n' in size <10.95> not available +(Font) Font shape `T1/cmtt/m/n' tried instead on input line 933. + [11] + +File: lecture_13_files/lecture_13_24_1.pdf Graphic file (type pdf) + + +Package pdftex.def Info: lecture_13_files/lecture_13_24_1.pdf used on input lin +e 957. +(pdftex.def) Requested size: 449.6789pt x 337.25917pt. + +Underfull \hbox (badness 10000) in paragraph at lines 959--960 + + [] + +[12 <./lecture_13_files/lecture_13_24_1.pdf>] [13] + +File: lecture_13_files/lecture_13_29_0.pdf Graphic file (type pdf) + + +Package pdftex.def Info: lecture_13_files/lecture_13_29_0.pdf used on input lin +e 1045. +(pdftex.def) Requested size: 449.6789pt x 337.25917pt. + +Underfull \hbox (badness 10000) in paragraph at lines 1047--1048 + + [] + +[14 <./lecture_13_files/lecture_13_29_0.pdf>] [15] [16] [17] + +File: lecture_13_files/lecture_13_36_0.pdf Graphic file (type pdf) + + +Package pdftex.def Info: lecture_13_files/lecture_13_36_0.pdf used on input lin +e 1260. +(pdftex.def) Requested size: 449.6789pt x 337.25917pt. + [18] +Underfull \hbox (badness 10000) in paragraph at lines 1262--1263 + + [] + + +File: lecture_13_files/lecture_13_36_1.pdf Graphic file (type pdf) + + +Package pdftex.def Info: lecture_13_files/lecture_13_36_1.pdf used on input lin +e 1265. +(pdftex.def) Requested size: 449.6789pt x 337.25917pt. + [19 <./lecture_13_files/lecture_13_36_0.pdf>] +Underfull \hbox (badness 10000) in paragraph at lines 1267--1268 + + [] + +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1278. +[20 <./lecture_13_files/lecture_13_36_1.pdf>] +Package atveryend Info: Empty hook `AfterLastShipout' on input line 1278. + (./lecture_13.aux) +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1278. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1278. + +Package rerunfilecheck Info: File `lecture_13.out' has not changed. +(rerunfilecheck) Checksum: 5887D69934ACBC48543EBFE830C6564B;1422. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1278. + ) +Here is how much of TeX's memory you used: + 11009 strings out of 493029 + 165053 string characters out of 6136234 + 275769 words of memory out of 5000000 + 14263 multiletter control sequences out of 15000+600000 + 39435 words of font info for 100 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 36i,10n,77p,878b,465s stack positions out of 5000i,500n,10000p,200000b,80000s +{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/share/texmf/ +fonts/enc/dvips/cm-super/cm-super-ts1.enc}{/usr/share/texmf/fonts/enc/dvips/cm- +super/cm-super-t1.enc} +Output written on lecture_13.pdf (20 pages, 274185 bytes). +PDF statistics: + 294 PDF objects out of 1000 (max. 8388607) + 237 compressed objects within 3 object streams + 49 named destinations out of 1000 (max. 500000) + 180 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/lecture_13/lecture_13.md b/lecture_13/lecture_13.md new file mode 100644 index 0000000..88716ad --- /dev/null +++ b/lecture_13/lecture_13.md @@ -0,0 +1,962 @@ + + +```octave +%plot --format svg +``` + + +```octave +setdefaults +``` + +## My question from last class + +![q1](efficient_soln.png) + +![A](https://lh4.googleusercontent.com/fmG7EnFxpvvjSgijOuwz8osuiH3cBDgOzTE64KnfQeeDDSG2oE86-BzcpYIQMVkkAgRRGEDEGi6-Nkr8qmEMeaAk-gcjEmXe42WFYUdOa5XoUaBkXRakkA77_XrkRjArCGZIFhjjDRoO7x0) + +![q2](norm_A.png) + + +## Your questions from last class + +1. Do we have to submit a link for HW #4 somewhere or is uploading to Github sufficient? + + -no, your submission from HW 3 is sufficient + +2. How do I get the formulas/formatting in markdown files to show up on github? + + -no luck for markdown equations in github, this is an ongoing request + +3. Confused about the p=1 norm part and ||A||_1 + +4. When's the exam? + + -next week (3/9) + +5. What do you recommend doing to get better at figuring out the homeworks? + + -time and experimenting (try going through the lecture examples, verify my work) + +6. Could we have an hw or extra credit with a video lecture to learn some simple python? + + -Sounds great! how simple? + + -[Installing Python and Jupyter Notebook (via Anaconda) - https://www.continuum.io/downloads](https://www.continuum.io/downloads) + + -[Running Matlab kernel in Jupyter - https://anneurai.net/2015/11/12/matlab-based-ipython-notebooks/](https://anneurai.net/2015/11/12/matlab-based-ipython-notebooks/) + + -[Running Octave kernel in Jupyter - https://anaconda.org/pypi/octave_kernel](https://anaconda.org/pypi/octave_kernel) + + + +# Markdown examples + +` " ' ` ` + +```matlab +x=linspace(0,1); +y=x.^2; +plot(x,y) +for i = 1:10 + fprintf('markdown is pretty') +end +``` + +## Condition of a matrix +### *just checked in to see what condition my condition was in* +### Matrix norms + +The Euclidean norm of a vector is measure of the magnitude (in 3D this would be: $|x|=\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general the equation is: + +$||x||_{e}=\sqrt{\sum_{i=1}^{n}x_{i}^{2}}$ + +For a matrix, A, the same norm is called the Frobenius norm: + +$||A||_{f}=\sqrt{\sum_{i=1}^{n}\sum_{j=1}^{m}A_{i,j}^{2}}$ + +In general we can calculate any $p$-norm where + +$||A||_{p}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{p}}$ + +so the p=1, 1-norm is + +$||A||_{1}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{1}}=\sum_{i=1}^{n}\sum_{i=1}^{m}|A_{i,j}|$ + +$||A||_{\infty}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{\infty}}=\max_{1\le i \le n}\sum_{j=1}^{m}|A_{i,j}|$ + +### Condition of Matrix + +The matrix condition is the product of + +$Cond(A) = ||A||\cdot||A^{-1}||$ + +So each norm will have a different condition number, but the limit is $Cond(A)\ge 1$ + +An estimate of the rounding error is based on the condition of A: + +$\frac{||\Delta x||}{x} \le Cond(A) \frac{||\Delta A||}{||A||}$ + +So if the coefficients of A have accuracy to $10^{-t} + +and the condition of A, $Cond(A)=10^{c}$ + +then the solution for x can have rounding errors up to $10^{c-t}$ + + + +```octave +A=[1,1/2,1/3;1/2,1/3,1/4;1/3,1/4,1/5] +[L,U]=LU_naive(A) +``` + + A = + + 1.00000 0.50000 0.33333 + 0.50000 0.33333 0.25000 + 0.33333 0.25000 0.20000 + + L = + + 1.00000 0.00000 0.00000 + 0.50000 1.00000 0.00000 + 0.33333 1.00000 1.00000 + + U = + + 1.00000 0.50000 0.33333 + 0.00000 0.08333 0.08333 + 0.00000 -0.00000 0.00556 + + + +Then, $A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$ + +$Ld_{1}=\left[\begin{array}{c} +1 \\ +0 \\ +0 \end{array}\right]$, $Ux_{1}=d_{1}$ ... + + +```octave +invA=zeros(3,3); +d1=L\[1;0;0]; +d2=L\[0;1;0]; +d3=L\[0;0;1]; +invA(:,1)=U\d1; % shortcut invA(:,1)=A\[1;0;0] +invA(:,2)=U\d2; +invA(:,3)=U\d3 +invA*A +``` + + invA = + + 9.0000 -36.0000 30.0000 + -36.0000 192.0000 -180.0000 + 30.0000 -180.0000 180.0000 + + ans = + + 1.0000e+00 3.5527e-15 2.9976e-15 + -1.3249e-14 1.0000e+00 -9.1038e-15 + 8.5117e-15 7.1054e-15 1.0000e+00 + + + +Find the condition of A, $cond(A)$ + + +```octave +% Frobenius norm +normf_A = sqrt(sum(sum(A.^2))) +normf_invA = sqrt(sum(sum(invA.^2))) + +cond_f_A = normf_A*normf_invA + +norm(A,'fro') + +% p=1, column sum norm +norm1_A = max(sum(A,2)) +norm1_invA = max(sum(invA,2)) +norm(A,1) + +cond_1_A=norm1_A*norm1_invA + +% p=inf, row sum norm +norminf_A = max(sum(A,1)) +norminf_invA = max(sum(invA,1)) +norm(A,inf) + +cond_inf_A=norminf_A*norminf_invA + +``` + + normf_A = 1.4136 + normf_invA = 372.21 + cond_f_A = 526.16 + ans = 1.4136 + norm1_A = 1.8333 + norm1_invA = 30.000 + ans = 1.8333 + cond_1_A = 55.000 + norminf_A = 1.8333 + norminf_invA = 30.000 + ans = 1.8333 + cond_inf_A = 55.000 + + +Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with spring constants $K_{i}$. What does a high condition number mean for this problem? + +![Springs-masses](../lecture_09/mass_springs.png) + +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_{2}(x_{2}-x_{1})-k_{1}x_{1}=0$ + +$m_{2}g+k_{3}(x_{3}-x_{2})-k_{2}(x_{2}-x_{1})=0$ + +$m_{3}g+k_{4}(x_{4}-x_{3})-k_{3}(x_{3}-x_{2})=0$ + +$m_{4}g-k_{4}(x_{4}-x_{3})=0$ + +in matrix form: + +$\left[ \begin{array}{cccc} +k_{1}+k_{2} & -k_{2} & 0 & 0 \\ +-k_{2} & k_{2}+k_{3} & -k_{3} & 0 \\ +0 & -k_{3} & k_{3}+k_{4} & -k_{4} \\ +0 & 0 & -k_{4} & k_{4} \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 +k1=10; % N/m +k2=100000; +k3=10; +k4=1; +m1=1; % kg +m2=2; +m3=3; +m4=4; +g=9.81; % m/s^2 +K=[k1+k2 -k2 0 0; -k2 k2+k3 -k3 0; 0 -k3 k3+k4 -k4; 0 0 -k4 k4] +y=[m1*g;m2*g;m3*g;m4*g] +``` + + K = + + 100010 -100000 0 0 + -100000 100010 -10 0 + 0 -10 11 -1 + 0 0 -1 1 + + y = + + 9.8100 + 19.6200 + 29.4300 + 39.2400 + + + + +```octave +cond(K,inf) +cond(K,1) +cond(K,'fro') +cond(K,2) +``` + + ans = 3.2004e+05 + ans = 3.2004e+05 + ans = 2.5925e+05 + ans = 2.5293e+05 + + + +```octave +e=eig(K) +max(e)/min(e) +``` + + e = + + 7.9078e-01 + 3.5881e+00 + 1.7621e+01 + 2.0001e+05 + + ans = 2.5293e+05 + + +## P=2 norm is ratio of biggest eigenvalue to smallest eigenvalue! + +no need to calculate the inv(K) + +# Iterative Methods + +## Gauss-Seidel method + +If we have an intial guess for each value of a vector $x$ that we are trying to solve, then it is easy enough to solve for one component given the others. + +Take a 3$\times$3 matrix + +$Ax=b$ + +$\left[ \begin{array}{ccc} +3 & -0.1 & -0.2 \\ +0.1 & 7 & -0.3 \\ +0.3 & -0.2 & 10 \end{array} \right] +\left[ \begin{array}{c} +x_{1} \\ +x_{2} \\ +x_{3} \end{array} \right]= +\left[ \begin{array}{c} +7.85 \\ +-19.3 \\ +71.4\end{array} \right]$ + +$x_{1}=\frac{7.85+0.1x_{2}+0.2x_{3}}{3}$ + +$x_{2}=\frac{-19.3-0.1x_{1}+0.3x_{3}}{7}$ + +$x_{3}=\frac{71.4+0.1x_{1}+0.2x_{2}}{10}$ + + +```octave +A=[3 -0.1 -0.2;0.1 7 -0.3;0.3 -0.2 10] +b=[7.85;-19.3;71.4] + +x=A\b +``` + + A = + + 3.00000 -0.10000 -0.20000 + 0.10000 7.00000 -0.30000 + 0.30000 -0.20000 10.00000 + + b = + + 7.8500 + -19.3000 + 71.4000 + + x = + + 3.0000 + -2.5000 + 7.0000 + + + +### Gauss-Seidel Iterative approach + +As a first guess, we can use $x_{1}=x_{2}=x_{3}=0$ + +$x_{1}=\frac{7.85+0.1(0)+0.3(0)}{3}=2.6167$ + +$x_{2}=\frac{-19.3-0.1(2.6167)+0.3(0)}{7}=-2.7945$ + +$x_{3}=\frac{71.4+0.1(2.6167)+0.2(-2.7945)}{10}=7.0056$ + +Then, we update the guess: + +$x_{1}=\frac{7.85+0.1(-2.7945)+0.3(7.0056)}{3}=2.9906$ + +$x_{2}=\frac{-19.3-0.1(2.9906)+0.3(7.0056)}{7}=-2.4996$ + +$x_{3}=\frac{71.4+0.1(2.9906)+0.2(-2.4966)}{10}=7.00029$ + +The results are conveerging to the solution we found with `\` of $x_{1}=3,~x_{2}=-2.5,~x_{3}=7$ + +We could also use an iterative method that solves for all of the x-components in one step: + +### Jacobi method + +$x_{1}^{i}=\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$ + +$x_{2}^{i}=\frac{-19.3-0.1x_{1}^{i-1}+0.3x_{3}^{i-1}}{7}$ + +$x_{3}^{i}=\frac{71.4+0.1x_{1}^{i-1}+0.2x_{2}^{i-1}}{10}$ + +Here the solution is a matrix multiplication and vector addition + +$\left[ \begin{array}{c} +x_{1}^{i} \\ +x_{2}^{i} \\ +x_{3}^{i} \end{array} \right]= +\left[ \begin{array}{c} +7.85/3 \\ +-19.3/7 \\ +71.4/10\end{array} \right]- +\left[ \begin{array}{ccc} +0 & 0.1/3 & 0.2/3 \\ +0.1/7 & 0 & -0.3/7 \\ +0.3/10 & -0.2/10 & 0 \end{array} \right] +\left[ \begin{array}{c} +x_{1}^{i-1} \\ +x_{2}^{i-1} \\ +x_{3}^{i-1} \end{array} \right]$ + +|x_{j}|Jacobi method |vs| Gauss-Seidel | +|--------|------------------------------|---|-------------------------------| +|$x_{1}^{i}=$ | $\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$ | | $\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$| +|$x_{2}^{i}=$ | $\frac{-19.3-0.1x_{1}^{i-1}+0.3x_{3}^{i-1}}{7}$ | | $\frac{-19.3-0.1x_{1}^{i}+0.3x_{3}^{i-1}}{7}$ | +|$x_{3}^{i}=$ | $\frac{71.4+0.1x_{1}^{i-1}+0.2x_{2}^{i-1}}{10}$ | | $\frac{71.4+0.1x_{1}^{i}+0.2x_{2}^{i}}{10}$| + + +```octave +ba=b./diag(A) % or ba=b./[A(1,1);A(2,2);A(3,3)] +sA=A-diag(diag(A)) % A with zeros on diagonal +sA(1,:)=sA(1,:)/A(1,1); +sA(2,:)=sA(2,:)/A(2,2); +sA(3,:)=sA(3,:)/A(3,3) +x0=[0;0;0]; +x1=ba-sA*x0 +x2=ba-sA*x1 +x3=ba-sA*x2 +fprintf('solution is converging to [3,-2.5,7]]\n') +``` + + ba = + + 2.6167 + -2.7571 + 7.1400 + + sA = + + 0.00000 -0.10000 -0.20000 + 0.10000 0.00000 -0.30000 + 0.30000 -0.20000 0.00000 + + sA = + + 0.000000 -0.033333 -0.066667 + 0.014286 0.000000 -0.042857 + 0.030000 -0.020000 0.000000 + + x1 = + + 2.6167 + -2.7571 + 7.1400 + + x2 = + + 3.0008 + -2.4885 + 7.0064 + + x3 = + + 3.0008 + -2.4997 + 7.0002 + + solution is converging to [3,-2.5,7]] + + + +```octave +diag(A) +diag(diag(A)) +``` + + ans = + + 3 + 7 + 10 + + ans = + + Diagonal Matrix + + 3 0 0 + 0 7 0 + 0 0 10 + + + +This method works if problem is diagonally dominant, + +$|a_{ii}|>\sum_{j=1,j\ne i}^{n}|a_{ij}|$ + +If this condition is true, then Jacobi or Gauss-Seidel should converge + + + + +```octave +A=[0.1,1,3;1,0.2,3;5,2,0.3] +b=[12;2;4] +A\b +``` + + A = + + 0.10000 1.00000 3.00000 + 1.00000 0.20000 3.00000 + 5.00000 2.00000 0.30000 + + b = + + 12 + 2 + 4 + + ans = + + -2.9393 + 9.1933 + 1.0336 + + + + +```octave +ba=b./diag(A) % or ba=b./[A(1,1);A(2,2);A(3,3)] +sA=A-diag(diag(A)) % A with zeros on diagonal +sA(1,:)=sA(1,:)/A(1,1); +sA(2,:)=sA(2,:)/A(2,2); +sA(3,:)=sA(3,:)/A(3,3) +x0=[0;0;0]; +x1=ba-sA*x0 +x2=ba-sA*x1 +x3=ba-sA*x2 +fprintf('solution is not converging to [-2.93,9.19,1.03]\n') +``` + + ba = + + 120.000 + 10.000 + 13.333 + + sA = + + 0 1 3 + 1 0 3 + 5 2 0 + + sA = + + 0.00000 10.00000 30.00000 + 5.00000 0.00000 15.00000 + 16.66667 6.66667 0.00000 + + x1 = + + 120.000 + 10.000 + 13.333 + + x2 = + + -380.00 + -790.00 + -2053.33 + + x3 = + + 6.9620e+04 + 3.2710e+04 + 1.1613e+04 + + solution is not converging to [-2.93,9.19,1.03] + + +## Gauss-Seidel with Relaxation + +In order to force the solution to converge faster, we can introduce a relaxation term $\lambda$. + +where the new x values are weighted between the old and new: + +$x^{i}=\lambda x^{i}+(1-\lambda)x^{i-1}$ + +after solving for x, lambda weights the current approximation with the previous approximation for the updated x + + + +```octave +% rearrange A and b +A=[3 -0.1 -0.2;0.1 7 -0.3;0.3 -0.2 10] +b=[7.85;-19.3;71.4] + +iters=zeros(100,1); +for i=1:100 + lambda=2/100*i; + [x,ea,iters(i)]=Jacobi_rel(A,b,lambda); +end +plot([1:100]*2/100,iters) +``` + + A = + + 3.00000 -0.10000 -0.20000 + 0.10000 7.00000 -0.30000 + 0.30000 -0.20000 10.00000 + + b = + + 7.8500 + -19.3000 + 71.4000 + + + + +![svg](lecture_13_files/lecture_13_24_1.svg) + + + +```octave +l=fminbnd(@(l) lambda_fcn(A,b,l),0.5,1.5) +``` + + l = 0.99158 + + + +```octave +A\b +``` + + ans = + + 3.0000 + -2.5000 + 7.0000 + + + + +```octave +[x,ea,iter]=Jacobi_rel(A,b,l,0.000001) +[x,ea,iter]=Jacobi_rel(A,b,1,0.000001) + +``` + + x = + + 3.0000 + -2.5000 + 7.0000 + + ea = + + 1.8289e-07 + 2.1984e-08 + 2.3864e-08 + + iter = 8 + x = + + 3.0000 + -2.5000 + 7.0000 + + ea = + + 1.9130e-08 + 7.6449e-08 + 3.3378e-08 + + iter = 8 + + +## Nonlinear Systems + +Consider two simultaneous nonlinear equations with two unknowns: + +$x_{1}^{2}+x_{1}x_{2}=10$ + +$x_{2}+3x_{1}x_{2}^{2}=57$ + +Graphically, we are looking for the solution: + + + +```octave +x11=linspace(0.5,3); +x12=(10-x11.^2)./x11; + +x22=linspace(2,8); +x21=(57-x22).*x22.^-2/3; + +plot(x11,x12,x21,x22) +% Solution at x_1=2, x_2=3 +hold on; +plot(2,3,'o') +xlabel('x_1') +ylabel('x_2') +``` + + +![svg](lecture_13_files/lecture_13_29_0.svg) + + +## Newton-Raphson part II + +Remember the first order approximation for the next point in a function is: + +$f(x_{i+1})=f(x_{i})+(x_{i+1}-x_{i})f'(x_{i})$ + +then, $f(x_{i+1})=0$ so we are left with: + +$x_{i+1}=x_{i}-\frac{f(x_{i})}{f'(x_{i})}$ + +We can use the same formula, but now we have multiple dimensions so we need to determine the Jacobian + +$[J]=\left[ \begin{array}{cccc} +\frac{\partial f_{1,i}}{\partial x_{1}} & \frac{\partial f_{1,i}}{\partial x_{2}} & +\cdots & \frac{\partial f_{1,i}}{\partial x_{n}} \\ +\frac{\partial f_{2,i}}{\partial x_{1}} & \frac{\partial f_{2,i}}{\partial x_{2}} & +\cdots & \frac{\partial f_{2,i}}{\partial x_{n}} \\ +\vdots & \vdots & & \vdots \\ +\frac{\partial f_{n,i}}{\partial x_{1}} & \frac{\partial f_{n,i}}{\partial x_{2}} & +\cdots & \frac{\partial f_{n,i}}{\partial x_{n}} \\ +\end{array} \right]$ + +$\left[ \begin{array}{c} +f_{1,i+1} \\ +f_{2,i+1} \\ +\vdots \\ +f_{n,i+1}\end{array} \right]= +\left[ \begin{array}{c} +f_{1,i} \\ +f_{2,i} \\ +\vdots \\ +f_{n,i}\end{array} \right]+ +\left[ \begin{array}{cccc} +\frac{\partial f_{1,i}}{\partial x_{1}} & \frac{\partial f_{1,i}}{\partial x_{2}} & +\cdots & \frac{\partial f_{1,i}}{\partial x_{n}} \\ +\frac{\partial f_{2,i}}{\partial x_{1}} & \frac{\partial f_{2,i}}{\partial x_{2}} & +\cdots & \frac{\partial f_{2,i}}{\partial x_{n}} \\ +\vdots & \vdots & & \vdots \\ +\frac{\partial f_{n,i}}{\partial x_{1}} & \frac{\partial f_{n,i}}{\partial x_{2}} & +\cdots & \frac{\partial f_{n,i}}{\partial x_{n}} \\ +\end{array} \right] +\left( \left[ \begin{array}{c} +x_{i+1} \\ +x_{i+1} \\ +\vdots \\ +x_{i+1}\end{array} \right]- +\left[ \begin{array}{c} +x_{1,i} \\ +x_{2,i} \\ +\vdots \\ +x_{n,i}\end{array} \right]\right)$ + +### Solution is again in the form Ax=b + +$[J]([x_{i+1}]-[x_{i}])=-[f]$ + +so + +$[x_{i+1}]= [x_{i}]-[J]^{-1}[f]$ + +## Example of Jacobian calculation + +### Nonlinear springs supporting two masses in series + +Two springs are connected to two masses, with $m_1$=1 kg and $m_{2}$=2 kg. The springs are identical, but they have nonlinear spring constants, of $k_1$=100 N/m and $k_2$=-10 N/m + +We want to solve for the final position of the masses ($x_1$ and $x_2$) + +$m_{1}g+k_{1}(x_{2}-x_{1})+k_{2}(x_{2}-x_{1})^{2}+k_{1}x_{1}+k_{2}x_{1}^{2}=0$ + +$m_{2}g-k_{1}(x_{2}-x_{1})-k_{2}(x_2-x_1)^{2}=0$ + +$J(1,1)=\frac{\partial f_{1}}{\partial x_{1}}=-k_{1}-2k_{2}(x_{2}-x_{1})+k_{1}+2k_{2}x_{1}$ + +$J(1,2)=\frac{\partial f_1}{\partial x_{2}}=k_{1}+2k_{2}(x_{2}-x_{1})$ + +$J(2,1)=\frac{\partial f_2}{\partial x_{1}}=k_{1}+2k_{2}(x_{2}-x_{1})$ + +$J(2,2)=\frac{\partial f_2}{\partial x_{2}}=-k_{1}-2k_{2}(x_{2}-x_{1})$ + + + + +```octave +m1=1; % kg +m2=2; % kg +k1=100; % N/m +k2=-10; % N/m^2 +``` + + +```octave +function [f,J]=mass_spring(x) + % Function to calculate function values f1 and f2 as well as Jacobian + % for 2 masses and 2 identical nonlinear springs + m1=1; % kg + m2=2; % kg + k1=100; % N/m + k2=-10; % N/m^2 + g=9.81; % m/s^2 + x1=x(1); + x2=x(2); + J=[-k1-2*k2*(x2-x1)-k1-2*k2*x1,k1+2*k2*(x2-x1); + k1+2*k2*(x2-x1),-k1-2*k2*(x2-x1)]; + f=[m1*g+k1*(x2-x1)+k2*(x2-x1).^2-k1*x1-k2*x1^2; + m2*g-k1*(x2-x1)-k2*(x2-x1).^2]; +end + +``` + + +```octave +[f,J]=mass_spring([1,0]) +``` + + f = + + -190.19 + 129.62 + + J = + + -200 120 + 120 -120 + + + + +```octave +x0=[3;2]; +[f0,J0]=mass_spring(x0); +x1=x0-J0\f0 +ea=(x1-x0)./x1 +[f1,J1]=mass_spring(x1); +x2=x1-J1\f1 +ea=(x2-x1)./x2 +[f2,J2]=mass_spring(x2); +x3=x2-J2\f2 +ea=(x3-x2)./x3 +x=x3 +for i=1:3 + xold=x; + [f,J]=mass_spring(x); + x=x-J\f; + ea=(x-xold)./x +end +``` + + x1 = + + -1.5142 + -1.4341 + + ea = + + 2.9812 + 2.3946 + + x2 = + + 0.049894 + 0.248638 + + ea = + + 31.3492 + 6.7678 + + x3 = + + 0.29701 + 0.49722 + + ea = + + 0.83201 + 0.49995 + + x = + + 0.29701 + 0.49722 + + ea = + + 0.021392 + 0.012890 + + ea = + + 1.4786e-05 + 8.9091e-06 + + ea = + + 7.0642e-12 + 4.2565e-12 + + + + +```octave +x +X0=fsolve(@(x) mass_spring(x),[3;5]) +``` + + x = + + 0.30351 + 0.50372 + + X0 = + + 0.30351 + 0.50372 + + + + +```octave +[X,Y]=meshgrid(linspace(0,10,20),linspace(0,10,20)); +[N,M]=size(X); +F=zeros(size(X)); +for i=1:N + for j=1:M + [f,~]=mass_spring([X(i,j),Y(i,j)]); + F1(i,j)=f(1); + F2(i,j)=f(2); + end +end +mesh(X,Y,F1) +xlabel('x_1') +ylabel('x_2') +colorbar() +figure() +mesh(X,Y,F2) +xlabel('x_1') +ylabel('x_2') +colorbar() +``` + + +![svg](lecture_13_files/lecture_13_36_0.svg) + + + +![svg](lecture_13_files/lecture_13_36_1.svg) + + + +```octave + +``` diff --git a/lecture_13/lecture_13.out b/lecture_13/lecture_13.out new file mode 100644 index 0000000..f10cd22 --- /dev/null +++ b/lecture_13/lecture_13.out @@ -0,0 +1,18 @@ +\BOOKMARK [2][-]{subsection.0.1}{My question from last class}{}% 1 +\BOOKMARK [2][-]{subsection.0.2}{Your questions from last class}{}% 2 +\BOOKMARK [1][-]{section.1}{Markdown examples}{}% 3 +\BOOKMARK [2][-]{subsection.1.1}{Condition of a matrix}{section.1}% 4 +\BOOKMARK [3][-]{subsubsection.1.1.1}{just checked in to see what condition my condition was in}{subsection.1.1}% 5 +\BOOKMARK [3][-]{subsubsection.1.1.2}{Matrix norms}{subsection.1.1}% 6 +\BOOKMARK [3][-]{subsubsection.1.1.3}{Condition of Matrix}{subsection.1.1}% 7 +\BOOKMARK [2][-]{subsection.1.2}{P=2 norm is ratio of biggest eigenvalue to smallest eigenvalue!}{section.1}% 8 +\BOOKMARK [1][-]{section.2}{Iterative Methods}{}% 9 +\BOOKMARK [2][-]{subsection.2.1}{Gauss-Seidel method}{section.2}% 10 +\BOOKMARK [3][-]{subsubsection.2.1.1}{Gauss-Seidel Iterative approach}{subsection.2.1}% 11 +\BOOKMARK [3][-]{subsubsection.2.1.2}{Jacobi method}{subsection.2.1}% 12 +\BOOKMARK [2][-]{subsection.2.2}{Gauss-Seidel with Relaxation}{section.2}% 13 +\BOOKMARK [2][-]{subsection.2.3}{Nonlinear Systems}{section.2}% 14 +\BOOKMARK [2][-]{subsection.2.4}{Newton-Raphson part II}{section.2}% 15 +\BOOKMARK [3][-]{subsubsection.2.4.1}{Solution is again in the form Ax=b}{subsection.2.4}% 16 +\BOOKMARK [2][-]{subsection.2.5}{Example of Jacobian calculation}{section.2}% 17 +\BOOKMARK [3][-]{subsubsection.2.5.1}{Nonlinear springs supporting two masses in series}{subsection.2.5}% 18 diff --git a/lecture_13/lecture_13.pdf b/lecture_13/lecture_13.pdf new file mode 100644 index 0000000..5a45770 Binary files /dev/null and b/lecture_13/lecture_13.pdf differ diff --git a/lecture_13/lecture_13.tex b/lecture_13/lecture_13.tex new file mode 100644 index 0000000..72647e9 --- /dev/null +++ b/lecture_13/lecture_13.tex @@ -0,0 +1,1278 @@ + +% Default to the notebook output style + + + + +% Inherit from the specified cell style. + + + + + +\documentclass[11pt]{article} + + + + \usepackage[T1]{fontenc} + % Nicer default font (+ math font) than Computer Modern for most use cases + \usepackage{mathpazo} + + % Basic figure setup, for now with no caption control since it's done + % automatically by Pandoc (which extracts ![](path) syntax from Markdown). + \usepackage{graphicx} + % We will generate all images so they have a width \maxwidth. This means + % that they will get their normal width if they fit onto the page, but + % are scaled down if they would overflow the margins. + \makeatletter + \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth + \else\Gin@nat@width\fi} + \makeatother + \let\Oldincludegraphics\includegraphics + % Set max figure width to be 80% of text width, for now hardcoded. + \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=.8\maxwidth]{#1}} + % Ensure that by default, figures have no caption (until we provide a + % proper Figure object with a Caption API and a way to capture that + % in the conversion process - todo). + \usepackage{caption} + \DeclareCaptionLabelFormat{nolabel}{} + \captionsetup{labelformat=nolabel} + + \usepackage{adjustbox} % Used to constrain images to a maximum size + \usepackage{xcolor} % Allow colors to be defined + \usepackage{enumerate} % Needed for markdown enumerations to work + \usepackage{geometry} % Used to adjust the document margins + \usepackage{amsmath} % Equations + \usepackage{amssymb} % Equations + \usepackage{textcomp} % defines textquotesingle + % Hack from http://tex.stackexchange.com/a/47451/13684: + \AtBeginDocument{% + \def\PYZsq{\textquotesingle}% Upright quotes in Pygmentized code + } + \usepackage{upquote} % Upright quotes for verbatim code + \usepackage{eurosym} % defines \euro + \usepackage[mathletters]{ucs} % Extended unicode (utf-8) support + \usepackage[utf8x]{inputenc} % Allow utf-8 characters in the tex document + \usepackage{fancyvrb} % verbatim replacement that allows latex + \usepackage{grffile} % extends the file name processing of package graphics + % to support a larger range + % The hyperref package gives us a pdf with properly built + % internal navigation ('pdf bookmarks' for the table of contents, + % internal cross-reference links, web links for URLs, etc.) + \usepackage{hyperref} + \usepackage{longtable} % longtable support required by pandoc >1.10 + \usepackage{booktabs} % table support for pandoc > 1.12.2 + \usepackage[inline]{enumitem} % IRkernel/repr support (it uses the enumerate* environment) + \usepackage[normalem]{ulem} % ulem is needed to support strikethroughs (\sout) + % normalem makes italics be italics, not underlines + + + + + % Colors for the hyperref package + \definecolor{urlcolor}{rgb}{0,.145,.698} + \definecolor{linkcolor}{rgb}{.71,0.21,0.01} + \definecolor{citecolor}{rgb}{.12,.54,.11} + + % ANSI colors + \definecolor{ansi-black}{HTML}{3E424D} + \definecolor{ansi-black-intense}{HTML}{282C36} + \definecolor{ansi-red}{HTML}{E75C58} + \definecolor{ansi-red-intense}{HTML}{B22B31} + \definecolor{ansi-green}{HTML}{00A250} + \definecolor{ansi-green-intense}{HTML}{007427} + \definecolor{ansi-yellow}{HTML}{DDB62B} + \definecolor{ansi-yellow-intense}{HTML}{B27D12} + \definecolor{ansi-blue}{HTML}{208FFB} + \definecolor{ansi-blue-intense}{HTML}{0065CA} + \definecolor{ansi-magenta}{HTML}{D160C4} + \definecolor{ansi-magenta-intense}{HTML}{A03196} + \definecolor{ansi-cyan}{HTML}{60C6C8} + \definecolor{ansi-cyan-intense}{HTML}{258F8F} + \definecolor{ansi-white}{HTML}{C5C1B4} + \definecolor{ansi-white-intense}{HTML}{A1A6B2} + + % commands and environments needed by pandoc snippets + % extracted from the output of `pandoc -s` + \providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} + \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} + % Add ',fontsize=\small' for more characters per line + \newenvironment{Shaded}{}{} + \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} + \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} + \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} + \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} + \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} + \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} + \newcommand{\RegionMarkerTok}[1]{{#1}} + \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} + \newcommand{\NormalTok}[1]{{#1}} + + % Additional commands for more recent versions of Pandoc + \newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}} + \newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}} + \newcommand{\ImportTok}[1]{{#1}} + \newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}} + \newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}} + \newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} + \newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}} + \newcommand{\BuiltInTok}[1]{{#1}} + \newcommand{\ExtensionTok}[1]{{#1}} + \newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}} + \newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}} + \newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + + + % Define a nice break command that doesn't care if a line doesn't already + % exist. + \def\br{\hspace*{\fill} \\* } + % Math Jax compatability definitions + \def\gt{>} + \def\lt{<} + % Document parameters + \title{lecture\_13} + + + + + % Pygments definitions + +\makeatletter +\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% + \let\PY@ul=\relax \let\PY@tc=\relax% + \let\PY@bc=\relax \let\PY@ff=\relax} +\def\PY@tok#1{\csname PY@tok@#1\endcsname} +\def\PY@toks#1+{\ifx\relax#1\empty\else% + \PY@tok{#1}\expandafter\PY@toks\fi} +\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% + \PY@it{\PY@bf{\PY@ff{#1}}}}}}} +\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} + +\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} +\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} +\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} +\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} +\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} +\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} +\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} +\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} +\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} +\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} +\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} +\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} +\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} +\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} +\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} +\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} +\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} +\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} +\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} + +\def\PYZbs{\char`\\} +\def\PYZus{\char`\_} +\def\PYZob{\char`\{} +\def\PYZcb{\char`\}} +\def\PYZca{\char`\^} +\def\PYZam{\char`\&} +\def\PYZlt{\char`\<} +\def\PYZgt{\char`\>} +\def\PYZsh{\char`\#} +\def\PYZpc{\char`\%} +\def\PYZdl{\char`\$} +\def\PYZhy{\char`\-} +\def\PYZsq{\char`\'} +\def\PYZdq{\char`\"} +\def\PYZti{\char`\~} +% for compatibility with earlier versions +\def\PYZat{@} +\def\PYZlb{[} +\def\PYZrb{]} +\makeatother + + + % Exact colors from NB + \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} + \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} + + + + + % Prevent overflowing lines due to hard-to-break entities + \sloppy + % Setup hyperref package + \hypersetup{ + breaklinks=true, % so long urls are correctly broken across lines + colorlinks=true, + urlcolor=urlcolor, + linkcolor=linkcolor, + citecolor=citecolor, + } + % Slightly bigger margins than the latex defaults + + \geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in} + + + + \begin{document} + + + \maketitle + + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}1}]:} \PY{c}{\PYZpc{}plot \PYZhy{}\PYZhy{}format svg} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}2}]:} \PY{n}{setdefaults} +\end{Verbatim} + + \subsection{My question from last +class}\label{my-question-from-last-class} + +\begin{figure}[htbp] +\centering +\includegraphics{efficient_soln.png} +\caption{q1} +\end{figure} + + + $A=\left[\begin{array}{ccc} + 2 & -2 & 0\\ + -1& 5 & 1 \\ + 3 &4 & 5 \end{array}\right]$ + + +\begin{figure}[htbp] +\centering +\includegraphics{norm_A.png} +\caption{q2} +\end{figure} + +\subsection{Your questions from last +class}\label{your-questions-from-last-class} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Do we have to submit a link for HW \#4 somewhere or is uploading to + Github sufficient? + + -no, your submission from HW 3 is sufficient +\item + How do I get the formulas/formatting in markdown files to show up on + github? + + -no luck for markdown equations in github, this is an ongoing request +\item + Confused about the p=1 norm part and + \textbar{}\textbar{}A\textbar{}\textbar{}\_1 +\item + When's the exam? + + -next week (3/9) +\item + What do you recommend doing to get better at figuring out the + homeworks? + + -time and experimenting (try going through the lecture examples, + verify my work) +\item + Could we have an hw or extra credit with a video lecture to learn some + simple python? + + -Sounds great! how simple? + + -\href{https://www.continuum.io/downloads}{Installing Python and + Jupyter Notebook (via Anaconda) - https://www.continuum.io/downloads} + + -\href{https://anneurai.net/2015/11/12/matlab-based-ipython-notebooks/}{Running + Matlab kernel in Jupyter - + https://anneurai.net/2015/11/12/matlab-based-ipython-notebooks/} + + -\href{https://anaconda.org/pypi/octave_kernel}{Running Octave kernel + in Jupyter - https://anaconda.org/pypi/octave\_kernel} +\end{enumerate} + + \section{Markdown examples}\label{markdown-examples} + +\texttt{"\ \textquotesingle{}} ` + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{x=linspace(}\FloatTok{0}\NormalTok{,}\FloatTok{1}\NormalTok{);} +\NormalTok{y=x.^}\FloatTok{2}\NormalTok{;} +\NormalTok{plot(x,y)} +\NormalTok{for i = }\FloatTok{1}\NormalTok{:}\FloatTok{10} + \NormalTok{fprintf(}\StringTok{'markdown is pretty'}\NormalTok{)} +\NormalTok{end} +\end{Highlighting} +\end{Shaded} + + \subsection{Condition of a matrix}\label{condition-of-a-matrix} + +\subsubsection{\texorpdfstring{\emph{just checked in to see what +condition my condition was +in}}{just checked in to see what condition my condition was in}}\label{just-checked-in-to-see-what-condition-my-condition-was-in} + +\subsubsection{Matrix norms}\label{matrix-norms} + +The Euclidean norm of a vector is measure of the magnitude (in 3D this +would be: $|x|=\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general the +equation is: + +$||x||_{e}=\sqrt{\sum_{i=1}^{n}x_{i}^{2}}$ + +For a matrix, A, the same norm is called the Frobenius norm: + +$||A||_{f}=\sqrt{\sum_{i=1}^{n}\sum_{j=1}^{m}A_{i,j}^{2}}$ + +In general we can calculate any $p$-norm where + +$||A||_{p}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{p}}$ + +so the p=1, 1-norm is + +$||A||_{1}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{1}}=\sum_{i=1}^{n}\sum_{i=1}^{m}|A_{i,j}|$ + +$||A||_{\infty}=\sqrt{\sum_{i=1}^{n}\sum_{i=1}^{m}A_{i,j}^{\infty}}=\max_{1\le i \le n}\sum_{j=1}^{m}|A_{i,j}|$ + +\subsubsection{Condition of Matrix}\label{condition-of-matrix} + +The matrix condition is the product of + +$Cond(A) = ||A||\cdot||A^{-1}||$ + +So each norm will have a different condition number, but the limit is +$Cond(A)\ge 1$ + +An estimate of the rounding error is based on the condition of A: + +$\frac{||\Delta x||}{x} \le Cond(A) \frac{||\Delta A||}{||A||}$ + +So if the coefficients of A have accuracy to $10^{-t}$ + +and the condition of A, $Cond(A)=10^{c}$ + +then the solution for x can have rounding errors up to $10^{c-t}$ + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}7}]:} \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{;}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{4}\PY{p}{;}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{5}\PY{p}{]} + \PY{p}{[}\PY{n}{L}\PY{p}{,}\PY{n}{U}\PY{p}{]}\PY{p}{=}\PY{n}{LU\PYZus{}naive}\PY{p}{(}\PY{n}{A}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 1.00000 0.50000 0.33333 + 0.50000 0.33333 0.25000 + 0.33333 0.25000 0.20000 + +L = + + 1.00000 0.00000 0.00000 + 0.50000 1.00000 0.00000 + 0.33333 1.00000 1.00000 + +U = + + 1.00000 0.50000 0.33333 + 0.00000 0.08333 0.08333 + 0.00000 -0.00000 0.00556 + + + \end{Verbatim} + + Then, $A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$ + +$Ld_{1}=\left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array}\right]$, +$Ux_{1}=d_{1}$ ... + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}8}]:} \PY{n}{invA}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{d1}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{;} + \PY{n}{d2}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{1}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{;} + \PY{n}{d3}\PY{p}{=}\PY{n}{L}\PY{o}{\PYZbs{}}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{;} + \PY{n}{invA}\PY{p}{(}\PY{p}{:}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d1}\PY{p}{;} \PY{c}{\PYZpc{} shortcut invA(:,1)=A\PYZbs{}[1;0;0]} + \PY{n}{invA}\PY{p}{(}\PY{p}{:}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d2}\PY{p}{;} + \PY{n}{invA}\PY{p}{(}\PY{p}{:}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{=}\PY{n}{U}\PY{o}{\PYZbs{}}\PY{n}{d3} + \PY{n}{invA}\PY{o}{*}\PY{n}{A} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +invA = + + 9.0000 -36.0000 30.0000 + -36.0000 192.0000 -180.0000 + 30.0000 -180.0000 180.0000 + +ans = + + 1.0000e+00 3.5527e-15 2.9976e-15 + -1.3249e-14 1.0000e+00 -9.1038e-15 + 8.5117e-15 7.1054e-15 1.0000e+00 + + + \end{Verbatim} + + Find the condition of A, $cond(A)$ + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}9}]:} \PY{c}{\PYZpc{} Frobenius norm} + \PY{n}{normf\PYZus{}A} \PY{p}{=} \PY{n+nb}{sqrt}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{A}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{)} + \PY{n}{normf\PYZus{}invA} \PY{p}{=} \PY{n+nb}{sqrt}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{invA}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{)} + + \PY{n}{cond\PYZus{}f\PYZus{}A} \PY{p}{=} \PY{n}{normf\PYZus{}A}\PY{o}{*}\PY{n}{normf\PYZus{}invA} + + \PY{n+nb}{norm}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{fro\PYZsq{}}\PY{p}{)} + + \PY{c}{\PYZpc{} p=1, column sum norm} + \PY{n}{norm1\PYZus{}A} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)} + \PY{n}{norm1\PYZus{}invA} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{invA}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{norm}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} + + \PY{n}{cond\PYZus{}1\PYZus{}A}\PY{p}{=}\PY{n}{norm1\PYZus{}A}\PY{o}{*}\PY{n}{norm1\PYZus{}invA} + + \PY{c}{\PYZpc{} p=inf, row sum norm} + \PY{n}{norminf\PYZus{}A} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{)} + \PY{n}{norminf\PYZus{}invA} \PY{p}{=} \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{sum}\PY{p}{(}\PY{n}{invA}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{norm}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{n+nb}{inf}\PY{p}{)} + + \PY{n}{cond\PYZus{}inf\PYZus{}A}\PY{p}{=}\PY{n}{norminf\PYZus{}A}\PY{o}{*}\PY{n}{norminf\PYZus{}invA} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +normf\_A = 1.4136 +normf\_invA = 372.21 +cond\_f\_A = 526.16 +ans = 1.4136 +norm1\_A = 1.8333 +norm1\_invA = 30.000 +ans = 1.8333 +cond\_1\_A = 55.000 +norminf\_A = 1.8333 +norminf\_invA = 30.000 +ans = 1.8333 +cond\_inf\_A = 55.000 + + \end{Verbatim} + + Consider the problem again from the intro to Linear Algebra, 4 masses +are connected in series to 4 springs with spring constants $K_{i}$. +What does a high condition number mean for this problem? + +\begin{figure}[htbp] +\centering +\includegraphics{../lecture_09/mass_springs.png} +\caption{Springs-masses} +\end{figure} + +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_{2}(x_{2}-x_{1})-k_{1}x_{1}=0$ + +$m_{2}g+k_{3}(x_{3}-x_{2})-k_{2}(x_{2}-x_{1})=0$ + +$m_{3}g+k_{4}(x_{4}-x_{3})-k_{3}(x_{3}-x_{2})=0$ + +$m_{4}g-k_{4}(x_{4}-x_{3})=0$ + +in matrix form: + +$\left[ \begin{array}{cccc} k_{1}+k_{2} & -k_{2} & 0 & 0 \\ -k_{2} & k_{2}+k_{3} & -k_{3} & 0 \\ 0 & -k_{3} & k_{3}+k_{4} & -k_{4} \\ 0 & 0 & -k_{4} & k_{4} \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]$ + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}10}]:} \PY{n}{k1}\PY{p}{=}\PY{l+m+mi}{10}\PY{p}{;} \PY{c}{\PYZpc{} N/m} + \PY{n}{k2}\PY{p}{=}\PY{l+m+mi}{100000}\PY{p}{;} + \PY{n}{k3}\PY{p}{=}\PY{l+m+mi}{10}\PY{p}{;} + \PY{n}{k4}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} + \PY{n}{m1}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} \PY{c}{\PYZpc{} kg} + \PY{n}{m2}\PY{p}{=}\PY{l+m+mi}{2}\PY{p}{;} + \PY{n}{m3}\PY{p}{=}\PY{l+m+mi}{3}\PY{p}{;} + \PY{n}{m4}\PY{p}{=}\PY{l+m+mi}{4}\PY{p}{;} + \PY{n}{g}\PY{p}{=}\PY{l+m+mf}{9.81}\PY{p}{;} \PY{c}{\PYZpc{} m/s\PYZca{}2} + \PY{n}{K}\PY{p}{=}\PY{p}{[}\PY{n}{k1}\PY{o}{+}\PY{n}{k2} \PY{o}{\PYZhy{}}\PY{n}{k2} \PY{l+m+mi}{0} \PY{l+m+mi}{0}\PY{p}{;} \PY{o}{\PYZhy{}}\PY{n}{k2} \PY{n}{k2}\PY{o}{+}\PY{n}{k3} \PY{o}{\PYZhy{}}\PY{n}{k3} \PY{l+m+mi}{0}\PY{p}{;} \PY{l+m+mi}{0} \PY{o}{\PYZhy{}}\PY{n}{k3} \PY{n}{k3}\PY{o}{+}\PY{n}{k4} \PY{o}{\PYZhy{}}\PY{n}{k4}\PY{p}{;} \PY{l+m+mi}{0} \PY{l+m+mi}{0} \PY{o}{\PYZhy{}}\PY{n}{k4} \PY{n}{k4}\PY{p}{]} + \PY{n}{y}\PY{p}{=}\PY{p}{[}\PY{n}{m1}\PY{o}{*}\PY{n}{g}\PY{p}{;}\PY{n}{m2}\PY{o}{*}\PY{n}{g}\PY{p}{;}\PY{n}{m3}\PY{o}{*}\PY{n}{g}\PY{p}{;}\PY{n}{m4}\PY{o}{*}\PY{n}{g}\PY{p}{]} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +K = + + 100010 -100000 0 0 + -100000 100010 -10 0 + 0 -10 11 -1 + 0 0 -1 1 + +y = + + 9.8100 + 19.6200 + 29.4300 + 39.2400 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}11}]:} \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{n+nb}{inf}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{fro\PYZsq{}}\PY{p}{)} + \PY{n+nb}{cond}\PY{p}{(}\PY{n}{K}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ans = 3.2004e+05 +ans = 3.2004e+05 +ans = 2.5925e+05 +ans = 2.5293e+05 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}26}]:} \PY{n+nb}{e}\PY{p}{=}\PY{n+nb}{eig}\PY{p}{(}\PY{n}{K}\PY{p}{)} + \PY{n+nb}{max}\PY{p}{(}\PY{n+nb}{e}\PY{p}{)}\PY{o}{/}\PY{n+nb}{min}\PY{p}{(}\PY{n+nb}{e}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +e = + + 7.9078e-01 + 3.5881e+00 + 1.7621e+01 + 2.0001e+05 + +ans = 2.5293e+05 + + \end{Verbatim} + + \subsection{P=2 norm is ratio of biggest eigenvalue to smallest +eigenvalue!}\label{p2-norm-is-ratio-of-biggest-eigenvalue-to-smallest-eigenvalue} + +no need to calculate the inv(K) + + \section{Iterative Methods}\label{iterative-methods} + +\subsection{Gauss-Seidel method}\label{gauss-seidel-method} + +If we have an intial guess for each value of a vector $x$ that we are +trying to solve, then it is easy enough to solve for one component given +the others. + +Take a 3$\times$3 matrix + +$Ax=b$ + +$\left[ \begin{array}{ccc} 3 & -0.1 & -0.2 \\ 0.1 & 7 & -0.3 \\ 0.3 & -0.2 & 10 \end{array} \right] \left[ \begin{array}{c} x_{1} \\ x_{2} \\ x_{3} \end{array} \right]= \left[ \begin{array}{c} 7.85 \\ -19.3 \\ 71.4\end{array} \right]$ + +$x_{1}=\frac{7.85+0.1x_{2}+0.2x_{3}}{3}$ + +$x_{2}=\frac{-19.3-0.1x_{1}+0.3x_{3}}{7}$ + +$x_{3}=\frac{71.4+0.1x_{1}+0.2x_{2}}{10}$ + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}12}]:} \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{3} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.1} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.2}\PY{p}{;}\PY{l+m+mf}{0.1} \PY{l+m+mi}{7} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.3}\PY{p}{;}\PY{l+m+mf}{0.3} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.2} \PY{l+m+mi}{10}\PY{p}{]} + \PY{n}{b}\PY{p}{=}\PY{p}{[}\PY{l+m+mf}{7.85}\PY{p}{;}\PY{o}{\PYZhy{}}\PY{l+m+mf}{19.3}\PY{p}{;}\PY{l+m+mf}{71.4}\PY{p}{]} + + \PY{n}{x}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZbs{}}\PY{n}{b} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 3.00000 -0.10000 -0.20000 + 0.10000 7.00000 -0.30000 + 0.30000 -0.20000 10.00000 + +b = + + 7.8500 + -19.3000 + 71.4000 + +x = + + 3.0000 + -2.5000 + 7.0000 + + + \end{Verbatim} + + \subsubsection{Gauss-Seidel Iterative +approach}\label{gauss-seidel-iterative-approach} + +As a first guess, we can use $x_{1}=x_{2}=x_{3}=0$ + +$x_{1}=\frac{7.85+0.1(0)+0.3(0)}{3}=2.6167$ + +$x_{2}=\frac{-19.3-0.1(2.6167)+0.3(0)}{7}=-2.7945$ + +$x_{3}=\frac{71.4+0.1(2.6167)+0.2(-2.7945)}{10}=7.0056$ + +Then, we update the guess: + +$x_{1}=\frac{7.85+0.1(-2.7945)+0.3(7.0056)}{3}=2.9906$ + +$x_{2}=\frac{-19.3-0.1(2.9906)+0.3(7.0056)}{7}=-2.4996$ + +$x_{3}=\frac{71.4+0.1(2.9906)+0.2(-2.4966)}{10}=7.00029$ + +The results are conveerging to the solution we found with +\texttt{\textbackslash{}} of $x_{1}=3,~x_{2}=-2.5,~x_{3}=7$ + +We could also use an iterative method that solves for all of the +x-components in one step: + +\subsubsection{Jacobi method}\label{jacobi-method} + +$x_{1}^{i}=\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$ + +$x_{2}^{i}=\frac{-19.3-0.1x_{1}^{i-1}+0.3x_{3}^{i-1}}{7}$ + +$x_{3}^{i}=\frac{71.4+0.1x_{1}^{i-1}+0.2x_{2}^{i-1}}{10}$ + +Here the solution is a matrix multiplication and vector addition + +$\left[ \begin{array}{c} x_{1}^{i} \\ x_{2}^{i} \\ x_{3}^{i} \end{array} \right]= \left[ \begin{array}{c} 7.85/3 \\ -19.3/7 \\ 71.4/10\end{array} \right]- \left[ \begin{array}{ccc} 0 & 0.1/3 & 0.2/3 \\ 0.1/7 & 0 & -0.3/7 \\ 0.3/10 & -0.2/10 & 0 \end{array} \right] \left[ \begin{array}{c} x_{1}^{i-1} \\ x_{2}^{i-1} \\ x_{3}^{i-1} \end{array} \right]$ + +\begin{longtable}[c]{@{}llll@{}} +\toprule +\begin{minipage}[b]{0.10\columnwidth}\raggedright\strut +x\_\{j\} +\strut\end{minipage} & +\begin{minipage}[b]{0.36\columnwidth}\raggedright\strut +Jacobi method +\strut\end{minipage} & +\begin{minipage}[b]{0.05\columnwidth}\raggedright\strut +vs +\strut\end{minipage} & +\begin{minipage}[b]{0.37\columnwidth}\raggedright\strut +Gauss-Seidel +\strut\end{minipage}\tabularnewline +\midrule +\endhead +\begin{minipage}[t]{0.10\columnwidth}\raggedright\strut +$x_{1}^{i}=$ +\strut\end{minipage} & +\begin{minipage}[t]{0.36\columnwidth}\raggedright\strut +$\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$ +\strut\end{minipage} & +\begin{minipage}[t]{0.05\columnwidth}\raggedright\strut +\strut\end{minipage} & +\begin{minipage}[t]{0.37\columnwidth}\raggedright\strut +$\frac{7.85+0.1x_{2}^{i-1}+0.3x_{3}^{i-1}}{3}$ +\strut\end{minipage}\tabularnewline +\begin{minipage}[t]{0.10\columnwidth}\raggedright\strut +$x_{2}^{i}=$ +\strut\end{minipage} & +\begin{minipage}[t]{0.36\columnwidth}\raggedright\strut +$\frac{-19.3-0.1x_{1}^{i-1}+0.3x_{3}^{i-1}}{7}$ +\strut\end{minipage} & +\begin{minipage}[t]{0.05\columnwidth}\raggedright\strut +\strut\end{minipage} & +\begin{minipage}[t]{0.37\columnwidth}\raggedright\strut +$\frac{-19.3-0.1x_{1}^{i}+0.3x_{3}^{i-1}}{7}$ +\strut\end{minipage}\tabularnewline +\begin{minipage}[t]{0.10\columnwidth}\raggedright\strut +$x_{3}^{i}=$ +\strut\end{minipage} & +\begin{minipage}[t]{0.36\columnwidth}\raggedright\strut +$\frac{71.4+0.1x_{1}^{i-1}+0.2x_{2}^{i-1}}{10}$ +\strut\end{minipage} & +\begin{minipage}[t]{0.05\columnwidth}\raggedright\strut +\strut\end{minipage} & +\begin{minipage}[t]{0.37\columnwidth}\raggedright\strut +$\frac{71.4+0.1x_{1}^{i}+0.2x_{2}^{i}}{10}$ +\strut\end{minipage}\tabularnewline +\bottomrule +\end{longtable} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}14}]:} \PY{n}{ba}\PY{p}{=}\PY{n}{b}\PY{o}{./}\PY{n+nb}{diag}\PY{p}{(}\PY{n}{A}\PY{p}{)} \PY{c}{\PYZpc{} or ba=b./[A(1,1);A(2,2);A(3,3)]} + \PY{n}{sA}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZhy{}}\PY{n+nb}{diag}\PY{p}{(}\PY{n+nb}{diag}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{)} \PY{c}{\PYZpc{} A with zeros on diagonal} + \PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{;} + \PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} + \PY{n}{x0}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{;} + \PY{n}{x1}\PY{p}{=}\PY{n}{ba}\PY{o}{\PYZhy{}}\PY{n}{sA}\PY{o}{*}\PY{n}{x0} + \PY{n}{x2}\PY{p}{=}\PY{n}{ba}\PY{o}{\PYZhy{}}\PY{n}{sA}\PY{o}{*}\PY{n}{x1} + \PY{n}{x3}\PY{p}{=}\PY{n}{ba}\PY{o}{\PYZhy{}}\PY{n}{sA}\PY{o}{*}\PY{n}{x2} + \PY{n+nb}{fprintf}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{solution is converging to [3,\PYZhy{}2.5,7]]\PYZbs{}n\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ba = + + 2.6167 + -2.7571 + 7.1400 + +sA = + + 0.00000 -0.10000 -0.20000 + 0.10000 0.00000 -0.30000 + 0.30000 -0.20000 0.00000 + +sA = + + 0.000000 -0.033333 -0.066667 + 0.014286 0.000000 -0.042857 + 0.030000 -0.020000 0.000000 + +x1 = + + 2.6167 + -2.7571 + 7.1400 + +x2 = + + 3.0008 + -2.4885 + 7.0064 + +x3 = + + 3.0008 + -2.4997 + 7.0002 + +solution is converging to [3,-2.5,7]] + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}16}]:} \PY{n+nb}{diag}\PY{p}{(}\PY{n}{A}\PY{p}{)} + \PY{n+nb}{diag}\PY{p}{(}\PY{n+nb}{diag}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ans = + + 3 + 7 + 10 + +ans = + +Diagonal Matrix + + 3 0 0 + 0 7 0 + 0 0 10 + + + \end{Verbatim} + + This method works if problem is diagonally dominant, + +$|a_{ii}|>\sum_{j=1,j\ne i}^{n}|a_{ij}|$ + +If this condition is true, then Jacobi or Gauss-Seidel should converge + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}15}]:} \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mf}{0.1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{;}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mf}{0.2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{;}\PY{l+m+mi}{5}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mf}{0.3}\PY{p}{]} + \PY{n}{b}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{12}\PY{p}{;}\PY{l+m+mi}{2}\PY{p}{;}\PY{l+m+mi}{4}\PY{p}{]} + \PY{n}{A}\PY{o}{\PYZbs{}}\PY{n}{b} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 0.10000 1.00000 3.00000 + 1.00000 0.20000 3.00000 + 5.00000 2.00000 0.30000 + +b = + + 12 + 2 + 4 + +ans = + + -2.9393 + 9.1933 + 1.0336 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}16}]:} \PY{n}{ba}\PY{p}{=}\PY{n}{b}\PY{o}{./}\PY{n+nb}{diag}\PY{p}{(}\PY{n}{A}\PY{p}{)} \PY{c}{\PYZpc{} or ba=b./[A(1,1);A(2,2);A(3,3)]} + \PY{n}{sA}\PY{p}{=}\PY{n}{A}\PY{o}{\PYZhy{}}\PY{n+nb}{diag}\PY{p}{(}\PY{n+nb}{diag}\PY{p}{(}\PY{n}{A}\PY{p}{)}\PY{p}{)} \PY{c}{\PYZpc{} A with zeros on diagonal} + \PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{;} + \PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{p}{=}\PY{n}{sA}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{p}{:}\PY{p}{)}\PY{o}{/}\PY{n}{A}\PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)} + \PY{n}{x0}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{;}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{;} + \PY{n}{x1}\PY{p}{=}\PY{n}{ba}\PY{o}{\PYZhy{}}\PY{n}{sA}\PY{o}{*}\PY{n}{x0} + \PY{n}{x2}\PY{p}{=}\PY{n}{ba}\PY{o}{\PYZhy{}}\PY{n}{sA}\PY{o}{*}\PY{n}{x1} + \PY{n}{x3}\PY{p}{=}\PY{n}{ba}\PY{o}{\PYZhy{}}\PY{n}{sA}\PY{o}{*}\PY{n}{x2} + \PY{n+nb}{fprintf}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{solution is not converging to [\PYZhy{}2.93,9.19,1.03]\PYZbs{}n\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ba = + + 120.000 + 10.000 + 13.333 + +sA = + + 0 1 3 + 1 0 3 + 5 2 0 + +sA = + + 0.00000 10.00000 30.00000 + 5.00000 0.00000 15.00000 + 16.66667 6.66667 0.00000 + +x1 = + + 120.000 + 10.000 + 13.333 + +x2 = + + -380.00 + -790.00 + -2053.33 + +x3 = + + 6.9620e+04 + 3.2710e+04 + 1.1613e+04 + +solution is not converging to [-2.93,9.19,1.03] + + \end{Verbatim} + + \subsection{Gauss-Seidel with +Relaxation}\label{gauss-seidel-with-relaxation} + +In order to force the solution to converge faster, we can introduce a +relaxation term $\lambda$. + +where the new x values are weighted between the old and new: + +$x^{i}=\lambda x^{i}+(1-\lambda)x^{i-1}$ + +after solving for x, lambda weights the current approximation with the +previous approximation for the updated x + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}17}]:} \PY{c}{\PYZpc{} rearrange A and b} + \PY{n}{A}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{3} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.1} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.2}\PY{p}{;}\PY{l+m+mf}{0.1} \PY{l+m+mi}{7} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.3}\PY{p}{;}\PY{l+m+mf}{0.3} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.2} \PY{l+m+mi}{10}\PY{p}{]} + \PY{n}{b}\PY{p}{=}\PY{p}{[}\PY{l+m+mf}{7.85}\PY{p}{;}\PY{o}{\PYZhy{}}\PY{l+m+mf}{19.3}\PY{p}{;}\PY{l+m+mf}{71.4}\PY{p}{]} + + \PY{n}{iters}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{k}{for} \PY{n}{i}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100} + \PY{n}{lambda}\PY{p}{=}\PY{l+m+mi}{2}\PY{o}{/}\PY{l+m+mi}{100}\PY{o}{*}\PY{n}{i}\PY{p}{;} + \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{ea}\PY{p}{,}\PY{n}{iters}\PY{p}{(}\PY{n}{i}\PY{p}{)}\PY{p}{]}\PY{p}{=}\PY{n}{Jacobi\PYZus{}rel}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{lambda}\PY{p}{)}\PY{p}{;} + \PY{k}{end} + \PY{n+nb}{plot}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{100}\PY{p}{]}\PY{o}{*}\PY{l+m+mi}{2}\PY{o}{/}\PY{l+m+mi}{100}\PY{p}{,}\PY{n}{iters}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +A = + + 3.00000 -0.10000 -0.20000 + 0.10000 7.00000 -0.30000 + 0.30000 -0.20000 10.00000 + +b = + + 7.8500 + -19.3000 + 71.4000 + + + \end{Verbatim} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_13_files/lecture_13_24_1.pdf} + \end{center} + { \hspace*{\fill} \\} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}107}]:} \PY{n}{l}\PY{p}{=}\PY{n}{fminbnd}\PY{p}{(}\PY{p}{@}\PY{p}{(}\PY{n}{l}\PY{p}{)} \PY{n}{lambda\PYZus{}fcn}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{l}\PY{p}{)}\PY{p}{,}\PY{l+m+mf}{0.5}\PY{p}{,}\PY{l+m+mf}{1.5}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +l = 0.99158 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}108}]:} \PY{n}{A}\PY{o}{\PYZbs{}}\PY{n}{b} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +ans = + + 3.0000 + -2.5000 + 7.0000 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}109}]:} \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{ea}\PY{p}{,}\PY{n}{iter}\PY{p}{]}\PY{p}{=}\PY{n}{Jacobi\PYZus{}rel}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{l}\PY{p}{,}\PY{l+m+mf}{0.000001}\PY{p}{)} + \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{ea}\PY{p}{,}\PY{n}{iter}\PY{p}{]}\PY{p}{=}\PY{n}{Jacobi\PYZus{}rel}\PY{p}{(}\PY{n}{A}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mf}{0.000001}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +x = + + 3.0000 + -2.5000 + 7.0000 + +ea = + + 1.8289e-07 + 2.1984e-08 + 2.3864e-08 + +iter = 8 +x = + + 3.0000 + -2.5000 + 7.0000 + +ea = + + 1.9130e-08 + 7.6449e-08 + 3.3378e-08 + +iter = 8 + + \end{Verbatim} + + \subsection{Nonlinear Systems}\label{nonlinear-systems} + +Consider two simultaneous nonlinear equations with two unknowns: + +$x_{1}^{2}+x_{1}x_{2}=10$ + +$x_{2}+3x_{1}x_{2}^{2}=57$ + +Graphically, we are looking for the solution: + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}19}]:} \PY{n}{x11}\PY{p}{=}\PY{n+nb}{linspace}\PY{p}{(}\PY{l+m+mf}{0.5}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{;} + \PY{n}{x12}\PY{p}{=}\PY{p}{(}\PY{l+m+mi}{10}\PY{o}{\PYZhy{}}\PY{n}{x11}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{./}\PY{n}{x11}\PY{p}{;} + + \PY{n}{x22}\PY{p}{=}\PY{n+nb}{linspace}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{)}\PY{p}{;} + \PY{n}{x21}\PY{p}{=}\PY{p}{(}\PY{l+m+mi}{57}\PY{o}{\PYZhy{}}\PY{n}{x22}\PY{p}{)}\PY{o}{.*}\PY{n}{x22}\PY{o}{.\PYZca{}}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{;} + + \PY{n+nb}{plot}\PY{p}{(}\PY{n}{x11}\PY{p}{,}\PY{n}{x12}\PY{p}{,}\PY{n}{x21}\PY{p}{,}\PY{n}{x22}\PY{p}{)} + \PY{c}{\PYZpc{} Solution at x\PYZus{}1=2, x\PYZus{}2=3} + \PY{n+nb}{hold} \PY{n}{on}\PY{p}{;} + \PY{n+nb}{plot}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{o\PYZsq{}}\PY{p}{)} + \PY{n+nb}{xlabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{x\PYZus{}1\PYZsq{}}\PY{p}{)} + \PY{n+nb}{ylabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{x\PYZus{}2\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_13_files/lecture_13_29_0.pdf} + \end{center} + { \hspace*{\fill} \\} + + \subsection{Newton-Raphson part II}\label{newton-raphson-part-ii} + +Remember the first order approximation for the next point in a function +is: + +$f(x_{i+1})=f(x_{i})+(x_{i+1}-x_{i})f'(x_{i})$ + +then, $f(x_{i+1})=0$ so we are left with: + +$x_{i+1}=x_{i}-\frac{f(x_{i})}{f'(x_{i})}$ + +We can use the same formula, but now we have multiple dimensions so we +need to determine the Jacobian + +$[J]=\left[ \begin{array}{cccc} \frac{\partial f_{1,i}}{\partial x_{1}} & \frac{\partial f_{1,i}}{\partial x_{2}} & \cdots & \frac{\partial f_{1,i}}{\partial x_{n}} \\ \frac{\partial f_{2,i}}{\partial x_{1}} & \frac{\partial f_{2,i}}{\partial x_{2}} & \cdots & \frac{\partial f_{2,i}}{\partial x_{n}} \\ \vdots & \vdots & & \vdots \\ \frac{\partial f_{n,i}}{\partial x_{1}} & \frac{\partial f_{n,i}}{\partial x_{2}} & \cdots & \frac{\partial f_{n,i}}{\partial x_{n}} \\ \end{array} \right]$ + +$\left[ \begin{array}{c} f_{1,i+1} \\ f_{2,i+1} \\ \vdots \\ f_{n,i+1}\end{array} \right]= \left[ \begin{array}{c} f_{1,i} \\ f_{2,i} \\ \vdots \\ f_{n,i}\end{array} \right]+ \left[ \begin{array}{cccc} \frac{\partial f_{1,i}}{\partial x_{1}} & \frac{\partial f_{1,i}}{\partial x_{2}} & \cdots & \frac{\partial f_{1,i}}{\partial x_{n}} \\ \frac{\partial f_{2,i}}{\partial x_{1}} & \frac{\partial f_{2,i}}{\partial x_{2}} & \cdots & \frac{\partial f_{2,i}}{\partial x_{n}} \\ \vdots & \vdots & & \vdots \\ \frac{\partial f_{n,i}}{\partial x_{1}} & \frac{\partial f_{n,i}}{\partial x_{2}} & \cdots & \frac{\partial f_{n,i}}{\partial x_{n}} \\ \end{array} \right] \left( \left[ \begin{array}{c} x_{i+1} \\ x_{i+1} \\ \vdots \\ x_{i+1}\end{array} \right]- \left[ \begin{array}{c} x_{1,i} \\ x_{2,i} \\ \vdots \\ x_{n,i}\end{array} \right]\right)$ + +\subsubsection{Solution is again in the form +Ax=b}\label{solution-is-again-in-the-form-axb} + +$[J]([x_{i+1}]-[x_{i}])=-[f]$ + +so + +$[x_{i+1}]= [x_{i}]-[J]^{-1}[f]$ + +\subsection{Example of Jacobian +calculation}\label{example-of-jacobian-calculation} + +\subsubsection{Nonlinear springs supporting two masses in +series}\label{nonlinear-springs-supporting-two-masses-in-series} + +Two springs are connected to two masses, with $m_1$=1 kg and +$m_{2}$=2 kg. The springs are identical, but they have nonlinear +spring constants, of $k_1$=100 N/m and $k_2$=-10 N/m + +We want to solve for the final position of the masses ($x_1$ and +$x_2$) + +$m_{1}g+k_{1}(x_{2}-x_{1})+k_{2}(x_{2}-x_{1})^{2}+k_{1}x_{1}+k_{2}x_{1}^{2}=0$ + +$m_{2}g-k_{1}(x_{2}-x_{1})-k_{2}(x_2-x_1)^{2}=0$ + +$J(1,1)=\frac{\partial f_{1}}{\partial x_{1}}=-k_{1}-2k_{2}(x_{2}-x_{1})+k_{1}+2k_{2}x_{1}$ + +$J(1,2)=\frac{\partial f_1}{\partial x_{2}}=k_{1}+2k_{2}(x_{2}-x_{1})$ + +$J(2,1)=\frac{\partial f_2}{\partial x_{1}}=k_{1}+2k_{2}(x_{2}-x_{1})$ + +$J(2,2)=\frac{\partial f_2}{\partial x_{2}}=-k_{1}-2k_{2}(x_{2}-x_{1})$ + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor} }]:} \PY{n}{m1}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} \PY{c}{\PYZpc{} kg } + \PY{n}{m2}\PY{p}{=}\PY{l+m+mi}{2}\PY{p}{;} \PY{c}{\PYZpc{} kg} + \PY{n}{k1}\PY{p}{=}\PY{l+m+mi}{100}\PY{p}{;} \PY{c}{\PYZpc{} N/m} + \PY{n}{k2}\PY{p}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{10}\PY{p}{;} \PY{c}{\PYZpc{} N/m\PYZca{}2} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}20}]:} \PY{k}{function}\PY{+w}{ }[f,J]\PY{p}{=}\PY{n+nf}{mass\PYZus{}spring}\PY{p}{(}x\PY{p}{)} + \PY{+w}{ }\PY{c}{\PYZpc{} Function to calculate function values f1 and f2 as well as Jacobian } + \PY{c}{\PYZpc{} for 2 masses and 2 identical nonlinear springs} + \PY{n}{m1}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{;} \PY{c}{\PYZpc{} kg } + \PY{n}{m2}\PY{p}{=}\PY{l+m+mi}{2}\PY{p}{;} \PY{c}{\PYZpc{} kg} + \PY{n}{k1}\PY{p}{=}\PY{l+m+mi}{100}\PY{p}{;} \PY{c}{\PYZpc{} N/m} + \PY{n}{k2}\PY{p}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{10}\PY{p}{;} \PY{c}{\PYZpc{} N/m\PYZca{}2} + \PY{n}{g}\PY{p}{=}\PY{l+m+mf}{9.81}\PY{p}{;} \PY{c}{\PYZpc{} m/s\PYZca{}2} + \PY{n}{x1}\PY{p}{=}\PY{n}{x}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{x2}\PY{p}{=}\PY{n}{x}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{;} + \PY{n}{J}\PY{p}{=}\PY{p}{[}\PY{o}{\PYZhy{}}\PY{n}{k1}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{k2}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{k1}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{k2}\PY{o}{*}\PY{n}{x1}\PY{p}{,}\PY{n}{k1}\PY{o}{+}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{k2}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{p}{;} + \PY{n}{k1}\PY{o}{+}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{k2}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{n}{k1}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{k2}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{p}{]}\PY{p}{;} + \PY{n}{f}\PY{p}{=}\PY{p}{[}\PY{n}{m1}\PY{o}{*}\PY{n}{g}\PY{o}{+}\PY{n}{k1}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{o}{+}\PY{n}{k2}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{n}{k1}\PY{o}{*}\PY{n}{x1}\PY{o}{\PYZhy{}}\PY{n}{k2}\PY{o}{*}\PY{n}{x1}\PYZca{}\PY{l+m+mi}{2}\PY{p}{;} + \PY{n}{m2}\PY{o}{*}\PY{n}{g}\PY{o}{\PYZhy{}}\PY{n}{k1}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{n}{k2}\PY{o}{*}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{o}{.\PYZca{}}\PY{l+m+mi}{2}\PY{p}{]}\PY{p}{;} + \PY{k}{end} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}21}]:} \PY{p}{[}\PY{n}{f}\PY{p}{,}\PY{n}{J}\PY{p}{]}\PY{p}{=}\PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +f = + + -190.19 + 129.62 + +J = + + -200 120 + 120 -120 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}22}]:} \PY{n}{x0}\PY{p}{=}\PY{p}{[}\PY{l+m+mi}{3}\PY{p}{;}\PY{l+m+mi}{2}\PY{p}{]}\PY{p}{;} + \PY{p}{[}\PY{n}{f0}\PY{p}{,}\PY{n}{J0}\PY{p}{]}\PY{p}{=}\PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{n}{x0}\PY{p}{)}\PY{p}{;} + \PY{n}{x1}\PY{p}{=}\PY{n}{x0}\PY{o}{\PYZhy{}}\PY{n}{J0}\PY{o}{\PYZbs{}}\PY{n}{f0} + \PY{n}{ea}\PY{p}{=}\PY{p}{(}\PY{n}{x1}\PY{o}{\PYZhy{}}\PY{n}{x0}\PY{p}{)}\PY{o}{./}\PY{n}{x1} + \PY{p}{[}\PY{n}{f1}\PY{p}{,}\PY{n}{J1}\PY{p}{]}\PY{p}{=}\PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{n}{x1}\PY{p}{)}\PY{p}{;} + \PY{n}{x2}\PY{p}{=}\PY{n}{x1}\PY{o}{\PYZhy{}}\PY{n}{J1}\PY{o}{\PYZbs{}}\PY{n}{f1} + \PY{n}{ea}\PY{p}{=}\PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)}\PY{o}{./}\PY{n}{x2} + \PY{p}{[}\PY{n}{f2}\PY{p}{,}\PY{n}{J2}\PY{p}{]}\PY{p}{=}\PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{n}{x2}\PY{p}{)}\PY{p}{;} + \PY{n}{x3}\PY{p}{=}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{J2}\PY{o}{\PYZbs{}}\PY{n}{f2} + \PY{n}{ea}\PY{p}{=}\PY{p}{(}\PY{n}{x3}\PY{o}{\PYZhy{}}\PY{n}{x2}\PY{p}{)}\PY{o}{./}\PY{n}{x3} + \PY{n}{x}\PY{p}{=}\PY{n}{x3} + \PY{k}{for} \PY{n}{i}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{l+m+mi}{3} + \PY{n}{xold}\PY{p}{=}\PY{n}{x}\PY{p}{;} + \PY{p}{[}\PY{n}{f}\PY{p}{,}\PY{n}{J}\PY{p}{]}\PY{p}{=}\PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{;} + \PY{n}{x}\PY{p}{=}\PY{n}{x}\PY{o}{\PYZhy{}}\PY{n}{J}\PY{o}{\PYZbs{}}\PY{n}{f}\PY{p}{;} + \PY{n}{ea}\PY{p}{=}\PY{p}{(}\PY{n}{x}\PY{o}{\PYZhy{}}\PY{n}{xold}\PY{p}{)}\PY{o}{./}\PY{n}{x} + \PY{k}{end} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +x1 = + + -1.5142 + -1.4341 + +ea = + + 2.9812 + 2.3946 + +x2 = + + 0.049894 + 0.248638 + +ea = + + 31.3492 + 6.7678 + +x3 = + + 0.29701 + 0.49722 + +ea = + + 0.83201 + 0.49995 + +x = + + 0.29701 + 0.49722 + +ea = + + 0.021392 + 0.012890 + +ea = + + 1.4786e-05 + 8.9091e-06 + +ea = + + 7.0642e-12 + 4.2565e-12 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}23}]:} \PY{n}{x} + \PY{n}{X0}\PY{p}{=}\PY{n+nb}{fsolve}\PY{p}{(}\PY{p}{@}\PY{p}{(}\PY{n}{x}\PY{p}{)} \PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{,}\PY{p}{[}\PY{l+m+mi}{3}\PY{p}{;}\PY{l+m+mi}{5}\PY{p}{]}\PY{p}{)} +\end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +x = + + 0.30351 + 0.50372 + +X0 = + + 0.30351 + 0.50372 + + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}26}]:} \PY{p}{[}\PY{n}{X}\PY{p}{,}\PY{n}{Y}\PY{p}{]}\PY{p}{=}\PY{n+nb}{meshgrid}\PY{p}{(}\PY{n+nb}{linspace}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{20}\PY{p}{)}\PY{p}{,}\PY{n+nb}{linspace}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{20}\PY{p}{)}\PY{p}{)}\PY{p}{;} + \PY{p}{[}\PY{n}{N}\PY{p}{,}\PY{n}{M}\PY{p}{]}\PY{p}{=}\PY{n+nb}{size}\PY{p}{(}\PY{n}{X}\PY{p}{)}\PY{p}{;} + \PY{n}{F}\PY{p}{=}\PY{n+nb}{zeros}\PY{p}{(}\PY{n+nb}{size}\PY{p}{(}\PY{n}{X}\PY{p}{)}\PY{p}{)}\PY{p}{;} + \PY{k}{for} \PY{n}{i}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{n}{N} + \PY{k}{for} \PY{n}{j}\PY{p}{=}\PY{l+m+mi}{1}\PY{p}{:}\PY{n}{M} + \PY{p}{[}\PY{n}{f}\PY{p}{,}\PY{o}{\PYZti{}}\PY{p}{]}\PY{p}{=}\PY{n}{mass\PYZus{}spring}\PY{p}{(}\PY{p}{[}\PY{n}{X}\PY{p}{(}\PY{n}{i}\PY{p}{,}\PY{n}{j}\PY{p}{)}\PY{p}{,}\PY{n}{Y}\PY{p}{(}\PY{n}{i}\PY{p}{,}\PY{n}{j}\PY{p}{)}\PY{p}{]}\PY{p}{)}\PY{p}{;} + \PY{n}{F1}\PY{p}{(}\PY{n}{i}\PY{p}{,}\PY{n}{j}\PY{p}{)}\PY{p}{=}\PY{n}{f}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{;} + \PY{n}{F2}\PY{p}{(}\PY{n}{i}\PY{p}{,}\PY{n}{j}\PY{p}{)}\PY{p}{=}\PY{n}{f}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{;} + \PY{k}{end} + \PY{k}{end} + \PY{n+nb}{mesh}\PY{p}{(}\PY{n}{X}\PY{p}{,}\PY{n}{Y}\PY{p}{,}\PY{n}{F1}\PY{p}{)} + \PY{n+nb}{xlabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{x\PYZus{}1\PYZsq{}}\PY{p}{)} + \PY{n+nb}{ylabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{x\PYZus{}2\PYZsq{}}\PY{p}{)} + \PY{n+nb}{colorbar}\PY{p}{(}\PY{p}{)} + \PY{n+nb}{figure}\PY{p}{(}\PY{p}{)} + \PY{n+nb}{mesh}\PY{p}{(}\PY{n}{X}\PY{p}{,}\PY{n}{Y}\PY{p}{,}\PY{n}{F2}\PY{p}{)} + \PY{n+nb}{xlabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{x\PYZus{}1\PYZsq{}}\PY{p}{)} + \PY{n+nb}{ylabel}\PY{p}{(}\PY{l+s}{\PYZsq{}}\PY{l+s}{x\PYZus{}2\PYZsq{}}\PY{p}{)} + \PY{n+nb}{colorbar}\PY{p}{(}\PY{p}{)} +\end{Verbatim} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_13_files/lecture_13_36_0.pdf} + \end{center} + { \hspace*{\fill} \\} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{lecture_13_files/lecture_13_36_1.pdf} + \end{center} + { \hspace*{\fill} \\} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor} }]:} +\end{Verbatim} + + + % Add a bibliography block to the postdoc + + + + \end{document} diff --git a/lecture_13/lecture_13_files/lecture_13_22_1.pdf b/lecture_13/lecture_13_files/lecture_13_22_1.pdf new file mode 100644 index 0000000..292be46 Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_22_1.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_22_1.svg b/lecture_13/lecture_13_files/lecture_13_22_1.svg new file mode 100644 index 0000000..c8482cc --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_22_1.svg @@ -0,0 +1,121 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 10 + + + + + 20 + + + + + 30 + + + + + 40 + + + + + 50 + + + + + 0 + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + + + + + gnuplot_plot_1a + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_24_1.pdf b/lecture_13/lecture_13_files/lecture_13_24_1.pdf new file mode 100644 index 0000000..292be46 Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_24_1.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_24_1.svg b/lecture_13/lecture_13_files/lecture_13_24_1.svg new file mode 100644 index 0000000..c8482cc --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_24_1.svg @@ -0,0 +1,121 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 10 + + + + + 20 + + + + + 30 + + + + + 40 + + + + + 50 + + + + + 0 + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + + + + + gnuplot_plot_1a + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_27_0.pdf b/lecture_13/lecture_13_files/lecture_13_27_0.pdf new file mode 100644 index 0000000..45aaf4e Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_27_0.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_27_0.svg b/lecture_13/lecture_13_files/lecture_13_27_0.svg new file mode 100644 index 0000000..acc1eeb --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_27_0.svg @@ -0,0 +1,131 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 0 + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + + + + gnuplot_plot_1a + + + + + + gnuplot_plot_2a + + + + gnuplot_plot_3a + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_29_0.pdf b/lecture_13/lecture_13_files/lecture_13_29_0.pdf new file mode 100644 index 0000000..5394e08 Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_29_0.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_29_0.svg b/lecture_13/lecture_13_files/lecture_13_29_0.svg new file mode 100644 index 0000000..31dbf03 --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_29_0.svg @@ -0,0 +1,141 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 0 + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + + + + x2 + + + + + x1 + + + + + gnuplot_plot_1a + + + + + + gnuplot_plot_2a + + + + gnuplot_plot_3a + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_34_0.pdf b/lecture_13/lecture_13_files/lecture_13_34_0.pdf new file mode 100644 index 0000000..d9bb774 Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_34_0.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_34_0.svg b/lecture_13/lecture_13_files/lecture_13_34_0.svg new file mode 100644 index 0000000..5163d90 --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_34_0.svg @@ -0,0 +1,2040 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_1a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 0.2 + + + + + + + + + 0.4 + + + + + + + + + 0.6 + + + + + + + + + 0.8 + + + + + + + + + 1 + + + + + + + + + + + 0 + + + + + + + + + 0.2 + + + + + + + + + 0.4 + + + + + + + + + 0.6 + + + + + + + + + 0.8 + + + + + + + + + 1 + + + + + x2 + + + + + + + + + + + + + + + + + + gnuplot_plot_1b + + + +; + + + + + + + -150 + + + + + -100 + + + + + -50 + + + + + 0 + + + + + 50 + + + + + 100 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_34_1.pdf b/lecture_13/lecture_13_files/lecture_13_34_1.pdf new file mode 100644 index 0000000..d9bb774 Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_34_1.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_34_1.svg b/lecture_13/lecture_13_files/lecture_13_34_1.svg new file mode 100644 index 0000000..5163d90 --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_34_1.svg @@ -0,0 +1,2040 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_1a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 0.2 + + + + + + + + + 0.4 + + + + + + + + + 0.6 + + + + + + + + + 0.8 + + + + + + + + + 1 + + + + + + + + + + + 0 + + + + + + + + + 0.2 + + + + + + + + + 0.4 + + + + + + + + + 0.6 + + + + + + + + + 0.8 + + + + + + + + + 1 + + + + + x2 + + + + + + + + + + + + + + + + + + gnuplot_plot_1b + + + +; + + + + + + + -150 + + + + + -100 + + + + + -50 + + + + + 0 + + + + + 50 + + + + + 100 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_36_0.pdf b/lecture_13/lecture_13_files/lecture_13_36_0.pdf new file mode 100644 index 0000000..eca271a Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_36_0.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_36_0.svg b/lecture_13/lecture_13_files/lecture_13_36_0.svg new file mode 100644 index 0000000..3d836e3 --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_36_0.svg @@ -0,0 +1,1887 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_1a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_2a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 2 + + + + + + + + + 4 + + + + + + + + + 6 + + + + + + + + + 8 + + + + + + + + + 10 + + + + + x1 + + + + + + + + + + + 0 + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + 8 + + + + + + + + + 10 + + + + + x2 + + + + + + + + + + + -500 + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + 500 + + + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + + + 1500 + + + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 2500 + + + + + + + + + + + + + + + + + + + + gnuplot_plot_1b + + + +; + + + + + + + 0 + + + + + 500 + + + + + 1000 + + + + + 1500 + + + + + 2000 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/lecture_13_files/lecture_13_36_1.pdf b/lecture_13/lecture_13_files/lecture_13_36_1.pdf new file mode 100644 index 0000000..da00267 Binary files /dev/null and b/lecture_13/lecture_13_files/lecture_13_36_1.pdf differ diff --git a/lecture_13/lecture_13_files/lecture_13_36_1.svg b/lecture_13/lecture_13_files/lecture_13_36_1.svg new file mode 100644 index 0000000..92ee787 --- /dev/null +++ b/lecture_13/lecture_13_files/lecture_13_36_1.svg @@ -0,0 +1,1857 @@ + + +Gnuplot +Produced by GNUPLOT 5.0 patchlevel 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_1a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_2a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 2 + + + + + + + + + + + 4 + + + + + + + + + + + 6 + + + + + + + + + + + 8 + + + + + + + + + 10 + + + + + x1 + + + + + + + + + + + 0 + + + + + + + + + 2 + + + + + + + + + 4 + + + + + + + + + 6 + + + + + + + + + 8 + + + + + + + + + 10 + + + + + x2 + + + + + + + + + + + -2000 + + + + + + + + + + + + + -1500 + + + + + + + + + + + + + -1000 + + + + + + + + + + + + + -500 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 500 + + + + + + + + + + + + + + + + + + + + gnuplot_plot_1b + + + +; + + + + + + + -1500 + + + + + -1000 + + + + + -500 + + + + + 0 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lecture_13/nohup.out b/lecture_13/nohup.out new file mode 100644 index 0000000..ee0677e --- /dev/null +++ b/lecture_13/nohup.out @@ -0,0 +1,2 @@ + +(evince:3288): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -71 and height 20 diff --git a/lecture_13/norm_A.png b/lecture_13/norm_A.png new file mode 100644 index 0000000..5f2d273 Binary files /dev/null and b/lecture_13/norm_A.png differ diff --git a/lecture_13/octave-workspace b/lecture_13/octave-workspace new file mode 100644 index 0000000..8c437bb Binary files /dev/null and b/lecture_13/octave-workspace differ diff --git a/lecture_14/fx.png b/lecture_14/fx.png new file mode 100644 index 0000000..618e565 Binary files /dev/null and b/lecture_14/fx.png differ diff --git a/lecture_14/lecture_14.pdf b/lecture_14/lecture_14.pdf new file mode 100755 index 0000000..8c74cc6 Binary files /dev/null and b/lecture_14/lecture_14.pdf differ diff --git a/lecture_15/.ipynb_checkpoints/lecture_15-checkpoint.ipynb b/lecture_15/.ipynb_checkpoints/lecture_15-checkpoint.ipynb new file mode 100644 index 0000000..2fd6442 --- /dev/null +++ b/lecture_15/.ipynb_checkpoints/lecture_15-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_15/animate_eig.m b/lecture_15/animate_eig.m new file mode 100644 index 0000000..a4721a5 --- /dev/null +++ b/lecture_15/animate_eig.m @@ -0,0 +1,56 @@ +function [v,e]=animate_eig(k,m) + % create a series of png's for use in an animation based on + % spring constants [k1,k2,k3]=k + % and + % masses + % [m1,m2]=m + + % check inputs for m and k + if length(m)==1 + m1=m; + m2=m; + else + m1=m(1); + m2=m(2); + end + if length(k)==1 + k1=k; k2=k; k3=k; + else + k1=k(1); + k2=k(2); + k3=k(3); + end + setdefaults + K=[k1/m1+k2/m1,-k2/m1;-k3/m2,k2/m2+k3/m2]; + [v,e]=eig(K); + w1=e(1,1); w2=e(2,2); + scale = 0.5; % the magnitude of oscillations is not important for vibrational modes + % just set scale to 1/2 for nice plots + % the eigenvector magnitude is independent of the solution + X11=v(1,1)*scale; X12=v(2,1)*scale; + X21=v(1,2)*scale; X22=v(2,2)*scale; + f11=@(t) X11*sin(w1*t); f12=@(t) X12*sin(w1*t); + f21=@(t) X21*sin(w2*t); f22=@(t) X22*sin(w2*t); + f=figure(); + time=linspace(-1,4); + % create a loop to plot the position over time where mass 1 and 2 start at x=1 and x=2 m + % then for the next vibrational mode, mass 1 and 2 start at x=3 and x=4 m + + for i=1:length(time) + t=time(i); + plot(f11(t)+1,0,'rs',f11(time+t)+1,-time,... + f12(t)+2,0,'rs',f12(time+t)+2,-time,... + f21(t)+3,0,'bo',f21(time+t)+3,-time,... + f22(t)+4,0,'bo',f22(time+t)+4,-time) + axis([0 6 -4 1]) + title('Vibration Modes') + xlabel('position (m)') + ylabel('time (s)') + filename=sprintf('output/%05d.png',i); + % another option for saving a plot to a png is the 'print' command + print(filename) + end + % this is a system command to use ImageMagick's cli 'convert' to create an animated gif + % if you don't have ImageMagick installed, comment this next line + system ("convert -delay 10 -loop 0 output/*png eigenvalues.gif") +end diff --git a/lecture_15/eig_200_100_40_20.gif b/lecture_15/eig_200_100_40_20.gif new file mode 100644 index 0000000..1b583a7 Binary files /dev/null and b/lecture_15/eig_200_100_40_20.gif differ diff --git a/lecture_15/eig_200_100_40_50.gif b/lecture_15/eig_200_100_40_50.gif new file mode 100644 index 0000000..ba05f59 Binary files /dev/null and b/lecture_15/eig_200_100_40_50.gif differ diff --git a/lecture_15/eig_200_40.gif b/lecture_15/eig_200_40.gif new file mode 100644 index 0000000..f29f27e Binary files /dev/null and b/lecture_15/eig_200_40.gif differ diff --git a/lecture_15/eigenvalues.gif b/lecture_15/eigenvalues.gif new file mode 100644 index 0000000..1286762 Binary files /dev/null and b/lecture_15/eigenvalues.gif differ diff --git a/lecture_15/lecture_15.ipynb b/lecture_15/lecture_15.ipynb new file mode 100644 index 0000000..49e4b52 --- /dev/null +++ b/lecture_15/lecture_15.ipynb @@ -0,0 +1,618 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## UConn Hackathon Mar 24-25\n", + "\n", + "[https://www.hackuconn.org/](https://www.hackuconn.org/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Final Project\n", + "\n", + "1. Will be a team project (select team of 2-3 students)\n", + "\n", + "2. You will create a repository and each of you will contribute code and documentation\n", + "\n", + "3. If you have an idea feel free to suggest it, otherwise I will come up with a project, possible topics include:\n", + "\n", + " a. Conduction of heat through simple geometry\n", + " \n", + " b. Plate or beam mechanics (1-D and 2-D geometries)\n", + " \n", + " c. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Eigenvalues\n", + "\n", + "Eigenvalues and eigen vectors are the solution to the set of equations where\n", + "\n", + "$Ax=\\lambda x$\n", + "\n", + "or \n", + "\n", + "$A-I \\lambda=0$\n", + "\n", + "Where A is the description of the system and I is the identity matrix with the same dimensions as A and $\\lambda$ is an eigenvalue of A. \n", + "\n", + "These problems are seen in a number of engineering practices:\n", + "\n", + "1. Determining vibrational modes in structural devices\n", + "\n", + "2. Material science - vibrational modes of crystal lattices (phonons)\n", + "\n", + "3. [Google searches - http://www.rose-hulman.edu/~bryan/googleFinalVersionFixed.pdf](http://www.rose-hulman.edu/~bryan/googleFinalVersionFixed.pdf)\n", + "\n", + "4. Quantum mechanics - many solutions are eigenvalue problems\n", + "\n", + "5. Solid mechanics, principle stresses and principle stress directions are eigenvalues and eigenvectors\n", + "\n", + "One way of determining the eigenvalues is taking the determinant:\n", + "\n", + "$|A-\\lambda I|=0$\n", + "\n", + "This will result in an $n^{th}$-order polynomial where A is $n \\times n$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Take, A\n", + "\n", + "$A=\\left[\\begin{array}{ccc}\n", + "2 & 1 & 0 \\\\\n", + "1 & 3 & 1 \\\\\n", + "0 & 1 & 4 \\end{array}\\right]$\n", + "\n", + "$|A-\\lambda I| = \\left|\\begin{array}{ccc}\n", + "2-\\lambda & 1 & 0 \\\\\n", + "1 & 3-\\lambda & 1 \\\\\n", + "0 & 1 & 4-\\lambda \\end{array}\\right|=0$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$(2-\\lambda)(3-\\lambda)(4-\\lambda)-(4-\\lambda)-(2-\\lambda)=0$\n", + "\n", + "$-\\lambda^{3}+9\\lambda^{2}-24\\lambda+18 =0$\n", + "\n", + "$\\lambda = 3,~\\sqrt{3}+3,-\\sqrt{3}+3$\n", + "\n", + "in Matlab/Octave:\n", + "\n", + "```matlab\n", + "A=[2,1,0;1,3,1;0,1,4];\n", + "pA=poly(A);\n", + "lambda = roots(pA)\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda =\n", + "\n", + " 4.7321\n", + " 3.0000\n", + " 1.2679\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1,0;1,3,1;0,1,4];\n", + "pA=poly(A); % characteristic polynomial of A, e.g. l^3-9*l^2+24*l-18=0\n", + "lambda = roots(pA)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Applications of Eigenvalue analysis\n", + "\n", + "Consider the 2-mass, 3-spring system shown below\n", + "\n", + "![masses and springs in series](springs_masses.png)\n", + "\n", + "It might not be immediately obvious, but there are two resonant frequencies for these masses connected in series. \n", + "\n", + "Take the two FBD solutions:\n", + "\n", + "$m_{1}\\frac{d^{2}x_{1}}{dt^{2}}=-kx_{1}+k(x_{2}-x_{1})$\n", + "\n", + "$m_{2}\\frac{d^{2}x_{2}}{dt^{2}}=-k(x_{2}-x_{1})-kx_{2}$\n", + "\n", + "we know that $x_{i}(t)\\propto sin(\\omega t)$ so we can substitute\n", + "\n", + "$x_{i}=X_{i}sin(\\omega t)$\n", + "\n", + "$-m_{1}X_{1}\\omega^{2}sin(\\omega t) = -kX_{1}sin(\\omega t) +k(X_{2}-X_{1})sin(\\omega t)$\n", + "\n", + "$-m_{2}X_{2}\\omega^{2}sin(\\omega t) = -kX_{2}sin(\\omega t) - k(X_{2}-X_{1})sin(\\omega t)$\n", + "\n", + "where $X_{1}$ and $X_{2}$ are the amplitude of oscillations and $\\omega$ is the frequency of oscillations. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "now, \n", + "\n", + "$\\left(\\frac{2k}{m_{1}}-\\omega^{2}\\right)X_{1}-\\frac{k}{m_{1}}X_{2} = 0$\n", + "\n", + "\n", + "$-\\frac{k}{m_{2}}X_{1}+\\left(\\frac{2k}{m_{2}}-\\omega^{2}\\right)X_{2} = 0$\n", + "\n", + "or\n", + "\n", + "$|K-\\lambda I| = \\left|\\begin{array}{cc}\n", + "\\left(\\frac{2k}{m_{1}}-\\omega^{2}\\right) & -\\frac{k}{m_{1}} \\\\\n", + "-\\frac{k}{m_{2}} & \\left(\\frac{2k}{m_{2}}-\\omega^{2}\\right)\n", + "\\end{array}\\right|=0$\n", + "\n", + "where $\\lambda = \\omega^{2}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'eig' is a built-in function from the file libinterp/corefcn/eig.cc\n", + "\n", + " -- Built-in Function: LAMBDA = eig (A)\n", + " -- Built-in Function: LAMBDA = eig (A, B)\n", + " -- Built-in Function: [V, LAMBDA] = eig (A)\n", + " -- Built-in Function: [V, LAMBDA] = eig (A, B)\n", + " Compute the eigenvalues (and optionally the eigenvectors) of a\n", + " matrix or a pair of matrices\n", + "\n", + " The algorithm used depends on whether there are one or two input\n", + " matrices, if they are real or complex, and if they are symmetric\n", + " (Hermitian if complex) or non-symmetric.\n", + "\n", + " The eigenvalues returned by 'eig' are not ordered.\n", + "\n", + " See also: eigs, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help eig" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 10 -5\n", + " -5 10\n", + "\n", + "v =\n", + "\n", + " -0.70711 -0.70711\n", + " -0.70711 0.70711\n", + "\n", + "e =\n", + "\n", + "Diagonal Matrix\n", + "\n", + " 5 0\n", + " 0 15\n", + "\n" + ] + } + ], + "source": [ + "m=40; % mass in kg\n", + "k=200; % spring constant in N/m\n", + "\n", + "K=[2*k/m,-k/m;-k/m,2*k/m]\n", + "\n", + "[v,e]=eig(K)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " -10.607\n", + " 10.607\n", + "\n", + "ans =\n", + "\n", + " -10.607\n", + " 10.607\n", + "\n" + ] + } + ], + "source": [ + "K*v(:,2)\n", + "e(2,2)*v(:,2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### $m_{1}=m_{2}=$40 kg and $k_{1}=k_{2}=k_{3}=$200 N/m\n", + "![animation](./eig_200_40.gif)\n", + "\n", + "### $m_{1}=$40 kg, $m_{2}=$50 kg, $k_{1}=$200 N/m, and $k_{2}=k_{3}=$100 N/m\n", + "![animation](./eig_200_100_40_50.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solid Mechanics\n", + "\n", + "Many times you want to know the \"principle\" components of stress or strain. \n", + "\n", + "stress and strain are second order tensors:\n", + "\n", + "$\\sigma_{ij} =\\frac{F_{i}}{A_{j}}$ (engineering stress)\n", + "\n", + "$\\epsilon_{ij}=\\frac{\\Delta l_{i}}{l_{j}}$ (engineering strain)\n", + "\n", + "Imagine you can apply a force in two directions normal to each other, could you create a shear stress? \n", + "\n", + "![Desired stress state and with unknown applied stresses](stress.svg)\n", + "\n", + "Let's try to create the stress state of 10 MPa shear stress with two normal stresses. \n", + "\n", + "that means, $\\sigma_{12}=\\sigma_{21}=$10 MPa, and $\\sigma_{11}=\\sigma_{22}=\\sigma_{33}=\\sigma_{23}=\\sigma_{13}=0$ MPa\n", + "\n", + "in matrix form:\n", + "\n", + "$[\\sigma]=\\left[\\begin{array}{ccc}\n", + "0 & 10 & 0 \\\\\n", + "10 & 0 & 0 \\\\\n", + "0 & 0 & 0 \\end{array} \\right]$ MPa" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v =\n", + "\n", + " -0.70711 0.00000 0.70711\n", + " 0.70711 0.00000 0.70711\n", + " 0.00000 1.00000 0.00000\n", + "\n", + "e =\n", + "\n", + "Diagonal Matrix\n", + "\n", + " -10 0 0\n", + " 0 0 0\n", + " 0 0 10\n", + "\n", + "v1 =\n", + "\n", + " 7.07107\n", + " -7.07107\n", + " 0.00000\n", + "\n", + "v2 =\n", + "\n", + " 7.07107\n", + " 7.07107\n", + " 0.00000\n", + "\n" + ] + } + ], + "source": [ + "s=[0,10,0;10,0,0;0,0,0];\n", + "[v,e]=eig(s)\n", + "v1=s*v(:,1)\n", + "v2=s*v(:,3)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "v1=s*v(:,1);\n", + "v2=s*v(:,3);\n", + "%quiver([0,0],[0,0],v(1,[1,3]),v(2,[1,3]))\n", + "quiver([0,0],[0,0],[v1(1),v2(1)],[v1(2),v2(2)])\n", + "axis([-10,10,-10,10])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![solution to principle stresses](stress_soln.svg)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "e =\n", + "\n", + " -10\n", + " 0\n", + " 10\n", + "\n" + ] + } + ], + "source": [ + "e=eig(s)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_15/lecture_15.pdf b/lecture_15/lecture_15.pdf new file mode 100644 index 0000000..94d5f8c Binary files /dev/null and b/lecture_15/lecture_15.pdf differ diff --git a/lecture_15/octave-workspace b/lecture_15/octave-workspace new file mode 100644 index 0000000..8c437bb Binary files /dev/null and b/lecture_15/octave-workspace differ diff --git a/lecture_15/output/00001.png b/lecture_15/output/00001.png new file mode 100644 index 0000000..44210b6 Binary files /dev/null and b/lecture_15/output/00001.png differ diff --git a/lecture_15/output/00002.png b/lecture_15/output/00002.png new file mode 100644 index 0000000..31a03bb Binary files /dev/null and b/lecture_15/output/00002.png differ diff --git a/lecture_15/output/00003.png b/lecture_15/output/00003.png new file mode 100644 index 0000000..08cd507 Binary files /dev/null and b/lecture_15/output/00003.png differ diff --git a/lecture_15/output/00004.png b/lecture_15/output/00004.png new file mode 100644 index 0000000..590a413 Binary files /dev/null and b/lecture_15/output/00004.png differ diff --git a/lecture_15/output/00005.png b/lecture_15/output/00005.png new file mode 100644 index 0000000..240744a Binary files /dev/null and b/lecture_15/output/00005.png differ diff --git a/lecture_15/output/00006.png b/lecture_15/output/00006.png new file mode 100644 index 0000000..e31a3c7 Binary files /dev/null and b/lecture_15/output/00006.png differ diff --git a/lecture_15/output/00007.png b/lecture_15/output/00007.png new file mode 100644 index 0000000..7ad26e6 Binary files /dev/null and b/lecture_15/output/00007.png differ diff --git a/lecture_15/output/00008.png b/lecture_15/output/00008.png new file mode 100644 index 0000000..10bcf68 Binary files /dev/null and b/lecture_15/output/00008.png differ diff --git a/lecture_15/output/00009.png b/lecture_15/output/00009.png new file mode 100644 index 0000000..53e6f1c Binary files /dev/null and b/lecture_15/output/00009.png differ diff --git a/lecture_15/output/00010.png b/lecture_15/output/00010.png new file mode 100644 index 0000000..c78c8ca Binary files /dev/null and b/lecture_15/output/00010.png differ diff --git a/lecture_15/output/00011.png b/lecture_15/output/00011.png new file mode 100644 index 0000000..430a933 Binary files /dev/null and b/lecture_15/output/00011.png differ diff --git a/lecture_15/output/00012.png b/lecture_15/output/00012.png new file mode 100644 index 0000000..c708dd3 Binary files /dev/null and b/lecture_15/output/00012.png differ diff --git a/lecture_15/output/00013.png b/lecture_15/output/00013.png new file mode 100644 index 0000000..4a25731 Binary files /dev/null and b/lecture_15/output/00013.png differ diff --git a/lecture_15/output/00014.png b/lecture_15/output/00014.png new file mode 100644 index 0000000..ea02a38 Binary files /dev/null and b/lecture_15/output/00014.png differ diff --git a/lecture_15/output/00015.png b/lecture_15/output/00015.png new file mode 100644 index 0000000..f0f640e Binary files /dev/null and b/lecture_15/output/00015.png differ diff --git a/lecture_15/output/00016.png b/lecture_15/output/00016.png new file mode 100644 index 0000000..44f338f Binary files /dev/null and b/lecture_15/output/00016.png differ diff --git a/lecture_15/output/00017.png b/lecture_15/output/00017.png new file mode 100644 index 0000000..056a85b Binary files /dev/null and b/lecture_15/output/00017.png differ diff --git a/lecture_15/output/00018.png b/lecture_15/output/00018.png new file mode 100644 index 0000000..2bab623 Binary files /dev/null and b/lecture_15/output/00018.png differ diff --git a/lecture_15/output/00019.png b/lecture_15/output/00019.png new file mode 100644 index 0000000..9dac5a7 Binary files /dev/null and b/lecture_15/output/00019.png differ diff --git a/lecture_15/output/00020.png b/lecture_15/output/00020.png new file mode 100644 index 0000000..1d4ab40 Binary files /dev/null and b/lecture_15/output/00020.png differ diff --git a/lecture_15/output/00021.png b/lecture_15/output/00021.png new file mode 100644 index 0000000..66eb44d Binary files /dev/null and b/lecture_15/output/00021.png differ diff --git a/lecture_15/output/00022.png b/lecture_15/output/00022.png new file mode 100644 index 0000000..fa6fdc8 Binary files /dev/null and b/lecture_15/output/00022.png differ diff --git a/lecture_15/output/00023.png b/lecture_15/output/00023.png new file mode 100644 index 0000000..aa755e1 Binary files /dev/null and b/lecture_15/output/00023.png differ diff --git a/lecture_15/output/00024.png b/lecture_15/output/00024.png new file mode 100644 index 0000000..4e64252 Binary files /dev/null and b/lecture_15/output/00024.png differ diff --git a/lecture_15/output/00025.png b/lecture_15/output/00025.png new file mode 100644 index 0000000..a2fc1b3 Binary files /dev/null and b/lecture_15/output/00025.png differ diff --git a/lecture_15/output/00026.png b/lecture_15/output/00026.png new file mode 100644 index 0000000..041a839 Binary files /dev/null and b/lecture_15/output/00026.png differ diff --git a/lecture_15/output/00027.png b/lecture_15/output/00027.png new file mode 100644 index 0000000..41a54ff Binary files /dev/null and b/lecture_15/output/00027.png differ diff --git a/lecture_15/output/00028.png b/lecture_15/output/00028.png new file mode 100644 index 0000000..b6cc8c8 Binary files /dev/null and b/lecture_15/output/00028.png differ diff --git a/lecture_15/output/00029.png b/lecture_15/output/00029.png new file mode 100644 index 0000000..4c665b8 Binary files /dev/null and b/lecture_15/output/00029.png differ diff --git a/lecture_15/output/00030.png b/lecture_15/output/00030.png new file mode 100644 index 0000000..71801e9 Binary files /dev/null and b/lecture_15/output/00030.png differ diff --git a/lecture_15/output/00031.png b/lecture_15/output/00031.png new file mode 100644 index 0000000..a30c5b9 Binary files /dev/null and b/lecture_15/output/00031.png differ diff --git a/lecture_15/output/00032.png b/lecture_15/output/00032.png new file mode 100644 index 0000000..8ef9b30 Binary files /dev/null and b/lecture_15/output/00032.png differ diff --git a/lecture_15/output/00033.png b/lecture_15/output/00033.png new file mode 100644 index 0000000..79f8e85 Binary files /dev/null and b/lecture_15/output/00033.png differ diff --git a/lecture_15/output/00034.png b/lecture_15/output/00034.png new file mode 100644 index 0000000..075d85e Binary files /dev/null and b/lecture_15/output/00034.png differ diff --git a/lecture_15/output/00035.png b/lecture_15/output/00035.png new file mode 100644 index 0000000..bc73c87 Binary files /dev/null and b/lecture_15/output/00035.png differ diff --git a/lecture_15/output/00036.png b/lecture_15/output/00036.png new file mode 100644 index 0000000..48b5fae Binary files /dev/null and b/lecture_15/output/00036.png differ diff --git a/lecture_15/output/00037.png b/lecture_15/output/00037.png new file mode 100644 index 0000000..7107cfc Binary files /dev/null and b/lecture_15/output/00037.png differ diff --git a/lecture_15/output/00038.png b/lecture_15/output/00038.png new file mode 100644 index 0000000..c9c09b2 Binary files /dev/null and b/lecture_15/output/00038.png differ diff --git a/lecture_15/output/00039.png b/lecture_15/output/00039.png new file mode 100644 index 0000000..8755cf3 Binary files /dev/null and b/lecture_15/output/00039.png differ diff --git a/lecture_15/output/00040.png b/lecture_15/output/00040.png new file mode 100644 index 0000000..9503926 Binary files /dev/null and b/lecture_15/output/00040.png differ diff --git a/lecture_15/output/00041.png b/lecture_15/output/00041.png new file mode 100644 index 0000000..4311d25 Binary files /dev/null and b/lecture_15/output/00041.png differ diff --git a/lecture_15/output/00042.png b/lecture_15/output/00042.png new file mode 100644 index 0000000..3ce55af Binary files /dev/null and b/lecture_15/output/00042.png differ diff --git a/lecture_15/output/00043.png b/lecture_15/output/00043.png new file mode 100644 index 0000000..8c619cf Binary files /dev/null and b/lecture_15/output/00043.png differ diff --git a/lecture_15/output/00044.png b/lecture_15/output/00044.png new file mode 100644 index 0000000..2d91fd9 Binary files /dev/null and b/lecture_15/output/00044.png differ diff --git a/lecture_15/output/00045.png b/lecture_15/output/00045.png new file mode 100644 index 0000000..92e9720 Binary files /dev/null and b/lecture_15/output/00045.png differ diff --git a/lecture_15/output/00046.png b/lecture_15/output/00046.png new file mode 100644 index 0000000..62dfa75 Binary files /dev/null and b/lecture_15/output/00046.png differ diff --git a/lecture_15/output/00047.png b/lecture_15/output/00047.png new file mode 100644 index 0000000..b62ac38 Binary files /dev/null and b/lecture_15/output/00047.png differ diff --git a/lecture_15/output/00048.png b/lecture_15/output/00048.png new file mode 100644 index 0000000..0b90065 Binary files /dev/null and b/lecture_15/output/00048.png differ diff --git a/lecture_15/output/00049.png b/lecture_15/output/00049.png new file mode 100644 index 0000000..f7510c0 Binary files /dev/null and b/lecture_15/output/00049.png differ diff --git a/lecture_15/output/00050.png b/lecture_15/output/00050.png new file mode 100644 index 0000000..2c74c37 Binary files /dev/null and b/lecture_15/output/00050.png differ diff --git a/lecture_15/output/00051.png b/lecture_15/output/00051.png new file mode 100644 index 0000000..daabdee Binary files /dev/null and b/lecture_15/output/00051.png differ diff --git a/lecture_15/output/00052.png b/lecture_15/output/00052.png new file mode 100644 index 0000000..15fb10c Binary files /dev/null and b/lecture_15/output/00052.png differ diff --git a/lecture_15/output/00053.png b/lecture_15/output/00053.png new file mode 100644 index 0000000..07fb58c Binary files /dev/null and b/lecture_15/output/00053.png differ diff --git a/lecture_15/output/00054.png b/lecture_15/output/00054.png new file mode 100644 index 0000000..7bc6b82 Binary files /dev/null and b/lecture_15/output/00054.png differ diff --git a/lecture_15/output/00055.png b/lecture_15/output/00055.png new file mode 100644 index 0000000..52df944 Binary files /dev/null and b/lecture_15/output/00055.png differ diff --git a/lecture_15/output/00056.png b/lecture_15/output/00056.png new file mode 100644 index 0000000..1677817 Binary files /dev/null and b/lecture_15/output/00056.png differ diff --git a/lecture_15/output/00057.png b/lecture_15/output/00057.png new file mode 100644 index 0000000..c4032a1 Binary files /dev/null and b/lecture_15/output/00057.png differ diff --git a/lecture_15/output/00058.png b/lecture_15/output/00058.png new file mode 100644 index 0000000..3afae58 Binary files /dev/null and b/lecture_15/output/00058.png differ diff --git a/lecture_15/output/00059.png b/lecture_15/output/00059.png new file mode 100644 index 0000000..9e18362 Binary files /dev/null and b/lecture_15/output/00059.png differ diff --git a/lecture_15/output/00060.png b/lecture_15/output/00060.png new file mode 100644 index 0000000..47af589 Binary files /dev/null and b/lecture_15/output/00060.png differ diff --git a/lecture_15/output/00061.png b/lecture_15/output/00061.png new file mode 100644 index 0000000..b12af4a Binary files /dev/null and b/lecture_15/output/00061.png differ diff --git a/lecture_15/output/00062.png b/lecture_15/output/00062.png new file mode 100644 index 0000000..0999e97 Binary files /dev/null and b/lecture_15/output/00062.png differ diff --git a/lecture_15/output/00063.png b/lecture_15/output/00063.png new file mode 100644 index 0000000..5287e29 Binary files /dev/null and b/lecture_15/output/00063.png differ diff --git a/lecture_15/output/00064.png b/lecture_15/output/00064.png new file mode 100644 index 0000000..bbad872 Binary files /dev/null and b/lecture_15/output/00064.png differ diff --git a/lecture_15/output/00065.png b/lecture_15/output/00065.png new file mode 100644 index 0000000..61d2fe1 Binary files /dev/null and b/lecture_15/output/00065.png differ diff --git a/lecture_15/output/00066.png b/lecture_15/output/00066.png new file mode 100644 index 0000000..a1b9eeb Binary files /dev/null and b/lecture_15/output/00066.png differ diff --git a/lecture_15/output/00067.png b/lecture_15/output/00067.png new file mode 100644 index 0000000..67ccce3 Binary files /dev/null and b/lecture_15/output/00067.png differ diff --git a/lecture_15/output/00068.png b/lecture_15/output/00068.png new file mode 100644 index 0000000..50c4da5 Binary files /dev/null and b/lecture_15/output/00068.png differ diff --git a/lecture_15/output/00069.png b/lecture_15/output/00069.png new file mode 100644 index 0000000..790f009 Binary files /dev/null and b/lecture_15/output/00069.png differ diff --git a/lecture_15/output/00070.png b/lecture_15/output/00070.png new file mode 100644 index 0000000..350e64a Binary files /dev/null and b/lecture_15/output/00070.png differ diff --git a/lecture_15/output/00071.png b/lecture_15/output/00071.png new file mode 100644 index 0000000..d4d54b0 Binary files /dev/null and b/lecture_15/output/00071.png differ diff --git a/lecture_15/output/00072.png b/lecture_15/output/00072.png new file mode 100644 index 0000000..146d82f Binary files /dev/null and b/lecture_15/output/00072.png differ diff --git a/lecture_15/output/00073.png b/lecture_15/output/00073.png new file mode 100644 index 0000000..cee2012 Binary files /dev/null and b/lecture_15/output/00073.png differ diff --git a/lecture_15/output/00074.png b/lecture_15/output/00074.png new file mode 100644 index 0000000..b762ee1 Binary files /dev/null and b/lecture_15/output/00074.png differ diff --git a/lecture_15/output/00075.png b/lecture_15/output/00075.png new file mode 100644 index 0000000..59f5ee9 Binary files /dev/null and b/lecture_15/output/00075.png differ diff --git a/lecture_15/output/00076.png b/lecture_15/output/00076.png new file mode 100644 index 0000000..59c0066 Binary files /dev/null and b/lecture_15/output/00076.png differ diff --git a/lecture_15/output/00077.png b/lecture_15/output/00077.png new file mode 100644 index 0000000..6048a1c Binary files /dev/null and b/lecture_15/output/00077.png differ diff --git a/lecture_15/output/00078.png b/lecture_15/output/00078.png new file mode 100644 index 0000000..4473c93 Binary files /dev/null and b/lecture_15/output/00078.png differ diff --git a/lecture_15/output/00079.png b/lecture_15/output/00079.png new file mode 100644 index 0000000..7a6335a Binary files /dev/null and b/lecture_15/output/00079.png differ diff --git a/lecture_15/output/00080.png b/lecture_15/output/00080.png new file mode 100644 index 0000000..821076d Binary files /dev/null and b/lecture_15/output/00080.png differ diff --git a/lecture_15/output/00081.png b/lecture_15/output/00081.png new file mode 100644 index 0000000..d36a35c Binary files /dev/null and b/lecture_15/output/00081.png differ diff --git a/lecture_15/output/00082.png b/lecture_15/output/00082.png new file mode 100644 index 0000000..bde9280 Binary files /dev/null and b/lecture_15/output/00082.png differ diff --git a/lecture_15/output/00083.png b/lecture_15/output/00083.png new file mode 100644 index 0000000..1691529 Binary files /dev/null and b/lecture_15/output/00083.png differ diff --git a/lecture_15/output/00084.png b/lecture_15/output/00084.png new file mode 100644 index 0000000..5adfef2 Binary files /dev/null and b/lecture_15/output/00084.png differ diff --git a/lecture_15/output/00085.png b/lecture_15/output/00085.png new file mode 100644 index 0000000..02067f8 Binary files /dev/null and b/lecture_15/output/00085.png differ diff --git a/lecture_15/output/00086.png b/lecture_15/output/00086.png new file mode 100644 index 0000000..2dfc5ac Binary files /dev/null and b/lecture_15/output/00086.png differ diff --git a/lecture_15/output/00087.png b/lecture_15/output/00087.png new file mode 100644 index 0000000..a955fd7 Binary files /dev/null and b/lecture_15/output/00087.png differ diff --git a/lecture_15/output/00088.png b/lecture_15/output/00088.png new file mode 100644 index 0000000..7b38164 Binary files /dev/null and b/lecture_15/output/00088.png differ diff --git a/lecture_15/output/00089.png b/lecture_15/output/00089.png new file mode 100644 index 0000000..2c75b0f Binary files /dev/null and b/lecture_15/output/00089.png differ diff --git a/lecture_15/output/00090.png b/lecture_15/output/00090.png new file mode 100644 index 0000000..e4489e6 Binary files /dev/null and b/lecture_15/output/00090.png differ diff --git a/lecture_15/output/00091.png b/lecture_15/output/00091.png new file mode 100644 index 0000000..af5d877 Binary files /dev/null and b/lecture_15/output/00091.png differ diff --git a/lecture_15/output/00092.png b/lecture_15/output/00092.png new file mode 100644 index 0000000..ab960d1 Binary files /dev/null and b/lecture_15/output/00092.png differ diff --git a/lecture_15/output/00093.png b/lecture_15/output/00093.png new file mode 100644 index 0000000..81c02c0 Binary files /dev/null and b/lecture_15/output/00093.png differ diff --git a/lecture_15/output/00094.png b/lecture_15/output/00094.png new file mode 100644 index 0000000..850739f Binary files /dev/null and b/lecture_15/output/00094.png differ diff --git a/lecture_15/output/00095.png b/lecture_15/output/00095.png new file mode 100644 index 0000000..41d354d Binary files /dev/null and b/lecture_15/output/00095.png differ diff --git a/lecture_15/output/00096.png b/lecture_15/output/00096.png new file mode 100644 index 0000000..7149da5 Binary files /dev/null and b/lecture_15/output/00096.png differ diff --git a/lecture_15/output/00097.png b/lecture_15/output/00097.png new file mode 100644 index 0000000..a7bc3f4 Binary files /dev/null and b/lecture_15/output/00097.png differ diff --git a/lecture_15/output/00098.png b/lecture_15/output/00098.png new file mode 100644 index 0000000..119aaef Binary files /dev/null and b/lecture_15/output/00098.png differ diff --git a/lecture_15/output/00099.png b/lecture_15/output/00099.png new file mode 100644 index 0000000..f6f7b8a Binary files /dev/null and b/lecture_15/output/00099.png differ diff --git a/lecture_15/output/00100.png b/lecture_15/output/00100.png new file mode 100644 index 0000000..8d37137 Binary files /dev/null and b/lecture_15/output/00100.png differ diff --git a/lecture_15/springs_masses.png b/lecture_15/springs_masses.png new file mode 100644 index 0000000..9a01154 Binary files /dev/null and b/lecture_15/springs_masses.png differ diff --git a/lecture_15/stress.svg b/lecture_15/stress.svg new file mode 100644 index 0000000..dbbd0b7 --- /dev/null +++ b/lecture_15/stress.svg @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + 𝞃=10 MPa + + + + + 𝞼1 + 𝞼2 + + diff --git a/lecture_15/stress_soln.svg b/lecture_15/stress_soln.svg new file mode 100644 index 0000000..5366d11 --- /dev/null +++ b/lecture_15/stress_soln.svg @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + 𝞃=10 MPa + + + + + 𝞼1=-10 MPa + 𝞼2=10 MPa + + diff --git "a/lecture_15/\340\244\267\001" "b/lecture_15/\340\244\267\001" new file mode 100644 index 0000000..e69de29 diff --git "a/lecture_15/\360&\341\001" "b/lecture_15/\360&\341\001" new file mode 100644 index 0000000..e69de29 diff --git a/lecture_16/.ipynb_checkpoints/lecture_16-checkpoint.ipynb b/lecture_16/.ipynb_checkpoints/lecture_16-checkpoint.ipynb new file mode 100644 index 0000000..2fd6442 --- /dev/null +++ b/lecture_16/.ipynb_checkpoints/lecture_16-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_16/MonteCarloPi.gif b/lecture_16/MonteCarloPi.gif new file mode 100644 index 0000000..8ffb745 Binary files /dev/null and b/lecture_16/MonteCarloPi.gif differ diff --git a/lecture_16/MonteCarloPi_rand.gif b/lecture_16/MonteCarloPi_rand.gif new file mode 100644 index 0000000..aaa31d7 Binary files /dev/null and b/lecture_16/MonteCarloPi_rand.gif differ diff --git a/lecture_16/compiled_data.csv b/lecture_16/compiled_data.csv new file mode 100644 index 0000000..ea6a99a --- /dev/null +++ b/lecture_16/compiled_data.csv @@ -0,0 +1,233 @@ +7.8,62,1 +12.3,61,1 +5.2,35,1 +12.4,44,1 +5.2,294,1 +3.3,73,2 +1.4,30,2 +11,10,2 +6.3,39,3 +6.9,60,3 +6.3,100,3 +7.8,249,3 +3.3,282,3 +7,96,4 +3.9,186,4 +2.95,166,4 +8.6,262,4 +2.5,355,4 +20,155,5 +18.5,225,5 +14,45,5 +8.5,340,5 +5.25,95,5 +10,20,5 +6.5,62,5 +8.75,36,5 +3,190,5 +4.5,280,5 +2.25,62,6 +3.9,312,6 +9.3,36,6 +1.9,154,6 +7.3,115,6 +4.75,298,6 +4.6,306,7 +2.3,282,7 +10.1,138,7 +3.3,180,7 +8.5,242,7 +5,10,8 +2.5,350,8 +11,30,8 +4,272,8 +17,38,8 +3.75,85,9 +4.5,102,9 +1.36,118,9 +0.78,157,9 +3.41,198,9 +3,27,10 +1,88,10 +2,20,10 +2.5,155,10 +4.5,281,10 +1.5,75,10 +6.32,70,10 +2.85,135,10 +3.71,250,10 +5.45,60,10 +6.1,95,10 +5.5,92,11 +15,266,11 +12.5,14,11 +7,120,11 +4,132,11 +9,30,12 +5,90,12 +6,350,12 +8,330,12 +5,60,12 +3.81,140,12 +6.35,116,12 +0.635,88,12 +7.62,12,12 +1.27,180,12 +4.2,292,13 +0.8,165,13 +2.5,0,13 +6,43,13 +6.65,317,13 +1,0,13 +2.9,50,13 +7.4,302,13 +16.6,246,13 +2.4,234,13 +0.8,100,14 +3.6,62,14 +3.5,260,14 +4.4,168,14 +5.7,178,14 +3.6,143,14 +1.75,37,14 +1.95,62,14 +2.27,48,14 +4.26,69,14 +4,182,15 +5.8,100,15 +8.3,45,15 +10.2,30,15 +4,278,15 +3.81,120,16 +7.62,77,16 +1.59,212,16 +3.73,265,16 +4.84,259,16 +3.45,243,16 +2.1,186,16 +4.6,24,16 +0.7,343,16 +1.7,211,16 +12.4,33,17 +13.9,103,17 +4.5,307,17 +6.7,313,17 +11.4,328,17 +3,240,18 +4,330,18 +2,90,18 +3.5,315,18 +1,15,18 +4.6,98,19 +3.8,326,19 +3.4,184,19 +4,48,19 +2.6,83,19 +2.75,88,20 +1.33,93,20 +1.5,12,20 +3,280,20 +0.5,24,20 +1.2,130,21 +2.6,122,21 +0.8,296,21 +1.4,100,21 +1.2,290,21 +3,90,22 +2,30,22 +10,90,22 +3,15,22 +7,90,22 +3.3,170,23 +8.8,95,23 +8.1,71,23 +7.7,48,23 +9.6,301,23 +3,70,24 +1.2,10,24 +2.1,15,24 +6,260,24 +0.7,30,24 +12.5,10,25 +11,35,25 +7,320,25 +7.5,292,25 +3.5,134,25 +1,4,26 +2,3.9,26 +3,5.25,26 +4,3.2,26 +5,3,26 +4.5,27,27 +1.1,80,27 +2.6,155,27 +1.9,200,27 +2.8,325,27 +4.3,15,28 +7,145,28 +3.5,80,28 +9,210,28 +5.2,175,28 +1,54,29 +3.5,128,29 +4.5,140,29 +2,54,29 +11,274,29 +3.175,98,30 +1.5875,30,30 +3.175,282,30 +5.08,318,30 +10.795,316,30 +11.2,19,31 +14.5,232,31 +12.3,271,31 +16.9,120,31 +9,177,31 +7.4,276,32 +11.5,321,32 +1.5,36,32 +7.5,22,32 +10.1,66,32 +1.75,10,33 +2.5,123,33 +2,64,33 +1.8,271,33 +4,308,33 +4.5,39,34 +3.25,68,34 +2.5,282,34 +1.25,108,34 +2,122,34 +3.97,18,35 +8.29,196,35 +15.52,232,35 +4.79,93,35 +6.43,153,35 +7.5,74,36 +10.75,86,36 +3.5,96,36 +6.25,172,36 +5.5,38,36 +3.25,192,37 +4.5,88,37 +5,336,37 +4,176,37 +2.5,194,37 +1.5,73,38 +1.33,265,38 +2.15,92,38 +3.5,130,38 +0.9,65,38 +3.75,-2,39 +1.66,89,39 +5.43,76,39 +4.12,54,39 +6.87,63,39 +10,85,40 +9,30,40 +7,180,40 +4.3,22,40 +5.8,281,40 +2.9,1,40 +3.31,29,40 +1.5,10,40 diff --git a/lecture_16/gen_examples.m b/lecture_16/gen_examples.m new file mode 100644 index 0000000..c5d6890 --- /dev/null +++ b/lecture_16/gen_examples.m @@ -0,0 +1,5 @@ +x1=linspace(0,1,1000)'; +y1=0*x1+0.1*rand(length(x1),1); + +x2=linspace(0,1,10)'; +y2=1*x2; diff --git a/lecture_16/lecture_16.ipynb b/lecture_16/lecture_16.ipynb new file mode 100644 index 0000000..7ab08d2 --- /dev/null +++ b/lecture_16/lecture_16.ipynb @@ -0,0 +1,21219 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 171, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![question 1](q1.png)\n", + "\n", + "![question 2](q2.png)\n", + "\n", + "### Project Ideas so far\n", + "\n", + "- Nothing yet...probably something heat transfer related\n", + "\n", + "- Modeling Propulsion or Propagation of Sound Waves\n", + "\n", + "- Low Thrust Orbital Transfer\n", + "\n", + "- Tracking motion of a satellite entering orbit until impact\n", + "\n", + "- What ever you think is best.\n", + "\n", + "- You had heat transfer project as an option; that sounded cool\n", + "\n", + "- Heat transfer through a pipe\n", + "\n", + "- I would prefer to do something with beam/plate mechanics or vibrations than a heat transfer or thermo problem\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Questions from you:\n", + "\n", + "- Is attempting to divide by zero an acceptable project idea?\n", + "\n", + "- Would it be alright if we worked in a group of 4?\n", + "\n", + "- What are acceptable project topics?\n", + "\n", + "- How do the exams look? \n", + "\n", + "- Is there no pdf for the lecture today?\n", + "\n", + "- Thank you for making the formatted lectures available!\n", + "\n", + "- did you do anything cool over spring break?\n", + "\n", + "- Could we have a group of 4? We don't want to have to choose which one of us is on their own.\n", + "\n", + "- In HW 5 should there be 4 vectors as an input?\n", + "\n", + "- Would it be possible for me to join a group of 3? I seem to be the odd man out in two 3 member groups that my friends are in." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Statistics and Curve-Fitting\n", + "## Linear Regression\n", + "\n", + "Often, we have a model with empirical parameters. (e.g. Young's modulus, Poisson's ratio, drag coefficient, coefficient of restitution, spring constant)\n", + "\n", + "Experimental measurements are prone to a number of stochastic (random) factors:\n", + "\n", + "- Environmental noise\n", + " \n", + "- Measurement Uncertainty\n", + " \n", + "- Factors not accounted in model (e.g. 2D effects of 1D approximation)\n", + "\n", + "These can lead to **noise** (lack of precision) and **bias** (lack of accuracy)\n", + "\n", + "Consider a piece of glass being stretched. \n", + "\n", + "![movie of stretching glass in microtensile machine](sgs_strain.gif)\n", + "\n", + "It is clear that a straight line is a \"good\" fit, but how good and what line?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Statistics\n", + "\n", + "How do we describe *precision* and *accuracy*?\n", + "\n", + "- mean\n", + "\n", + "- standard deviation\n", + "\n", + "Take our class dart problem\n" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\ty position (cm)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx position (cm)\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_22a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_23a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_24a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_25a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_26a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_27a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_28a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_29a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_30a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_31a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_32a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_33a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_34a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_35a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_36a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_37a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_38a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_39a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_40a\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "darts=dlmread('compiled_data.csv',',');\n", + "x_darts=darts(:,1).*cosd(darts(:,2));\n", + "y_darts=darts(:,1).*sind(darts(:,2));\n", + "\n", + "colormap(colorcube(length(darts(:,3))))\n", + "\n", + "scatter(x_darts, y_darts, [], darts(:,3))\n", + "xlabel('x position (cm)')\n", + "ylabel('y position (cm)')" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mu_x = 0.90447\r\n" + ] + } + ], + "source": [ + "mu_x=mean(x_darts)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "s_x = 4.2747\r\n" + ] + } + ], + "source": [ + "s_x=std(x_darts)" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mu_y = 0.88450\r\n" + ] + } + ], + "source": [ + "mu_y=mean(y_darts)" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "s_y = 4.6834\r\n" + ] + } + ], + "source": [ + "s_y=std(y_darts)" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_22a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_23a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_24a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_25a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_26a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_27a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_28a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_29a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_30a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_31a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_32a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_33a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_34a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_35a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_36a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_37a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_38a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_39a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_40a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_41a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_42a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_43a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_44a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_45a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_46a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_47a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_48a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_49a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_50a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_51a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_52a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_53a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_54a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_55a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_56a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_57a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_58a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_59a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_60a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_61a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hist(x_darts,30,100)" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.05\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\trelative counts\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx position (cm)\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_22a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_23a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_24a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_25a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_26a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_27a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_28a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_29a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_30a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_31a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_32a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_33a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_34a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_35a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_36a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_37a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_38a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_39a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_40a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_41a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_42a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_43a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_44a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_45a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_46a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_47a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_48a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_49a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_50a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_51a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_52a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_53a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_54a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_55a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_56a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_57a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_58a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_59a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_60a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_61a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_62a\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_63a\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_64a\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x_vals=linspace(-15,20,30);\n", + "hist(x_darts,x_vals,1);\n", + "[histFreq, histXout] = hist(x_darts, 30);\n", + "binWidth = histXout(2)-histXout(1);\n", + "bar(histXout, histFreq/binWidth/sum(histFreq));\n", + "pdfnorm = @(x) 1/sqrt(2*s_x^2*pi).*exp(-(x-mu_x).^2/2/s_x^2);\n", + "%cdfnorm = @(x) 1/2*(1+erf((x-mu_x)./sqrt(2*s_x^2)));\n", + "%hist(x_darts,x_vals,trapz(x,f))%,cdfnorm(max(x_darts))/2)\n", + "hold on;\n", + "plot(x_vals,pdfnorm(x_vals))\n", + "n=2; % n=1, 68% confidence, n=2, 95% confidence, n=3, 99% conf\n", + " plot([mu_x+n*s_x,mu_x+n*s_x],[0,0.1],'r-')\n", + " plot([mu_x-n*s_x,mu_x-n*s_x],[0,0.1],'r-')\n", + "\n", + "xlabel('x position (cm)')\n", + "ylabel('relative counts')" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.05\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\trelative counts\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tx position (cm)\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_22a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_23a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_24a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_25a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_26a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_27a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_28a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_29a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_30a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_31a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_32a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_33a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_34a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_35a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_36a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_37a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_38a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_39a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_40a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_41a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_42a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_43a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_44a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_45a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_46a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_47a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_48a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_49a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_50a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_51a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_52a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_53a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_54a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_55a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_56a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_57a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_58a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_59a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_60a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_61a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_62a\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_63a\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_64a\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "y_vals=linspace(-15,20,30);\n", + "hist(y_darts,y_vals,1);\n", + "[histFreq, histXout] = hist(y_darts, 30);\n", + "binWidth = histXout(2)-histXout(1);\n", + "bar(histXout, histFreq/binWidth/sum(histFreq));\n", + "pdfnorm = @(x) 1/sqrt(2*s_y^2*pi).*exp(-(x-mu_y).^2/2/s_y^2);\n", + "%cdfnorm = @(x) 1/2*(1+erf((x-mu_x)./sqrt(2*s_x^2)));\n", + "%hist(x_darts,x_vals,trapz(x,f))%,cdfnorm(max(x_darts))/2)\n", + "hold on;\n", + "plot(y_vals,pdfnorm(y_vals))\n", + "n=2; % n=1, 68% confidence, n=2, 95% confidence, n=3, 99% conf\n", + " plot([mu_y+n*s_y,mu_y+n*s_y],[0,0.1],'r-')\n", + " plot([mu_y-n*s_y,mu_y-n*s_y],[0,0.1],'r-')\n", + "\n", + "xlabel('x position (cm)')\n", + "ylabel('relative counts')" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\texperimental CDF\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\texperimental CDF\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tNormal CDF\n", + "\n", + "\t\n", + "\t\tNormal CDF\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x_exp=empirical_cdf(x_vals,x_darts);\n", + "plot(x_vals,x_exp)\n", + "hold on;\n", + "plot(x_vals,normcdf(x_vals,mu_x,s_x),'k-')\n", + "legend('experimental CDF','Normal CDF','Location','SouthEast')" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.6\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.8\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tgnuplot_plot_1a\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tx position (cm)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\ty position (cm)\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% plot the distribution in x- and y-directions\n", + "gauss2d = @(x,y) exp(-((x-mu_x).^2/2/s_x^2+(y-mu_y).^2/2/s_y^2));\n", + "\n", + "x=linspace(-20,20,31);\n", + "y=linspace(-20,20,31);\n", + "scatter3(x_darts, y_darts,ones(length(x_darts),1))\n", + "xlabel('x position (cm)')\n", + "ylabel('y position (cm)')\n", + "hold on\n", + "[X,Y]=meshgrid(x,y);\n", + "view([1,1,1])\n", + "\n", + "surf(X,Y,gauss2d(X,Y))" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t-5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t5\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t15\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.6\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t0.8\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tgnuplot_plot_1a\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tx position (cm)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\ty position (cm)\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "gauss2d = @(x,y) exp(-((x-0).^2/2/1^2+(y-0).^2/2/5^2));\n", + "\n", + "x=linspace(-20,20,71);\n", + "y=linspace(-20,20,31);\n", + "scatter3(x_darts, y_darts,ones(length(x_darts),1))\n", + "xlabel('x position (cm)')\n", + "ylabel('y position (cm)')\n", + "hold on\n", + "[X,Y]=meshgrid(x,y);\n", + "view([1,1,1])\n", + "\n", + "surf(X,Y,gauss2d(X,Y))" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-100\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t200\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t300\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t400\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hist(darts(:,2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Monte Carlo Simulations\n", + "\n", + "Monte Carlo models use random numbers to either understand statistics or generate a solution. \n", + "\n", + "### Example 1:\n", + "#### Calculate $\\pi$ with random numbers. \n", + "\n", + "Assuming we can actually generate random numbers (a topic of philosophical and heated debates) we can populate a unit square with random points and determine the ratio of points inside and outside of a circle.\n", + "\n", + "![Unit circle and unit square](MonteCarloPi.gif)\n", + "\n", + "![1/4 Unit circle and 1/4 unit square](MonteCarloPi_rand.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ratio of the area of the circle to the square is:\n", + "\n", + "$\\frac{\\pi r^{2}}{4r^{2}}=\\frac{\\pi}{4}$\n", + "\n", + "So if we know the fraction of random points that are within the unit circle, then we can calculate $\\pi$\n", + "\n", + "(number of points in circle)/(total number of points)=$\\pi/4$" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function our_pi=montecarlopi(N)\n", + " % Create random x-y-coordinates\n", + "\n", + " x=rand(N,1);\n", + " y=rand(N,1);\n", + " R=sqrt(x.^2+y.^2); % compute radius\n", + " num_in_circle=sum(R<1);\n", + " total_num_pts =length(R);\n", + " our_pi = 4*num_in_circle/total_num_pts;\n", + "end\n" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mean value for pi = 3.138880\n", + "standard deviation is 0.009956\n" + ] + } + ], + "source": [ + "test_pi=zeros(10,1);\n", + "for i=1:10\n", + " test_pi(i)=montecarlopi(10000);\n", + "end\n", + "fprintf('mean value for pi = %f\\n',mean(test_pi))\n", + "fprintf('standard deviation is %f',std(test_pi))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 2\n", + "#### Determine uncertainty in failure stress based on geometry\n", + "\n", + "In this example, we know that a steel bar will break under 940 MPa tensile stress. The bar is 1 mm by 2 mm with a tolerance of 1 %. What is the range of tensile loads that can be safely applied to the beam?\n", + "\n", + "$\\sigma_{UTS}=\\frac{F_{fail}}{wh}$\n", + "\n", + "$F_{fail}=\\sigma_{UTS}wh$" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.01\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.02\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.03\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.04\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.05\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.06\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.07\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.08\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.84\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.85\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.86\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.87\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.88\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.89\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.9\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.91\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.92\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\trelative counts\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tfailure load (kN)\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_22a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_23a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_24a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_25a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_26a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_27a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_28a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_29a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_30a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_31a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_32a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_33a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_34a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_35a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_36a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_37a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_38a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_39a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_40a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_41a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N=1000;\n", + "r=rand(N,1);\n", + "wmean=1; % in mm\n", + "wmin=wmean-wmean*0.01;\n", + "wmax=wmean+wmean*0.01;\n", + "hmean=2; % in mm\n", + "hmin=hmean-hmean*0.01;\n", + "hmax=hmean+hmean*0.01;\n", + "\n", + "wrand=wmin+(wmax-wmin)*r;\n", + "hrand=hmin+(hmax-hmin)*r;\n", + "\n", + "uts=940; % in N/mm^2=MPa\n", + "\n", + "Ffail=uts.*wrand.*hrand*1e-3; % force in kN\n", + "hist(Ffail,20,1)\n", + "xlabel('failure load (kN)')\n", + "ylabel('relative counts')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Normally, the tolerance is not a maximum/minimum specification, but instead a normal distribution that describes the standard deviation, or the 68 % confidence interval.\n", + "\n", + "So instead, we should generate normally distributed dimensions." + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.02\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.04\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.06\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.08\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.12\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.14\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.16\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.75\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.85\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.9\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.95\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\trelative counts\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tfailure load (kN)\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_3a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_4a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_5a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_6a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_7a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_8a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_9a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_10a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_11a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_12a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_13a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_14a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_15a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_16a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_17a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_18a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_19a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_20a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_21a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_22a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_23a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_24a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_25a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_26a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_27a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_28a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_29a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_30a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_31a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_32a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_33a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_34a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_35a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_36a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_37a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_38a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_39a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_40a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_41a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N=1000;\n", + "wmean=1; % in mm\n", + "wstd=wmean*0.01; % standard deviation in mm\n", + "hmean=2; % in mm\n", + "hstd=hmean*0.01; % standard deviation in mm\n", + "\n", + "\n", + "wrand=normrnd(wmean,wstd,[N,1]);\n", + "hrand=normrnd(hmean,hstd,[N,1]);\n", + "uts=940; % in N/mm^2=MPa\n", + "\n", + "Ffail=uts.*wrand.*hrand*1e-3; % force in kN\n", + "hist(Ffail,20,1)\n", + "xlabel('failure load (kN)')\n", + "ylabel('relative counts')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linear Least Squares Regression\n", + "\n", + "When approximating a set of data as a polynomial, there will always be error introduced (except in 2 cases). \n", + "\n", + "For a straight line, the actual data points, $y_{i}$ as a function of the independent variable, $x_{i}$, is:\n", + "\n", + "$y_{i}=a_{0}+a_{1}x_{i}+e_{i}$\n", + "\n", + "where $a_{0}$ and $a_{1}$ are the intercept and slope of the line and $e_{i}$ is the error between the approximate function and the recorded data point. \n", + "\n", + "We make the following assumptions in this analysis:\n", + "\n", + "1. Each x has a fixed value; it is not random and is known without error.\n", + "\n", + "2. The y values are independent random variables and all have the same variance.\n", + "\n", + "3. The y values for a given x must be normally distributed.\n", + "\n", + "The total error is \n", + "\n", + "$\\sum_{i=1}^{n}e_{i}=\\sum_{i=1}^{n}(y_{i}-a_{0}-a_{1}x_{i})$\n", + "\n", + "we don't care about the sign though. One approach has been demonstrated to provide a unique solution is minimizing the sum of squares error or\n", + "\n", + "$S_{r}=\\sum_{i=1}^{n}e_{i}^{2}=\\sum_{i=1}^{n}(y_{i}-a_{0}-a_{1}x_{i})^{2}$\n", + "\n", + "Where, $S_{r}$ is the sum of squares error (SSE). \n", + "\n", + "$\\frac{\\partial S_{r}}{\\partial a_{0}}=-2\\sum(y_{i}-a_{0}-a_{1}x_{i})$\n", + "\n", + "$\\frac{\\partial S_{r}}{\\partial a_{1}}=-2\\sum(y_{i}-a_{0}-a_{1}x_{i})x_{i}$\n", + "\n", + "The minimum $S_{r}$ occurrs when the partial derivatives are 0. \n", + "\n", + "$\\sum y_{i}= \\sum a_{0}+\\sum a_{1}x_{i}$\n", + "\n", + "$\\sum x_{i}y_{i}= \\sum a_{0}x_{i}+\\sum a_{1}x_{i}^{2}$\n", + "\n", + "$\\left[\\begin{array}{c}\n", + "\\sum y_{i}\\\\\n", + "\\sum x_{i}y_{i}\\end{array}\\right]=\n", + "\\left[\\begin{array}{cc}\n", + "n & \\sum x_{i}\\\\\n", + "\\sum x_{i} & \\sum x_{i}^{2}\\end{array}\\right]\n", + "\\left[\\begin{array}{c}\n", + "a_{0}\\\\\n", + "a_{1}\\end{array}\\right]$\n", + "\n", + "\n", + "$b=Ax$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example \n", + "\n", + "Find drag coefficient with best-fit line to experimental data\n", + "\n", + "|i | v (m/s) | F (N) |\n", + "|---|---|---|\n", + "|1 | 10 | 25 |\n", + "|2 | 20 | 70 |\n", + "|3 | 30 | 380|\n", + "|4 | 40 | 550|\n", + "|5 | 50 | 610|\n", + "|6 | 60 | 1220|\n", + "|7 | 70 | 830 |\n", + "|8 |80 | 1450|" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a =\n", + "\n", + " -234.286\n", + " 19.470\n", + "\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1000\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1500\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2000\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t70\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\tvelocity (m/s)\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\tForce (N)\n", + "\t\n", + "\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "drag_data=[...\n", + "1 , 10 , 25 \n", + "2 , 20 , 70 \n", + "3 , 30 , 380\n", + "4 , 40 , 550\n", + "5 , 50 , 610\n", + "6 , 60 , 1220\n", + "7 , 70 , 830 \n", + "8 ,80 , 1450];\n", + "x=drag_data(:,2);\n", + "y=drag_data(:,3);\n", + "\n", + "b=[sum(y);sum(x.*y)];\n", + "A=[length(x),sum(x);\n", + " sum(x), sum(x.^2)];\n", + " \n", + "a=A\\b\n", + "\n", + "plot(x,y,'o',x,a(1)+a(2)*x)\n", + "xlabel('Force (N)')\n", + "ylabel('velocity (m/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How do we know its a \"good\" fit? \n", + "\n", + "Can compare the sum of squares error to the total sum of squares of the dependent variable (here F). \n", + "\n", + "$S_{r}=\\sum(y_{i}-a_{0}-a_{1}x_{i})^{2}$\n", + "\n", + "$S_{t}=\\sum(y_{i}-\\bar{y})^{2}$\n", + "\n", + "Then, we can calculate the *coefficient of determination*, $r^{2}$ or *correlation coefficient*, r. \n", + "\n", + "$r^{2}=\\frac{S_{t}-S_{r}}{S_{t}}$\n", + "\n", + "This represents the relative improvement of assuming that y is a function of x (if the x-values are not random and the y-values are random)\n", + "\n", + "For further information regarding statistical work on regression, look at \n", + "[NIST Statistics Handbook](http://www.itl.nist.gov/div898/handbook/pmd/section4/pmd44.htm)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "St = 1.8083e+06\n", + "St = 1.8083e+06\n" + ] + } + ], + "source": [ + "Sr=sum((y-a(1)-a(2)*x).^2);\n", + "St=std(y)^2*(length(y)-1)\n", + "St=sum((y-mean(y)).^2)" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "r2 = 0.88049\n", + "r = 0.93834\n" + ] + } + ], + "source": [ + "r2=(St-Sr)/St\n", + "r=sqrt(r2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Limiting cases \n", + "\n", + "#### $r^{2}=0$ $S_{r}=S{t}$\n", + "\n", + "#### $r^{2}=1$ $S_{r}=0$" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tCase 1\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tCase 1\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tCase 2\n", + "\n", + "\t\n", + "\t\tCase 2\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "gen_examples\n", + "plot(x1(1:50:end),y1(1:50:end),'s',x2,y2,'o')\n", + "legend('Case 1','Case 2','Location','NorthWest')" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a1 =\n", + "\n", + " 0.0497269\n", + " 0.0016818\n", + "\n", + "a2 =\n", + "\n", + " 0\n", + " 1\n", + "\n", + "Sr1 = 0.82607\n", + "St1 = 0.82631\n", + "coefficient of determination in Case 1 is 0.000286\n", + "Sr2 = 0\n", + "St2 = 1.0185\n", + "coefficient of determination in Case 2 is 1.000000\n" + ] + } + ], + "source": [ + "b1=[sum(y1);sum(x1.*y1)];\n", + "A1=[length(x1),sum(x1);\n", + " sum(x1), sum(x1.^2)];\n", + " \n", + "a1=A1\\b1\n", + "\n", + "b2=[sum(y2);sum(x2.*y2)];\n", + "A2=[length(x2),sum(x2);\n", + " sum(x2), sum(x2.^2)];\n", + " \n", + "a2=A2\\b2\n", + "\n", + "Sr1=sum((y1-a1(1)-a1(2)*x1).^2)\n", + "St1=sum((y1-mean(y1)).^2)\n", + "fprintf('coefficient of determination in Case 1 is %f\\n',1-Sr1/St1)\n", + "\n", + "Sr2=sum((y2-a2(1)-a2(2)*x2).^2)\n", + "St2=sum((y2-mean(y2)).^2)\n", + "\n", + "fprintf('coefficient of determination in Case 2 is %f\\n',1-Sr2/St2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_16/octave-workspace b/lecture_16/octave-workspace new file mode 100644 index 0000000..8c437bb Binary files /dev/null and b/lecture_16/octave-workspace differ diff --git a/lecture_16/q1.png b/lecture_16/q1.png new file mode 100644 index 0000000..f086fc8 Binary files /dev/null and b/lecture_16/q1.png differ diff --git a/lecture_16/q2.png b/lecture_16/q2.png new file mode 100644 index 0000000..6f91d19 Binary files /dev/null and b/lecture_16/q2.png differ diff --git a/lecture_16/sgs_strain.avi b/lecture_16/sgs_strain.avi new file mode 100755 index 0000000..625d925 Binary files /dev/null and b/lecture_16/sgs_strain.avi differ diff --git a/lecture_16/sgs_strain.gif b/lecture_16/sgs_strain.gif new file mode 100644 index 0000000..8fa0038 Binary files /dev/null and b/lecture_16/sgs_strain.gif differ diff --git a/linear_algebra/LU_suggested.html b/linear_algebra/LU_suggested.html new file mode 100644 index 0000000..f1998e1 --- /dev/null +++ b/linear_algebra/LU_suggested.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +

Linear Algebra Review

+

(Gauss Elimination) Suggested problems

+

No due date

+
    +
  1. Determine the lower (L) and upper (U) triangular matrices with LU-decomposition for the following matrices:

    +
      +
    1. \(A=\left[ \begin{array}{cc} 1 & 3 \\ 2 & 1 \end{array} \right]\)

    2. +
    3. \(A=\left[ \begin{array}{cc} 1 & 1 \\ 2 & 3 \end{array} \right]\)

    4. +
    5. \(A=\left[ \begin{array}{cc} 1 & 1 \\ 2 & -2 \end{array} \right]\)

    6. +
    7. \(A=\left[ \begin{array}{ccc} 1 & 3 & 1 \\ -4 & -9 & 2 \\ 0 & 3 & 6\end{array} \right]\)

    8. +
    9. \(A=\left[ \begin{array}{ccc} 1 & 3 & 1 \\ -4 & -9 & 2 \\ 0 & 3 & 6\end{array} \right]\)

    10. +
    11. \(A=\left[ \begin{array}{ccc} 1 & 3 & -5 \\ 1 & 4 & -8 \\ -3 & -7 & 9\end{array} \right]\)

    12. +
    13. \(A=\left[ \begin{array}{ccc} 1 & 2 & -1 \\ 2 & 2 & 2 \\ 1 & -1 & 2\end{array} \right]\)

    14. +
  2. +
  3. Calculate the determinant of A from 1a-g.

  4. +
  5. Determine the Cholesky factorization, C, of the following matrices, where

    +

    \(C_{ii}=\sqrt{a_{ii}-\sum_{k=1}^{i-1}C_{ki}^{2}}\)

    +

    \(C_{ij}=\frac{a_{ij}-\sum_{k=1}^{i-1}C_{ki}C_{kj}}{C_{ii}}\).

    +
      +
    1. A=\(\left[ \begin{array}{cc} 3 & 2 \\ 2 & 1 \end{array} \right]\)

    2. +
    3. A=\(\left[ \begin{array}{cc} 10 & 5 \\ 5 & 20 \end{array} \right]\)

    4. +
    5. A=\(\left[ \begin{array}{ccc} 10 & -10 & 20 \\ -10 & 20 & 10 \\ 20 & 10 & 30 \end{array} \right]\)

    6. +
    7. A=\(\left[ \begin{array}{cccc} 21 & -1 & 0 & 0 \\ -1 & 21 & -1 & 0 \\ 0 & -1 & 21 & -1 \\ 0 & 0 & -1 & 1 \end{array} \right]\)

    8. +
  6. +
  7. Verify that \(C^{T}C=A\) for 3a-d

  8. +
+ + diff --git a/linear_algebra/LU_suggested.md b/linear_algebra/LU_suggested.md new file mode 100644 index 0000000..f809813 --- /dev/null +++ b/linear_algebra/LU_suggested.md @@ -0,0 +1,68 @@ +# Linear Algebra Review +## (Gauss Elimination) Suggested problems +### No due date + +1. Determine the lower (L) and upper (U) triangular matrices with LU-decomposition for the +following matrices: + + a. $A=\left[ \begin{array}{cc} + 1 & 3 \\ + 2 & 1 \end{array} \right]$ + + a. $A=\left[ \begin{array}{cc} + 1 & 1 \\ + 2 & 3 \end{array} \right]$ + + a. $A=\left[ \begin{array}{cc} + 1 & 1 \\ + 2 & -2 \end{array} \right]$ + + b. $A=\left[ \begin{array}{ccc} + 1 & 3 & 1 \\ + -4 & -9 & 2 \\ + 0 & 3 & 6\end{array} \right]$ + + c. $A=\left[ \begin{array}{ccc} + 1 & 3 & 1 \\ + -4 & -9 & 2 \\ + 0 & 3 & 6\end{array} \right]$ + + d. $A=\left[ \begin{array}{ccc} + 1 & 3 & -5 \\ + 1 & 4 & -8 \\ + -3 & -7 & 9\end{array} \right]$ + + d. $A=\left[ \begin{array}{ccc} + 1 & 2 & -1 \\ + 2 & 2 & 2 \\ + 1 & -1 & 2\end{array} \right]$ + +2. Calculate the determinant of A from 1a-g. + +3. Determine the Cholesky factorization, C, of the following matrices, where + + $C_{ii}=\sqrt{a_{ii}-\sum_{k=1}^{i-1}C_{ki}^{2}}$ + + $C_{ij}=\frac{a_{ij}-\sum_{k=1}^{i-1}C_{ki}C_{kj}}{C_{ii}}$. + + a. A=$\left[ \begin{array}{cc} + 3 & 2 \\ + 2 & 1 \end{array} \right]$ + + a. A=$\left[ \begin{array}{cc} + 10 & 5 \\ + 5 & 20 \end{array} \right]$ + + a. A=$\left[ \begin{array}{ccc} + 10 & -10 & 20 \\ + -10 & 20 & 10 \\ + 20 & 10 & 30 \end{array} \right]$ + + a. A=$\left[ \begin{array}{cccc} + 21 & -1 & 0 & 0 \\ + -1 & 21 & -1 & 0 \\ + 0 & -1 & 21 & -1 \\ + 0 & 0 & -1 & 1 \end{array} \right]$ + +4. Verify that $C^{T}C=A$ for 3a-d + diff --git a/linear_algebra/LU_suggested.pdf b/linear_algebra/LU_suggested.pdf new file mode 100644 index 0000000..9b04276 Binary files /dev/null and b/linear_algebra/LU_suggested.pdf differ diff --git a/octave-workspace b/octave-workspace new file mode 100644 index 0000000..5ddb511 Binary files /dev/null and b/octave-workspace differ