From 060125fcb9a7877a65a10fab3ceab0b438b18270 Mon Sep 17 00:00:00 2001 From: Dane Sabo Date: Thu, 6 Mar 2025 17:19:10 -0500 Subject: [PATCH] me2046 hw3 i cry --- ME_2046/HW3/problem4.m | 29 ++++++++++ ME_2046/HW3/problem4.png | Bin 0 -> 13301 bytes ME_2046/HW3/simplifying.py | 114 ++++++++++++++++++++++++------------- 3 files changed, 104 insertions(+), 39 deletions(-) create mode 100644 ME_2046/HW3/problem4.m create mode 100644 ME_2046/HW3/problem4.png diff --git a/ME_2046/HW3/problem4.m b/ME_2046/HW3/problem4.m new file mode 100644 index 0000000..12229cd --- /dev/null +++ b/ME_2046/HW3/problem4.m @@ -0,0 +1,29 @@ +% Define length of the sequence +N = 20; + +% Preallocate output vector +x = zeros(N,1); + +% Define input (unit step) +u = ones(N,1); + +% Initial conditions +x(1) = 1; % x(0) +x(2) = 2; % x(1) + +% Calculate the output iteratively using the given expression +for k = 2:N-1 + x(k+1) = 2 + 4*u(k-1) - (0.5)^(k-1)*u(k-1); +end + +% Create a vector for plotting +k = 0:N-1; + +% Plot the resulting sequence +figure; +stem(k, x, 'filled'); +grid on; +xlabel('Time step (k)'); +ylim([0,10]) +ylabel('x[k]'); +title('Solution of the Difference Equation with Given Input and Initial Conditions'); diff --git a/ME_2046/HW3/problem4.png b/ME_2046/HW3/problem4.png new file mode 100644 index 0000000000000000000000000000000000000000..c01c916fc8e732ba186ac49f541aa18bdf32bb18 GIT binary patch literal 13301 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 literal 0 HcmV?d00001 diff --git a/ME_2046/HW3/simplifying.py b/ME_2046/HW3/simplifying.py index 5d92933..c8ca56f 100644 --- a/ME_2046/HW3/simplifying.py +++ b/ME_2046/HW3/simplifying.py @@ -1,90 +1,91 @@ import sympy as sm import numpy as np + sm.init_printing() -s = sm.symbols('s') -z = sm.symbols('z') -T = sm.symbols('T') +s = sm.symbols("s") +z = sm.symbols("z") +T = sm.symbols("T") ######################################################### -print('PROBLEM 2:') -print('Part a:') +print("PROBLEM 2:") +print("Part a:") -ZOH = (1-sm.exp(-s*T))/(s*T) +ZOH = (1 - sm.exp(-s * T)) / (s * T) -G_1_s = 1/s*ZOH +G_1_s = 1 / s * ZOH -bilinear_s = 2/T *(z-1)/(z+1) +bilinear_s = 2 / T * (z - 1) / (z + 1) -G_1_k = G_1_s.subs({s:bilinear_s}).simplify() +G_1_k = G_1_s.subs({s: bilinear_s}).simplify() print("G_1_k = ") sm.pprint(G_1_k) -print('Part b:') +print("Part b:") -theta_s_r_s = ZOH*1/s**2 -theta_k_r_k = theta_s_r_s.subs({s:bilinear_s}).simplify() +theta_s_r_s = ZOH * 1 / s**2 +theta_k_r_k = theta_s_r_s.subs({s: bilinear_s}).simplify() print("theta_k_r_k = ") sm.pprint(theta_k_r_k) ######################################################### -print('PROBLEM 3:') -A = sm.Matrix([[0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - [1, 0, 0, 0]]) +print("PROBLEM 3:") +A = sm.Matrix([[0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 0]]) B = sm.Matrix([0, 0, 0, 1]) C = sm.Matrix([1, 0, 0, 0]).transpose() D = sm.Matrix([1]) -print('System Matricies A, B, C, D') +print("System Matricies A, B, C, D") sm.pprint(A) sm.pprint(B) sm.pprint(C) sm.pprint(D) -#Recursive Solution -k = sm.symbols('k', integer = True, real = True, positive = True) +# Recursive Solution +k = sm.symbols("k", integer=True, real=True, positive=True) -def y(k,u): + +def y(k, u, x_0): term_1 = C * A**k * x_0 - term_2 = sm.Matrix([0,0,0,0]) + term_2 = sm.Matrix([0, 0, 0, 0]) for j in range(np.size(u)): - term_2 = term_2 + A**(k-j-1) * B * u[j] - term_2 = C*term_2 + term_2 = term_2 + A ** (k - j - 1) * B * u[j] + term_2 = C * term_2 - term_3 = D*u[-1] + term_3 = D * u[-1] - return term_1+term_2+term_3 + return term_1 + term_2 + term_3 -print('Part c:') + +print("Part c:") x_0 = sm.Matrix([2, 1, 3, 0]) u = sm.Matrix([0]) -output = y(k, u) +output = y(k, u, x_0) output = output[0].expand().simplify() -print('y(k) = ') +print("y(k) = ") sm.pprint(output) - -print('Part d:') +print("Part d:") x_0 = sm.Matrix([0, 0, 0, 0]) u = sm.Matrix([2, 1, 3, 0]) -output = y(k, u) +output = y(k, u, x_0) output = output[0].expand().simplify() -print('y(k) = ') +print("y(k) = ") sm.pprint(output) -print('Part e:') -print('These are the same exact response between parts C and D. This makes sense, becasue we defined our states as just being delays in a chain. The result is that the input at timestep k trickles down through each state in k+1, k+2, and k+3. This means that our states save our input in a way, s.t. loading this initial state mathematically produces an identical result as loading those inputs in one time step at a time. \n \n This is reflected by the two algebraeic expressions being the same.') +print("Part e:") +print( + "These are the same exact response between parts C and D. This makes sense, becasue we defined our states as just being delays in a chain. The result is that the input at timestep k trickles down through each state in k+1, k+2, and k+3. This means that our states save our input in a way, s.t. loading this initial state mathematically produces an identical result as loading those inputs in one time step at a time. \n \n This is reflected by the two algebraeic expressions being the same." +) ######################################################### -print('PROBLEM 4:') -print('Part a:') +print("PROBLEM 4:") +print("Part a:") """ x(k+2) - x(k+1) + 0.25 x(k) = u(k+2) @@ -95,9 +96,44 @@ X (z^2 - z + 0.25) = z^2 U X/U = z^2 / (z^2 - z + 0.25) """ # Use SymPy to do partial frac -z = sm.symbols('z') +z = sm.symbols("z") -X_U = z**2/(z**2 - z + 0.25) +X_U = z**2 / (z**2 - z + 0.25) sm.pprint(X_U.apart()) +print("Part b:") +x_z = (z**3 / (z - 1) - z + 2 * z + z**2 - z) / (z**2 - z + 0.25) +sm.pprint(x_z.apart()) + +####################################################### +print("PROBLEM 5:") +print("part a:") + +G_z = (1 - z**-1) / 5 * (1 / (1 - z**-1) - sm.exp(T) * z / (z - sm.exp(-5 * T))) + +sm.pprint(G_z) +sm.pprint(G_z.simplify()) +print(sm.latex(G_z.simplify())) + +print("part b:") +G_z = G_z.simplify() +alp_0, alp_1, beta_1 = sm.symbols("alpha_0, alpha_1, beta_1") +D_z = (alp_0 + alp_1 * z**-1) / (1 + beta_1 * z**-1) + +# Calculate Loop Gain +L_z = G_z * D_z +H_z = 1 + +C_z_over_R_z = L_z / (1 + L_z * H_z) +sm.pprint(C_z_over_R_z.simplify()) +print(sm.latex((C_z_over_R_z.expand().simplify()))) + +print("part c:") +R_z = 1 / (1 - z**-1) + +C_z = C_z_over_R_z * R_z + +c_inf = (z - 1) * C_z +sm.pprint(c_inf.simplify()) +print(sm.latex(c_inf.simplify()))