{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "adafc981-15f1-42e0-a75f-96d981728b48",
   "metadata": {},
   "source": [
    "# 3. Numerical Methods in MATLAB"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1797ce2-ed6e-44e7-8503-5643a334d875",
   "metadata": {},
   "source": [
    "DING Minjie, Spring 2025"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2bcd357-6b75-476c-a940-00c9f4f9b58e",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "58b996bb-2639-45fd-a4c4-c7cd88415d59",
   "metadata": {},
   "source": [
    "In this tutorial, we will discuss basics and numerical methods in MATLAB, including:\n",
    "\n",
    "* 1. Preparation for MATLAB\n",
    "        * Set Working Directory\n",
    "        * Clear Work\n",
    "* 2. Basic of MATLAB\n",
    "        * Data Type\n",
    "        * Logical Operations\n",
    "        * Define Functions\n",
    "* 3. Graph\n",
    "* 4. Matrix Manipulation and Calculation\n",
    "* 5. Solve Nonlinear Equations/Root Finding\n",
    "* 6. Numerical Optimization\n",
    "* 7. Function Approximation with Interpolation\n",
    "* 8. Discretization\n",
    "* 9. Simulation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5248b545-4889-4cee-b3bf-b7ff15c4b039",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7197d430-db6f-40ac-ba56-d2dbfd97f183",
   "metadata": {},
   "source": [
    "# 1.1 Set Working Directory"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e021186b-f6f0-43fb-8787-57c208283595",
   "metadata": {},
   "source": [
    "We use \"pwd\" to get current working directory, and use \"cd\" to change working directory. \n",
    "\n",
    "When we work on MATLAB, we can also select working directory by right click with the mouse.\n",
    "\n",
    "If we use MATLAB as kernel on other platform, these two code instructions are indispensable.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "76375d7e-ba1d-4202-835c-6f4cc304c43e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 'C:\\Users\\ading\\A_TA_Notes'</pre></body></html>"
      ],
      "text/plain": [
       "ans = 'C:\\Users\\ading\\A_TA_Notes'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cd\"C:\\Users\\ading\\A_TA_Notes\"\n",
    "pwd"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90f0b8a2-123d-49c8-a72a-b46c5f8587a0",
   "metadata": {},
   "source": [
    "# 1.2 Clear Work"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4adaebc8-91eb-4fb9-9afb-96f3debcf95f",
   "metadata": {},
   "source": [
    "Before starting the work, we need to clean up the previous work."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d7a546f0-925d-4f70-8364-c2ed2d5e3daa",
   "metadata": {},
   "outputs": [],
   "source": [
    "clear all;  % Clears all variables from the workspace\n",
    "close all;  % Closes all open figure windows\n",
    "clc;        % Clears the Command Window"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0a857ec-89f1-4751-a2e5-6eded7dac5aa",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31c10c52-e98e-4dd0-a3d6-55c6d3f840ec",
   "metadata": {},
   "source": [
    "# 2.1 Data Type"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb5120c2-a88a-42c1-a14f-b237752dd6c6",
   "metadata": {},
   "source": [
    "Here are three concepts used to store and manipulate data: Variable, Matrix, and Structure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6cda03a5-37ea-4c13-93f6-737739d05eca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>name = 'Alice'</pre></body></html>"
      ],
      "text/plain": [
       "name = 'Alice'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Variable\n",
    "x = 10;          % Numeric variable\n",
    "name = 'Alice';  % String variable\n",
    "name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5a735a03-f233-4320-b326-9496374c0bb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>matrix_y = 2×3 double\n",
       "     1     2     3\n",
       "     4     5     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "matrix_y = 2×3 double\n",
       "     1     2     3\n",
       "     4     5     6\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 6</pre></body></html>"
      ],
      "text/plain": [
       "ans = 6"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 2×1 double\n",
       "     3\n",
       "     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = 2×1 double\n",
       "     3\n",
       "     6\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 1×3 double\n",
       "     4     5     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = 1×3 double\n",
       "     4     5     6\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 4×1 double\n",
       "     4\n",
       "     5\n",
       "     3\n",
       "     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = 4×1 double\n",
       "     4\n",
       "     5\n",
       "     3\n",
       "     6\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>matrix_y = 2×3 double\n",
       "     1     2     0\n",
       "     0     0     0\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "matrix_y = 2×3 double\n",
       "     1     2     0\n",
       "     0     0     0\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>matrix_y = 3×2 double\n",
       "     0     0\n",
       "     0     0\n",
       "     0     0\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "matrix_y = 3×2 double\n",
       "     0     0\n",
       "     0     0\n",
       "     0     0\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>matrix_y = 3×2 double\n",
       "     1     1\n",
       "     1     1\n",
       "     1     1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "matrix_y = 3×2 double\n",
       "     1     1\n",
       "     1     1\n",
       "     1     1\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>matrix_y = 3×2 double\n",
       "   NaN   NaN\n",
       "   NaN   NaN\n",
       "   NaN   NaN\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "matrix_y = 3×2 double\n",
       "   NaN   NaN\n",
       "   NaN   NaN\n",
       "   NaN   NaN\n"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Matrix(Vector)\n",
    "matrix_y=[1,2,3; 4,5,6] % Create a 2x3 matrix\n",
    "\n",
    "matrix_y(2,3)           % Access the element in the 2nd row, 3rd column\n",
    "matrix_y(:,3)           % Access all elements in the 3rd column\n",
    "matrix_y(2,:)           % Access all elements in the 2nd row\n",
    "\n",
    "matrix_y(matrix_y>=3)   % Retrieve elements greater than or equal to 3\n",
    "matrix_y(matrix_y>=3)=0 % Set elements greater than or equal to 3 to 0\n",
    "\n",
    "matrix_y=zeros(3,2)     % Create a 3x2 matrix filled with zeros\n",
    "matrix_y=ones(3,2)      % Create a 3x2 matrix filled with ones\n",
    "matrix_y=NaN(3,2)       % Create a 3x2 matrix filled with NaN (Not a Number)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0ddfafdc-4d8d-4e74-869c-cc12b9892128",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>person = 包含以下字段的 struct:\n",
       "      name: 'Alice'\n",
       "       age: 30\n",
       "    height: 5.5000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "person = 包含以下字段的 struct:\n",
       "      name: 'Alice'\n",
       "       age: 30\n",
       "    height: 5.5000\n"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Structure\n",
    "person.name = 'Alice';  % Field 'name'\n",
    "person.age = 30;        % Field 'age'\n",
    "person.height = 5.5;    % Field 'height'\n",
    "person"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91405655-af36-4123-8e93-2370755e51bd",
   "metadata": {},
   "source": [
    "# 2.2 Logical Operations"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c40ef0f1-b25b-48a0-8914-0922917c71de",
   "metadata": {},
   "source": [
    "The following code demonstrates various logical and relational operations in MATLAB."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "60e59bf8-0138-4c54-bc5e-370515756ef9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   1\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   0\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   0\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   0\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   0\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   1\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   0\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   0\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   1\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   1\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = logical\n",
       "   1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = logical\n",
       "   1\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 2x2 logical 数组\n",
       "   0   1\n",
       "   1   0\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = 2x2 logical 数组\n",
       "   0   1\n",
       "   1   0\n"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2 >= 1         % Comparison: Is 2 greater than or equal to 1?\n",
    "2 < 1          % Comparison: Is 2 less than 1?\n",
    "\n",
    "1 & 0          % Logical AND operation: 1 & 0\n",
    "1 | 0          % Logical OR operation: 1 | 0\n",
    "~ 1            % Logical NOT operation: ~1\n",
    "~ 0            % Logical NOT operation: ~0\n",
    "1 ~= 2         % Comparison: Is 1 not equal to 2?\n",
    "0 | 2          % Logical OR operation with numbers: 0 | 2\n",
    "\n",
    "[1,2;3,4]>=2 & [1,2;3,4]<4\n",
    "% Element-wise comparison with logical AND"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7fc6dde-6fb6-4eb8-9767-c9d614ae2f06",
   "metadata": {},
   "source": [
    "# 2.3 Define Your Own Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45b4f9d6-b200-4b0f-a61e-a82d1d4597c0",
   "metadata": {},
   "source": [
    "We can define our own function in three ways:\n",
    "\n",
    "1. Use @ operator\n",
    "2. Define local function\n",
    "3. Define function file outside of current file"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04f13cf2-6332-4db8-b311-392fd168e20d",
   "metadata": {},
   "source": [
    "## Use @ operator"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9666df7-2750-4910-a0fe-1b64bc243452",
   "metadata": {},
   "source": [
    "Define a simple function directly.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f76b780c-ac5f-45a4-9bfa-d7be4b790bb3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 4</pre></body></html>"
      ],
      "text/plain": [
       "ans = 4"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_square_1 = @(x) (x-1)^2;\n",
    "f_square_1(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "241483de-e281-47d8-96a3-012b7111bbd6",
   "metadata": {},
   "source": [
    "## Define local function"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64dac77e-b17b-419d-a3e6-2f72acef2d48",
   "metadata": {},
   "source": [
    "These are functions defined within a script. They are only accessible from within the file in which they are defined.\n",
    "\n",
    "Ideal for organizing code within a single file, especially when the local function is only relevant to that file.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8bdd43bf-7332-4bef-928c-423504563efa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 4</pre></body></html>"
      ],
      "text/plain": [
       "ans = 4"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function output = f_square_2(x)    \n",
    "    output = (x - 1)^2;\n",
    "end\n",
    "\n",
    "f_square_2(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75db6917-37b6-4606-8daf-ecd627c58f25",
   "metadata": {},
   "source": [
    "Another example with a parameter. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "94a997b0-58b6-4d10-bf1f-051cc76d6fe1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 4</pre></body></html>"
      ],
      "text/plain": [
       "ans = 4"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function [ output ] = f_square_2(x, c)\n",
    "    output = (x-c)^2;\n",
    "end\n",
    "\n",
    "f_square_2(3,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "defe78be-3575-423d-8331-8f75079a0ad4",
   "metadata": {},
   "source": [
    "## Define function file"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10888936-a818-442a-9140-6e671cdd3c5f",
   "metadata": {},
   "source": [
    "This method genreate a separate .m files stored in current working directory. \n",
    "\n",
    "The filename must match the function name.\n",
    "\n",
    "In Jupyter, we use \"__%%file name.m__\" to generate a separate .m files.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "99dde69d-4939-456d-bb9a-4f22ef128cfb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>File f_square_3.m created successfully.</pre></body></html>"
      ],
      "text/plain": [
       "File f_square_3.m created successfully."
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%file f_square_3.m\n",
    "\n",
    "function output = f_square_3(x)    \n",
    "    output = (x - 1)^2;\n",
    "end\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e3315f14-9722-4814-810d-a63a33a8b8ca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 4</pre></body></html>"
      ],
      "text/plain": [
       "ans = 4"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_square_3(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "740fca19-62b7-4365-aa7a-51885fb53454",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19f4d2f5-3619-4408-81b0-7cd172b2af69",
   "metadata": {},
   "source": [
    "# 3. Graphing"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b91d101f-648e-4710-8237-7dab94999d70",
   "metadata": {},
   "source": [
    "________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3c2f2f7-434d-4d37-aba8-e53d6fb67797",
   "metadata": {},
   "source": [
    "Here is a simple example. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "fbc9ccfd-be0b-4121-a777-ea3b8f0f0b96",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAJ2CAIAAADqgjXlAAAAB3RJTUUH6QEdCDgX+NMunAAAIABJREFUeJzt3XtcVHXewPGf4whIaKFrhJgLXhhSU9Ndr3lp87ampBWtppL6WJpsmdpFs0xdo8y7Ba6ulpZkpqZ5IbynJoLmk5EZiIuWoQ8hWl65OfP8cXZHGGEcYGbO75zzeb/2j50zM/BlwpkPvzPnTDWbzSYAAACgfSa1BwAAAIB7EHYAAAA6QdgBAADoBGEHAACgE4QdAACAThB2AAAAOkHYAQAA6ARhBwAAoBOEHQAAgE4QdgAAADpB2AEAAOgEYQcAAKAThB0AAIBOEHYAAAA6QdgBAADoBGEHAACgE4QdAACATpjVHgAA4HHHjx//5JNP8vLyTp8+HRUVNXLkSLUnAuARhB0A6FxxcfHKlStnzZolhMjNzW3YsGGdOnUGDBig9lwA3K+azWZTewYAWpWTk7N3796TJ0/WqlWrVatWXbt2VbZv2bKlX79+3pkhPz//559//uWXX/7yl7947rukp6dv3brVx8fn6aefrl27tue+kSfs3LmzZ8+e27Zt69WrlxDi0Ucf9fHxWbt2rdpzAXA/3mMHoDJycnKGDh0aERFx8ODBZs2ahYWFJScnP/7449nZ2TNmzFi1apV3xkhOTu7bt6/FYnn00Uc9911mz549cuTIJ598ctmyZX379vXcN/KQrl27TpkypVWrVsrF4uLiGjVqqDsSAA9hxQ5AhX3zzTd9+/aNiIhYv359vXr17Ntzc3Ojo6O3b98eFRX16aefem2exx9/fPv27ZcvX/bEF09OTu7cufOPP/4YHh4eGhpav379lJQUT3wj78jJyWnQoMGePXsefPBBtWcB4H68xw5AxZw7d65v375169ZNTEwMCAgoeVW9evUWLlx43333eXmkO+64w3NffM2aNQEBAREREUKI06dPe+4bece4cePeeecdqg7QK8IOQMWMGTMmNzf3gw8+cKg6RXh4+LBhw/Lz870/mIdcvXrV19dX+f8mk7bfvjJz5sxevXpxSCygY9p+kgLgZcePH9+0aZOfn5+TYyOeeOIJb44EF61atapNmzZK1e3bt0/tcQB4BCt2ACpg3bp1QogePXo4uU337t2PHTum/P+0tLTFixdfvXr1/vvvHzVq1DvvvJOdnR0dHa0cnimESElJWbt2rclkunjx4t133z1x4sS6deuWvO/169ebNGny4osvLlmy5LvvvisuLu7Spcvo0aPLXDxLSkravHnz5cuX77///ueff97Pz8+VH2rZsmWHDh2yWq0mk6ldu3ajRo1Stp85c2bbtm0nTpwoKChYtmyZ8qM1adKkvK8TFxd3+PDhP//5zzExMfaNaWlpv/76q/NHzC0+//zzxMTEGjVqjBs3LiIi4r333vvuu+8aNmz4yiuv+Pn5JSYmfv/99z179ty5c6fVat23b5/9EGYAumIDAJc99thjQoghQ4a4ePtffvll/fr1devWHTBgwJgxYy5cuHDXXXfVrl1buTY1NdXPz++7775TLk6YMCE4OPiXX36x33f16tXBwcEtWrQYPHhwRkaGzWb79ddfO3fu/Oc///nChQv27zJs2LCAgIAFCxbs3bvXZrMVFRU1a9bsiSeeuO14BQUFvXr1mjBhwo0bN2w2240bN8aMGdO3b9+ioiLle23durVXr15ms3nr1q1bt261z3arRYsW7d27t6ioSAihjKFo0aJFv379yrzLjRs3ClyjzOPEm2+++eWXX9pstm+//fauu+6aMGHC3r17f/jhh/Dw8DfeeOPHH390aNzVq1ff9sEBoEWs2AGoAOXNcy6uhAkhQkJCHnvssZUrV+7evfuLL74IDAycNm1aYWGhcu2xY8fy8/MXL168ePFiIcSsWbPef//9mTNnKhdDQkIGDRq0Zs2apKSkAwcOKGePq1ev3po1a0JDQ0eOHLlhw4aSg/n5+SmrUGazuWPHjh9++KGyCOdkvFdffTUrK2vbtm3KRZPJtHjx4kaNGk2bNm3mzJn16tXr27fv559/bjKZnJ/lpLCw8MSJE88///yhQ4eEEBcuXFC2X7ly5dixY48//niZ95o5c2ZqaqorD2OTJk0WLlxY3rXJycl169bt06ePEKJly5a//fZbbm5u165d33nnnRMnTrRo0SIiIuL69euufCMAWkfYAagAJekqemyEyWTKz8/v3r27EGLcuHH27U8++aQQ4q9//aty0Ww216pV6//+7/8c7n7HHXeUPCdwSEhI3759N27cmJ6erhysKoQoLi7+n//5H/ttmjdvbrVai4uLfXx8ypvq0qVLixYtGjJkiMP2Tp06zZ49+/XXX3e9X7dv3z5w4EAhxOrVq/38/OwVuH37diFEeYegTp061cWv79z69etnz56t/H+lLJVPlXjllVfGjh2rudMpA6gKDp4AUAHKSW7z8vIctufn5z/yyCONGjWq9l8PPvig/Z12Qojg4OBbv1pAQMDIkSMvX748d+7c6OjomTNnFhQUuDKGsjKnRIzCx8fHbDaXvHjbL7J7926r1XrrqVL8/PwKCwt3797tyiSKfv36/eUvf7FarQkJCYMHD7Z/9z179pjNZo9+JIYQYu7cufaFyYMHDwohunXrJoQwmUxUHWA0hB2AClDW2L766iur1Vpyu5+f39atW7OysuLj44UQTzzxxNdff92iRQv7Dco85uDixYuDBg36y1/+EhYWtmLFitdff91+YhHnlAMsiouLq/KzKOuO5e2rte8vdt3u3btzc3MHDRpk35KcnNylSxdvniRl3759zZo1sx+AAsBo2BULoAIiIiIGDBiwcePGTz/99Kmnnrr1BoGBgUKI6tWru/LVoqKiDh48mJWVFRQU5HDViRMnwsPDy7vj4cOHhRB/+MMfKjD6LerXry+EuPXzKq5cuWK/tkK2bt1qNpvtB8AWFhYePXr0jTfeKO/2M2bMcPE9duHh4fPnz7/tzaxWa1JS0rBhw+xbDh061K5dO1e+BQB9IOwAVMw///nPAwcOTJo0qXfv3reuDLm+0JWfn79r167HHnusZNXZd8XOnDnzo48+Ku++27dvDwkJcXIuPVd07do1PDz8+++/d9j+7bfftmjRohI9dO7cuZCQEPv6XFJSktVqdfIZD6+//rqLi463PQSkefPm0dHRKSkp+fn59j2/Vqt10aJFXvvcXgAyYFcsgIoJCgrauXNnYWFhjx49srKySl5VXFyckJBw1113OdylsLDw3LlzDhvNZrO/v3/JD+natGlT3bp1f//9d1H6wNu8vLzExET7xbi4uNOnT69YscKeO8XFxVarteTeYeVdgFevXnX+s3z88cfp6enKIQ6Kffv2nT17NiEhoeQPpRyH4fxLCSEaNWqkrPYp95o3b57zN9iZTCYf15R8+6CDpKSkd999NykpSQiRkJDg4+Pj7++vXDV16tQXXnjhtmMD0BNW7ABUWMuWLX/44YeJEyfed999gwcP7tOnT0BAwKlTpzZs2DBp0iQfHx/7KtHu3buff/7548ePCyFq1arVvXv3zZs3K1eZzebNmzePGjUqKipq8ODB6enp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"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_vec=(-2:0.01:2);\n",
    "y_vec1=(x_vec).^2;\n",
    "y_vec2=(x_vec-0.5).^2;\n",
    "\n",
    "figure(1)\n",
    "plot(x_vec, y_vec1, '-r', x_vec, y_vec2, '--b')     \n",
    "% solid red line (-r) and dashed blue line (--b)\n",
    "title('Graph of $y=x^{2}$','Interpreter','latex')\n",
    "% use LaTeX interpreter for rendering the title text\n",
    "xlabel('x')\n",
    "ylabel('y')\n",
    "legend('y=x^{2}','y=(x-0.5)^{2}') % adds a legend to the plot\n",
    "xlim([-3, 3]);                    % Set the x-axis range\n",
    "\n",
    "% saveas(gcf,'figure_1.pdf') "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7f895fb-7efd-438c-b6fa-4a205e09381e",
   "metadata": {},
   "source": [
    "We can also put subplots together."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f2a32754-c9eb-4b04-9aa5-2e6c5dc6dc48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_vec=(-1:0.01:1);\n",
    "y_vec=x_vec.^2;\n",
    "\n",
    "figure(2)\n",
    "subplot(2,2,1)\n",
    "plot(x_vec,y_vec)\n",
    "title('1st Graph of $y=x^{2}$','Interpreter','latex')\n",
    "xlabel('x')\n",
    "ylabel('y')\n",
    "legend('y=x^{2}')\n",
    "\n",
    "subplot(2,2,2)\n",
    "plot(x_vec,y_vec)\n",
    "title('2nd Graph of $y=x^{2}$','Interpreter','latex')\n",
    "xlabel('x')\n",
    "ylabel('y')\n",
    "legend('y=x^{2}')\n",
    "\n",
    "subplot(2,2,3)\n",
    "plot(x_vec,y_vec)\n",
    "title('3rd Graph of $y=x^{2}$','Interpreter','latex')\n",
    "xlabel('x')\n",
    "ylabel('y')\n",
    "legend('y=x^{2}')\n",
    "\n",
    "subplot(2,2,4)\n",
    "plot(x_vec,y_vec)\n",
    "title('4th Graph of $y=x^{2}$','Interpreter','latex')\n",
    "xlabel('x')\n",
    "ylabel('y')\n",
    "legend('y=x^{2}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60be0d6a-b4d4-4bb9-8e0b-b209e206a270",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb0426b4-2e6b-4a2f-9c8a-57aafd69899c",
   "metadata": {},
   "source": [
    "# 4. Matrix Manipulation and Calculation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e6c3f16-a3fa-4582-92ef-e38415331490",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c948a6f5-ed68-4b9b-b646-5a5c15464042",
   "metadata": {},
   "source": [
    "We need to manipulate matrix. And here are some commonly used instructions."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09fd25df-247d-48bd-a55c-2d637cb42b2a",
   "metadata": {},
   "source": [
    "| Function   | Purpose                            | Input Type         | Output Type           | Use Case                                      |\n",
    "|------------|-----------------------------------|---------------------|-----------------------|-----------------------------------------------|\n",
    "| `ndgrid`   | Generates N-dimensional grids     | Vectors             | Coordinate matrices    | Evaluating functions over multi-dimensional grids |\n",
    "| `kron`     | Computes Kronecker product        | Matrices            | Larger matrix          | Constructing larger matrices                  |\n",
    "| `reshape`  | Reshapes arrays                   | Array, new size     | Reshaped array         | Reorganizing data for processing              |\n",
    "| `permute`  | Reorders dimensions of an array   | Array, new order    | Permuted array         | Changing orientation of multi-dimensional arrays |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6e355e7-9603-4c82-859a-0599730a2e23",
   "metadata": {},
   "source": [
    "## ndgrid"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03f8ebcd-2455-467e-bc4f-1db4d3c55589",
   "metadata": {},
   "source": [
    "Input: N vectors representing the grid points along each dimension.\n",
    "\n",
    "Output: N matrices containing the coordinates of the grid points.\n",
    "\n",
    "Use Case: Useful for evaluating functions over a grid in multiple dimensions, such as surface plots or mesh grids."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "2eedc55c-3eb2-44bc-896b-ff2b7695b407",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 5×3 double\n",
       "     1     1     1\n",
       "     2     2     2\n",
       "     3     3     3\n",
       "     4     4     4\n",
       "     5     5     5\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x = 5×3 double\n",
       "     1     1     1\n",
       "     2     2     2\n",
       "     3     3     3\n",
       "     4     4     4\n",
       "     5     5     5\n"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>y = 5×3 double\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "y = 5×3 double\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "     1     2     3\n",
       "     1     2     3\n"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = 1:5;\n",
    "b = 1:3;\n",
    "[x, y] = ndgrid(a, b);\n",
    "x\n",
    "y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1edc981-3667-4643-9a6c-3162dd407669",
   "metadata": {},
   "source": [
    "## kron"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5028b531-89ed-470a-8dfc-c6d626d4d473",
   "metadata": {},
   "source": [
    "Useful for constructing larger matrices from smaller ones, particularly in linear algebra and systems theory.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8c7b5990-6644-42b2-bce6-6d24f3908622",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>A = 2×2 double\n",
       "     1     2\n",
       "     3     4\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "A = 2×2 double\n",
       "     1     2\n",
       "     3     4\n"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>B = 2×2 double\n",
       "     0     5\n",
       "     6     7\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "B = 2×2 double\n",
       "     0     5\n",
       "     6     7\n"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>C = 4×4 double\n",
       "     0     5     0    10\n",
       "     6     7    12    14\n",
       "     0    15     0    20\n",
       "    18    21    24    28\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "C = 4×4 double\n",
       "     0     5     0    10\n",
       "     6     7    12    14\n",
       "     0    15     0    20\n",
       "    18    21    24    28\n"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = [1 2; 3 4];\n",
    "B = [0 5; 6 7];\n",
    "C = kron(A, B);\n",
    "A\n",
    "B\n",
    "C"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43792dfa-e167-419d-8ef3-bb33ba7e6d6f",
   "metadata": {},
   "source": [
    "## reshape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a854f9ff-f97b-4404-8430-e8deb91bfe21",
   "metadata": {},
   "source": [
    "Output a new array with the specified dimensions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fcdf7774-ac29-4df5-a4f8-f54c7ef809dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>A = 1×6 double\n",
       "     1     2     3     4     5     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "A = 1×6 double\n",
       "     1     2     3     4     5     6\n"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>B = 2×3 double\n",
       "     1     3     5\n",
       "     2     4     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "B = 2×3 double\n",
       "     1     3     5\n",
       "     2     4     6\n"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>C = 2×3 double\n",
       "     1     3     5\n",
       "     2     4     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "C = 2×3 double\n",
       "     1     3     5\n",
       "     2     4     6\n"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>D = 2×3 double\n",
       "     1     3     5\n",
       "     2     4     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "D = 2×3 double\n",
       "     1     3     5\n",
       "     2     4     6\n"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = 1:6;                % A = [1 2 3 4 5 6]\n",
    "B = reshape(A, [2, 3]); % return a matrix with 2 rows and 3 columns\n",
    "C = reshape(A, 2, 3);   % return a matrix with 2 rows and 3 columns\n",
    "D = reshape(A, [], 3);  % return a matrix with 3 columns\n",
    "A\n",
    "B\n",
    "C\n",
    "D"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "366ac858-f2a0-417a-a8c6-5a0d20ac7e83",
   "metadata": {},
   "source": [
    "## permute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "2a829293-3408-4a1b-88f4-ccb6a5468f48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>A = \n",
       "A(:,:,1) =\n",
       "\n",
       "    0.5434    0.4245    0.0047\n",
       "    0.2784    0.8448    0.1216\n",
       "\n",
       "\n",
       "A(:,:,2) =\n",
       "\n",
       "    0.6707    0.1367    0.8913\n",
       "    0.8259    0.5751    0.2092\n",
       "\n",
       "\n",
       "A(:,:,3) =\n",
       "\n",
       "    0.1853    0.2197    0.8117\n",
       "    0.1084    0.9786    0.1719\n",
       "\n",
       "\n",
       "A(:,:,4) =\n",
       "\n",
       "    0.8162    0.4317    0.8176\n",
       "    0.2741    0.9400    0.3361\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "A = \n",
       "A(:,:,1) =\n",
       "\n",
       "    0.5434    0.4245    0.0047\n",
       "    0.2784    0.8448    0.1216\n",
       "\n",
       "\n",
       "A(:,:,2) =\n",
       "\n",
       "    0.6707    0.1367    0.8913\n",
       "    0.8259    0.5751    0.2092\n",
       "\n",
       "\n",
       "A(:,:,3) =\n",
       "\n",
       "    0.1853    0.2197    0.8117\n",
       "    0.1084    0.9786    0.1719\n",
       "\n",
       "\n",
       "A(:,:,4) =\n",
       "\n",
       "    0.8162    0.4317    0.8176\n",
       "    0.2741    0.9400    0.3361\n"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>B = \n",
       "B(:,:,1) =\n",
       "\n",
       "    0.5434    0.2784\n",
       "    0.6707    0.8259\n",
       "    0.1853    0.1084\n",
       "    0.8162    0.2741\n",
       "\n",
       "\n",
       "B(:,:,2) =\n",
       "\n",
       "    0.4245    0.8448\n",
       "    0.1367    0.5751\n",
       "    0.2197    0.9786\n",
       "    0.4317    0.9400\n",
       "\n",
       "\n",
       "B(:,:,3) =\n",
       "\n",
       "    0.0047    0.1216\n",
       "    0.8913    0.2092\n",
       "    0.8117    0.1719\n",
       "    0.8176    0.3361\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "B = \n",
       "B(:,:,1) =\n",
       "\n",
       "    0.5434    0.2784\n",
       "    0.6707    0.8259\n",
       "    0.1853    0.1084\n",
       "    0.8162    0.2741\n",
       "\n",
       "\n",
       "B(:,:,2) =\n",
       "\n",
       "    0.4245    0.8448\n",
       "    0.1367    0.5751\n",
       "    0.2197    0.9786\n",
       "    0.4317    0.9400\n",
       "\n",
       "\n",
       "B(:,:,3) =\n",
       "\n",
       "    0.0047    0.1216\n",
       "    0.8913    0.2092\n",
       "    0.8117    0.1719\n",
       "    0.8176    0.3361\n"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng(100)\n",
    "A = rand(2, 3, 4);          % A 3D array\n",
    "B = permute(A, [3, 1, 2]);  \n",
    "% dimension order change from [1,2,3] to [3,1,2]\n",
    "% so (2,3,4) change to (4,2,3)\n",
    "% 2rows*3column*4matrice ==> 4rows*2columns*3matrices\n",
    "A\n",
    "B"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "414ba04f-0048-46a8-9ff7-ece608eaca40",
   "metadata": {},
   "source": [
    "## spdiags"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f58b3083-9920-4668-b83e-5e0f4f649991",
   "metadata": {},
   "source": [
    "The spdiags function in MATLAB is used to create a sparse matrix from the diagonals specified in a given matrix. \n",
    "\n",
    "This is particularly useful when dealing with large matrices that are mostly sparse, as it allows for efficient storage and manipulation.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85cfc01a-3626-432e-b05d-9b22541877df",
   "metadata": {},
   "source": [
    "One of the basic syntax is:\n",
    "\n",
    "    S = spdiags(Bin, d, m, n)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6997173a-464e-4397-8859-8c5ab0861e21",
   "metadata": {},
   "source": [
    "where:\n",
    "\n",
    "    Bin: A matrix where each column represents a diagonal of the resulting sparse matrix.\n",
    "    d: A vector specifying the locations of the diagonals. For example, 0 refers to the main diagonal, 1 refers to the first upper diagonal, -1 refers to the first lower diagonal, and so forth.\n",
    "    m: The number of rows in the resulting sparse matrix.\n",
    "    n: The number of columns in the resulting sparse matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "8da51eb7-511a-457c-94e8-7ee0cd1ce78f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 3×3 double\n",
       "     1     5     0\n",
       "     7     2     6\n",
       "     0     8     3\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = 3×3 double\n",
       "     1     5     0\n",
       "     7     2     6\n",
       "     0     8     3\n"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% Define the diagonals\n",
    "Bin = [1 2 3;   % Main diagonal\n",
    "       4 5 6;   % Upper diagonal\n",
    "       7 8 9];  % Lower diagonal\n",
    "Bin = Bin';\n",
    "\n",
    "% Define the diagonal positions\n",
    "d = [0, 1, -1]; % Main, Upper, and Lower\n",
    "\n",
    "% Define the size of the sparse matrix\n",
    "m = 3; % Number of rows\n",
    "n = 3; % Number of columns\n",
    "\n",
    "% Create the sparse matrix\n",
    "S = spdiags(Bin, d, m, n);\n",
    "\n",
    "% Display the sparse matrix\n",
    "full(S)  % Convert to full matrix for display"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c07b36da-c81b-447e-8a31-d4f9979903c5",
   "metadata": {},
   "source": [
    "The main diagonal (0) contains values [1, 2, 3].\n",
    "\n",
    "The first upper diagonal (1) contains values [4, 5].\n",
    "\n",
    "The first lower diagonal (-1) contains values [7, 8].\n",
    "\n",
    "This results in a sparse matrix where only the specified diagonals are filled, making it memory efficient for large matrices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "3b42b898-f8a3-49ab-9b27-d9ea9606e388",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 3×3 double\n",
       "     1     5     0\n",
       "     0     2     6\n",
       "     0     0     3\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "ans = 3×3 double\n",
       "     1     5     0\n",
       "     0     2     6\n",
       "     0     0     3\n"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Change diagonal position\n",
    "\n",
    "Bin = [1 2 3;   % Main diagonal\n",
    "       4 5 6;   % Upper diagonal\n",
    "       7 8 9];  % Lower diagonal\n",
    "Bin = Bin';\n",
    "\n",
    "% Define the diagonal positions\n",
    "d = [0, 1]; % Main, Upper, and Lower\n",
    "\n",
    "% Define the size of the sparse matrix\n",
    "m = 3; % Number of rows\n",
    "n = 3; % Number of columns\n",
    "\n",
    "% Create the sparse matrix\n",
    "S = spdiags(Bin, d, m, n);\n",
    "\n",
    "% Display the sparse matrix\n",
    "full(S)  % Convert to full matrix for display"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81e8c310-c0b6-40bf-a2d7-0a6a2072ea36",
   "metadata": {},
   "source": [
    "## speye"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9c713fe-3b44-4b24-a19f-5327ac0c2cba",
   "metadata": {},
   "source": [
    "The speye function in MATLAB creates a sparse identity matrix. Sparse matrices are efficient for computations involving large matrices where most of the elements are zero, helping to save memory and speed up calculations.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4478def-6ae7-41b0-a363-e63902f37c2d",
   "metadata": {},
   "source": [
    "speye(n) creates an n×n sparse identity matrix.\n",
    "\n",
    "And identity matrix is a square matrix with ones on the diagonal and zeros elsewhere"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "06492098-b710-4200-b403-6fc4a92eca3a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   (1,1)        1\n",
      "   (2,2)        1\n",
      "   (3,3)        1\n",
      "   (4,4)        1\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>I = 4x4 稀疏 double 矩阵 (4 个非零值)\n",
       "   (1,1)        1\n",
       "   (2,2)        1\n",
       "   (3,3)        1\n",
       "   (4,4)        1\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "I = 4x4 稀疏 double 矩阵 (4 个非零值)\n",
       "   (1,1)        1\n",
       "   (2,2)        1\n",
       "   (3,3)        1\n",
       "   (4,4)        1\n"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% Create a 4x4 sparse identity matrix\n",
    "n = 4;\n",
    "I = speye(n);\n",
    "\n",
    "% Display the matrix\n",
    "disp(I);\n",
    "I"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64687ad1-3cde-4827-b221-6f94f2677f75",
   "metadata": {},
   "source": [
    "## Backslash Operator `\\` (mldivide) and Division Operator `/`"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8eed261c-8643-4c07-a460-b5dddfe1d343",
   "metadata": {},
   "source": [
    "**`mldivide` (Backslash Operator `\\`)**\n",
    "\n",
    "Used to solve linear systems of equations of the form $Ax = b$, where $A$ is a matrix and $b$ is a vector or matrix.\n",
    "\n",
    "The backslash operator computes $x = A \\backslash b$, solving the equation $Ax = b$ for $x$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b299377c-19ab-4e5a-9799-76a66fc68f61",
   "metadata": {},
   "source": [
    "Backslash Operator is high recommended for solving linear system. Division Operator is not preferred."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "79c95bf6-3949-4f49-9762-5aead20bc5f4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>A = 2×2 double\n",
       "     1     2\n",
       "     3     4\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "A = 2×2 double\n",
       "     1     2\n",
       "     3     4\n"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>b = 2×1 double\n",
       "     5\n",
       "     6\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "b = 2×1 double\n",
       "     5\n",
       "     6\n"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 2×1 double\n",
       "   -4.0000\n",
       "    4.5000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x = 2×1 double\n",
       "   -4.0000\n",
       "    4.5000\n"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = [1 2; 3 4];\n",
    "b = [5; 6];\n",
    "x = A \\ b;  % Solves Ax = b\n",
    "A\n",
    "b\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ca7cda6-5bc0-42e9-9eea-be20a38e96f5",
   "metadata": {},
   "source": [
    "**Division Operator `/`**\n",
    "\n",
    "Used for right division, which computes the solution to the equation $xA = b$ or equivalently $x = b / A$.\n",
    "\n",
    "The division operator computes $x = b / A$. This is not a direct solution to a linear system but transforms the problem to the left side."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "ecb0788b-d1bd-4a7f-984b-effabbbc29a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>A = 2×2 double\n",
       "     1     2\n",
       "     3     4\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "A = 2×2 double\n",
       "     1     2\n",
       "     3     4\n"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>b = 2×2 double\n",
       "     5     6\n",
       "     7     8\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "b = 2×2 double\n",
       "     5     6\n",
       "     7     8\n"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 2×2 double\n",
       "   -1.0000    2.0000\n",
       "   -2.0000    3.0000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x = 2×2 double\n",
       "   -1.0000    2.0000\n",
       "   -2.0000    3.0000\n"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = [1 2; 3 4];\n",
    "b = [5 6; 7 8];\n",
    "x = b / A;  % Solves xA = b\n",
    "A\n",
    "b\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34db08ff-abbd-4fb4-8b21-88cb17b84872",
   "metadata": {},
   "source": [
    "## diff"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72bd588f-d3d0-4949-81d7-71b2435913e8",
   "metadata": {},
   "source": [
    "Y = diff(X,n,dim) is the nth difference calculated along the dimension specified by dim. The dim input is a positive integer scalar."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "2064aa99-8875-43f5-abd4-889a2d27b830",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>X = 3×3 double\n",
       "     1     3     5\n",
       "     7    11    13\n",
       "    17    19    23\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "X = 3×3 double\n",
       "     1     3     5\n",
       "     7    11    13\n",
       "    17    19    23\n"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>Y1 = 2×3 double\n",
       "     6     8     8\n",
       "    10     8    10\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "Y1 = 2×3 double\n",
       "     6     8     8\n",
       "    10     8    10\n"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>Y2 = 3×2 double\n",
       "     2     2\n",
       "     4     2\n",
       "     2     4\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "Y2 = 3×2 double\n",
       "     2     2\n",
       "     4     2\n",
       "     2     4\n"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = [1 3 5;7 11 13;17 19 23];\n",
    "Y1 = diff(X,1,1);\n",
    "Y2 = diff(X,1,2);\n",
    "X\n",
    "Y1\n",
    "Y2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac6208d8-9b6c-4cac-a866-eb38ea9dc0d5",
   "metadata": {},
   "source": [
    "## repmat"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4da4c8ed-c541-443b-83c1-fa1e3f9708c6",
   "metadata": {},
   "source": [
    "repmat is a function in MATLAB that stands for \"repeat matrix.\" It is used to replicate and tile an array (matrix) a specified number of times along each dimension"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "9fca01ea-6e80-4671-a427-1dd496e70a6a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>A = 3×3 double\n",
       "   100     0     0\n",
       "     0   200     0\n",
       "     0     0   300\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "A = 3×3 double\n",
       "   100     0     0\n",
       "     0   200     0\n",
       "     0     0   300\n"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>B = 6×9 double\n",
       "   100     0     0   100     0     0   100     0     0\n",
       "     0   200     0     0   200     0     0   200     0\n",
       "     0     0   300     0     0   300     0     0   300\n",
       "   100     0     0   100     0     0   100     0     0\n",
       "     0   200     0     0   200     0     0   200     0\n",
       "     0     0   300     0     0   300     0     0   300\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "B = 6×9 double\n",
       "   100     0     0   100     0     0   100     0     0\n",
       "     0   200     0     0   200     0     0   200     0\n",
       "     0     0   300     0     0   300     0     0   300\n",
       "   100     0     0   100     0     0   100     0     0\n",
       "     0   200     0     0   200     0     0   200     0\n",
       "     0     0   300     0     0   300     0     0   300\n"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = diag([100 200 300])\n",
    "B = repmat(A,2,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05cc3962-4736-487c-8079-177d0b27bb4a",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e74ee9f-73c2-453d-9608-856b2c12be55",
   "metadata": {},
   "source": [
    "# 5. Solve Nonlinear Equations"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6b5367a-a7f8-4d25-82ee-83ec954c6145",
   "metadata": {},
   "source": [
    "_____________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b838f13f-562d-4ed7-b022-3849cf687e44",
   "metadata": {},
   "source": [
    "## fsolve"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4df2e2ab-02e8-4349-8615-f7647e25baea",
   "metadata": {},
   "source": [
    "fsolve is used to solve systems of nonlinear equations. It can handle multiple variables.\n",
    "\n",
    "\n",
    "The basicsyntaxr is:\n",
    "\n",
    "    x = fsolve(fun,x0,options)\n",
    "\n",
    "    [x,fval] = fsolve(___)\n",
    "\n",
    "It means: solve nonlinear equation fun=0, start from x=x0. \n",
    "\n",
    "x is solution. fval is value of function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "5c401ed5-068c-4027-9a63-f8a0a0b72a43",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "方程已解。\n",
      "\n",
      "fsolve 已完成，因为按照函数容差的值衡量，\n",
      "函数值向量接近于零，并且按照梯度的值衡量，\n",
      "问题似乎为正则问题。\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_zero_1 = 0.0078</pre></body></html>"
      ],
      "text/plain": [
       "x_zero_1 = 0.0078"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>fval_1 = 6.1035e-05</pre></body></html>"
      ],
      "text/plain": [
       "fval_1 = 6.1035e-05"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "方程已解。\n",
      "\n",
      "fsolve 已完成，因为按照函数容差的值衡量，\n",
      "函数值向量接近于零，并且按照梯度的值衡量，\n",
      "问题似乎为正则问题。\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_zero_2 = 9.7657e-04</pre></body></html>"
      ],
      "text/plain": [
       "x_zero_2 = 9.7657e-04"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f=@(x) x^2;\n",
    "\n",
    "x0=0.5;                                % Initial Guess;\n",
    "[x_zero_1, fval_1] = fsolve(f,x0);     % Finding the Root\n",
    "x_zero_1                               % Show the result\n",
    "fval_1                                 % Show the result\n",
    "\n",
    "options = optimset('Tolfun',1e-8);     % Setting Options for fsolve\n",
    "% The option Tolfun specifies the tolerance to 1e-8.\n",
    "x_zero_2 = fsolve(f,x0,options);       % Finding the Root\n",
    "x_zero_2                               % Get a more precise result  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20fa4fbe-c027-4dd4-bd50-a3682f5b982b",
   "metadata": {},
   "source": [
    "And an example of system of equations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "da2bd390-5af4-47d6-9720-8e0f96704c2c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "方程已解。\n",
      "\n",
      "fsolve 已完成，因为按照函数容差的值衡量，\n",
      "函数值向量接近于零，并且按照梯度的值衡量，\n",
      "问题似乎为正则问题。\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>solution = 2×1 double\n",
       "    2.0000\n",
       "    2.0000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "solution = 2×1 double\n",
       "    2.0000\n",
       "    2.0000\n"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F = @(x) [x(1)^2 + x(2)^2 - 8; x(1) - x(2)]; % System of equations\n",
    "initial_guess = [1; 1];\n",
    "solution = fsolve(F, initial_guess);         % Solving the system\n",
    "solution                                     % Show result"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "02dbe6d4-6a15-4e05-884b-8c6c5345b325",
   "metadata": {},
   "source": [
    "## fzero"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cd3dc77-d2a0-4546-a9e2-3cd71aa01b13",
   "metadata": {},
   "source": [
    "fzero is similar to fsolve, but it is used specifically for finding roots of single-variable functions.\n",
    "\n",
    "Another key difference is that fzero is suitable for functions that are continuous and have a sign changeie signs).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed5b14f3-0890-4964-a330-5820efdf3f98",
   "metadata": {},
   "source": [
    "Here is an example where fzero fails, since there is no sign change."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a4b1c58c-5f72-4772-bd16-3262a096b60c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正在退出 fzero: 将中止搜索包含符号变化的区间\n",
      " 因为在搜索期间遇到 NaN 或 Inf 函数值。\n",
      "(-1.7162e+154 处的函数值为 Inf。)\n",
      "请检查函数或使用其他起始值重试。\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_zero_3 = NaN</pre></body></html>"
      ],
      "text/plain": [
       "x_zero_3 = NaN"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f=@(x) x^2;\n",
    "x0=0.5;   \n",
    "x_zero_3 = fzero(f,x0);\n",
    "x_zero_3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ddb28171-665a-433c-ba02-6791d6c108f8",
   "metadata": {},
   "source": [
    "While fsolve works in this case. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "2ac628c1-f8db-4b88-a18e-d7c28b657f2e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "方程已解。\n",
      "\n",
      "fsolve 已完成，因为按照函数容差的值衡量，\n",
      "函数值向量接近于零，并且按照梯度的值衡量，\n",
      "问题似乎为正则问题。\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_zero_3 = 0.0078</pre></body></html>"
      ],
      "text/plain": [
       "x_zero_3 = 0.0078"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f=@(x) x^2;\n",
    "x0=0.5;   \n",
    "x_zero_3 = fsolve(f,x0);\n",
    "x_zero_3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62afc75d-97b4-47a0-95e2-1b5bf0f230a2",
   "metadata": {},
   "source": [
    "fzero works if there is sign change."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "4b826a88-0c9e-4f01-b7f8-a0291e81f2cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>x0 = 1×2 double\n",
       "   -0.5000    0.5000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x0 = 1×2 double\n",
       "   -0.5000    0.5000\n"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_zero_4 = 0</pre></body></html>"
      ],
      "text/plain": [
       "x_zero_4 = 0"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_zero_5 = 1</pre></body></html>"
      ],
      "text/plain": [
       "x_zero_5 = 1"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f2=@(x) x^3;\n",
    "x0 = [-0.5 0.5]              % set initial guess a interval \n",
    "% x0=0.5;                    % we can also guess a value\n",
    "x_zero_4 = fzero(f2,x0);\n",
    "x_zero_4\n",
    "\n",
    "f3=@(x) x^2-1;\n",
    "x0=0.5;   \n",
    "x_zero_5 = fzero(f3,x0);\n",
    "x_zero_5"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "9d62d1ad-5abf-46a6-9bb9-c5d7ee02cb3f",
   "metadata": {},
   "source": [
    "When to Use fzero Over fsolve?\n",
    "\n",
    "Use fzero when:    \n",
    "\n",
    "You are dealing with a single-variable nonlinear equato    n.\n",
    "\n",
    "You want faster performance for simple root-finding a    sks.\n",
    "\n",
    "You can easily identify an interval where the function changes sign.\n",
    "ign."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5dd0903-ec78-45c8-a913-0e869ee2018a",
   "metadata": {},
   "source": [
    "## bisection and golden section"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce876c0d-db15-415b-bdd9-701329fcb62d",
   "metadata": {},
   "source": [
    "The bisection method and the golden section search are both used for finding roots of functions, particularly when the function is unimodal (has a single peak or trough) within a specified interval. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31c37ab7-445b-4774-a8c5-e4947054bab9",
   "metadata": {},
   "source": [
    "There is no direct built-in function for the bisection nor golden section method. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56d71665-69bf-4c50-ae89-915717e6354d",
   "metadata": {},
   "source": [
    "There are two possible solution.\n",
    "\n",
    "    First, we write function files. Many professors provide their version, and we can use them.\n",
    "\n",
    "    Second, some built-in functions based on idea of bisection and golden section. We can use them as a close substitute. \n",
    "\n",
    "    For example, \"fzero\" algorithm, created by T. Dekker, uses a combination of bisection, secant, and inverse quadratic interpolation methods.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c9698ab-953e-4c47-bf71-d3b9a783a351",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ed01e75-fc45-4f8c-be02-b043a8ff06dc",
   "metadata": {},
   "source": [
    "# 6. Numerical Optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a307aa1a-bd4d-4c80-a9e0-6f52e74a3479",
   "metadata": {},
   "source": [
    "_____________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6dde10e-5d00-4f72-a687-17e920058b02",
   "metadata": {},
   "source": [
    "Some commonly used optimization methods include:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d6caf97-540e-488e-962e-a35f613385fe",
   "metadata": {},
   "source": [
    "fminunc\n",
    "\n",
    "    Purpose: finds the unconstrained local mininum of a function.\n",
    "    Usage: suitable for unconstrained optimization problems.\n",
    "\n",
    "fminsearch\n",
    "\n",
    "    Purpose: finds the unconstrained local mininum of a function.\n",
    "    Usage: suitable for unconstrained optimization problems without the need for gradient information.\n",
    "\n",
    "fminbnd\n",
    "\n",
    "    Purpose: finds the unconstrained local minimum of a single-variable function within a specified interval. \n",
    "    Usage: Ideal for simple optimization problems where the function is one-dimensional and bounded.\n",
    "\n",
    "fmincon\n",
    "\n",
    "    Purpose: finds the minimum of a constrained nonlinear multivariable function.\n",
    "    Usage: suitable for optimization problems with constraints, both equality and inequality."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad658f96-6962-4cfd-a0ed-39e683205b82",
   "metadata": {},
   "source": [
    "When we solve maximum A problem, that is to find the minimum of negative A."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd17fdbd-2724-4810-9487-56a69acb64a6",
   "metadata": {},
   "source": [
    "## max"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4b89f55-f0d7-4c7b-8f5f-64b611179f9f",
   "metadata": {},
   "source": [
    "The max function in MATLAB is used to find the maximum value in an array or between two arrays. It can operate on vectors, matrices, or multi-dimensional arrays"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9325fd51-e931-40b4-8bfe-14a98a5dd038",
   "metadata": {},
   "source": [
    "The basic syntax is:\n",
    "\n",
    "    [M,I] = max(___)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee39a66a-21ef-4e1c-9b93-26b5bc37c905",
   "metadata": {},
   "source": [
    "It returns the index into the operating dimension that corresponds to the first occurrence of the maximum value of A.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "45794ad0-3682-497d-bbe7-7b1b2a69963a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     9\n",
      "\n",
      "     4\n",
      "\n"
     ]
    }
   ],
   "source": [
    "A = [3, 5, 2, 9, 9, 1];  % Define a vector\n",
    "[M, I] = max(A);         % Find the maximum value and its index\n",
    "disp(M);                 % Display the maximum value\n",
    "disp(I);                 % Display the index of the first occurrence"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "add50435-7518-40da-a73b-0a32e0aa025d",
   "metadata": {},
   "source": [
    "## fminunc"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4a3b900-cbbd-4e49-9145-d7a1ad60fab0",
   "metadata": {},
   "source": [
    "The basic syntax is:\n",
    "\n",
    "    x = fminunc(fun,x0,options)\n",
    "    [x,fval] = fminunc(___)\n",
    "\n",
    "which means find minimum of _fun_, start from _x0_,\n",
    "\n",
    "and get solution _x_ and value _fval_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "3c816522-05b4-46a8-9db6-d03b81e219ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "找到局部最小值。\n",
      "\n",
      "优化已完成，因为梯度大小小于\n",
      "最优性容差的值。\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x_min_1 = 0</pre></body></html>"
      ],
      "text/plain": [
       "x_min_1 = 0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>f_min_1 = 0</pre></body></html>"
      ],
      "text/plain": [
       "f_min_1 = 0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% fminunc\n",
    "f = @(x) x^2;                       % Objective function\n",
    "x0 = 2;                             % Initial guess\n",
    "[x_min_1 f_min_1] = fminunc(f,x0);\n",
    "x_min_1 \n",
    "f_min_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "b8d08a3f-1d69-41c3-a68b-4573b7b02250",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "找到局部最小值。\n",
      "\n",
      "优化已完成，因为梯度大小小于\n",
      "最优性容差的值。\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 1×2 double\n",
       "    1.0000    2.0000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x = 1×2 double\n",
       "    1.0000    2.0000\n"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>fval = 4.4409e-16</pre></body></html>"
      ],
      "text/plain": [
       "fval = 4.4409e-16"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% fminunc\n",
    "f = @(x) (x(1)-1)^2 + (x(2)-2)^2; % Objective function\n",
    "x0 = [0, 0];                      % Initial guess\n",
    "[x, fval] = fminunc(f, x0);\n",
    "x\n",
    "fval"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed9b7626-fd50-4d15-8c64-2c5e3804267c",
   "metadata": {},
   "source": [
    "## fminsearch"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0d6419b-1abd-4e16-a90b-fa81cfaf4ee7",
   "metadata": {},
   "source": [
    "The basic syntax is:\n",
    "\n",
    "    x = fminsearch(fun,x0,options)\n",
    "    [x,fval] = fminsearch(___)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "46b83344-80e8-4ae7-a689-eefbb9afea1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 1×2 double\n",
       "    1.0000    2.0000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x = 1×2 double\n",
       "    1.0000    2.0000\n"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>fval = 1.8692e-09</pre></body></html>"
      ],
      "text/plain": [
       "fval = 1.8692e-09"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% fminsearch\n",
    "f = @(x) (x(1)-1)^2 + (x(2)-2)^2; % Objective function\n",
    "x0 = [0, 0];                      % Initial guess\n",
    "[x, fval] = fminsearch(f, x0);\n",
    "x\n",
    "fval"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dcc8acbf-252c-493f-bd81-4f0175b3e1f3",
   "metadata": {},
   "source": [
    "## fminbnd"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0239be2-940a-49ba-b481-a828a07243e3",
   "metadata": {},
   "source": [
    "The basic syntax is:\n",
    "\n",
    "    x = fminbnd(fun,x1,x2,options)\n",
    "    [x,fval] = fminbnd(___)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "665453b2-56fc-4a5e-a317-36b4c2486138",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 4.7124</pre></body></html>"
      ],
      "text/plain": [
       "x = 4.7124"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>fval = -1.0000</pre></body></html>"
      ],
      "text/plain": [
       "fval = -1.0000"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% Find the point of the minimum value of the \n",
    "% function sin(x) in the range 0<x<2π\n",
    "\n",
    "fun = @sin;\n",
    "x1 = 0;\n",
    "x2 = 2*pi;\n",
    "[x,fval] = fminbnd(fun,x1,x2);\n",
    "x               % x = 3/2*pi\n",
    "fval            % fval = -1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a23bbf68-2eff-4c61-9ca6-44f7bad7ea29",
   "metadata": {},
   "source": [
    "## fmincon"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "d36b9074-d957-40e8-95b0-20a8faa7fa14",
   "metadata": {},
   "source": [
    "The basic syntax is:\n",
    "\n",
    "    x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)\n",
    "    [x,fval] = fmincon(___)\n",
    "\n",
    "where:\n",
    "\n",
    "    A, b: linear inequality constraints\n",
    "    Aeq, beq: linear equality constraints\n",
    "    lb, ub: lower bounds and upper bounds\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b773fced-f53e-42e4-b348-a9f71ffe1586",
   "metadata": {},
   "source": [
    "We want to minimize the following objective function:\n",
    "\n",
    "$$\n",
    "f(\\mathbf{x}) = (x_1 - 1)^2 + (x_2 - 2)^2\n",
    "$$\n",
    "\n",
    "where $\\mathbf{x} = \\begin{bmatrix} x_1 \\\\ x_2 \\end{bmatriraints\n",
    "\n",
    "The optimization is subject to the following constraints:\n",
    "\n",
    "1. **Inequality Constraint:**\n",
    "   $$\n",
    "   x_1 + x_2 \\leq 2\n",
    "   $$\n",
    "   \n",
    "2. **Equality Constraint:**\n",
    "   $$\n",
    "   x_1 - x_2 = 0\n",
    "   $$   \n",
    "\n",
    "There are no specific bounds for the variables:\n",
    "\n",
    "$$\n",
    "-\\infty < x_1, x_2 < \\infty\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "54a3e99c-f7c4-40ad-ac59-9606b4dea17d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "找到满足约束的局部最小值。\n",
      "\n",
      "优化已完成，因为目标函数沿\n",
      "可行方向在最优性容差值范围内呈现非递减，\n",
      "并且在约束容差值范围内满足约束。\n",
      "\n",
      "Optimal solution:\n",
      "    1.0000    1.0000\n",
      "\n",
      "Objective function value at optimal solution:\n",
      "    1.0000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "f = @(x) (x(1)-1)^2 + (x(2)-2)^2;  % Objective function\n",
    "x0 = [0, 0];                       % Initial guess\n",
    "\n",
    "% Inequality constraints: x1 + x2 <= 2\n",
    "A = [1, 1];                        % Coefficients for the inequality\n",
    "b = 2;                             % Right-hand side of the inequality\n",
    "\n",
    "% Equality constraints: x1 - x2 = 0\n",
    "Aeq = [1, -1];                     % Coefficients for the equality\n",
    "beq = 0;                           % Right-hand side of the equality\n",
    "\n",
    "% Lower bounds\n",
    "lb = [-Inf, -Inf]; % No lower bounds\n",
    "\n",
    "% Upper bounds\n",
    "ub = [Inf, Inf];   % No upper bounds\n",
    "\n",
    "% Call fmincon\n",
    "[x, fval] = fmincon(f, x0, A, b, Aeq, beq, lb, ub);\n",
    "\n",
    "% Display results\n",
    "disp('Optimal solution:');\n",
    "disp(x);\n",
    "disp('Objective function value at optimal solution:');\n",
    "disp(fval);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b8b7737-f93e-424d-9848-c8fba95ce5b4",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4eaaa273-19e0-43d5-99df-4adf6247db56",
   "metadata": {},
   "source": [
    "# 7. Function Approximation with Interpolation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd2b2171-fef9-4b9b-a459-c630db10d8b8",
   "metadata": {},
   "source": [
    "________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "01746b6b-c10b-461a-8736-51339264567a",
   "metadata": {},
   "source": [
    "## interp1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1c9d95f-d8bf-48da-b770-39a4160a138f",
   "metadata": {},
   "source": [
    "interp1 is a function used for one-dimensional interpolation of data points. \n",
    "\n",
    "It allows us to estimate the values of a function at specific query points based on known data points. \n",
    "\n",
    "This is particularly useful in scenarios when you want to estimate values between known data points."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c634db6-2865-4826-bf06-7bddb88a98bb",
   "metadata": {},
   "source": [
    "The basic syntax is:\n",
    "\n",
    "    vq = interp1(x, v, xq, method)\n",
    "\n",
    "Where:\n",
    "\n",
    "    x is a vector of known n x-coordinates (the __points__ at which the values are know).\n",
    "    v is a vector of known __values__ corresponding to the x coordinates.\n",
    "    xq is a vector of query __points__ where you want to evaluate the interpolated values.\n",
    "    vq is the output vector containing the interpolated __values__ at the query points.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e3adcc6-f85f-4906-8de5-ee93367c4e06",
   "metadata": {},
   "source": [
    "interp1 supports various interpolation methods:\n",
    "\n",
    "    'linear': Linear interpolation (default).\n",
    "    'nearest': Nearest neighbor interpolation.\n",
    "    'spline': Cubic spline interpolation.\n",
    "    'pchip': Piecewise cubic Hermite interpolating polynomial.\n",
    "    'cubic': Cubic interpolation. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "87cbfdf4-5e34-4f2b-b790-42d63c21de24",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% 1. Sine Function\n",
    "x = -5 : 1 : 5;                         % Known data points\n",
    "v = sin(x);                            % Known data values  \n",
    "xq = -5 : 0.01 : 5;                     % Query points\n",
    "\n",
    "% Different methods of interpolation\n",
    "vq_lin = interp1(x,v,xq,'linear');\n",
    "vq_cubic = interp1(x,v,xq,'pchip');\n",
    "vq_nearest = interp1(x,v,xq,'nearest');\n",
    "\n",
    "% True solution\n",
    "vq_true = sin(xq);\n",
    "\n",
    "% Plot results\n",
    "figure(1)\n",
    "plot(xq,vq_true,xq,vq_lin,xq,vq_cubic,xq,vq_nearest)\n",
    "legend('sin x','linear','cubic','nearest')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0bfaa350-f6bb-4cf3-93d8-b5b630fd7cdd",
   "metadata": {},
   "source": [
    "With a finer grid, we get better result."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "d61bfab7-85f4-4cca-9a9c-658ad2fb6b34",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAJ2CAIAAADqgjXlAAAAB3RJTUUH6QEdCDsj8kqJ6gAAIABJREFUeJzs3WlAE1fbN/BjCBBjXRDQF5RbbJEotQg30lq1ouhDqSi1rlUsuKBFW7Au0FarorZaNxDrijtubV2goJYbBQELRYFHQEVAK4iARQyWYClhCe+H6Z0nDQETTDKTmf/vEzmZmVzJZCYX1zlzplNLSwsBAAAAAMPHozsAAAAAANAOJHYAAAAALIHEDgAAAIAlkNgBAAAAsAQSOwAAAACWQGIHAAAAwBJI7AAAAABYAokdAAAAAEsgsQMAAABgCSR2AAAAACyBxA4AAACAJZDYAQAAALAEEjsAAAAAlkBiBwAAAMASSOwAAAAAWAKJHQAAAABLILEDAAAAYAkkdgAAAAAsgcQOAAAAgCWQ2AEAAACwBBI7ANbKy8uLjY0tLy+nOxAAANATJHYA7BQeHl5SUiIQCKZNm7Z79266wwEAAH3g0x0AsFxTUxMhhM/nK7YoPjQsDQ0NJiYmdEfxYrdv305OTl60aJFAIOjVq5eLi4u3t7eNjQ3dcQEAgG6hYsddN27c0N3Gq6qqgoODRSLRzJkz/f39Z82atX//fkLI+vXrL1y4oLvXTU1Nff/99999993ly5drd8u7d++eMmXKl19+OXLkSCpbZTKZTJaamlpWVkYIcXBwkMlkt27dojsoAADQOSR2nNPQ0HDlyhVfX9+xY8eqv5ZMJsvLy1Nz4aSkpEGDBjU1Nd28efPMmTNHjx49depU//79Z82atW7dug5Fra5Ro0YdPHgwNTW1pqZGi5v9/vvvd+zY8cMPPxBC0tLSbt++rcWN64Kjo+OzZ8/s7OwIIVlZWUKh8O2336Y7KAAA0DkkdtySk5OzcOHCu3fvVlVVabRiZWUlVXJ7oaysLC8vr7lz54aHhwuFQnm7h4eHu7u7TCbTLGLNWVpampmZaXebp0+fdnNz4/P5mzZt+vXXX52cnLS7fZ1auXLl/v37tf6ZAAAAAyGx4xYnJ6ejR48GBgZaWlpqtOLVq1fVWUwmk/n4+JiZmW3atKn1s/7+/lQNyeA0NTWZmpoSQkxMTIYNG0Z3OBoIDQ1duHDh7Nmz6Q4EAAD0AYkdqGXHjh3qLHb27NmioqL333+/rcsjfHx8tBoXtOfEiRPDhw+fNWuWWCwuKCigOxwAANA5Q704EXQhNTU1Pj6eECKVSrt3715WVhYZGZmUlLRmzZrMzMyamhpfX19CSFBQ0NChQ1Vu4fz584QQNze3tl7C09OTyvmSk5O/++67+vr6wMDAsrKy3NxcqVS6a9cuExOTpqambdu2SSSSZ8+ePX36dOLEidTrUmvt3r27rq5uwYIFdXV1RUVFFRUVMpnsiy++aF0LzM/Pj4mJef78eUlJyVdffeXg4ND+2y8qKgoPD29ubiaEGBkZLV261N7ePisra+fOnbm5uffv3/f19TUzM4uIiFC5elVV1d69e0tLSz/88MNx48ZRjb/88sv169e1fiUHpbKy8sCBAzKZrLa2dtOmTVFRUU+ePKmrq6MqsgkJCRYWFsOHD5dIJPv3758/f74uYgAAAGZpAU766KOPXnnlFcWW0tLSd955R/4wNzd30qRJLS0tjY2NUqnUxMQkICBAKpVKpdLm5ua2Njt48GBCSFxc3AsDaG5u/u2333g8no+PT0pKClURvHr1aktLy9q1a+3s7MrKylpaWqqrq21sbLZs2SJf6+7du3w+38nJKS0tjWo8cuSIUCi8du2afONWVlZjxozZuXMn9XDDhg1WVlbthN3S0nL9+nV7e/uKigr5p9G/f//r1683NzdLpVJPT08fHx/q7be1hc8++0wqlR45csTOzk7eOHnyZOpjbO3q1avRapCHpOTp06fUHmlpaZk5c+aIESPi4uJyc3OFQuGmTZvu3LkjEAjkh7mJiUk77x0AAFgDXbHwt+zsbLFYXF9fTz10dHTs3r07IYTP51Mzt/F4PBMTExMTEx6vza+NWCymlnzhy/F4vFdffVUoFJaVlY0aNWr+/Pk///zz6NGjCSECgaC0tPTZs2eEEDMzMw8Pj/DwcPlaAwcOFAgEw4YNGz58ONU4Z84cFxeX2bNnK16Z8fjx48DAQOpvJyenx48ft98X+dFHH82cOdPKyop6aGNj4+vr6+fnR71rHo8nf/sqV8/IyHB2djYxMYmPj+/Tp4+8PT4+fuTIkSpXqa6ufqqGv/76S+Xq27dv//rrr+W7pqamZsKECTKZzN3dffLkyQ4ODn/99Zf8OJdKpe28dwAAYA10xcLfXF1dS0tL33jjjQkTJrz99tuenp5Hjx7VdCMuLi4XLlxoaGhQaj948KDiQ1tbW3ln5aBBgwghr7zyiqenJ9XyxRdfrFixgs/nNzQ0ZGRkPH78uLa2VmmDSrnjzJkzFy9efOXKFQ8PD3kkSgs/ffq0rbCTkpKKioocHR0VGx0cHAoKClJTU0eNGvWCt02IhYWFk5NTXV3duXPndu3aRTXm5OTU1dWNGDFC5SqTJ09+4WbbMWvWLHNzc+rvmzdvuru7E0KcnJzi4uJeZrMAAGDQULGDv/Xp0ycxMdHGxmbnzp0zZszo06dPB2YSfuuttwghrWe8s7a27tat2+7duxcsWJCbm9ujRw/5UyqnDomKiho5cuSSJUvaycYUUZW233//Xd6iTtVQjprIV2kVqhhWWlqqzhbs7OwEAsGpU6eIwgUi165dEwgEb775pvqRqI/q9SaEiMXi/Px8jWYlBAAAtkLFDv72+PHj/v37JyUlyWSy9PT0zZs3z5gxo6ampvX1rYcPH543b57KjSxYsGDDhg3R0dFr1qxRbB8/fjwhJCUlJScnZ+zYsYrXXhgZGSltZM6cOZcuXcrMzOzXrx8hJDExMTU1tf3gqR5kxVFlGqFyOKVCY11dHSHklVdeUX87P//8s6enp3yV5OTkcePGtZVixsTEqJO2uru7v/rqq+0scPnyZR6PR1XsCCEymUyjpBYAANgEPwDwt+vXr1PXtPJ4vJEjR/7000+kjduOpaent7WR3r17b9y4MScnh9qUEnVmJ3748OGxY8c+++wzKqtTXEs+Zq61K1euCASC//mf/3nh9lUaO3asiYmJ0iC827dvCwQCecKkjuzsbMUkLCEhoZ1u3J49e1qooXPnzipXj42NLS8vp17FwcGhW7duVPsnn3yifsAAAMAyqNhxVFNTU+s0a9euXQsWLJDXe7p37y7vRnRwcKAGukkkkr59+7az5eXLlz948MDPz08gEFCFOrkHDx4oLUxN1dF6I/LimUwmu3PnDnVvVsULFzIyMpqamqhq4oMHD44fP75lyxb5zRWU3hr1sJ200tLS8ttvv923b19ISAhV9pPJZGfOnNmyZQuVMKl58UHfvn27du1K/X3+/Pnnz5+3NcCOEKLO0L22XLp06f3331+7dm1ISEhSUtKQIUOo9itXrrTzigAAwHpGoaGhdMcA+lNfXz9t2rStW7devny5sbHx8OHDycnJVlZWtra2BQUFDx8+vHbtWkNDw927d9evX7969WqRSESt6ODgEBYW1rVr1x9//HHp0qXtd1B6eXn961//Wrp0aUJCAo/He/ToUVpa2tq1a5cvXz5gwIBevXoNHDiQul/tgwcPEhMT09LSbGxsbG1tCSE9evQwNzffvn07n8+vrKw8efLk6tWro6Ojr127NmbMGOr6hk2bNr3xxhupqamNjY1paWnLli3bsGHDokWLCCHJycm+vr75+fn5+fnZ2dlDhgz5/PPPv/vuO4lEkpaWJpFI2kqn3n777S5duqxZs0Ymk926dWvNmjX+/v4BAQG//PLLnDlzkpKSbt++nZ6eXldX19YcfoQQW1vbbdu2WVtbX7hw4fDhw0+fPt27d2+nTp06urva1NzcnJKSMnny5MOHD+/YsePUqVMCgeDq1atVVVULFy7U+ssBAICh6NTS0kJ3DMAIYrG4e/fufD6fusO9fGy+XFNTU3p6+vDhw9u6q0Rr6enpVJXO2tp69OjR6o/9kslkVE+ovb099bCpqUlesevatauvr+/u3buLioqamppeOPOwRqgrP5SukFVfU1PTL7/88uabb3p6elpaWp47d06LsSm9UEZGxvDhw6lPNSsr67XXXsMNYQEAOA6JHRgeeWJHdyD/MHHixMrKSmpUYn5+/uuvv37z5k2V1/wCAADoCC6eAMPT1NTU2NhIdxTKrly5Mm3aNEJIfX39Rx99tHPnTmR1AACgZ6jYgSG5cuXKvHnzqIlI+vXrd/36dfX7hXUtIiLi2bNnZmZm169fnz17ttKFIwAAAHqAxO7Ftm7dWllZuW3bNroDAaaTyWQymYw5uSYwFs4qAKAj6Ip9gZMnTx48eLCt+3UCKOLxeMjq4IVwVgEA3cGPUJvq6uo2bdr0448/0h0IALAEzioAoGuo2LVp7NixcXFx69evxxQSAKAVOKsAgK4hsWuTt7f35cuXZ8yYQXcgAMASOKsAgK6hK7ZNX375pfoLd1qeZH9hke6CAeCCogl77S8sKiwspDsQXdHorCK/7wshpGjCXpXL4LTDER92DlB/4e//2qe7SAwRi08pKiGx0xqWfXVEIhHeEcOx7x11Wp5EdwjMQu3fTsuTWra7q1ygE9lLCGnrWdA1vR2Da53C1+Uspf6uju1vnnKo8OFs+7MVhJCiqdb2ZyuqY/sTQsxTDq1JzGXZaeElKf6DxBFI7IArcLIDg0NlulTeRv1yR6wJUlxgDSGEkLVOua3XlecBoDv6P6tUx/bv6V1cGGVNZXWEEPuzFUVTrak/xKR/RGJQO/8JABcgsdMO+wuLOpG9bDqWkAYxH8v2EfVrJLpAdxyMUTRhr9htPiGkOpYQQp5GSU/eD/ax20o9K/9dJ4QUTbUW9Tshdpvf07uYalnrFK7vcEH3qKyOKtEptiuW7siacLHb/E7LD7Hp9wg0gsQOAICJ1iTmRiQGKTUq/aLLGwunWpunnBCT/vLcDliGyuraWeC/pbvgnt7FYtIfuR1nIbEDAGCi7//ap1FRtmW7e6flh5DbsRW1W1uX6xTZn60gTuHUMsjtOAvTnWhNy3Z3DP0G6BiMCnpJ8oFWwD7yX5b2szo56svwNEoqdpuPXyUOQmIHAMAG9mcrCh/ONk85RF1mAaxBDbVUM6uj2J+tsD9bgdyOm9AV+2IZGRl0hwAArKK7swrVIbuGqLhOFgzR30Pr1oSrn9XJUaU7se98QtA7zyFI7LSJ6o1FjxKARnDUaAv1Q95ytkLlBChgcDotTxK7EeqSCPXX+uc10cFkDSFrVF8ljTlxWAmJHQAAC73wIkpgPmoKm6dRGoyebCtXa/19wJw4bIUxdgAA7IGrKFijrVnrOuZplBSDLzmiU0tLC90xsIHijWXQr8QmHLwdje6onLxD6Xhh333SOuxlPoq1TuHrxw5RnLIYtAtnBiZQ5wDh4CkFXbEAL8C1k4KO4IdQz1q2u1O3rAAdwZmBXjiltAVdsQAALFQ01RpTnwBwEBI77cNMxQBqwrgFncJnC8BBSOwAAFgIV1EAcBMSOwAAdqLuPYDeWABOQWKnE+iNBXgh9MMCAGgdrooFgJeVn59fVFRkYWExcuRIumOBf/hvhywmKwbgClTsAOClBAYGjh8//uzZs5988snIkSPr6+vpjgjIupyluK8AADchsdMV9MYCF+Tk5ERGRmZnZ584cSI3N7empubEiRPqrIh+WL3BSDt4SUePHi0qKqI7ClAXEjsA6Dhzc/OLFy+am5tTD+3t7UtLS+kNCVrTyj2pgLMCAwNTU1PpjgLUhTF2ANBxNjY2NjY21N/379+/cOHC6tWr6Q0J2oIqKXRMSUlJ165d6Y4C1IXEToeo3licSYELysvL3d3dV69e7eTk9MKFcVzoX0/vYjHpTwguoYD2XLlypbS0lM/nOzk5OTo6Uo3Z2dmDBg2i/oVLSEgYMmRITU1Neno6j8cbOXLkq6++qrSR/Pz8kpKSkSNHduvWjRDS0NBw5coVW1tbBwcHPb8dbkJiBwAv68aNGxMmTPj888+XL19OdywA9DC4QdWt/7l67733MjMz3dzc6urq/Pz8tmzZEhwcTAiZMmVKeHi4v78/9beXl1dcXNzo0aNv3bpVWVl5+fLlUaNGKW6na9euM2bMmDlzZmRkJCEkODg4KioqLy9PX++M65DYAcBLuXLlyrRp0w4dOjR58mS6Y4F/aHVhbBBZo+JS2XU5S/UTD7sZehE6IyMjPj7+3r17dnZ2hJCNGzdu3Lhx+fLlPJ7yWPyMjIySkhJLS8v6+npnZ+eIiAilxM7Gxmb37t1+fn4ffvhhU1PTzp07o6Oj5WM2QNeQ2OkWemOB3R48ePDBBx+cPn3aw8OjoaGBEMLj8fj89k4sOCL0Q2W6Vh2rPKEdZkUBSo8ePQgh4eHhn3zyiYODw8qVK1euXKlySS8vL0tLS0KIQCBwcXF59uxZ62V8fX3j4uL8/f3r6uoWLFgwadIknQYPipDYAWjG4DpcyD9rCTk5ORKJRPE/7Ly8vLq6umHDhrWzhbYGzRw6dOj58+cTJ06UL7l48eLdu3fr4E2AFjyNkmKyYlBp4MCBYWFhK1eu3LNnT+/evb29vT/77DOVo+KcnZ3lf7eu58lFRkb26tVLKBTu3LlTJxFDG5DY6RyKdixj6Lvy2rVry5Yte/LkiZmZGdXi4+Mzfvz4wYMHq7zw7cCBA/7+/m0Nmtm+ffv27dvVf3UcC/SyP1uBCe2gLUuXLv3kk08uXbp0+fLln3766fjx43fu3Gl9bYSazp07x+Px6uvrjx079vHHH2s3VGgHEjsAbpk9e/ayZct+/PFH6lSbl5d3+/btH374QSAQXLx4sfXyb7zxBsGgGQC2y8jIiIyMPHz48KRJkyZNmvTVV19ZW1vfuHGjY4nd/fv3ly5dum7duoaGhmXLlo0dO5Yaugd6gMQOgFvMzMwmTZok/x/6yJEj//73v6kOl/Hjx7ezIgbNsAN6Y0GlV1555ciRI3379g0NDeXxeKdOnSKEqDN7UWsymWzWrFmDBg364osvZDLZuXPnZsyYkZmZ2U6/LWgREjt9QG8sMMr8+fPfe++9hw8f2tjYnD59etWqVYSQ+vr6Tz/9tPXCvr6+8gF5LzloBkcBE6A3FlQaPHjwgQMHli9f/s033/B4PDMzs2PHjg0cOLADm1q/fv3Nmzdzc3MJITwe7/Tp02+88UZoaOj69eu1HTWogMQOgHM8PT379Olz7NixYcOGicXi2bNnU+1isbj1wtS1rhQMmmEHFO1AJX9/f2qyOiW1tbUq/yaEREVFtV4+NDQ0NDRU/tDBwaG5uVlrUcKLILED4CJfX99z586VlJRMmDCBuopCIBBER0e3swoGzQAAMB86vPWE6o2lOwqAv82ZMycvLy82NnbBggXqLK84aOarr76ys7ObMWOGTCbT6EXRD8sQ9mcr6A4BAHQFiR0AF9nb27/99tt8Pt/T01Od5alBM0ePHiX/HTSTk5Oj2NsChuVplBQj7QBYCV2xABzF5/N9fHzUvE4Ng2YAAAwCtyp25eXlISEhLi4uI0aMWLt2rcqh4nL37t375JNPXFxcXF1dQ0JCysvLX/LV0RsLDCGTyRISEq5du6ZmPyywD3pjAdiKQxU7sVg8ffp0oVAYEhJSX1+/b9++GzduxMTEmJqatl74t99+mzFjRq9evUJCQmQy2d69e69duxYTE9O7d2/9Rw6gRQ0NDdR3/tNPP+3YXAbADtS1sYQE0R0IAGgThxK7yMjIP/74IyYmhrp78bBhw7y9vaOiolQWLY4cOSKVSo8fP04t/Oabb44fP/748eMrVqzQd9wAWmViYhIdHd2jR4/Ro0fTHQsAAGgZh7piY2NjPTw8qESNECISiVxdXVXeQ4kQIhaLhUKhfOHXXnvN2NgYvbHADpMmTUJWB+iNBWAlriR2tbW11dXVAwYMUGy0tbUtLCxUOWXDoEGDJBLJ7du3qYfp6emNjY2vv/56Oy8hEolEIpEWYwbgDtF/0R0ItzyNktIdAgBoGVe6Ym/dukUI6du3r2KjtbW1TCaTSqWdO3dWWv7jjz9+9OjRrFmzPDw8mpubExISJk+ePHfu3HZeorCwUJ1IcHsxgNbkhw9yOwC6HD58eNSoUdTE40ePHh0+fLi9vT3dQYHGuJLYNTY2EkKMjIwUG3v16kU91Tqxk0gkNTU1Mpmsrq6urq6OENLU1PTnn39269ZNXyEDUyDV0Ao1//MBfbI/W0GcwumOAphi0aJFBw4coBK7wMDA8PBwJHaGiCuJnbGxMSFEqde1vr6eEMLnq/gQFixYUFlZeeHCBVtbW0JIfn6+n5+fWCw+fPiwPsIFxkA68pJQn2a+6ljcNxaUlZSUdO3ale4ooCO4ktj169ePECKRSBQbqd/s1tOd3Lt37+7du8HBwVRWRwhxcHDw9fXdtWtXVVWV/IqKDkNvLHAEvucABio7O3vQoEE2NjYJCQlDhgypqalJT0/n8XgjR4589dVX5Ys9f/780qVLEomkW7dukydPViyUPHr0KC0t7fnz5yYmJoprxcfHOzs7Z2dnP3nyZOLEiebm5vp+b2zHlcTOysqKz+dTI+3kampqLCwslPpnCSG///47IURpyjobGxtCyIMHD14+sQMAAJYpmmpNdwiaaf+y6ClTpoSHh/v7+0+ZMsXLyysuLm706NG3bt2qrKy8fPnyqFGjCCE5OTmenp5du3Z1dHTMzMxctWpVcnJynz59CCEnTpzw8/MbMWJE7969c3JyHjx4cPHiReoGhu+//76np+eFCxcIIadPn54+fbpe3i6HcCWx4/F4bm5u6enpzc3NVCYnkUiSk5OnTp3aemEnJycej5eSkjJx4kR5Y1paGp/PHzp0qP6CBgDGKy8vj4iISExMFAgE48aNCwoKaqcC8d133xUUFCi2uLi4zJs3T/dhtoeaqRi9sS+JxdPHZGRklJSUWFpa1tfXOzs7R0REUInd5MmTXV1df/rpJx6PV19f7+7u7uPjk5yc3NTUtGjRotWrV1P3IZTJZC4uLvv375ffmTozM7OsrKx79+4CgYDG98VWXJnuhBASEBBQWVkZFBRUUVFRXFwcGBjI4/HkF7pmZWUtXLgwIyODENK1a1dfX9+4uLiIiIjKysqqqqqwsLDY2NiPP/64dXmvYzChHbAeF/phqfvZ3Lx5MyQkZOHChQkJCbNnz5ZK25xD5MCBA3fv3m1UgFvuAvN5eXlRXVUCgcDFxYUanp6cnFxcXLx69WrqftMCgWDFihUpKSkSiYTP5+fm5gYGBlKry2Qyc3PzhoYG+QYnTJhgZWUlFArVvFc1aIQrFTtCiKOjY1hY2IYNG8aMGUMI6d279759+6gOVkJIZWVlSkrK+PHjqYdffvmlqanpgQMH9uzZQwjp3LnzkiVLFi9eTFfwAMBAGt3PpqqqSiqVLl26VLErgHbrcpaudSJLyE66AwHmcnZ2lv8tT8XKysoIIe+88478KeryxBs3bowbN65Lly7h4eF37tzJzs4uLy83MTFxd/+/f/PefPNNPYXOSRxK7AghXl5eXl5eaj61bNmyZcuW6S4YXEIBLMaR73Zb97NRmdjl5OQQQvr376/XEAF0g7pOIjo62sTERLHdxcXl2bNnQ4YM6d2797x58+bPnz9q1KiAgICamhqaIuUcbiV2AADa0tb9bM6dOyeTyVr3MRUUFPD5/O7dux87duzRo0fOzs6enp7aGt3xkjDMDjTl4OBACJFIJB9++CHVkpSUdOrUqeHDh8fExFRWVmZnZ1MXUhBCSkpKzMzMaIuVY9C9DQDQEe3fz6b18vfu3evUqZOnp+euXbvOnj27bNmyCRMmVFVVtfMSmBwbGMvR0XHs2LErVqzIy8sjhBQUFPj7+5eUlAiFwh49ehBCEhMTCSEymSw0NPTXX39t/6uuI9w8gpDY0QmXUAArcaQftv372bRe/vbt22ZmZufPn8/MzMzJydmxY0dJScmSJUvaeQm9zY/N4is6QXfOnDnj6uo6ZMgQY2PjQYMGiUSi06dPE0LGjx/v5+fn5+fXpUuXzp07l5SUbNmyJTc3l7rqQp+4OcM8umIBADpC0/vZJCUlNTY2UmsRQt577720tLQzZ84UFxczYeAdemNBsdJcW1ur9AclKipK/reZmVl0dLTKTR09evTo0aOKLcHBwa1fBXQBFTsAgI7Q6H42FHlWR6HmxSwtLdVViADAPUjsaIbeWGAZjvTDEg3vZ1NVVRUdHZ2fn6/Y+Pz5c0IIQ+7Iid5YAHZAYgcA0BGK97OhWqj72bz77rutF+7SpcvKlSvDw8MVG2NjY3v16uXk5KSPcNWD/zMBDB0SO/qhaAeswZ1yHUX9+9kIhcKZM2empqaGhYVVVVU9evQoODg4Nzc3JCSEOZPvP42Sit3m0x0FALwUXDwBANBBGt3PZtWqVZ07dz506ND+/fsJIT179ty8eTOj7kJhf7aiOpb+yzgA4GUgsQMA6Dj172djZGQUHBwsvzYQAEAXmNIFwHHojQUW4Fo/LCs9jZKiaAdg0JDYAQDA33BtLIChQ2LHFCjagUFDuQ6Agw4fPlxUVKTyqaNHj7b1FOgUEjsAAPgH/JMJalq0aFFqaqrKpwIDA9t6CnQKF08AAMD/6eldLCb9CcG9xeCllJSUMGTyba5BYscgVG8s+rPA4OB7C8AOz58/v3TpkkQi6dmzp7e3N3XX4/j4+DfeeKNPnz7UMjk5OQ0NDW+++aZ8rby8vKysLBMTE29v727dulGN2dnZgwYNks/+o3LLoAvoigUAAACSnp5ua2u7atWqn3/+efHixc7OztStkN9///3ExET5Yt9+++26devkD6Oiotzc3H7++ec1a9bY2dkVFBRQ7VOmTPnPf/7T/pZBF5AyMwuKdmBw8I1lgbVO4f9sCCJrwlsvti5nqX7iMUQGN01MT2/l3vZZs2bs7FSEAAAgAElEQVSNGDEiOjqax+NVVVW9/vrr27ZtW79+ffvbuX//fn5+vpWVVX19/ejRo+fNm5eenq6VLUPHILEDAOA0leladWx/pR/+Vskf/EPrPMmwpKenP3z48NSpU9Q97iwtLS9cuNCzZ88XrhgQEGBlZUUIEQgEISEhU6ZMqaqqsrS0fPktQ8cgsQMAAOC6srIyQsi///1veYviKLp2DB48WP53jx49CCE3b9708PB4+S1Dx2CMHeNgQjswIOiHZSvcgoKbmpqaXrhMc3Oz4sOGhgal1YVCYce2DFqBxA4AAJThFhRc4+joSAhJSEiQt8yaNWvixImEEB6PV1lZKW9/9OiR4oqZmZnyv+/evcvn84cNG6bmlkEXkNgxEYp2YBBQrgNgjYEDB3p4eHz++ef3798nhMTHx//www/Tpk0jhLi4uBw8ePDhw4f19fWhoaF37txRXHHfvn1U0vbLL79s2LBh2bJlSlOZtLNl0AUkdgAAAEC+//77wYMHDxgwwNjYeOLEievWrfP19SWE7Nixo7Gx0dbWtnPnzpmZmV9++aXiWosXL54zZ46xsbGbm9uMGTM2bdqk/pZBF3DxBAAAqNDTu7j1tbHAYmZmZtHR0a3bhw4d+uDBA5WrSKVSQsjWrVtbP1VbW/vCLYMuoGLHUOiNBYZDPywAAAMhsQMAAABgCSR2zIWiHTAWynUAAMyExA4AAFSjhtnRHQUAaIBbiV15eXlISIiLi8uIESPWrl0rFovbWbi2tvbbb78dO3bsv//979mzZ1+7dk1vcQIAAAB0AIcSO7FYPH369Js3b4aEhCxcuDAhIWH27NnUFT2t/fXXX7NmzTp37tzMmTNDQ0Pr6+v9/f1TUlL0HDN6Y4GB0A8LAMBYHJruJDIy8o8//oiJiaFuTjxs2DBvb++oqKgFCxa0XvjgwYP3798/d+6cg4MDIeTdd9/19PTcv3+/m5ubvuMGAKDP0ygpIZj0BMBgcKhiFxsb6+HhQWV1hBCRSOTq6nrx4kWVC//4449eXl5UVkcIMTU1DQsL+/jjj/UUqwIU7YBRUK7jGtxbDMCwcKViV1tbW11dPWDAAMVGW1vbc+fOyWQyHu8fCW5VVdWTJ0+o4tz169clEomtra2zs3P7LyESiQoLC7UeOQBHiEQiukMAADB4XEnsbt26RQjp27evYqO1tbVMJpNKpZ07d1ZsLygoIITU1dV5e3vLczVPT89t27YZGxu39RK6y+qooh3KJEA7nX4PqSMI6R0AKGpqalK6+Sy0jytdsY2NjYQQIyMjxcZevXrJn1JUX19PCPnmm29cXV0zMzPz8vI+/fTT+Pj4zZs36yteAACmeBolxaQnQIuoqKg5c+bQHYWB4UpiR1XaZDKZYiOVwLX1r4CDg8Pq1au7detmamoaGBg4atSo06dPK20BAID1MMwO6HLp0qU///yT7igMDFfKm/369SOESCQSxUaq68fU1FRpYYFAQAiRXzlBGT16dGpq6m+//aY0UE8/0BsLtMM3kOPW5Sxd6xS+Lmcp3YGAriQkJAwZMqSmpiY9PZ3H440cOfLVV1+VP/v8+fNLly5JJJJu3bpNnjxZsSby6NGjtLS058+fm5iYKK4VHx/v7OycnZ395MmTiRMnmpubt7ORK1eulJaW8vl8JycnR0dHQkhWVlZFRUVTU9OlS5c8PDzQIasmrnxMVlZWfD6fGmknV1NTY2FhodQ/SwgZOnQoIaShoUGxkZrxrkePHjqOFAAAgAZTpkzx8vKKi4sbPXr0rVu3KisrL1++PGrUKEJITk6Op6dn165dHR0dMzMzV61alZyc3KdPH0LIiRMn/Pz8RowY0bt375ycnAcPHly8eNHT05MQ8v7773t6el64cIEQcvr0aXt7+7Y28t5772VmZrq5udXV1fn5+W3ZsiU4ODg+Pv7+/fsymWz37t3u7u5I7NTElY+Jx+O5ubmlp6c3NzdTmZxEIklOTp46dWrrhTt37jxkyBDFhQkhV65c6d27t3y2FP1D0Q5ohO8ex/333mJBdAfCXGudwukOQTMqi68ZGRklJSWWlpb19fXOzs4RERFUYjd58mRXV9effvqJx+PV19e7u7v7+PgkJyc3NTUtWrRo9erVoaGhhBCZTObi4rJ//34qsSOEZGZmlpWVde/eXSAQ2NnZqdxIRkZGfHz8vXv37OzsCCEbN27cuHHj8uXLv/rqq9u3b0ul0ujoaP19LoaPK4kdISQgIGDatGlBQUGrVq2SSqWhoaE8Hm/u3LnUs1lZWZGRkfPmzRs2bBghJCQkxMfHZ9GiRZ9//nm3bt3279+fnZ29ceNGWt8BAAAwFDs6qb28vKj6hUAgcHFxefbsGSEkOTm5uLj4+++/p6YGEwgEK1asmDJlCtWjmpub2717d2p1mUxmbm6u2N81YcIEKyur9jdCdYWFh4d/8sknDg4OK1euXLlypd7fOntw5eIJQoijo2NYWFh2dvaYMWM8PT2Li4v37dtnY2NDPVtZWZmSkvL7779TD4cOHRoZGXnv3r3x48ePHDny/Pnzq1evnjJlCn3hE4LJioEmKNcBcITijK3yGV7LysoIIe+8847pf82YMYMQcuPGDUJIly5dwsPDP/jgg3/961+mpqZpaWmKG3zzzTdfuJGBAweGhYUdPnz49ddf/3//7/8tXLgwPz9fH++WpThUsSOEeHl5eXl5qfmUm5vb1atX9RIXAAAAQ1GD26Kjo01MTBTbqZLekCFDevfuPW/evPnz548aNSogIKCmpkajjRBCli5d+sknn1y6dOny5cs//fTT8ePH79y5o3jpBqiPQxU7AADoMNwulrOoOSIkEsm4/+LxeN9//72pqenPP/9cWVl56dKlJUuWTJgwoVu3biUlJZpuJCMjY968eSYmJpMmTdq9e3dmZmZ9fT1VDoQOQGJnYNAbC3qGflgAjnN0dBw7duyKFSvy8vIIIQUFBf7+/iUlJUKhkBoel5iYSAiRyWShoaG//vprVVWVRht55ZVXjhw5smbNGmqm2FOnThFCnJycCCE8Hq+oqCghIaGpqUmP79iwIbEDAACA9pw5c8bV1XXIkCHGxsaDBg0SiUSnT58mhIwfP97Pz8/Pz69Lly6dO3cuKSnZsmVLbm4uNf+/mhsZPHjwgQMHIiIijI2NjY2NN2/efOzYsYEDBxJCfH1979+//+677yYloaKhrk4tLS10x8AGIpFId/eKbQ1FFNAP/X/T9HwoMRkDPwpMUCzHwL3DNWruAg7uKVTsAABAXbhpLADDIbEzSBhpB3qAwjAAgMFBYgcAAADAEoaU2OXn5+/Zs6euro7uQBgBRTvQKZTrdKG8vDwkJMTFxWXEiBFr164Vi8V0R6Sxp1FS9MYCMJkhJXaEkIiICGdnZ3d392vXrtEdCwCABsRi8fTp02/evBkSErJw4cKEhITZs2dLpVK649KM/dkKukMAgPYYUmLn4OCQlJTk7u7++PFjf39/kUg0Z86c8vJyuuOiDYp2oCMo1+lCZGTkH3/8cerUqRkzZvj5+R09evTBgwdRUVF0xwUArGJgtxTr06fP3r17CSF5eXnLly//9ddf3d3du3XrNnv27Llz53br1o3uAAEAVIuNjfXw8KDusE4IEYlErq6uFy9eXLBgAb2BQceIRCK6QwBQwcASOzlHR8fLly9LpdLU1NQtW7bs2bNnz549ffr02bRp01tvvUV3dAAA/1BbW1tdXT1gwADFRltb23PnzslkMvnd1g1CT+/i6tj+HL/DGDU1msrPgYOz/ck/Bw6+dwYy1MSOUlpaGhYWVlZWRggxNTX9448/fH19X3nllXPnztna2tIdnT5QvbHoNQMtwjdKF27dukUI6du3r2KjtbW1TCaTSqWdO3dWuRZVE+La9KrMtNYpXFVzEFmj3I7MhiE4W1I1yMSuvLx89erV169fp24e9+qrr+7Zs6d///6EkJycnBkzZnh7e1N3owMAYILGxkZCiJGRkWJjr169qKfaSuyQ0jFK64wNlUsKM4u41OHDwfTOwBK79evXx8TE/Pnnn4QQCwuLoKCgSZMmmZqayhdwcnJycXHJzs4Wi8Xm5ub0Rao/KNqBFuG7pCPGxsaEEOoe53LU/TT5fAM7DwOFgakMADGsxC4/P//kyZN8Pt/b2zskJEQ+BlkJj8ezsLDo0aOHnsMDAGhLv379CCESiUSxkaooKP5raiiYWaEBAGJYiR0h5Ny5c4MHD25/mRMnTugnGOZA0Q60At8i3bGysuLz+dRIO7mamhoLCwul/lkAA1U01ZqQYLqjAEObx+6FWR0AAAPxeDw3N7f09PTm5maqRSKRJCcnv/vuu/QGBh1TNNWa7hCYpad3sYWv4dWeWcmQEjtoByYrhpeEcp2uBQQEVFZWBgUFVVRUFBcXBwYG8ni8uXPn0h0XdISFryl6ooGZkNgBAOiDo6NjWFhYdnb2mDFjPD09i4uL9+3bZ2NjQ3dcHUQNs6M7CgBQZmBj7KAdGGkHHYZvjn54eXl5eXnRHQWATvT0Lm49qx/oHyp2AAAAGqiO7W+ecojuKABUQ2LHKhhpBx2Ach2ApnDIAGMhsQMAgI7AMDsABkJixzYo2oFGUK4DAC1Crk87JHYAAADqwi03gOGQ2LEQinagJpTr4CWhNxaAaTDdCQAAqGutU+v5LIJaT3KxLmepfuIBACXcSuzKy8sjIiISExMFAsG4ceOCgoLMzc1fuNa9e/fmzJmzcuVKA5qACnPawQvhGwKaUpmute6aVJX8sUTRVGvcOKt9VBEXvdU04lBiJxaLp0+fLhQKQ0JC6uvr9+3bd+PGjZiYGFPT9o7SxsbGZcuWPX36tLGxUW+hAgAAA+FOYsB8HBpjFxkZ+ccff5w6dWrGjBl+fn5Hjx598OBBVFRU+2tt37794cOH+olQuzDSDtqBch1oC4bZATAKhxK72NhYDw8PS0tL6qFIJHJ1db148WI7q1y/fv3YsWNBQUF6CRAAAIANiqZa0x0Cd3Elsautra2urh4wYIBio62tbWFhoUwmU7mKRCJZsWJFQECAk5OTXmLUPhTtQCWU6wA6AMmKmnp6F2MkIo24ktjdunWLENK3b1/FRmtra5lMJpVKVa6yevVqMzOzwMBANV9CJBK9ZJAAXCYSiXAQGS4uJD0YYAcGgSuJHXXpg5GRkWJjr1695E8piY2NTUxMjIiI4PHU/YgKCwtfOkztQ9EOlDC2XFdYWMjMgwheCBUaAObgSmJnbGxMCFHqda2vryeE8PnKlwZXVFSEhoYGBwf3748RwQAAABrjQhGXmbgy3Um/fv0IIRKJRLGRKg+0nu5k69atDQ0NDx8+XL9+PSHk999/J4TExMTk5eV9/vnn7U+PwkCY0w7k8E0AAD3o6V1MCCoj9OBKYmdlZcXn86mRdnI1NTUWFhZK/bOEkObmZhMTk5iYGOphU1MTIeR///d/8/LyVqxYoZ+AAQAMiHnKITH5e1radTlL1zqFs+/mExhgBwaBK4kdj8dzc3NLT09vbm6mMjmJRJKcnDx16tTWC+/cuVPxYVZWlo+Pz/r16ydNmqSncLUNRTsgKNeBLrVsd6+OpTsIAODOGDtCSEBAQGVlZVBQUEVFRXFxcWBgII/Hmzt3LvVsVlbWwoULMzIy6A0SAACYBsPFOgAzV9OFQ4mdo6NjWFhYdnb2mDFjPD09i4uL9+3bZ2NjQz1bWVmZkpJCDadjJVwey3Eo14EesDUBwjW/YEC40hVL8fLy8vLy0vSpoUOHYhYGAID2Ybw8ABNwqGIHKNpxFsp1AAAcgcSOW5DbcRCyOoCXwdb+ZT3AMDtaILEDAACtYV8ahDuJgWFBYsc5KNpxCsp1oE+4txgA7ZDYAQAAgK6wr4jLcEjsuAhFO45AuQ5owaYfcja9F1qgiKt/SOwAAEBrWPZDjgF2YHC4NY8dyOEmY6yH/QsA+rfWKbxVWxBZ07qRsO9uwgyBxI67kNuxGPYswMsrmmrNpuqjHrSVq1XH9lcqfKrK/0A70BULAACgAvphwRAhseM0XEXBSijXAb2QDAHQCIkdAAAA6JB5yiHcgkJvkNhxHYp2LINyHTCEoU8UYujxMwpOSvqExA4AAEAZBtiBgUJiByjasQfKdcAcuJ4UlKAIqh9I7IAQ5HasgKwOABiLZTNXMxkSOwAA0AnDrdC0nncNwFAgsYO/oWhn0FCuA6ZBhQZaM9xc34AgsYP/g9zOQCGrAwDmM085hFxfD3BLMQCAjisvL4+IiEhMTBQIBOPGjQsKCjI3N29r4e+++66goECxxcXFZd68eboPkzZFU63tz1bQHYVmcCcxHWnZ7l4dS3cQHICKHfwDinYGB+U6GonF4unTp9+8eTMkJGThwoUJCQmzZ8+WSqVtLX/gwIG7d+82KmhubtZnwKAOTHSiU+iN1TVU7AAAOigyMvKPP/6IiYmxtLQkhAwbNszb2zsqKmrBggWtF66qqpJKpUuXLp04caLeI6VHT+9iQhh9v4E2bkUfRNYot7d1e3sApkFiB8qooh2KQAYBe4pesbGxHh4eVFZHCBGJRK6urhcvXlSZ2OXk5BBC+vdndKLDQa0zNlwSqzvMz/VZAF2xoAI6ZA0Csjp61dbWVldXDxgwQLHR1ta2sLBQJpO1Xr6goIDP53fv3v3YsWNff/31xYsXX9gPKxKJtBkxTQyr6w1ZnR7o7SvBjiNIU6jYAQB0xK1btwghffv2VWy0traWyWRSqbRz585Ky9+7d69Tp06enp5CobCxsfH48eO7du2KioqSF/xaKyws1EXk+oQKDdCosLCQg7kdKnagGop2DIdyHe0aGxsJIUZGRoqNvXr1kj+l5Pbt22ZmZufPn8/MzMzJydmxY0dJScmSJUv0Ey2ow7CKiwYKExzqGip20CYMtmMs7Bf9KykpycrKkj8cOnSosbExIUSp17W+vp4QwuerOLUmJSU1NjZSaxFC3nvvvbS0tDNnzhQXF7N+4J2hTHqC62GBBZDYAQC8WE5OzqpVq+QPN2/e7OrqSgiRSCSKi1Gdp6amqgsS8qyOMnTo0DNnzpSWlrI7sUNvLIA+IbGD9qBox0DYI7SYOHGih4eH/KGpqWmnTp34fD410k6upqbGwsJCqX+WEFJVVfXLL7+IRCIHBwd54/PnzwkhXbt21WXgoC7MSwzswK0xduXl5SEhIS4uLiNGjFi7dq1YLG5n4aysrEWLFrm4uLi4uCxatEixF4ZTMNiOUZDV0cXIyEiowMjIiMfjubm5paenyy9ulUgkycnJ7777buvVu3TpsnLlyvDwf8yOFhsb26tXLycnJ328AXgR9MPqDT5nneJQYqfRHPGXL1/28fGpqqr66quvQkJCHj9+7OPjk5KSoueYGQK5HUMgq2OagICAysrKoKCgioqK4uLiwMBAHo83d+5c6tmsrKyFCxdmZGQQQoRC4cyZM1NTU8PCwqqqqh49ehQcHJybmxsSEsLjsf883NO7uDoWvbHwD7hURUc41BWr0RzxW7Zssbe3/+GHH6gulalTp3p5eX377bdubm76jhsAmMrR0TEsLGzDhg1jxowhhPTu3Xvfvn02NjbUs5WVlSkpKePHj6cerlq1qnPnzocOHdq/fz8hpGfPnps3b+bOXSgYDv2wwBocSuzUnyO+sbHRyMjovffekw+UMTIycnZ2Pn/+vF4jZhIMtqMdPn9m8vLy8vLyUucpIyOj4ODg4OBgfYUGGkA/rP4hk9YR9ncBUDSaI97Y2Dg+Pn7x4sWKjaWlpWZmZjoPlMHQIUsjZHVg6NAbC62hN1YXuFKx03SOeCWJiYlZWVkqO23lqOmtWTBTPID+cXB2eNZb6xTeqi2IrFFubH2rVv1DPyywCVcSu/bniG8/scvKygoODn799dcDAwPbWYwLKR06ZGnBhc9cfvggw2MHlemaytuwrnUKpz23Qz8sLTDBoY5wpStW0zni5a5evTpv3ry+ffseOHCgrUlHOQUdsnrGhawOOIKZvbHoDaQXPn+t40pi169fP6LhHPGEkMOHDwcEBDg7O588edLc3FzXQRoK5HZ6g6wOAAA0wpXEzsrKSv054ilbt27dvHnztGnTjhw5gqnhAQC0AhUakOvpXYzRjVrHlcROozniCSHHjh07ePDg4sWLv/76ay5MH6opFO30AOU6YB8G/pBjgB3tkOtrF1cuniCEBAQETJs2LSgoaNWqVVKpNDQ0VGmO+MjIyHnz5g0bNqyqqmrr1q2mpqY1NTXr169X3MiqVavaqvBxDS6k0Cl8tgAA0AEcSuzUnyM+LS2Nuor25MmTShv58ssvkdjJIbfTEXyqwG5FU63tz1bQHQUwAq6N1ToOJXZE7TniJ02aNGnSJD3GZcCQ22kdPk9gN+b8kBdNtSYkGP2wTIBcX4swegwAAPQNw6oAdASJHbwsXEihRSjXAQDXMPCSGoOGxA60ALmdViCrA46gfsjpLdrhNmJMgyKutiCxA+1AbveSkNUBAGehaKdFSOxAa5DbdRiyOgB9osp1uGwCWAmJHWgTcrsOQFYHHMSE3lhgGnwftAKJHWgZcjuNIKsDACDojdUebs1jB/qBye3UhE8JuOzvCe3W6Pt10Q/LEGudwlu1BZE1rRvJupyleoiHNZDYgU4gt3shfD4AwFlt5WrVsf2Vcm5V+R+0B12xAABAJ4ysAtAiJHagKxhs1w6U6wDI372xeoV+WIYzTzlUHcuIO84ZLiR2oEPI7VRCVgcAoBLOjS8PiR3oFnI7JcjqAJSI+p3QW28synUGAb3zLwOJHegcldshvaM+BGR1AErEbvP180JIFwwC5jh8SbgqFvSByma4nNZw+b0DvJCo34nCqdb2Zyt0+ioo1wEXoGIH+sPZbllkdQDt6OldrIeiHSpABgRFu5eBxA70ioO5HbI6AHXoeqQdynXAEeiKBX3j1NzF3HmnAC+jp3exmPR/GqWdrbUxpa2KuxrglgaMRd2YpGiqNSHBdMdiYJDYAQ04kttx4T0CMJNSxtb6fgZgEOzPVhDceUJD6IoFerD7UllcAAugKd0Nq6qO7W+eckjrmwU9YOtvhE4hsQPatGx3Z+WQOyqlQ1YHwARUpojj0RDJr6rBVRQaQWIHNGNZbodCHUCHab1oR91ADOU64BQkdkA/dnTLovsVgFGK/jsxHo5Kw0WNjLQ/W4Ginfpw8QQwgqHPYGy4kQMwCnUt5Mtvh8rqcM0EO3RantRytqJI91NYswMSO2AQebesASVJBhcwANO0mp1ExbwkFI1mJ6GumWjxfonIgBnEbvMJQYKuLiR2wCyGVbozlDgBGKutXK06tv/TKKlihaaN2elUo8p1ODxZA0U79WGMHTAR80fdYUQdgE6Zpxzq2IUU1CrohGUT6vJYJv8iMAoqdsBQ8tIdYVhHJwNDAmCflu3unZYfEvvOpxI1Nes0f1d0nMLRCcsy1L1JzFNOFKJo9yJI7IDRGJXeMSQMAI6Q53Y9vYvVubWUYj8djlO2skeH7IsgsWtTeXl5REREYmKiQCAYN25cUFCQubk53UFxFO3pHVI60K6tW7dWVlZu27aN7kCY7u/cjvSn6nDt/KLLn6qO7U9IkH7DBH2ginadlh8qbHuZ1gMxP+wcoNOoGAiJnWpisXj69OlCoTAkJKS+vn7fvn03btyIiYkxNTWlOzTuUkzviF7SLH2+FnDHyZMnDx48OG7cOLoDMQzy3I6QoBdWa/4eWtfGRbVg6NrqkKX660/eD/ax20oIsfD9v19q85RD6/QfKK2Q2KkWGRn5xx9/xMTEWFpaEkKGDRvm7e0dFRW1YMECukPTE5FIVFjYzv9FtJHnWLrLugwln2PsPoK21NXVbdq06ccff6Q7EAND5XZrSG51bH/5XLVKv+uYtY7F/lmHC1pDck+SYPKPxr+76amUjvoaUGdy+wuLyHZunSeR2KkWGxvr4eFBZXWEEJFI5OrqevHiRe4kdszXOsMj7aZi7adBam4E4GWMHTv2r7/+Wr9+fXg4SkqaadnuvtYp1zzlkJj0t/A1pUbdUbld0VRrUb8TYjqyOvxzpQdtTYjTxgiZpfJnqadEF3QaHRMhsVOhtra2urp6wIABio22trbnzp2TyWQ8HuaIYRbFA7ud6+Ht230WyRzogbe3t7+/v6WlJRK7jlmTmBuRGEQIIWvCyf/VbILX3M+NSGxzWmNgJaXBOSqf5SYkdircunWLENK3b1/FRmtra5lMJpVKO3furHItkUikj+D0yBDfkX3bTxVN2Gt/YVFbzxrof3WGuI/ax+76x5dffqnR8uzbv1rU/hH9vWiffsLAPqJXW+d8Az2lawUSOxUaGxsJIUZGRoqNvXr1op5Smdix+9eIPTg20gIMGs4qL4YjGqAVJHYqGBsbE0JkMpliY319PSGEz8cnBgAvUFJSkpWVJX84dOhQW1tb+sIBAA5BmqJCv379CCESiUSxkfrvGdOdAMAL5eTkrFq1Sv5w8+bNSOwAQD+Q2KlgZWXF5/OpkXZyNTU1FhYWSv2zAACtTZw40cPDQ/4Q/xACgN4gsVOBx+O5ubmlp6c3NzdTmZxEIklOTp46dSrdoQGAATAyMhIKhXRHAQBchJk7VAsICKisrAwKCqqoqCguLg4MDOTxeHPnzqU7LgAAAIA2oWKnmqOjY1hY2IYNG8aMGUMI6d279759+2xsbOiOCwAAAKBNnVpaWuiOAQAAAAC0AF2xAAAAACyBxA4AAACAJZDYAQAAALAELp7Qpq1bt1ZWVm7bto3uQDRQXl4eERGRmJgoEAjGjRsXFBRkbm7e1sLfffddQUGBYouLi8u8efN0H+ZL0eg9MgoX9o4SQzyIdIEde5PFDPeswh2cPYiQ2GnNyZMnDx48OG7cOLoD0YBYLJ4+fbpQKAwJCamvr9+3b9+NGzdiYmLamk/1wIEDFhYWdnZ28pbm5mZ9Bey4gfcAACAASURBVNtBmr5H5uDC3lFiiAeRjrBgb7KY4Z5VOIW7B1ELvLQ///zzq6++sre3t7e3X7x4Md3haGDjxo0ODg5PnjyhHhYUFNjb20dGRqpc+MmTJ/b29rGxsXoMUAs0eo+MwoW9I2e4B5EuGPreZD3DPatwB5cPIoyx04KxY8fGxcWtX7/ezMyM7lg0Exsb6+HhYWlpST0UiUSurq4XL15UuXBOTg4hpH///vqLTxs0eo+MwoW9I2e4B5EuGPreZD3DPatwB5cPIiR2WuDt7X358uUZM2bQHYhmamtrq6urBwwYoNhoa2tbWFgok8laL19QUMDn87t3737s2LGvv/764sWLzC9ra/oemYMLe0eRgR5EOmLoe5PdDPeswilcPogwxk4LvvzyS7pD6Ihbt24RQvr27avYaG1tLZPJpFJp586dlZa/d+9ep06dPD09hUJhY2Pj8ePHd+3aFRUVJf+3lYE0fY/MwYW9o8hADyIdMfS9yW6Ge1bhFC4fRKjYcVdjYyMhxMjISLGxV69e8qeU3L5928zM7Pz585mZmTk5OTt27CgpKVmyZIl+ou0YTd8jc3Bh70BbsDeZzHDPKpzC5YMIFTvNlJSUZGVlyR8OHTrU1taWvnA00DpyY2NjQohS30F9fT0hhM9X8cVISkpqbGyk1iKEvPfee2lpaWfOnCkuLmbsOAZN3yNzcGHvAKX1sYm9yWSGe1bhFC4fRPgWaiYnJ2fVqlXyh5s3bzaUxK515K6uroQQiUSiuFhhYSEhpK2L9uUHCWXo0KFnzpwpLS1l7HHSr18/ouF7ZIgORG5wewcoKs8q2JuMZbhnFa7h7EGExE4zEydO9PDwkD80oMO4deSdOnXi8/nUeBG5mpoaCwsLpV4GQkhVVdUvv/wiEokcHBzkjc+fPyeEdO3aVZeBvxQrKyv13yOjaBS5ge4doCgdm0KhMDo6GnuTsQz3rMIdHD8lYoydZoyMjIQKDOgwbh05j8dzc3NLT0+XXyskkUiSk5Pffffd1qt36dJl5cqV4eHhio2xsbG9evVycnLSxxvoEI3eI6NwYe8ARenYrKurw95kMsM9q3AHx0+JSOw4LSAgoLKyMigoqKKiori4ODAwkMfjzZ07l3o2Kytr4cKFGRkZhBChUDhz5szU1NSwsLCqqqpHjx4FBwfn5uaGhITweIz+FrX/HpmMC3sHWsPeZD7DPatwBNcPIrpnSGaVt956y+Amzb9w4cJbb71Fzfj/zjvv/Prrr4pP2dvbR0dHUw+bmpq2bNni4OBALTxs2DD5UwzXzntkOC7sHSWGeBBpHWv2JosZ7lmFI7h8EHVqaWmhO7cEmslksnv37hFCRCLRCxdubm7Oy8vr1q3ba6+9pvvQtEaj98goXNg7oBL2JsMZ7lmFO7h5ECGxAwAAAGAJDnQ2AwAAAHADEjsAAAAAlkBiBwAAAMASSOwAAAAAWAKJHQAAAABLILEDAAAAYAkkdgAAAAAsgcQOAAAAgCWQ2AEAAACwBBI7AAAAAJZAYgcAAADAEkjsAAAAAFiCT3cAADr06NGjvLw8CwuLt956S9548+bNioqK119/3dbWlr7QAAAAtK9TS0sL3TEA6EpdXZ2Xl9fvv/8eExMjEokIIb/99tsHH3zQu3fvn376SSgU0h0gAACANqErFthMKBRu375dJpOtWLFCJpPJZLKlS5c2NjZu374dWR0AALCPUWhoKN0xAOiQlZVVY2NjQkICn89PSUm5fPlySEiIp6cn3XEBAABoH7pigf1kMtnkyZPv37/f2Ng4atSoAwcO0B0RAACATiCxA07IycmZMWMGIeTSpUuvvfYa3eEAAADoBMbYASccOXKE+mPnzp30RgIAAKA7SOyA/aKjo+Pj4318fKZPnx4fHx8TE0N3RAAAADqBrlhgufLy8okTJ/bo0ePChQuEEC8vr5qamri4uD59+tAdGgAAgJahYgcst3Tp0j///HPjxo1CoVAoFH7zzTd//vnn8uXL6Y4LAABA+5DYAZvt2bMnNzf3ww8/HDZsGNUyfPjwyZMn37x5c8+ePfTGBgAAoHXoigUAAABgCVTsAAAAAFgCiR0AAAAASyCxAwAAAGAJJHYAAAAALIHEDgAAAIAlkNgBAAAAsAQSOwAAAACWQGIHAAAAwBJI7ABYLi8vLzY2try8nO5AAIAlcFZhMiR2AGwWHh5eUlIiEAimTZu2e/duusMBAIOHswrD8ekOANivqamJEMLn8xVbFB8anIaGBhMTE7qjeLHbt28nJycvWrRIIBD06tXLxcXF29vbxsaG7rgAXhbOKnTBWYX5DPgwgA4Qi8W//vorj8fz8PDowEnQ19f32bNn9+/fv3v37gsXrqqq2rJlS2xsrKOjY5cuXRoaGtzc3D7++OP169c7OjpOmjSpQ+9ALampqdu3b6+vrx88ePD27du1uOXdu3cnJSXZ2tpev349OTmZ4T8kMpksNTW1rKzMzs7OwcFBJpPdunULp2DQkcrKyvr6+n79+rWzzEsemzir0A5nFQPQApyxevXqtWvXxsXFHTlyxMbG5ptvvtF0C42NjatWrVLna5OYmGhubv7ZZ5/9+eef8sb//Oc/M2fO5PF40dHRmr60pp48eSIQCObPn6/FbZ4+fdrOzq6xsXHZsmWEkJs3b2px47qWlpYmFAqrq6vpDgRYa+zYsQcOHFBsaW5uzs3NVVqsw8cmzipMg7MKM2GMHVccPHgwKSlp0aJFEyZMmDNnzpIlS1atWhUVFaXRRvh8/uDBg1+4WFZWlpeX19y5c8PDw4VCobzdw8PD3d1dJpNpHL3mLC0tzczMtLvN06dPu7m58fn8TZs2/frrr05OTtrdvk6tXLly//79Wv9MACh79+5NTExUaqysrNy/f79SY8eOTZxVGAhnFWZCYscV6enpaWlpMTEx1MPXXnuNEJKamqr1F5LJZD4+PmZmZps2bWr9rL+/v52dndZfVD+amppMTU0JISYmJsOGDaM7HA2EhoYuXLhw9uzZdAcC7PTo0aPHjx+3br969apWto+zCgPhrMJYSOy44ptvvtm2bdv06dOph9RZ2NXVVesvdPbs2aKiovfff7+tkSI+Pj5af1Fox4kTJ4YPHz5r1iyxWFxQUEB3OMBCGzZsWLlyZev2HTt2aGX7OKswDc4qTMboQZqgRVZWVsuXL5c/PH78+MCBA/38/AghycnJ3333XX19fWBgYFlZWW5urlQq3bVrF3WJllgsDg8P5/P5JiYmpqamvXv3bv+Fzp8/Twhxc3NrawFPT0/52bmdl25qatq2bZtEInn27NnTp08nTpzo6+srX2v37t11dXULFiyoq6srKiqqqKiQyWRffPFF63/c8/PzY2Jinj9/XlJS8tVXXzk4OLQTfFFRUXh4eHNzMyHEyMho6dKl9vb2hJCsrKydO3fm5ubev3/f19fXzMwsIiJC5Raqqqr27t1bWlr64Ycfjhs3jmr85Zdfrl+/rvj5a1FlZeWBAwdkMlltbe2mTZuioqKePHlSV1cXGBhoaWmZkJBgYWExfPhwiUSyf//++fPn6yIG4LK9e/f6+/sLBALFxqSkpDVr1mRmZtbU1FBHblBQ0NChQxWXUf/YxFkFZxXQAN2D/ECvbt26FRcXt2DBgqlTpz558oRqbG5u/u2333g8no+PT0pKCvVP9tWrV1taWkpLS/v06XP69Glqyd9///2tt95q/2tDDcKLi4tTJ552Xnrt2rV2dnZlZWUtLS3V1dU2NjZbtmyRr3X37l0+n+/k5JSWlkY1HjlyRCgUXrt2Tb5xKyurMWPG7Ny5k3q4YcMGKyur5ubmtoK5fv26vb19RUUF9bC0tLR///7Xr1+nXlEqlXp6evr4+EilUqlU2tZGPvvsM6lUeuTIETs7O3nj5MmTJ02apHL5q1evRqtBHpWSp0+fBgQEUPHMnDlzxIgRcXFxubm5QqFw06ZNd+7cUfy5NTExaStsgI4pKSnZsGED9TchRH7xRGNjo1QqNTExob6fUqlU8dDT9NjEWQVnFVAfumK5pampicfjOTs719XV3blzh2rk8XivvvqqUCgsKysbNWrU/Pnzf/7559GjRxNC/Pz87O3tP/zwQ2rJ3r17L1y4sP2XEIvF1DbViaedlxYIBKWlpc+ePSOEmJmZeXh4hIeHy9caOHCgQCAYNmzY8OHDqcY5c+a4uLjMnj1bcRj148ePAwMDqb+dnJweP37cTq/BRx99NHPmTCsrK+qhjY2Nr68vVdTk8XgmJiY8Ho/6o63ppjIyMpydnU1MTOLj4/v06SNvj4+PHzlypMpVqqurn6rhr7/+Urn69u3bv/76ayoeHo9XU1MzYcIEmUzm7u4+efJkBweHv/76S360S6XStt47QMd8++23ISEhrdupGj/577FDHT6KC2h0bOKsgrMKqA9dsdzi5OREXXXF4/HGjBnzww8/yEfdEUIGDRpECHnllVc8PT0JIQUFBVevXl29erXiFl44x5KLi8uFCxcaGhqU2g8ePKj40NbWVt6n0PqlCSFffPHFihUr+Hx+Q0NDRkbG48ePa2trlbapdKKfOXPm4sWLr1y54uHhIQ9GaeGnT5+qDDspKamoqMjR0VGx0cHBoaCgIDU1ddSoUe2/a4qFhYWTk1NdXd25c+d27dpFNebk5NTV1Y0YMULlKpMnT1Zny22ZNWuWubk59ffNmzfd3d0JIU5OTnFxcS+zWQB17N27d/78+R2bVlf9Y5PgrIKzCmgCFTuOmjlzJiHk008/VWxUutK+qKiIEKLp5WZUX21eXp5Su7W1dbdu3Xbv3r1gwYLc3NwePXq089KUqKiokSNHLlmypJ0zviLq3+Lff/9d3qLmv/iEkLKystbLU79YpaWlam7Ezs5OIBCcOnWKKIzmvnbtmkAgePPNN9XciEbks8+IxeL8/PyxY8fq4lUAWnv48KFYLFYaNqc+9Y9NgrMKziqgCVTsOEEmk33wwf9v7+7Doqrz/49/HEZBNl1dAS8VVspkWmxNQ5Iy83aR1FjzKq10LS1MTbAbm73MXF2t1jTddNNYtBskr65qCRaldb1L1iRvcEUsa/I2W0xiMRmVBcHD74/z2/nOAiLD3JxzPuf5+AvOnGHeM3POi/fnfM6cuV8IkZOTo6ZMx44dhRDl5eWXLl264YYb1NWCgoLc76VeLMrTC0SlpKQsWbIkJyfnd7/7nfvy0aNHCyEKCgqKi4tHjBjR4P9Bg4cWQjz22GOffPLJgQMH1AvZ79ix47oXZ6murhZCNDiJu4XUtG1wSKCqqkoI4Xp9Wuhvf/tbUlKS6167du0aOXLktf4Z5ObmtuQfzPDhw2+66aZmVti2bZvFYlHH1kIIRVE8+scJeOrUqVMHDx5Ug0X8d99Zs2ZNfn7+nDlz1KlPd2+//fa0adNa91ikCqmCluNNMoWqqqq8vLy8vLxLly65lggh2rVr536pzwaGDx8eHh5+8OBBjx6ra9eur7zySnFxsfpBtgZa2CZ+++23mZmZTz/9tOvriVx3dJ3d0tj27dtDQkJ+9atfeVSwasSIEe3atWtwrswXX3wREhLiyrUWOnjwoHtcbt26tZk5l5/97GdhLdC+ffsm756Xl1daWqo+SmxsrNqvCyGeeuopj2oGPDV06FD3M/HVq50/9dRTOTk5jbs6IURhYWGrH4tUIVXQchyxM4UbbrjhlltuWbhwoWsX/ctf/iKEePrpp10jMPWT7e73slgsS5cufeGFFxYtWuQ65eLdd98V1/u+6ueee+7kyZOPPvpoSEiIOqR2OXnyZOP1Gz+0yjXSVRTlyy+/VL/22/1x9+7d6/rm75MnT2ZlZS1btsx1GfQGca/+eq3/AeHh4UuXLk1PT7fb7eroXFGUjz76aNmyZa4XrYWnCUdGRnbo0EH9+eOPP7506dK1ToURQrTwPJsmffLJJ7/+9a8XLlxot9t37tx52223qcu3b9/ezCMC/qAOGhucjx8bG6vu2k6nMzIy0rXco31TRaqQKmgpLT6KCw2cPn167Nixa9eu/fvf/56Tk9OjR4/Zs2erN23btk3dY61Wa2JionpdAJfMzMzBgwdnZmZmZ2enpaUtWbJECNGvX7833nij+UfMysqKiopKSkrauHFjfn7+O++8k5ycvGPHDnVK5boPvXr16vDw8JUrV+bk5MyfP9/hcPTs2XP8+PFZWVnqCjfccMPYsWNTUlKys7PXrVvXt2/ft956S73p008/HTx4sPpnk5OTv/zyy6lTp6pfU33zzTe7rs7Q2FtvvZWUlJSZmZmVlZWcnOz6g7t37x42bJgQwmKxJCYmpqenN/PEd+zYccstt2RnZy9btuzOO+8MCQlp5moI3vjqq69uvfXW999/f/bs2V9++eXAgQOzsrJef/31119/3R8PBzTpP//5T3JysnoYrF27dmPHjnXtyAUFBVFRUevWrXv66afPnTtX78W+qSJVSBVcV5v6+npNGkpoorCw8OTJk1ardfDgwe6fnG+eoiglJSXh4eE9evQoKysTQnTp0uW6H491f0QhRPfu3YcOHerRKRqKoqjTFur1PBVFqaurc42tO3ToMGXKlDVr1nzzzTd1dXXNXyPUI+o52g0+y+aRurq6zz777I477khKSgoPD8/OzvZVbY0faO/evXfddZf6whYVFfXq1YuvboR+1NXVFRYW3nXXXS1MjJYgVUgVNIPGDkblimCtC/kf9913X1lZ2f79+4UQR48e7dOnz6FDh4z1xd6AaZEqkAAfnoBR1dXV1dbWal1FQ9u3b3/wwQeFENXV1b/5zW9Wr15N/gJGQapAAhyxg/Fs37592rRp6gd7e/bsuW/fPh/O8nhp1apVP/74Y+fOnfft2zd58uQGZ3kD0CdSBdKgsbu+5cuXl5WVvfbaa1oXAmNQFEVRFP38V4AOkSrwCKmClmMq9jo2bty4fv36a32nHtCYxWIhf9EMUgWeIlXQcmwo11RVVfWHP/zhww8/1LoQAJIgVQD4G0fsrmnEiBGbNm1avHgxH/MG4BOkCgB/o7G7puTk5G3btk2cOFHrQgBIglQB4G9MxV7TvHnzWr5ym+d2xmye6b9iADP4ZuybMZtnOhwOrQvxF1IFCLBvxr5Zv8Kzb+Y1Oho7n5Hsv5HNZuMZ6Zx8z6jNczu1LkFfJHt/5dtieUb6Z8JUYSoWZiFZWgHQHKkCHaKx842YzTMlGxYQWPon2XvU5rmdZpsxaR6pgsCT7D0y5/kMNHYAAACSoLEDAACQBI2dz9SvGC7ZvAkQMMzDNolUAVrNtKlCYwcAACAJLndyfXv37tW6BABSIVUA+AlH7HyJeROgFUw7Y9ISpArQCmZOFRo7AAAASdDYAQAASIJz7HxMnTcx7RFg+dhsNq1LkEeT1z5lf7kuUkUmRIoPXetyyibfX2jsgOuQ7FLsWuH/GaAiUnyCSLkWpmIBAAAkQWPne3yKDWghk8+YtBypArQQqUJjBwAAIAkaOwAAAEnQ2PkF8ybAdTFj4hFSBbguUkXwqVgA3jt69Og333wTFhZ29913a10LABmQKq1GYwfAK6mpqZs2bbr77ruPHDnSoUOH7du3h4SEaF0UAAMjVbzBVKy/MG8CMyguLs7IyDh48OB77713+PDhysrK9957ryV3ZMakFUgVmAGp4iUaOwCt16VLl/z8/C5duqi/xsTEnDlzRtuSABgaqeIlGjsArRcVFTVy5Ej15+PHj2/evHn8+PHalgTA0EgVL9HY+RHzJjCP0tLS4cOHL1iwoF+/ftddmRmTViNVYB6kSuvQ2AHw1v79+/v37z9nzpwXX3xR61oAyIBUaTU+FQvAK9u3b3/wwQffeustpksA+ASp4g2O2PkX8yaQ28mTJ++///6srKyxY8deuXLlypUrdXV1zd+FGRMvkSqQG6niJY7YAZ4x4v9U98grLi52Op333HOPa0lJSUlVVVVCQkIzf+Ho0aOnT5++++67O3bsKIS4cuXK9u3bo6Oj33rrrUuXLt13332uNWfNmrVmzRo/PAlAWqSKIFV8qB6+EBMT08yt4tkdAasEvtX8O2tEq1evtlqt58+fdy259dZb7Xb7xYsXm4yIdevW1dfXnzlz5oYbbkhJSVHvkpaW1qlTpzNnzrT8cdVX8rr7gnwveKuRKlKScgvXJFVcr2Tz+4KUL3jzOGIHmMvkyZOfffbZDz/88MknnxRClJSUfPHFFx988EFISEh+fn7j9X/5y18KIaKiotasWfPoo48+9NBDdXV1q1evzsnJiYqKCnT1APSHVNEVGjvAXDp37jxu3LjMzEw1gt95553bb789NjZWCDF69Ohm7jhlypRNmzY98cQTVVVVKSkp48aNC1DFAPSNVNEVGrtAUE925tRO6MTjjz9+7733fvvtt1FRUe+///78+fOFENXV1bNnz2688pQpU1ynzmRkZERERISGhq5evboVj8te4EOkCnSFVNEPGjvAdJKSknr06JGZmZmQkFBRUTF58mR1eUVFReOVr1y54vo5OzvbYrFUV1e7huYAIEgVPaGxA8xoypQp2dnZp0+fHjt2bOfOnYUQISEhOTk5zdzl+PHjzzzzzO9///srV648++yzI0aMuPnmmwNVLwC9I1V0ok19fb3WNcjAZrM5HI7m1+GIsRG15J01om+++cZms3Xp0mXDhg3NnwSjUhRFvXLB/v37FUXp37+/1Wo9cOCAxdLSa2G28JWU9QVvBVJFShJv4QFOFZvN9s3YN6+7/Uv8gl8LFygGzCgmJubOO++0Wq1JSUktWX/x4sWHDh169913hRAWi+X9998vLi5etGiRX4sEYCCkik4wFQuYlNVqnTRpUgsHx4sWLXIP3NjY2KtXr/qrMgDGRKrogbmO2JWWltrt9ri4uEGDBi1cuLDJkzpdjh079tRTT8XFxcXHx9vt9tLSUi8fnS8Cgk4oirJ169bdu3enpKRoXYvhkSqA0ChVOA+hSSY6YldRUTFhwoTQ0FC73V5dXZ2enr5///7c3Nzg4ODGK584cWLixIkRERF2u11RlDfffHP37t25ubldu3YNfOWAD125ckXd5mfPnn3LLbdoXY6xkSqAIFV0xkSNXUZGxoULF3Jzc8PDw4UQCQkJycnJGzZsaHJ48c4779TU1GRlZakr33HHHaNHj87Kypo7d26g6wZ8ql27djk5OZ06dRo6dKjWtRgeqQIIUkVnTDQVm5eXl5iYqEaqEMJms8XHxzf5bSdCiIqKitDQUNfKvXr1atu2LfMmkMO4cePIX58gVQAVqaIfZmnsLl68eP78+d69e7svjI6OdjgciqI0Xv8Xv/iF0+n84osv1F8LCwtra2v79OnTzEPYbDabzebDmgHzsP2X1oV4gFQB9My0u49ZpmKPHDkihIiMjHRf2L17d0VRampq2rdv32D9J5988rvvvnvkkUcSExOvXr26devW8ePHT506tZmHaOGVcvgiIKAx1+5joCAmVQA9U3cfA0WKr5ilsautrRVCBAUFuS+MiIhQb2ocwU6ns7KyUlGUqqqqqqoqIURdXd3ly5c7duwYqJKhFybMBX+Q7xqhpApaweFwECnwK7M0dm3bthVCNJgfqa6uFkJYrU28CCkpKWVlZZs3b46OjhZCHD169NFHH62oqHj77bcDUS50Q752JMAkPpJEqqB1SBUvSZwqPmGWc+x69uwphHA6ne4L1b2r8YUJjh079tVXXz3++ONq/gohYmNjp0yZsmfPnvLycu+L4WRnmITc+UuqAIEnd6r4hFkau27dulmtVvWcGJfKysqwsLAGMylCiHPnzgkhGlxcKioqSghx8uRJP1cKwBhIFQA6ZJbGzmKxDBkypLCw0PWNJU6nc9euXaNGjWq8cr9+/SwWS0FBgfvCPXv2WK3WAQMGBKJcALpHqgDQIbM0dkKIGTNmlJWVpaWlnT179tSpU6mpqRaLxfWRtKKiounTp+/du1cI0aFDhylTpmzatGnVqlVlZWXl5eUrV67My8t78sknGw/EW4d5E0jPDDMmpAoQSGZIFe+Z5cMTQoi+ffuuXLlyyZIlw4YNE0J07do1PT1dnQoRQpSVlRUUFIwePVr9dd68ecHBwevWrVu7dq0Qon379nPmzJk1a5ZWxQPQIVIFgN60qa+v17oGGdhstlZ80InBB2TV6m27dbuSlEgVwF3rtm0TRoqJpmIBAADkRmMHAAAgCRo7LXGyM6TEbKCGSBVIiVRpORo7AAAASdDYAQAASILGTmPMm0AyzJhojlSBZEgVj9DYAQAASILGTnsMryENBtY6QapAGqSKp2jsAAAAJEFjBwAAIAkaO11g3gQSYMZEV0gVSIBUaQUaOwAAAEnQ2OkFw2sYGgNrHSJVYGikSuvQ2AEAAEiCxg4AAEASNHY6wrwJDIoZE90iVWBQpEqr0dgBAABIgsZOXxhew3AYWOscqQLDIVW8QWMHAAAgCRo7AAAASdDY6Q7zJjAQZkwMgVSBgZAqXqKxAwAAkASNnR4xvIYhMLA2EFIFhkCqeI/GDgAAQBI0dgAAAJKgsdMp5k2gc8yYGA6pAp0jVXyCxg4AAEASNHb6xfAausXA2qBIFegWqeIrNHYAAACSMFdjV1paarfb4+LiBg0atHDhwoqKimZWvnjx4tKlS0eMGHH77bdPnjx59+7dAasTgFGQKgB0xUSNXUVFxYQJEw4dOmS326dPn75169bJkyfX1NQ0ufJ//vOfRx55JDs7++GHH160aFF1dfUTTzxRUFAQ4JqZN4EOMWPiQqoAPkGq+JBV6wICJyMj48KFC7m5ueHh4UKIhISE5OTkDRs2pKSkNF55/fr1x48fz87Ojo2NFUKMGjUqKSnpz3/+85AhQwJdNwC9IlUA6I2Jjtjl5eUlJiaq+SuEsNls8fHx+fn5Ta784YcfjhkzRs1fIURwcPDKlSuffPLJANXq/NWXQgAAGLNJREFUhuE1dIWBtTtSBfAeqeJbZjlid/HixfPnz/fu3dt9YXR0dHZ2tqIoFsv/NLjl5eU//PCDOozet2+f0+mMjo7u379/8w9hs9kcDofPKwdMwmazaV2CZ0gVQOcMlyo+YZbG7siRI0KIyMhI94Xdu3dXFKWmpqZ9+/buy7/++mshRFVVVXJysitVk5KSXnvttbZt217rIfyXv+rwmgENNOfX7VDdgwwUxKQK4D1/p4qBIsVXzDIVW1tbK4QICgpyXxgREeG6yV11dbUQ4uWXX46Pjz9w4EBJScns2bO3bNny6quvBqpeAHpHqgDQIbM0duqYWFEU94Vq1FqtTR+2jI2NXbBgQceOHYODg1NTU++5557333+/wV8AYFqkCgAdMktj17NnTyGE0+l0X6hOcwQHBzdYOSQkRAjhOsdZNXTo0Lq6uhMnTvi30GvgZGdojpm7BkgVwEukij+YpbHr1q2b1WpVz4lxqaysDAsLazCTIoQYMGCAEOLKlSvuC9VrU3Xq1MnPlQIwBlIFgA6ZpbGzWCxDhgwpLCy8evWqusTpdO7atWvUqFGNV27fvv1tt93mvrIQYvv27V27dnVd1yDwGF5DQwysGyNVAG+QKn5ilsZOCDFjxoyysrK0tLSzZ8+eOnUqNTXVYrFMnTpVvbWoqGj69Ol79+5Vf7Xb7aWlpTNnzjxx4kR5eflLL7108ODBOXPmaFc+AN0hVQDoTr2ZbN68eeDAgTExMTExMYMHD/7888/db4qJicnJyXEt2bVr19ChQ9WV+/fvn5WV1cxfjomJ8WPdbsSzOwLzQIBLILe6gO1KvkKqAK0QsK3OcJHivTb19fVa95YyCNh1RDl2jcAL5FbHJXldSBVILGBbnQkjxURTsQAAAHKjsTMYTnZGgHE4R3qkCgKMVPErGjsAAABJ0NgZD8NrBAwDa5MgVRAwpIq/0dgBAABIgsbOkBheIwAYWJsKqYIAIFUCgMYOAABAEkZq7I4ePbp27dqqqiqtC9EFhtfwK5MMrEkVd6QK/MokqaI5IzV2QohVq1b1799/+PDhu3fv1roWADIgVQDIxEiNXWxs7M6dO4cPH/79998/8cQTNpvtscceKy0t1bouzTC8hp+YZ2BNqgCBYZ5U0ZyRGjshRI8ePd58882vvvrqo48++vnPf/75558PHz48Pj5+1apVTqdT6+oAGA+p4o7hImB0BmvsXPr27btt27aSkpI33nijU6dOa9eujY+PHz58+L59+7QuDYAhkSoAJGDUxk515syZlStX/utf/xJCBAcHX7hwYcqUKXFxcadPn9a6tABheA2fM/mMCalCqsDnTJ4qAWbVuoDWKC0tXbBgwb59++rq6oQQN91009q1a2+88UYhRHFx8cSJE5OTk0tKSrQuE4BhkCoA5GCwxm7x4sW5ubmXL18WQoSFhaWlpY0bNy44ONi1Qr9+/eLi4g4ePFhRUdGlSxftKg0cdXjNYAg+YcJtiVRpjFSBD7EtBZiRGrujR49u3LjRarUmJyfb7fbw8PAmV7NYLGFhYZ06dQpweQAMh1QBIJk29fX1WtfQUkePHlUU5dZbb9W6kCbYbDaHw6FhAQyJ4D09bEUB3pVIlWboYXuA0Wm+FWm+HwWekY7YxcbGal0CAKmQKgAkY+xPxcKFD7LBS5oPrKE3pAq8RKpogsYOAABAEjR28mB4jVZjYI0mkSpoNVJFKzR2AAAAkqCxkwrDa7QCA2s0g1RBK5AqGqKxAwAAkASNnWwYXsMjDKxxXaQKPEKqaIvGDgAAQBI0dhJieI0WYmCNFiJV0EKkiuZo7AAAACRhrsautLTUbrfHxcUNGjRo4cKFFRUVLbnXsWPHBg0alJ+f7+/yfIjhNa6LgbVPkCqAC6miB0b6rlgvVVRUTJgwITQ01G63V1dXp6en79+/Pzc3Nzg4uJl71dbWPvvss//+979ra2sDVioAQyBVAOiNiRq7jIyMCxcu5ObmhoeHCyESEhKSk5M3bNiQkpLSzL1WrFjx7bffBqpGX1KH1wye0CS2DZ8gVQAXtg2dMNFUbF5eXmJiopq/QgibzRYfH9/8VMi+ffsyMzPT0tICUiAAgyFVAOiNWRq7ixcvnj9/vnfv3u4Lo6OjHQ6HoihN3sXpdM6dO3fGjBn9+vULSI2+xzkxaBIDa58gVQAXUkU/zNLYHTlyRAgRGRnpvrB79+6KotTU1DR5lwULFnTu3Dk1NbWFD2Gz2bwsEjAzm81mrJ2IVAF0zpx7kFkaO/Uk5aCgIPeFERERrpsayMvL27Fjx6pVqyyWlr5EDofD6zJ9j+E1GtDtwNrhcOhzJ7oWUgVQ6TlVtC5BA2Zp7Nq2bSuEaDA/Ul1dLYSwWht+guTs2bOLFi16/vnnb7zxxoBVCMBYSBUAOmSWT8X27NlTCOF0Ot0Xqr184wsTLF++/MqVK99+++3ixYuFEOfOnRNC5ObmlpSU/Pa3v23+QgY6xAfZ4MKW4EOkCtsSBKmiP2Zp7Lp162a1WtVzYlwqKyvDwsIazKQIIa5evdquXbvc3Fz117q6OiHEP//5z5KSkrlz5wamYAA6R6oA0CGzNHYWi2XIkCGFhYVXr15VM9fpdO7ateuBBx5ovPLq1avdfy0qKpo0adLixYvHjRsXoHJ9jeE1BANrXyNV2KLANqBDZjnHTggxY8aMsrKytLS0s2fPnjp1KjU11WKxTJ06Vb21qKho+vTpe/fu1bZIAAZCqgDQGxM1dn379l25cuXBgweHDRuWlJR06tSp9PT0qKgo9daysrKCggL1xBcp8UE2k2Ng7Q+kCqliZqSKPpllKlY1ZsyYMWPGeHrTgAEDzPmRaQDXRaoA0BUTHbEDw2vTYmANPyFVTItU0S0aO3MhhU2I/IVfkSomRKroGY0dAACAJGjsTIfhtakwsEYAkCqmQqroHI0dAACAJGjszIjhtUkwsEbAkComQaroH40dAACAJGjsTIrhtfQYWCPASBXpkSqGQGNnXqSwxMhfaIJUkRipYhQ0dgAAAJKgsTM1htdSYmANDZEqUiJVDITGDgAAQBI0dmbH8FoyDKyhOVJFMqSKsdDYAQAASILGDgyv5cHAGjpBqkiDVDEcGjsIQQpLgfyFrpAqEiBVjIjGDgAAQBI0dvj/GF4bGgNr6BCpYmikikHR2OH/kMIGRf5Ct0gVgyJVjIvGDgAAQBI0dvgfDK8Nh4E1dI5UMRxSxdBo7AAAACRBY4eGGF4bCANrGAKpYiCkitHR2KEJpLAhkL8wEFLFEEgVCdDYAQAASILGDk1jeK1zDKxhOKSKzpEqcqCxwzWRwrpF/sKgSBXdIlWkQWMHAAAgCRo7NIfhtQ4xsIahkSo6RKrIxFyNXWlpqd1uj4uLGzRo0MKFCysqKppZuaioaObMmXFxcXFxcTNnziwqKgpYnbpCCusK+as3pEorkCq6QqpIxkSNXUVFxYQJEw4dOmS326dPn75169bJkyfX1NQ0ufK2bdsmTZpUXl7+4osv2u3277//ftKkSQUFBQGuWSdIYZ0gf/WGVGk1UkUnSBX5WLUuIHAyMjIuXLiQm5sbHh4uhEhISEhOTt6wYUNKSkrjlZctWxYTE/PBBx8EBQUJIR544IExY8YsXbp0yJAhga4bgF6RKgD0xkRH7PLy8hITE9X8FULYbLb4+Pj8/PzGa9bW1gYFBd17771q/gohgoKC+vfvf/LkycCVqzMMrzXHwFqHSBVvkCqaI1WkZJbG7uLFi+fPn+/du7f7wujoaIfDoShKg5Xbtm27ZcuWWbNmuS88c+ZM586d/V6ojpHCGiJ/dYhU8R6poiFSRVZmmYo9cuSIECIyMtJ9Yffu3RVFqampad++ffN337FjR1FRUZPTKy42m00I4XA4vC4WMB119zEWUgXQMyOmik+Y5YhdbW2tEMI1CaKKiIhw3dSMoqKi559/vk+fPqmpqc2s5nA4pM9fhteaMMPA2vFfWhfiAVLFJ0gVTZgnVbSuQgNmaezatm0rhGgwP1JdXS2EsFqbO2z56aefTps2LTIyct26dcHBwX4t0hBI4QAzQ/4aFKniK6RKgJEqcjNLY9ezZ08hhNPpdF+o9vLNBOvbb789Y8aM/v37b9y4sUuXLv4u0ihI4YAhf/WMVPEhUiVgSBXpmeUcu27dulmtVvWcGJfKysqwsLAGMykuy5cvX79+/YMPPrh48WKLxSwdMIAWIlUA6JBZksVisQwZMqSwsPDq1avqEqfTuWvXrlGjRjW5fmZm5vr162fNmvXSSy+Rv40xvA4ABtY6R6r4FqkSAKSKGbSpr6/XuoYAKSkpefDBB0eOHDl//vyamppFixYdPnx406ZNUVFRQoiioqKMjIxp06YlJCSUl5cPGzbMYrE88MADDf7I/PnzmxyL22w2E56kSUb4j2lfW2PtSqSKz5l2yw8Ac762JtyPzDIVK4To27fvypUrlyxZMmzYMCFE165d09PT1fwVQpSVlRUUFIwePVoIsWfPHvVDbRs3bmzwR+bNm3etSRYTUkfYJkwKf+NVNQpSxedIFT/hVTUPEx2x8ysTjglcyAvfMvnraeZdqQEzvxQm3wt8zsyvpwn3I87zAAAAkASNHbzFKc8+ZOaBNeBCqvgQqWI2NHbwAVLYJ8hfwIVU8QlSxYRo7OAbpLCXyF+gAVLFS6SKOdHYwWdI4VYjf4EmkSqtRqqYFo0dfIkUbgXyF2gGqdIKpIqZ0djBx0hhj5C/wHWRKh4hVUyOxg6+Rwq3EPkLtBCp0kKkCmjs4Bek8HWRv4BHSJXrIlUgaOwAAACkQWMHf2F43QwG1kArkCrNIFWgorGDH5HCTSJ/gVYjVZpEqsCFxg7+RQo3QP4CXiJVGiBV4M6qdQGQnyuFTR49vAiAr5AqKl4ENEZjh0BQc8fMw0ozP3fAH0gVMz93NIOpWASOaSdQyF/AT0gVoAEaOwSUCVOY/AX8ilQB3NHYIdBMlcLkLxAApArgQmMHDZgkhclfIGBIFUDFhyegDbk/1CbxUwN0i1QBBI0dNCTrh9rke0aAUZAqAFOx0JhkEyjkL6A5UgVmxhE7aE+OCRQJngIgDVIFpkVjB10w+gSKcSsHZEWqwJxo7KAjRhxkG65gwFRIFZgNjR30xViDbKPUCZgZqQJTobGDHul/kK3z8gA0QKrAJGjsoFOuQbbQWdLpsCQALUGqwAxo7KBrugpinZQBwBukCuRGY3dNpaWlq1at2rFjR0hIyMiRI9PS0rp06aJ1USaleRATvvAJUkU/SBXIisauaRUVFRMmTAgNDbXb7dXV1enp6fv378/NzQ0ODta6NPNyD2IRkEAM5GNBeqSKDpEqkA+NXdMyMjIuXLiQm5sbHh4uhEhISEhOTt6wYUNKSorWpQWIzWZzOBxaV9EEVxr6Lx+Nkry6fY/QJFJFt1ssqeKi2/cILUdj17S8vLzExEQ1f4UQNpstPj4+Pz/fPBGsf42zWDQbms0HVgv/CNBqpIr+kSqQAI1dEy5evHj+/PnevXu7L4yOjs7OzlYUxWJp+gt2bTZbQKoLHKM8oxi3n9uIN6+53tg3m/n6yJjNM10/2zb7pK5AMMp7BFJFZZRnRKrAuGjsmnDkyBEhRGRkpPvC7t27K4pSU1PTvn37xnfh2LXhreAdhB+RKmZEqkALTQ8TTa62tlYIERQU5L4wIiLCdRMAeIRUARAYNHZNaNu2rRBCURT3hdXV1UIIq5VjnAA8RqoACAwauyb07NlTCOF0Ot0XqtMiXJgAQCuQKgACg8auCd26dbNareo5MS6VlZVhYWENZlIAoCVIFQCBQWPXBIvFMmTIkMLCwqtXr6pLnE7nrl27Ro0apW1hAAyKVAEQGDR2TZsxY0ZZWVlaWtrZs2dPnTqVmppqsVimTp2qdV0AjIpUARAAberr67WuQafy8/OXLFny448/CiG6du26bNmyhIQErYsCYGCkCgB/o7EDAACQBFOxAAAAkqCxAwAAkASNHQAAgCS44rkvLV++vKys7LXXXtO6EA+UlpauWrVqx44dISEhI0eOTEtL69Kly7VW/tOf/vT111+7L4mLi5s2bZr/y/SKR89RV8zw7jRgxJ3Ir4z4gphhuyVVDMSIO5E3aOx8ZuPGjevXrx85cqTWhXigoqJiwoQJoaGhdru9uro6PT19//79ubm517oU/rp168LCwm6++WbXEtdFuXTL0+eoH2Z4dxow4k7kV0Z8Qcyw3ZIqBmLEnchb9fDa5cuXX3zxxZiYmJiYmFmzZmldjgdeeeWV2NjYH374Qf3166+/jomJycjIaHLlH374ISYmJi8vL4AF+oBHz1FXzPDuuBh3J/IT474gZthuSRVDMO5O5CXOsfOBESNGbNq0afHixZ07d9a6Fs/k5eUlJiaGh4erv9pstvj4+Pz8/CZXLi4uFkLceOONgavPFzx6jrpihnfHxbg7kZ8Y9wUxw3ZLqhiCcXciL9HY+UBycvK2bdsmTpyodSGeuXjx4vnz53v37u2+MDo62uFwKIrSeP2vv/7aarX+9Kc/zczMfOmll/Lz8/V/TN7T56gfZnh33Bl0J/Ifg74gZthuSRWjMOhO5D3OsfOBefPmaV1Ca6jfRx4ZGem+sHv37oqi1NTUtG/fvsH6x44da9OmTVJSUmhoaG1tbVZW1htvvLFhwwbX4E+HPH2O+mGGd8edQXci/zHoC2KG7ZZU0fO7486gO5H3OGJnXrW1tUKIoKAg94URERGumxr44osvOnfu/PHHHx84cKC4uPj1118/ffr0nDlzAlNt63j6HPXDDO8O5GOG7ZZUCUy1aDWO2Hnm9OnTRUVFrl8HDBgQHR2tXTkeaFx527ZthRANjsBXV1cLIazWJjaMnTt31tbWqvcSQtx777179uz56KOPTp06pduTMDx9jvphhncHKlLFWNstqaLndweCxs5TxcXF8+fPd/366quvGiWCG1ceHx8vhHA6ne6rORwOIcS1Pvru2sNVAwYM+Oijj86cOaPbnbxnz57Cw+eoE62o3HDvDlSkivuv+t9uSRU9vzsQNHaeuu+++xITE12/6nw3dte48jZt2litVvWsC5fKysqwsLAGx+qFEOXl5Z999pnNZouNjXUtvHTpkhCiQ4cO/izcK926dWv5c9QVjyo36LsDFalirO2WVNHzuwPBOXaeCgoKCnWj893YXePKLRbLkCFDCgsLXR90cjqdu3btGjVqVOO7/+QnP3nhhRf++Mc/ui/My8uLiIjo169fIJ5Aq3j0HHXFDO8OVKSK+0L9b7ekip7fHQgaO5ObMWNGWVlZWlra2bNnT506lZqaarFYpk6dqt5aVFQ0ffr0vXv3CiFCQ0Mffvjhf/zjHytXriwvL//uu++ef/75w4cP2+12i0XXW1Hzz1HPzPDuQD5m2G5JFU2fBK5H6yskS2XgwIGGu7z15s2bBw4cqF6be/DgwZ9//rn7TTExMTk5OeqvdXV1y5Yti42NVVdOSEhw3aRzzTxHnTPDu9OAEXcivzLiC2KG7ZZUMRAj7kTeaFNfX691bwmNKYpy7NgxIYTNZrvuylevXi0pKenYsWOvXr38X5rPePQcdcUM7w7kY4btllSBPtHYAQAASIKZcgAAAEnQ2AEAAEiCxg4AAEASNHYAAACSoLEDAACQBI0dAACAJGjsAAAAJEFjBwAAIAkaOwAAAEnQ2AEAAEiCxg4AAEASNHYAAACSsGpdAOBH3333XUlJSVhY2MCBA10LDx06dPbs2T59+kRHR2tXGgBDIlWgc23q6+u1rgHwl6qqqjFjxpw7dy43N9dmswkhTpw4cf/993ft2vWvf/1raGio1gUCMBhSBTrHVCxkFhoaumLFCkVR5s6dqyiKoijPPPNMbW3tihUryF8ArUCqQOeCFi1apHUNgB9169attrZ269atVqu1oKBg27Ztdrs9KSlJ67oAGBWpAj1jKhbyUxRl/Pjxx48fr62tveeee9atW6d1RQCMjVSBbtHYwRSKi4snTpwohPjkk0969eqldTkADI9UgT5xjh1M4Z133lF/WL16tbaVAJADqQJ9orGD/HJycrZs2TJp0qQJEyZs2bIlNzdX64oAGBupAt1iKhaSKy0tve+++zp16rR582YhxJgxYyorKzdt2tSjRw+tSwNgSKQK9IwjdpDcM888c/ny5VdeeSU0NDQ0NPTll1++fPnyc889p3VdAIyKVIGe0dhBZmvXrj18+PBDDz2UkJCgLrnrrrvGjx9/6NChtWvXalsbACMiVaBzTMUCAABIgiN2AAAAkqCxAwAAkASNHQAAgCRo7AAAACRBYwcAACAJGjsAAABJ0NgBAABIgsYOAABAEjR2AAAAkqCxAwAAkASNHQAAgCRo7AAAACRBYwcAACAJGjsAAABJ0NgBAABIgsYOAABAEjR2AAAAkqCxAwAAkASNHQAAgCT+H2psRYUf/DjRAAAAAElFTkSuQmCC"
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% 2. Sine Function with a finer grid\n",
    "x1 = -5 : 0.5 : 5;                            % Known data points\n",
    "y1 = sin(x1);                                 % Known data values\n",
    "xint = -5 : 0.01 : 5;                         % Query points\n",
    "\n",
    "% Repeating interpolation with the finer grid\n",
    "yint_lin = interp1(x1,y1,xint,'linear');\n",
    "yint_cubic = interp1(x1,y1,xint,'pchip');\n",
    "yint_nearest = interp1(x1,y1,xint,'nearest');\n",
    "\n",
    "% Exact solution\n",
    "yint_sol = sin(xint);\n",
    "\n",
    "% Plot results\n",
    "figure(2)\n",
    "plot(xint,yint_sol,xint,yint_lin,xint,yint_cubic,xint,yint_nearest)\n",
    "legend('sin x','linear','cubic','nearest')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c778e08-030b-48fb-971b-fbc330d7b033",
   "metadata": {},
   "source": [
    "## griddedInterpolant"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c9c856a-4c63-4e9d-90fd-f69284ea205c",
   "metadata": {},
   "source": [
    "griddedInterpolant is used for n-dimensional interpolation on a grid. \n",
    "\n",
    "Compared with interp1, griddedInterpolant has two main differences.\n",
    "\n",
    "    It can create a object, so is more flexible. \n",
    "    It can handle multi-dimensional data."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "46f2cf4a-aad3-4730-99c3-d4eab3f1adf7",
   "metadata": {},
   "source": [
    "| Feature                    | interp1                         | griddedInterpolant           |\n",
    "|----------------------------|---------------------------------|-------------------------------|\n",
    "| **Dimensionality**         | One-dimensional                 | N-dimensional                 |\n",
    "| **Input Structure**        | Two vectors (x, y)             | Grid vectors and grid data    |\n",
    "| **Flexibility**            | Less flexible for repeated use  | More flexible, allows multiple evaluations |\n",
    "| **Methods**                | Limited to specified methods     | Multiple methods including extrapolation |\n",
    "| **Usage**                  | Simple function call            | Creates an object for interpolation |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "0d12b130-62df-4053-9cae-671c20b6b808",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[x,y] = ndgrid(-5:0.8:5);               \n",
    "% generates a grid of points in N-dimensional space\n",
    "z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);\n",
    "surf(x,y,z)                             \n",
    "% creates a 3D surface plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "e1cd3ef1-6287-484f-8720-4ef80077c1f0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAJ2CAIAAADqgjXlAAAAB3RJTUUH6QEdCDs0cZkMLQAAIABJREFUeJzs3Xl4U1X+P/BP09CWKpsUeEAYCiIdqyJ8Aac4KFKgKSAdRBFZREFAdKR8AcVRfjgMzAxflUUQBMuiVBYVkQ6LkLZUdgFxhMIgoFIEinZqWQrWrunvj5Oent6tSZrl5t736/HxSW5vkpOlzZvP2UIqKysJAAAAAIKfJdANAAAAAADvQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwAAAACDQLADAAAAMAgEOwDDys7O3rJlS25ubqAbAgAAfoJgB2BMCxcuPH/+fERExNChQ5cuXRro5gAAgD9YA90AMLjy8nIislqt4hHxanApLS0NCwsLdCtqd/Lkyd27dz///PMRERHNmzfv2rVrUlJSmzZtAt0uAADwLVTszOvIkSO+u/P8/PyXX345JiZm+PDh48aNGzFixHvvvUdEs2fP3rZtm+8ed+/evX/6059sNtu0adO8e89Lly597LHHXn311Z49e7K0qmcOh2Pv3r2XLl0iotjYWIfDceLEiUA3CgAAfA7BznRKS0szMzNHjx7dp08f12/lcDiys7NdPDkrK+uuu+4qLy//5ptvNm7c+MEHH6xfv75du3YjRoz429/+5lGrXfXQQw+tXLly7969169f9+LdfvTRR2+//fbHH39MRAcOHDh58qQX79wXOnXqdPXq1Q4dOhDR0aNHIyMje/ToEehGAQCAzyHYmcuxY8cmTJjw7bff5ufnu3XDvLw8VnKr1dGjRwcOHDhmzJiFCxdGRkby4wkJCfHx8Q6Hw70Wu69Zs2ZNmjTx7n1u2LChV69eVqt17ty5X375ZefOnb17/z712muvvffee15/TQAAQIcQ7Mylc+fOH3zwwaRJk5o1a+bWDb/44gtXTnM4HCNHjmzSpMncuXPlPx03bhyrIQWd8vLy8PBwIgoLC4uLiwt0c9wwa9asCRMmjBo1KtANAQAAf0CwA5e8/fbbrpz26aefnj179k9/+pPa9IiRI0d6tV2gZe3atQ888MCIESMKCgpOnz4d6OYAAIDPBevkRPCFvXv37ty5k4hKSkoaNWp06dKllJSUrKys119//auvvrp+/fro0aOJKDk5uVu3bor38NlnnxFRr1691B4iMTGRZb7du3e/8847xcXFkyZNunTp0vHjx0tKSpYsWRIWFlZeXj5v3rzCwsKrV6/+8ssvgwYNYo/LbrV06dKioqLx48cXFRWdPXv28uXLDofjL3/5i7wWeOrUqbS0tJs3b54/f/7//b//Fxsbq/30z549u3DhwoqKCiIKDQ2dMmVKx44djx49unjx4uPHj3///fejR49u0qTJokWLFG+en5+/bNmyCxcuPPnkk3379mUH9+/ff/jwYa/P5GDy8vJWrFjhcDhu3Lgxd+7c1NTU//73v0VFRawim56eHhUV9cADDxQWFr733nvPPvusL9oAAAD6Ugmm9NRTT916663ikQsXLjz44IP86vHjxwcPHlxZWVlWVlZSUhIWFjZx4sSSkpKSkpKKigq1u73nnnuIaOvWrbU2oKKi4ocffrBYLCNHjtyzZw+rCH7xxReVlZV//etfO3TocOnSpcrKyitXrrRp0+bNN9/kt/r222+tVmvnzp0PHDjADr7//vuRkZH79u3jd96yZcvevXsvXryYXZ0zZ07Lli01ml1ZWXn48OGOHTtevnyZvxrt2rU7fPhwRUVFSUlJYmLiyJEj2dNXu4f//d//LSkpef/99zt06MAPDhkyhL2Mcl988cVmF/AmSfzyyy/sHamsrBw+fPgf//jHrVu3Hj9+PDIycu7cuf/5z38iIiL4r3lYWJjGcwcAAMNAVyw4ff311wUFBcXFxexqp06dGjVqRERWq5Wt3GaxWMLCwsLCwiwW1Y9NQUEBO7PWh7NYLO3bt4+MjLx06dJDDz307LPP7tix4+GHHyaiiIiICxcuXL16lYiaNGmSkJCwcOFCfqvf//73ERERcXFxDzzwADv4zDPPdO3addSoUeLMjJ9++mnSpEnscufOnX/66Sftvsinnnpq+PDhLVu2ZFfbtGkzevTop59+mj1ri8XCn77izQ8dOtSlS5ewsLCdO3fefvvt/PjOnTt79uypeJMrV6784oLffvtN8ebz58//+9//zt+a69evP/LIIw6HIz4+fsiQIbGxsb/99hv/PS8pKdF47gAAYBjoigWn7t27X7hw4d57733kkUd69OiRmJj4wQcfuHsnXbt23bZtW2lpqeT4ypUrxavR0dG8s/Kuu+4ioltvvTUxMZEd+ctf/vLSSy9ZrdbS0tJDhw799NNPN27ckNyhJDsOHz78hRdeyMzMTEhI4C2RnPzLL7+oNTsrK+vs2bOdOnUSD8bGxp4+fXrv3r0PPfRQLU+bKCoqqnPnzkVFRZs2bVqyZAk7eOzYsaKioj/+8Y+KNxkyZEitd6thxIgRTZs2ZZe/+eab+Ph4IurcufPWrVvrcrcAABDUULEDp9tvv33Xrl1t2rRZvHjxsGHDbr/9dg9WEv7DH/5ARPIV71q1atWwYcOlS5eOHz/++PHjjRs35j9SXDokNTW1Z8+ekydP1khjIlZp+/nnn/kRV6qGHFvIV3ITVgy7cOGCK/fQoUOHiIiI9evXkzBBZN++fREREffff7/rLXEd6/UmooKCglOnTrm1KiEAABgVKnbg9NNPP7Vr1y4rK8vhcBw8ePCNN94YNmzY9evX5fNbV69ePXbsWMU7GT9+/Jw5czZv3vz666+LxwcMGEBEe/bsOXbsWJ8+fcS5F6GhoZI7eeaZZz7//POvvvqqbdu2RLRr1669e/dqN571IIujytzCMpyk0FhUVEREt956q+v3s2PHjsTERH6T3bt39+3bVy1ipqWluRJb4+Pj27dvr3FCRkaGxWJhFTsicjgcboVaAAAwEnwBgNPhw4fZnFaLxdKzZ89//etfpLLt2MGDB9XupEWLFv/85z+PHTvG7krCldWJf/zxxzVr1vzv//4vS3XirfiYObnMzMyIiIh+/frVev+K+vTpExYWJhmEd/LkyYiICB6YXPH111+LISw9PV2jG/e2226LckH9+vUVb75ly5bc3Fz2KLGxsQ0bNmTH//znP7veYAAAMBhU7EyqvLxcHrOWLFkyfvx4Xu9p1KgR70aMjY1lA90KCwtbt26tcc/Tpk07d+7c008/HRERwQp13Llz5yQns6U65HfCi2cOh+M///kP25tVnLhw6NCh8vJyVk08d+7chx9++Oabb/LNFSRPjV3ViJXNmjX7v//7v+XLl0+fPp2V/RwOx8aNG998800WmFycfNC6desGDRqwy5999tnNmzfVBtgRkStD99R8/vnnf/rTn/76179Onz49KyvrvvvuY8czMzM1HhEAAAwvdNasWYFuA/hPcXHx0KFD33rrrYyMjLKystWrV+/evbtly5bR0dGnT5/+8ccf9+3bV1pa+u23386ePXvmzJkxMTHshrGxsQsWLGjQoMEnn3wyZcoU7Q7KgQMH/u53v5syZUp6errFYrl48eKBAwf++te/Tps27c4772zevPnvf/97tl/tuXPndu3adeDAgTZt2kRHRxNR48aNmzZtOn/+fKvVmpeXt27dupkzZ27evHnfvn29e/dm8xvmzp1777337t27t6ys7MCBA1OnTp0zZ87zzz9PRLt37x49evSpU6dOnTr19ddf33fffa+88so777xTWFh44MCBwsJCtTjVo0ePW2655fXXX3c4HCdOnHj99dfHjRs3ceLE/fv3P/PMM1lZWSdPnjx48GBRUZHaGn5EFB0dPW/evFatWm3btm316tW//PLLsmXLQkJCPH27VFVUVOzZs2fIkCGrV69+++23169fHxER8cUXX+Tn50+YMMHrDwcAAMEipLKyMtBtAF0oKCho1KiR1WplO9zzsflceXn5wYMHH3jgAbVdJeQOHjzIqnStWrV6+OGHXR/75XA4WE9ox44d2dXy8nJesWvQoMHo0aOXLl169uzZ8vLyWlcedgub+SGZIeu68vLy/fv333///YmJic2aNdu0aZMX2yZ5oEOHDj3wwAPsVT169Ogdd9yBDWEBAEwOwQ6CDw92gW5IDYMGDcrLy2OjEk+dOnX33Xd/8803inN+AQAAfASTJyD4lJeXl5WVBboVUpmZmUOHDiWi4uLip556avHixUh1AADgZ6jYQTDJzMwcO3YsW4ikbdu2hw8fdr1f2NcWLVp09erVJk2aHD58eNSoUZKJIwAAAH6AYFe7t956Ky8vb968eYFuCOidw+FwOBz6yZoAAGA26Iqtxbp161auXKm2XyeAyGKxINUBAEAA4UtIVVFR0dy5cz/55JNANwQAAADAJajYqerTp8/WrVtnz56NJSQAAAAgKCDYqUpKSsrIyBg2bFigGwIAAADgEnTFqnr11VddPzlkWlbHbc/7rjEAZnD2kWUdtz1/5syZQDcEwPtycnLYhaNHj7INbNq1axfQFoExIdh5jcG+jWJiYvCMdM54zyhkWlagmwDgTTzMkRDjLl26xC6znyLegXch2IFZGCwDAYBu8TynHdrEeFfryQAuQrDzjo7bng+hZZXz4wPdEK9BDNI/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t7/97eTJk7///e9vdqbIhAkTPP6kcOKTTz4ZPHjwk08+WVlZeeLECaXLgQ4tWLDgtddea7n8gw8+8MjjkypqQ6qomapP0oQHhYWFvfTSS/abGRkZd91111NPPSWEyM/P/8tf/lJTU5OWlnb+/PkjR47U1tYuW7ZM/opWZWXl+++/bzab/f39AwICunfv7vyJvvjiCyFEfHz8zVZISkqyp7OTp25oaHjvvfdsNtvPP//8008/PfzwwykpKfZ7LV++vLq6OjU1tbq6+uTJkxcuXJAk6Y9//GPLgfuxY8eys7OvX79+7ty5119/PSoqyknxJ0+efP/99xsbG4UQfn5+L7zwQmRkpBCisLBw6dKlR44cOX36dEpKSnBw8JIlS1p9hIqKipUrV5aWlj7xxBMjRoyQF3711VcHDhxwfP89qLy8fM2aNZIkXbt27e23396wYcPly5erq6vT0tJCQ0O3bt0aEhIyePBgok8R0QAAIABJREFUm8324YcfTpkyxRs1wMhWrlz5zDPPBAYGOi7cuXPnn/70p2+++aaqqkrec9PT0wcOHOi4juv7JqlCqsANSp/kB586evRobm5uamrqo48+evnyZXlhY2Pj999/bzKZJkyYsHv3bnmQvWvXrqamptLS0p49e27atEle89KlS4MGDXK+2cgn4eXm5rpSj5Onnjt3bt++fc+fP9/U1HTlypXw8PCFCxfa73X8+HGz2RwdHb1v3z554bp164KCgvbu3Wt/8LCwsGHDhi1dulS+uWDBgrCwsMbGxpsVc+DAgcjIyAsXLsg3S0tL77jjjgMHDsjPWFtbm5SUNGHChNra2tra2ps9yPPPP19bW7tu3bq+ffvaF44dO3bMmDGtrr9r164sF9irauann36aNm2aXM/48eOHDBmSm5t75MiRoKCgt99++7vvvnP8c+vv73+zsoG2OXfu3IIFC+SfhRD2L0/U19fX1tb6+/vL22dtba3jrufuvkmqkCpwHVOxxtLQ0GAymQYMGFBdXf3dd9/JC00m05133hkUFHT+/PkHHnhgypQpf//734cOHSqEeOqppyIjI5944gl5ze7du0+dOtX5U1RWVsqP6Uo9Tp46MDCwtLT0559/FkIEBwcnJia+//779nvdddddgYGBcXFxgwcPlhc+/fTTMTExEydOdDyN+uLFi2lpafLP0dHRFy9edDJr8Ic//GH8+PFhYWHyzfDw8JSUFPmgpslk8vf3N5lM8g83u9zU/v37BwwY4O/vv2XLlp49e9qXb9my5b777mv1LleuXPnJBb/88kurd1+0aNEbb7wh12MymaqqqkaPHi1JUkJCwtixY6Oion755Rf73l5bW3uz1w60zTvvvGO1Wlsul4/xi3/uO/Lu47iCW/smqUKqwHVMxRpLdHS0/K0rk8k0bNiwTz/91H7WnRDi17/+tRDitttuS0pKEkKcOHFi165dc+bMcXyEW15jKSYmZvPmzXV1dc2Wr1271vFmRESEfU6h5VMLIf74xz++/PLLZrO5rq5u//79Fy9evHbtWrPHbBb048ePnzFjxvbt2xMTE+3FNFv5p59+arXsnTt3njx5sn///o4Lo6KiTpw4sWfPngceeMD5q5aFhIRER0dXV1dnZmYuW7ZMXlhUVFRdXT1kyJBW7zJ27FhXHvlmnnzyya5du8o/Hz58OCEhQQgRHR2dm5vbnocFXLFy5copU6a07bK6ru+bglQhVeAOjtgZ1Pjx44UQM2fOdFzY7Jv2J0+eFEK4+3Uzea62uLi42fIePXp07tx5+fLlqampR44c6dKli5Onlm3YsOG+++6bNWuWk8R3JA+LL126ZF/i4hBfCHH+/PmW68t/sUpLS118kL59+wYGBv73f/+3cDibe+/evYGBgffee6+LD+IW+9VnKisrjx07Nnz4cG88C9DSDz/8UFlZ2ey0Ode5vm8KUoVUgTs4YmcIkiQ98sgjQoisrCw5ZTp37iyEqKiouH79+m233Sav5ufn53gv+WJR7l4gKjU1dcGCBVlZWX/6058clz/00ENCiN27dxcVFQ0fPrzZ34NmTy2EePrpp7/88stvvvlGvpD9jh07bnlxlpqaGiFEs5O4XSSnbbNDAtXV1UII+/vjor///e9JSUn2e+Xn548YMeJmfwyys7Nd+QOTkJBw5513Ollh27ZtJpNJHlsLISRJcusPJ+Cus2fPHjp0SA4W8c99Z/ny5Xl5ebNmzZKnPh19/PHHkydPbttzkSqkClzHh2QI1dXVOTk5OTk5169fty8RQvj7+zte6rOZhISE0NDQQ4cOufVc3bt3f+utt4qKiuQvsjXjYpv4ww8/rF+//vnnn7f/eyL7He1nt7S0ffv2wMDA//iP/3CrYNnw4cP9/f2bnSvz7bffBgYG2nPNRYcOHXKMy61btzqZc/nXf/3XEBd06tSp1bvn5OSUlZXJzxIVFSX360KI5557zq2aAXcNHTrU8Ux8+Wrnzz33XFZWVsuuTghRUFDQ5uciVUgVuI4jdoZw22233XXXXXPnzrXvon/729+EEM8//7x9BCZ/s93xXiaT6Z133nnttdfmzZtnP+Xir3/9q7jV/6t+6aWXzpw589RTTwUGBspDarszZ860XL/lU8vsI11Jkr777jv53347Pu/+/fvt//n7zJkzGRkZCxcutF8GvVncyzdv9jcgNDT0nXfeWbVqldVqlUfnkiR9/vnnCxcutL9pLp4m3KtXr9tvv13++Ysvvrh+/frNToURQrh4nk2rvvzyy9///vdz5861Wq07d+78zW9+Iy/fvn27k2cEvEEeNDY7Hz8qKkretW02W69evezL3do3ZaQKqQJXKfFVXCjg3Llzo0ePXrFixT/+8Y+srKyePXvOnDlT/tW2bdvkPdZsNicmJsrXBbBbv379/fffv379+szMzPT09AULFgghoqOjly1b5vwZMzIywsPDk5KSNm7cmJeXt27duuTk5B07dshTKrd86qVLl4aGhi5evDgrK2v27NklJSW9e/ceO3ZsRkaGvMJtt902evTo1NTUzMzMNWvW9O/f/6OPPpJ/tWvXrvvvv19+2OTk5O+++27SpEnyv6nu27ev/eoMLX300UdJSUnr16/PyMhITk62P+DevXuHDRsmhDCZTImJiatWrXLywnfs2HHXXXdlZmYuXLjwd7/7XWBgoJOrIbTH8ePH77nnnk2bNs2cOfO7774bNGhQRkbGBx988MEHH3jj6YBW/fLLL8nJyfJhMH9//9GjR9t35N27d4eHh69Zs+b555+/dOlSUzv2TRmpQqrgljo0NTUp0lBCEQUFBWfOnDGbzffff7/jN+edkySpuLg4NDS0Z8+e5eXlQoiuXbve8uuxjs8ohOjRo8fQoUPdOkVDkiR52kK+nqckSQ0NDfax9e23356SkrJ8+fKTJ082NDQ4v0aoW+RztJt9l80tDQ0NX3311b333puUlBQaGpqZmemp2lo+0f79+wcPHiy/sYWFhX369OFfN0I9GhoaCgoKBg8e7GJiuIJUIVXgBI0dtMoewUoX8n88/PDD5eXlBw8eFEIcO3bs7rvvPnz4sLb+sTdgWKQKdIAvT0CrGhoa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"
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F = griddedInterpolant(x,y,z);  \n",
    "% creates an interpolant object F from the input data x, y, and z\n",
    "[xq,yq] = ndgrid(-5:0.4:5);    \n",
    "% creates a new grid of points for querying the interpolant\n",
    "vq = F(xq,yq);    \n",
    "% uses the interpolant object F to compute interpolated values \n",
    "surf(xq,yq,vq)    \n",
    "% creates a 3D surface plot "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "071b92b8-7def-40dc-9fb0-8c2a56733695",
   "metadata": {},
   "source": [
    "From the example above, we can find that one distinction of griddedInterpolant is that, it creates an object, the \"F\" in example above."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "200ef93c-6b57-4e40-ba99-9ab1839e89ec",
   "metadata": {},
   "source": [
    "So, people may prefer **griddedInterpolant** over **interp1** even in 1-dimension case, due to its object characteristic.  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2068b49b-0a57-405e-bd49-4bfce4566f8b",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f7b794e-0570-4b57-9db6-f6a4c8e2b401",
   "metadata": {},
   "source": [
    "# 8. Discretization"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fc4db42-7c35-41e6-bb9b-47b1a812284b",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f678945e-33f3-413e-ac02-601b7ececfc0",
   "metadata": {},
   "source": [
    "## 8.1 Markov Chain Approximation of Continuous Stochastic Process"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "520c5e47-bc1d-4cbf-aaa0-246c3012a4ac",
   "metadata": {},
   "source": [
    "The Rouwenhorst and Tauchen methods are both techniques to approximate continuous stochastic processes, particularly for Markov processes"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a01fb726-92dc-4ab1-9059-099e440424ee",
   "metadata": {},
   "source": [
    "| Feature                   | Rouwenhorst Method                     | Tauchen Method                       |\n",
    "|---------------------------|----------------------------------------|--------------------------------------|\n",
    "| **Origin**                | Rouwenhorst (1995)                    | Tauchen (1986)                       |\n",
    "| **Focus**                 | highly persistent processes ($\\rho$ > 0.9)            | Primarily AR(1) processes            |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f297a6a-6ebb-412f-8b98-92ccf7aa371c",
   "metadata": {},
   "source": [
    "Here is a rouwenhorst example provided by professor Benjamin Moll."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "88531e9c-1303-4762-8491-261a48e660af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>File rouwenhorst.m created successfully.</pre></body></html>"
      ],
      "text/plain": [
       "File rouwenhorst.m created successfully."
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%file rouwenhorst.m\n",
    "\n",
    "function [grid, trans, dist] = rouwenhorst(n, mu, sigma, rho)\n",
    "\n",
    "    % Inputs:\n",
    "    % n: Number of discrete states.\n",
    "    % mu: Mean of the underlying continuous process.\n",
    "    % sigma: Standard deviation of the underlying continuous process.\n",
    "    % rho: Autocorrelation coefficient of the process.\n",
    "    \n",
    "    % Outputs:\n",
    "    % grid: A vector containing the discrete points.\n",
    "    % trans: The transition matrix that describes the probabilities of moving between states.\n",
    "    % dist: The ergodic distribution of the Markov chain.\n",
    "\n",
    "    % grid\n",
    "    width = sqrt((n-1) * sigma^2 / ( 1 - rho^2));\n",
    "    grid = linspace( mu-width, mu + width, n)';\n",
    "    \n",
    "    %transition matrix\n",
    "    p0 = (1 + rho) / 2;\n",
    "    trans = [p0 1-p0; 1-p0 p0];\n",
    "    \n",
    "    if n > 2\n",
    "        for i = 1:n-2\n",
    "            cstr_temp = zeros(length(trans(:,1)), 1);\n",
    "            trans = p0 .* [trans cstr_temp; cstr_temp.' 0] + (1 - p0 ) .* [cstr_temp trans; cstr_temp.' 0]  + (1 - p0 ) .*  [ cstr_temp.' 0; trans cstr_temp] + p0 .* [ cstr_temp.' 0; cstr_temp trans];\n",
    "        end\n",
    "        trans = bsxfun(@rdivide, trans, sum(trans,2));\n",
    "    end\n",
    "    \n",
    "    % ergodic distribution\n",
    "    dist = ones(1,n)./n;\n",
    "    for i = 1: 100\n",
    "        dist = dist*(trans^i);\n",
    "    end\n",
    "    dist = dist';\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "d302115a-7dfc-41b0-a173-20cc9765e039",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>grid = 3×1 double\n",
       "   -3.2444\n",
       "         0\n",
       "    3.2444\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "grid = 3×1 double\n",
       "   -3.2444\n",
       "         0\n",
       "    3.2444\n"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>trans = 3×3 double\n",
       "    0.9025    0.0950    0.0025\n",
       "    0.0475    0.9050    0.0475\n",
       "    0.0025    0.0950    0.9025\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "trans = 3×3 double\n",
       "    0.9025    0.0950    0.0025\n",
       "    0.0475    0.9050    0.0475\n",
       "    0.0025    0.0950    0.9025\n"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>dist = 3×1 double\n",
       "    0.2500\n",
       "    0.5000\n",
       "    0.2500\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "dist = 3×1 double\n",
       "    0.2500\n",
       "    0.5000\n",
       "    0.2500\n"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = 3;\n",
    "mu = 0;\n",
    "sigma = 1;\n",
    "rho = 0.9;\n",
    "[grid, trans, dist] = rouwenhorst(n, mu, sigma, rho)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d72ff25-ec0b-4511-b77d-ee09e379bf85",
   "metadata": {},
   "source": [
    "## 8.2 Discrete normal distribution"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2311b7a-4fa0-4f43-86f4-1cd093973821",
   "metadata": {},
   "source": [
    "Sometimes, we need to approximates a normal distribution using discrete points. Here is a function written by Professor Greg Kaplan. The function computes the probabilities for discrete points, and calculates the expected value and standard deviation. \n",
    "\n",
    "This can be useful where a continuous distribution needs to be handled in a discrete manner"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "9650c760-8a3f-41fb-9302-93d29eb0f0da",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>File discrete_normal.m created successfully.</pre></body></html>"
      ],
      "text/plain": [
       "File discrete_normal.m created successfully."
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%file discrete_normal.m\n",
    "\n",
    "function [f,x,p] = discrete_normal(n,mu,sigma,width)\n",
    "% creates equally spaced approximation to normal distribution\n",
    "% n is number of points\n",
    "% mu is mean\n",
    "% sigma is standard deviation\n",
    "% width is the multiple of stand deviation for the width of the grid\n",
    "% f is the error in the approximation\n",
    "% x gives the location of the points\n",
    "% p is probabilities\n",
    "\n",
    "x = linspace(mu-width*sigma,mu+width*sigma,n)';\n",
    "\n",
    "if n==2\n",
    "    p = 0.5.*ones(n,1);\n",
    "elseif n>2    \n",
    "    p  = zeros(n,1);\n",
    "    p(1) = normcdf(x(1) + 0.5*(x(2)-x(1)),mu,sigma);\n",
    "    for i = 2:n-1\n",
    "        p(i) = normcdf(x(i) + 0.5*(x(i+1)-x(i)),mu,sigma) - normcdf(x(i) - 0.5*(x(i)-x(i-1)),mu,sigma);\n",
    "    end\n",
    "    p(n) = 1 - sum(p(1:n-1));\n",
    "end\n",
    "\n",
    "Ex = x'*p;\n",
    "SDx = sqrt((x'.^2)*p - Ex.^2);\n",
    "\n",
    "f = SDx-sigma;"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "e5ce2a94-7690-4fa0-9969-1d4fd4561224",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>f = 0.1262</pre></body></html>"
      ],
      "text/plain": [
       "f = 0.1262"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>x = 9×1 double\n",
       "  -10.0000\n",
       "   -7.5000\n",
       "   -5.0000\n",
       "   -2.5000\n",
       "         0\n",
       "    2.5000\n",
       "    5.0000\n",
       "    7.5000\n",
       "   10.0000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "x = 9×1 double\n",
       "  -10.0000\n",
       "   -7.5000\n",
       "   -5.0000\n",
       "   -2.5000\n",
       "         0\n",
       "    2.5000\n",
       "    5.0000\n",
       "    7.5000\n",
       "   10.0000\n"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>p = 9×1 double\n",
       "    0.0000\n",
       "    0.0009\n",
       "    0.0295\n",
       "    0.2356\n",
       "    0.4680\n",
       "    0.2356\n",
       "    0.0295\n",
       "    0.0009\n",
       "    0.0000\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "p = 9×1 double\n",
       "    0.0000\n",
       "    0.0009\n",
       "    0.0295\n",
       "    0.2356\n",
       "    0.4680\n",
       "    0.2356\n",
       "    0.0295\n",
       "    0.0009\n",
       "    0.0000\n"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = 9; \n",
    "mu = 0;\n",
    "sigma = 2;\n",
    "width = 5;\n",
    "[f,x,p] = discrete_normal(n,mu,sigma,width)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d5bfe58-745c-4e1b-8d7d-5106ff022dd5",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f59bf451-0182-4d56-88c2-bcfe4678ac83",
   "metadata": {},
   "source": [
    "# 9. Simulation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7906901-1a7c-4c7e-a5c5-ec7176aa6135",
   "metadata": {},
   "source": [
    "________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0524b34b-fdff-4ce2-b79e-91117cc503d0",
   "metadata": {},
   "source": [
    "## 9.1 Random Number Generation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ea81a21-f4f4-47b4-b955-39cb2f0b4d54",
   "metadata": {},
   "source": [
    "By setting a specific seed value (in this case, 100), we ensure that the sequence of random numbers generated is the same every time we run the code.."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "e7972350-12e0-4f54-aa17-e5403305cac8",
   "metadata": {},
   "outputs": [],
   "source": [
    "rng(100)   % Set a random seed"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b55bcc34-c013-4827-aecf-ee764dd46788",
   "metadata": {},
   "source": [
    "**\"rand\"** generates uniformly distributed random numbers in the interval (0, 1).\n",
    "\n",
    "The basic syntax is  \n",
    "\n",
    "    rand generates a single random number\n",
    "    rand(n) generates an n×n matrix of random numbers.\n",
    "    rand(m, n) generates an m×n matrix of random numbers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "6530eeaa-b229-41cc-b406-1751a2e67cda",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>r1 = 0.5434</pre></body></html>"
      ],
      "text/plain": [
       "r1 = 0.5434"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>r2 = 3×3 double\n",
       "    0.2784    0.0047    0.8259\n",
       "    0.4245    0.1216    0.1367\n",
       "    0.8448    0.6707    0.5751\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "r2 = 3×3 double\n",
       "    0.2784    0.0047    0.8259\n",
       "    0.4245    0.1216    0.1367\n",
       "    0.8448    0.6707    0.5751\n"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>r3 = 2×4 double\n",
       "    0.8913    0.1853    0.2197    0.8117\n",
       "    0.2092    0.1084    0.9786    0.1719\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "r3 = 2×4 double\n",
       "    0.8913    0.1853    0.2197    0.8117\n",
       "    0.2092    0.1084    0.9786    0.1719\n"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r1 = rand;           % Single random number\n",
    "r2 = rand(3);       % 3x3 matrix of random numbers\n",
    "r3 = rand(2, 4);    % 2x4 matrix of random numbers\n",
    "r1\n",
    "r2\n",
    "r3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21d3ed45-685d-4d0a-9df0-fabe940a9301",
   "metadata": {},
   "source": [
    "**\"random\"** is a more general function that generates random numbers from various probability distributions, such as normal, binomial, Poisson, etc.\n",
    "\n",
    "The syntax depends on the distribution you want to use. For example:\n",
    "\n",
    "    random('Normal', mu, sigma, m, n) \n",
    "\n",
    "generates an m×n matrix of random numbers from a normal distribution with mean mu and standard deviation sigma."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21979a11-e4da-48ec-a279-5cd9a79bdac6",
   "metadata": {},
   "source": [
    "Generate a 3 by 2 matrix of random number."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "3c2f4f2b-528a-4ded-90e6-88888db3f39f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>Matrix_Normal = 3×2 double\n",
       "    0.1609    0.6150\n",
       "   -0.6151   -0.9014\n",
       "   -0.2390    0.3481\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "Matrix_Normal = 3×2 double\n",
       "    0.1609    0.6150\n",
       "   -0.6151   -0.9014\n",
       "   -0.2390    0.3481\n"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>Matrix_Uniform = 3×2 double\n",
       "    0.8259    0.8913\n",
       "    0.1367    0.2092\n",
       "    0.5751    0.1853\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "Matrix_Uniform = 3×2 double\n",
       "    0.8259    0.8913\n",
       "    0.1367    0.2092\n",
       "    0.5751    0.1853\n"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng(100)                              % Set a random seed\n",
    "m = 3;                                % Number of rows\n",
    "n = 2;                                % Number of columns\n",
    "\n",
    "Matrix_Normal = random('Normal',0,1,m,n); \n",
    "Matrix_Normal\n",
    "% generates a 3x2 matrix named Matrix_Normal filled with random numbers \n",
    "% drawn from a normal distribution.\n",
    "% 0: The mean of the normal distribution.\n",
    "% 1: The standard deviation of the normal distribution.\n",
    "\n",
    "Matrix_Uniform = random('Uniform',0,1,m,n);\n",
    "Matrix_Uniform\n",
    "% generates a 3x2 matrix named Matrix_Uniform filled with random numbers \n",
    "% drawn from a uniform distribution.\n",
    "% 0: The lower bound of the uniform distribution.\n",
    "% 1: The upper bound of the uniform distribution."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "6668b663-0382-4ea3-8b93-e3f27110033b",
   "metadata": {},
   "source": [
    "Generate a 2 by 1 joint normal random vector with mean mu and variance omega.a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "9c5fa57e-c920-4890-b8fe-1004f6000f0c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>B1 = 2×1 double\n",
       "    2.2276\n",
       "   -1.0935\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "B1 = 2×1 double\n",
       "    2.2276\n",
       "   -1.0935\n"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng(100);   \n",
    "mu = [2;-1];                          % Define the mean vector\n",
    "omega = [2,3;3,5];                    % Define the covariance matrix\n",
    "P = chol(omega)';                     % Perform Cholesky decomposition\n",
    "B1 = P*random('Normal',0,1,2,1) + mu; % Generate a joint normal random vector\n",
    "B1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c17f8989-a250-4152-9a35-9fffbf953889",
   "metadata": {},
   "source": [
    "Or, we can use the \"mvnrnd\" function to achieve the same result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "fbd2f2f0-421c-4ad3-8814-fdadf9ac1822",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>B2 = 2×1 double\n",
       "    2.2276\n",
       "   -1.0935\n",
       "</pre></body></html>"
      ],
      "text/plain": [
       "B2 = 2×1 double\n",
       "    2.2276\n",
       "   -1.0935\n"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng(100); \n",
    "B2 = mvnrnd(mu,omega,1)';\n",
    "B2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7779db4-29f3-4e2a-8921-3e2bf545c1f7",
   "metadata": {},
   "source": [
    "Generate a uniform distributed random number on interval [a,b]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "8708af16-c4d9-44b8-9d3e-1ad30b8a19cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "a=1;\n",
    "b=2;\n",
    "C1 = random('Uniform',0,1)*(b-a) + a;"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8603c2c6-dcba-4ece-8f08-a55fba759cdd",
   "metadata": {},
   "source": [
    "Here is another way, which is pretty similar. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "be300348-e78b-4ac9-a906-18f892160cde",
   "metadata": {},
   "outputs": [],
   "source": [
    "C2 = random('Uniform',a,b);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "52b80b86-9c87-4b05-b691-8cbf5fac8d72",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d661a35-11af-486a-a102-44bd119f81cd",
   "metadata": {},
   "source": [
    "# 10. Reference"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bafb1f37-7761-4413-a495-15d706b23e18",
   "metadata": {},
   "source": [
    "______________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1dfbf8f5-0b10-4279-8541-bb201cc7271c",
   "metadata": {},
   "source": [
    "1. MATLAB Help Center, https://ww2.mathworks.cn/help/matlab/index.html."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "MATLAB Kernel",
   "language": "matlab",
   "name": "jupyter_matlab_kernel"
  },
  "language_info": {
   "file_extension": ".m",
   "mimetype": "text/x-matlab",
   "name": "matlab"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
