This website shows the projects I have created for Math 447.
This is a plot of sine.
A Stewart platform is a platform that is held up by arms which have variable length. The position of the platform is controlled by the length of the arms. For each length of the arms, there exists multiple positions the platform can be in. The different positions of the platform are denoted by the angle the platform takes in relation to the horizontal axis. We denote this angle by \(\theta\). The values of \(\theta\) for the specified parameters are the zeros of the function \[f(\theta )=N_1^2+N_2^2-p_1^2D^2 \] where \begin{align*} N_1 &= B_3(p_2^2-p_1^2-A_2^2-B_2^2)-B_2(p_3^2-p_1^2A_3^2-B_3^2) \\ N_2 &= -A_3(p_2^2-p_1^2-A_2^2-B_2^2)+A_2(p_3^2-p_1^2A_3^2-B_3^2) \\ D &= 2(A_2B_3-B_2A_3) \\ A_2 &= L_3\cos \theta -x_1 \\ B_2 &= L_3 \sin \theta \\ A_3 &= L_2 \cos (\theta +\gamma )-x_2 \\ B_3 &= L_2 \sin (\theta +\gamma )-y_2 \\ x &= \frac{N_1}{D} \\ Y &= \frac{N_2}{D}. \end{align*} The values \(L_1,L_2,L_3,x_1,x_2,y_2, \text{ and } \gamma \) are parameters that are fixed by the setup of the Stewart platform. The values \(p_1,p_2,p_3 \) are the lengths of the legs of the Stewart platform.
We built a function for \(f(\theta)\) and tested it at the recommended values to make sure it was working well. The code for \(f(\theta)\) can be found here: f.m
Step 2 involved plotting \(f(\theta)\). The work can be seen here: Part 2
The third step involved recreating the plot for figure 1.15. The plot is visible in part 3.Part 3
To find the zeros of \(f(\theta)\), corresponding to the theta values for each postion the platform could take, we chose to use the bisection method. To do this, we needed a way to pass theta values into the bisection method given the values for \(\gamma\), the strut lengths, the strut anchors, and the triangle side lengths. So we built functions that would calculate the value of \(\theta\) such that \(f(\theta)\), and then used an analogous code to calculate x and y for the first vertex of the triangle. The formulas found in these codes were given in equations (1.39) and (1.40) in the book. These three scripts can be viewed here:
Project1FInputs.m , and Project1xy.mFinally, we needed a script to give the other two vertices of the triangle given x, y, and \(\theta\), as well as a way to reliably check the strut length. It was noticed that equation (1.38) in the book that gives the strut length seems to cause some kind of circular referencing, so instead we calculated the strut lengths directly from the plotted vertex values. The vertex locations and strut lengths were calculated using this script:
These scripts were written in order to complete parts 4, 5, and 6 of the problem, and the details of each part can be found here:
Part 4 Part 5 Part 6This project looked at how GPS works, and how the process works. GPS is a common commodity in society today helping people get from point a to point b. The actual workings of GPS provide an interesting problem as to how to find the location of the satellites, making sure the timing is correct, and finally making sure the error is minimal.
Each satellite that is circling earth has to transmit signals from positions in space to a GPS receiver on Earth. The user of the GPS receiver then uses this information to determine the coordinates of the receiver. The receiver then takes the transmission time, and using the speed of light is able to compute the distance of the satellite from the receiver. If there are three satellites, then there are three spheres, but an issue occurs with the timing accuracy. The image below shows the interestion of three spheres.
To solve this a fourth satellite is adding, and an additional variable of d is added. This is to account for the time. The location of the satellites is denoted \(A_i,B_i,C_i\), and the true intersection point is denoted (x,y,z). The four equations can be seen below: \begin{align*} (x-A_1)^2+(y-B_1)^2+(z-C_1)^2 = [x(t_1-d)]^2 \\ (x-A_2)^2+(y-B_2)^2+(z-C_2)^2 = [x(t_2-d)]^2\\ (x-A_3)^2+(y-B_3)^2+(z-C_3)^2 = [x(t_3-d)]^2\\ (x-A_4)^2+(y-B_4)^2+(z-C_4)^2 = [x(t_4-d)]^2\\ \end{align*} Solving for (x,y,z,d) shows the location of the satellite, and the correct time. While four spheres may not have an intersection point, when the radii are increased enough, an intersection point will be found. By squaring the above equations, it can be seen that two solutions will be found.
The individual parts, with additional background information, can be seen in the links below.
Part 1 Part 2 Parts 4 and 5 Part 6This project involved solving differential equations using different numerical methods. More specifically, it dealt with solving the two and three body problems, and creating animations to show the solutions. The project specifically dealt with simulating the motion of an orbiting satellite. The equation which shows how force is related to mass and the distance between two masses can be seen below: \begin{align*} F=\frac{gm_1m_2}{r^2} \end{align*} In this equation \(m_1, m_2\) stand for the masses of the two satellites, r is the distance between them, and g is gravity. Using the distance between the satellites, and Newton's law of motion, two second order equations are produced: \begin{align*} m_1x''=-\frac{gm_1m_2x}{(x^2+y^2)^{3/2}}\\ m_1y''=-\frac{gm_1m_2y}{(x^2+y^2)^{3/2}} \end{align*} From this two variables, representing velocity can be introduced such that four first order equations are now available to model the system. \begin{align*} x'&=v_x\\ v_x'&=-\frac{gm_2x}{(x^2+y^2)^{3/2}}\\ y'&=v_y\\ v_y'&=-\frac{gm_2y}{(x^2+y^2)^{3/2}} \end{align*} The initial code used was orbit2016.m, and the next three steps of the project involved modifying this code. The individual parts, with additional background information, can be seen in the links below.
Part 1 Part 2 Part 3 Part 3DThis project involved investigating Fisher's Equation by reproducing some of the examples in the book, and then finding critical points for a specific example of Fisher's Equation and plotting them. Fisher's equation is \[\begin{cases} u_t = Du_{xx} +f(u)\\ u(x,0) = sin(\pi x) \text{ for } 0 \leq x \leq 1\\ u_x(0,t) =0 \text{ for } t\geq 0\\ u_x(1,t) = t \geq 0 \end{cases}\] In this equation, \(f(u)\) is a polynomial based in u. This equation was founded by R.A. Fisher who was a successor of Darwin. He had derived this model for how genes propagate. The reaction part of the equation is the function f, and the diffusion part if \(Du_{xx}\). If homogeneous boundary conditions are used, the constant state is a solution whenever f(C)=0. The equilibrium is stable if f'(c)<0. Each individual part of the project can be seen in the links below.
Part 1 Part 2 Part 3This project involved looking at image compression using the Discrete Cosine Transform. Specifically, the two dimensional discrete cosine transform was looked at, letting \( X=(x_{ij}) \) be a matrix of \( n^2\) real numbers. Letting \(a_0=1/ \sqrt(2)\) and \(a_k=1\) for \(k>0\), the real function below can be written: \( P_{n}(s,t) = \frac{2}{n} \sum_{k=0}^{n-1}\sum_{l=0}^{n-1} y_{kl}a_ka_l\cos \frac{k(2s+1) \pi}{2n}\cos \frac{l(2t+1) \pi}{2n} \) From this MATLAB code can be written to simulate the DCT. This project involved compressing both a black and white, and a color image. This project is divided into two different parts with the first part dealing with a black and white image, and the second part being work done on a color image.
Part 1 Part 2
The complex system Google uses when assigning importance to search results amounts to a massive Power Iteration computing the eigenvector for an \(n \times n\) matrix, where \(n\) is the number of websites worldwide. This eigenvector solution contains a sequence of probabilites that Google assigns to websites as a page rank, a number attempting to capture the importance of the web page and allowing subsequent searches to be meaningfully sorted. In this project, our group explores an approximation of Google's page rank system in a much more limited scope, beginning with a fifteen web page example.
In the above graph, each of the \(n\) nodes represents a web page, and the directed edges are the links between pages. As a way tabulating the graph data, an adjacency matrix is defined to be the \(n \times n\) matrix whose \(ij\)th entry is 1 if an edge exists from node \(i\) to \(j\). All other entries are 0. The adjacency matrix for this graph is: \[A = \begin{bmatrix} 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 1 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \end{bmatrix}\] To model user behavior, two methods for navigating from a web page \(i\) are considered. First, there is a probability \(q\) (often taken to be approximately 0.15) that the user may simply navigate to another, random web page. Second, the user may click a link on \(i\) leading to another web page, with probability 1 - \(q\) divided evenly over all links. This means the total probability of moving from \(i\) to some other page \(j\) is \(q/n + A_{ij}(1-q)/n_i\), where \(n_i\) is the sum of the \(i\)th row. When summed over all \(i\), this yields the probability of being at \(j\): \[p_j = \sum_{i=1}^n p_i\left(\frac{q}{n} + A_{ij}\frac{1-q}{n_i}\right)\] Or, in matrix form, this is the eigenvalue equation \(p = Gp\), where \(p = (p_i)\) is the vector of probabilities of being at each of the \(n\) pages and \(G\), the Google Matrix, has its \(ij\)th entry equal to \(q/n + A_{ji}(1-q)/n_j\). Because every column of \(G\) sums to one, it is a stochastic matrix. This can be demonstrated from the fact that the summation of column \(j\) of \(G\): \[\sum_{i=1}^n G_{ij} = \sum_{i=1}^n\left(\frac{q}{n} + A_{ji}\frac{1-q}{n_j}\right)\] Moves across row \(j\) of \(A\) and the sum of the \(j\)th row is \(n_j\). \[\begin{align} \sum_{i=1}^n G_{ij} &= \sum_{i=1}^n\left(\frac{q}{n} + A_{ji}\frac{1-q}{n_j}\right) \\\\ &= \sum_{i=1}^n\frac{q}{n} + \sum_{i=1}^n A_{ji}\frac{1-q}{n_j} \\\\ &= \frac{q}{n}\sum_{i=1}^n 1 + \frac{1-q}{n_j}\sum_{i=1}^n A_{ji} \\\\ &= \frac{q}{n}(n) + \frac{1-q}{n_j}(n_j) \\\\ &= q + 0 + (1 - q) = 1 \end{align}\] The vector \(p\), once normalized by dividing its entries by their sum, provides the desired page rankings. Part 1 deals with manipulating the example matrix, and part 2 shows the work done manipulating a system that we created. Part 3 shows a more complex system.
Part 1 Part 2 Part 3