ME2016-HW1

This commit is contained in:
Dane Sabo 2024-09-18 16:35:33 -04:00
parent 23aa39b6ef
commit 5729622b0c
3 changed files with 769 additions and 0 deletions

View File

@ -0,0 +1,229 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "d9b87334-514c-41fa-aab5-ecef29c4c94d",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sympy import *"
]
},
{
"cell_type": "markdown",
"id": "6b45c0a5-2069-4b11-b208-e2fa3dcc1820",
"metadata": {},
"source": [
"**Dane Sabo**\n",
"\n",
"*September 18th, 2024*"
]
},
{
"cell_type": "markdown",
"id": "0f1d7205-998f-4cbc-b3b3-df3afda5804c",
"metadata": {},
"source": [
"# Instructions\n",
"\n",
"Please do a written solution for problems 1 and 2. We will review them on Monday, Sept 16 in class prior to the assignment being due.\n",
"\n",
"Please upload a Jupyter Notebook for problems 3 and 4.\n",
"\n",
"Problems 1 and 2 are worth 10 points each, problems 3 and 4 are worth 15 points each.\n",
"\n",
"# Written Problems\n",
"## Problem 1\n",
"Please find the general solution of \n",
"$$\n",
"\\bf{\\dot{X}} = \n",
"\\begin{bmatrix} \n",
"-1 & 5 & 2\\\\ \n",
"4 & -1 & -2\\\\\n",
"0 & 0 & 6\n",
"\\end{bmatrix}\n",
"\\bf{X}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fc73f387-de90-4c25-b24c-ec91ea774ce8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"⎡d ⎤ \n",
"⎢──(x₁(t))⎥ \n",
"⎢dt ⎥ \n",
"⎢ ⎥ ⎡-x₁(t) + 5⋅x₂(t) + 2⋅x₃(t)⎤\n",
"⎢d ⎥ ⎢ ⎥\n",
"⎢──(x₂(t))⎥ = ⎢4⋅x₁(t) - x₂(t) - 2⋅x₃(t) ⎥\n",
"⎢dt ⎥ ⎢ ⎥\n",
"⎢ ⎥ ⎣ 6⋅x₃(t) ⎦\n",
"⎢d ⎥ \n",
"⎢──(x₃(t))⎥ \n",
"⎣dt ⎦ \n"
]
}
],
"source": [
"t, s = symbols('t, s')\n",
"x = Matrix([Function('x1')(t), Function('x2')(t), Function('x3')(t)])\n",
"x_dot = x.diff(t) \n",
"A = Matrix([[-1, 5, 2],[4, -1, -2], [0, 0, 6]])\n",
"\n",
"eq = Eq(x_dot,A*x)\n",
"print(pretty(eq))"
]
},
{
"cell_type": "markdown",
"id": "9203ea18-e9e6-424b-bb2e-c12ef880f40b",
"metadata": {},
"source": [
"First we have to find the fundamental matrix $\\bf{\\Psi}(t) = e^{\\bf{A}t}$:\n",
"$$e^{\\bf{A}t} = \\mathcal{L}^{-1} \\{ (sI-\\bf{A})^{-1} \\} $$"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "bcfcdd55-34a5-4fb5-a91c-f1b540cef71f",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "inverse_laplace_transform() missing 2 required positional arguments: 's' and 't'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m psi_t \u001b[38;5;241m=\u001b[39m \u001b[43minverse_laplace_transform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mMatPow\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43meye\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mA\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n",
"\u001b[0;31mTypeError\u001b[0m: inverse_laplace_transform() missing 2 required positional arguments: 's' and 't'"
]
}
],
"source": [
"psi_t = inverse_laplace_transform(MatPow(s*eye(3) - A,-1))"
]
},
{
"cell_type": "markdown",
"id": "14643f79-07ea-4d87-b81e-39244b1a3fa7",
"metadata": {},
"source": [
"## Problem 2\n",
"Please find the general solution of \n",
"$$\n",
"\\bf{\\dot{X}} = \n",
"\\begin{bmatrix} \n",
"-6 & 5 \\\\ \n",
"-5 & 4 \\\\\n",
"\\end{bmatrix}\n",
"\\bf{X}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "390b5ac8-c156-4606-8d69-1b86b80fcefd",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "4c0f6f7a-d495-4f06-8d7c-a81f0f9ac2fc",
"metadata": {},
"source": [
"# Python Problems\n",
"## Problem 3\n",
"The Archimedes Spiral can be plotted by taking all the positive whole numbers (e.g.j = 0, 1, 2, 3, 4, 5, ...) and putting them into the format $n = (j,j)$ , and plotting them in polar coordinates where the first term, $n_1$, is the radius, and the second term, $n_2$, is the angle in radians.\n",
"### Part A\n",
"You need to plot the first 1000 terms in a scatter plot. In addition, we would like to only look at the top right quadrant! What you're going for is shown in Figure 1."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5e4b28fb-f18f-44ae-887e-9088446f2e5d",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "fde7a33e-6eb1-47b0-8867-85792164a17c",
"metadata": {},
"source": [
"### Part B\n",
"You need to plot the first 25 terms, looking at th eentire polar plot (all quadrants, and then, put a *smooth* line through it. What you're going for is shown in Figure 2.)\n",
"Hint: [This will be a useful reference](https://matplotlib.org/stable/gallery/pie_and_polar_charts/index.html)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d03285bf-09a6-4b79-b6e2-aaf35c56f96f",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "607410b5-74aa-44fd-ad88-4ed702dad2bc",
"metadata": {},
"source": [
"## Problem 4\n",
"Consider the following system:\n",
"$$\n",
"\\bf{\\dot{X}} = \n",
"\\begin{bmatrix} \n",
"1 & 2 & 1\\\\ \n",
"3 & 1+x & 1\\\\\n",
"1 & 0 & 0\n",
"\\end{bmatrix}\n",
"\\bf{X}\n",
"$$\n",
"This linear differential equation systems behavior is governed by its eigenvalues. In particular, the eigenvalues relate to stability and we may wish to see where they cross the 0 line (in terms of their real value). The constant x varies over the interval [5, 5]. Using a Jupyter Notebook (local, or on Google Colab), Python, NumPy, and Matplotlibs PyPlot, you should evaluate the eigenvalues for 50 evenly spaced values of x between 5 and 5, and produce a plot that visualizes the variation in the three eigenvalues as x varies. An example plot is shown in Figure 3 (for a different matrix!)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "368c0e47-f034-47e0-845c-f894ef601afc",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

538
ME_2016/HW1.ipynb Normal file

File diff suppressed because one or more lines are too long

View File

@ -49,6 +49,7 @@ MarkupSafe==2.1.5
matplotlib==3.9.2
matplotlib-inline==0.1.7
mistune==3.0.2
mpmath==1.3.0
nbclient==0.10.0
nbconvert==7.16.4
nbformat==5.10.4
@ -87,6 +88,7 @@ six==1.16.0
sniffio==1.3.1
soupsieve==2.6
stack-data==0.6.3
sympy==1.13.2
terminado==0.18.1
tinycss2==1.3.0
tornado==6.4.1