From f9e32f6c1fc2de2da13184bf2bfe2edec69f9b93 Mon Sep 17 00:00:00 2001 From: mattmaliniak <31718098+mattmaliniak@users.noreply.github.com> Date: Thu, 14 Dec 2017 19:52:40 -0500 Subject: [PATCH] Help --- Part A/membrane_solution3.m | 50 +++++++++++++++++++++--------------- Part C/membrane_solution.asv | 27 +++++++++++++++++++ Part C/membrane_solution.m | 41 ++++++++++++++++------------- Part E/SE_diff.m | 12 +++++++++ Part E/membrane_solution.m | 41 ++++++++++++++++------------- Part F/Rel_error.asv | 14 ++++++++++ Part F/Rel_error.m | 7 +++++ Part F/SE_diff.m | 12 +++++++++ Part F/membrane_solution.m | 46 ++++++++++++++++++--------------- Part F/tension_sol.m | 10 ++++++++ Part G/SE_diff.m | 12 +++++++++ Part G/membrane_solution.m | 45 +++++++++++++++++--------------- Part G/tension_sol.m | 10 ++++++++ 13 files changed, 230 insertions(+), 97 deletions(-) create mode 100644 Part C/membrane_solution.asv create mode 100644 Part F/Rel_error.asv diff --git a/Part A/membrane_solution3.m b/Part A/membrane_solution3.m index ec29f9b..d62636f 100644 --- a/Part A/membrane_solution3.m +++ b/Part A/membrane_solution3.m @@ -1,23 +1,31 @@ function [w] = membrane_solution3(T,P) - % T = Tension (microNewton/micrometer) - % P = Pressure (MPa) - - od = ones(8,1); - od(3:3:end) = 0; - k = -4*diag(ones(9,1))+diag(ones(9-3,1),3)+diag(ones(9-3,1),-3)+diag(od,1)+diag(od,-1); - - - y = -(10/4)^2*(P/T)*ones(9,1); - w = k\y; - % Solves for displacement (micrometers) - % Solution represents a 2D data set w(x,y) +% membrane_solution3: dispalacement of node for membrane with 3x3 interior +% nodes +% [w] = membrane_solution3(T,P) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% output: +% w = vector of displacement of interior nodes - [x,y] = meshgrid(0:10/4:10,0:10/4:10); - z = zeros(size(x)); - z(2:end-1,2:end-1) = reshape(w,[3 3]); - surf(x,y,z) - title('Membrane Displacement') - zlabel('Displacement (micrometer)') - % Membrane displacement is shown on chart - -end \ No newline at end of file +od = ones(8,1); +od(3:3:end) = 0; +k = -4*diag(ones(9,1))+diag(ones(9-3,1),3)+diag(ones(9-3,1),-3)+diag(od,1)+diag(od,-1); + + +y = -(10/4)^2*(P/T)*ones(9,1); +w = k\y; + +% Solves for displacement (micrometers) +% Solution represents a 2D data set w(x,y) + +[x,y] = meshgrid(0:10/4:10,0:10/4:10); +z = zeros(size(x)); +z(2:end-1,2:end-1) = reshape(w,[3 3]); +surf(x,y,z) +title('Membrane Displacement') +zlabel('Displacement (micrometer)') + +% Membrane displacement is shown on chart + +end \ No newline at end of file diff --git a/Part C/membrane_solution.asv b/Part C/membrane_solution.asv new file mode 100644 index 0000000..72568a0 --- /dev/null +++ b/Part C/membrane_solution.asv @@ -0,0 +1,27 @@ +function [w] = membrane_solution(T,P,n) +% membrane_solution: dispalacement of node for membrane with nxn interior nodes +% [w] = membrane_solution(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% output: +% w = vector of displacement of interior nodes + +od = ones(n^2-1,1); +od(n:n:end) = 0; +k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); + +y = -(10/(n+1))^2*(P/T)*ones(n^2,1); +w = k\y; +% Solves for displacement (micrometers) +% Output w is a vector +% Solution represents a 2D data set w(x,y) + +[x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); +z = zeros(size(x)); +z(2:end-1,2:end-1) = reshape(w,[n n]); +surf(x,y,z) +title('Membrane Displacement') +zlabel('Displacement (micrometer)') +% Membrane displacement is shown on chart +end \ No newline at end of file diff --git a/Part C/membrane_solution.m b/Part C/membrane_solution.m index f9c96d6..a3b6d3e 100644 --- a/Part C/membrane_solution.m +++ b/Part C/membrane_solution.m @@ -1,23 +1,28 @@ function [w] = membrane_solution(T,P,n) - % T = Tension (microNewton/micrometer) - % P = Pressure (MPa) - % n = # of interior nodes +% membrane_solution: dispalacement of node for membrane with nxn interior nodes +% [w] = membrane_solution(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% w = vector of displacement of interior nodes - od = ones(n^2-1,1); - od(n:n:end) = 0; - k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); +od = ones(n^2-1,1); +od(n:n:end) = 0; +k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); - y = -(10/(n+1))^2*(P/T)*ones(n^2,1); - w = k\y; - % Solves for displacement (micrometers) - % Output w is a vector - % Solution represents a 2D data set w(x,y) +y = -(10/(n+1))^2*(P/T)*ones(n^2,1); +w = k\y; +% Solves for displacement (micrometers) +% Output w is a vector +% Solution represents a 2D data set w(x,y) - [x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); - z = zeros(size(x)); - z(2:end-1,2:end-1) = reshape(w,[n n]); - surf(x,y,z) - title('Membrane Displacement') - zlabel('Displacement (micrometer)') - % Membrane displacement is shown on chart +[x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); +z = zeros(size(x)); +z(2:end-1,2:end-1) = reshape(w,[n n]); +surf(x,y,z) +title('Membrane Displacement') +zlabel('Displacement (micrometer)') +% Membrane displacement is shown on chart end \ No newline at end of file diff --git a/Part E/SE_diff.m b/Part E/SE_diff.m index e7202ff..5b269a6 100644 --- a/Part E/SE_diff.m +++ b/Part E/SE_diff.m @@ -1,4 +1,16 @@ function [pw_se,w]=SE_diff(T,P,n) +% SE_diff: difference between strain energy and work done by pressure in +% membrane +% [pw_se,w]=SE_diff(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% pw_se = difference between strain energy and work done by pressure in +% membrane +% w = vector of displacement of interior nodes + E = 1e6; %TPa Units may need to be changed v = .31; %Poissons ratio t = .3; %nm diff --git a/Part E/membrane_solution.m b/Part E/membrane_solution.m index f9c96d6..a3b6d3e 100644 --- a/Part E/membrane_solution.m +++ b/Part E/membrane_solution.m @@ -1,23 +1,28 @@ function [w] = membrane_solution(T,P,n) - % T = Tension (microNewton/micrometer) - % P = Pressure (MPa) - % n = # of interior nodes +% membrane_solution: dispalacement of node for membrane with nxn interior nodes +% [w] = membrane_solution(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% w = vector of displacement of interior nodes - od = ones(n^2-1,1); - od(n:n:end) = 0; - k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); +od = ones(n^2-1,1); +od(n:n:end) = 0; +k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); - y = -(10/(n+1))^2*(P/T)*ones(n^2,1); - w = k\y; - % Solves for displacement (micrometers) - % Output w is a vector - % Solution represents a 2D data set w(x,y) +y = -(10/(n+1))^2*(P/T)*ones(n^2,1); +w = k\y; +% Solves for displacement (micrometers) +% Output w is a vector +% Solution represents a 2D data set w(x,y) - [x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); - z = zeros(size(x)); - z(2:end-1,2:end-1) = reshape(w,[n n]); - surf(x,y,z) - title('Membrane Displacement') - zlabel('Displacement (micrometer)') - % Membrane displacement is shown on chart +[x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); +z = zeros(size(x)); +z(2:end-1,2:end-1) = reshape(w,[n n]); +surf(x,y,z) +title('Membrane Displacement') +zlabel('Displacement (micrometer)') +% Membrane displacement is shown on chart end \ No newline at end of file diff --git a/Part F/Rel_error.asv b/Part F/Rel_error.asv new file mode 100644 index 0000000..56dbd19 --- /dev/null +++ b/Part F/Rel_error.asv @@ -0,0 +1,14 @@ +function re = Rel_error (T) +% Rel_error: calculates relative error of a vector +% [w] = membrane_solution(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% w = vector of displacement of interior nodes + +re = zeros(1,length(T)-1); +for i = 2:length(T) + re(i-1)= abs(T(i)-T(i-1))/T(i-1); +end \ No newline at end of file diff --git a/Part F/Rel_error.m b/Part F/Rel_error.m index f5f8fff..5e17536 100644 --- a/Part F/Rel_error.m +++ b/Part F/Rel_error.m @@ -1,4 +1,11 @@ function re = Rel_error (T) +% Rel_error: calculates relative error of a vector +% re = Rel_error (T) +% input: +% T = vector of numbers +% output: +% re = relative error of vector + re = zeros(1,length(T)-1); for i = 2:length(T) re(i-1)= abs(T(i)-T(i-1))/T(i-1); diff --git a/Part F/SE_diff.m b/Part F/SE_diff.m index bf9e129..bc4cf5e 100644 --- a/Part F/SE_diff.m +++ b/Part F/SE_diff.m @@ -1,4 +1,16 @@ function [pw_se,w]=SE_diff(T,P,n) +% SE_diff: difference between strain energy and work done by pressure in +% membrane +% [pw_se,w]=SE_diff(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% pw_se = difference between strain energy and work done by pressure in +% membrane +% w = vector of displacement of interior nodes + E = 1000000; %TPa Units may need to be changed v = .31; %Poissons ratio t = .0003; %um diff --git a/Part F/membrane_solution.m b/Part F/membrane_solution.m index ae80fce..ef0fae2 100644 --- a/Part F/membrane_solution.m +++ b/Part F/membrane_solution.m @@ -1,25 +1,31 @@ function [w] = membrane_solution(T,P,n) - % T = Tension (microNewton/micrometer) - % P = Pressure (MPa) - % n = # of interior nodes +% membrane_solution: dispalacement of node for membrane with nxn interior nodes +% [w] = membrane_solution(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% w = vector of displacement of interior nodes - od = ones(n^2-1,1); - od(n:n:end) = 0; - k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); - y = -(10/(n+1))^2*(P/T)*ones(n^2,1); - w = k\y; - - % Solves for displacement (micrometers) - % Output w is a vector - % Solution represents a 2D data set w(x,y) +od = ones(n^2-1,1); +od(n:n:end) = 0; +k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); - [x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); - z = zeros(size(x)); - z(2:end-1,2:end-1) = reshape(w,[n n]); - surf(x,y,z) - title('Membrane Displacement') - zlabel('Displacement (micrometer)') - - % Membrane displacement is shown on chart +y = -(10/(n+1))^2*(P/T)*ones(n^2,1); +w = k\y; + +% Solves for displacement (micrometers) +% Output w is a vector +% Solution represents a 2D data set w(x,y) + +[x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); +z = zeros(size(x)); +z(2:end-1,2:end-1) = reshape(w,[n n]); +surf(x,y,z) +title('Membrane Displacement') +zlabel('Displacement (micrometer)') + +% Membrane displacement is shown on chart end \ No newline at end of file diff --git a/Part F/tension_sol.m b/Part F/tension_sol.m index dd534c9..b0f0132 100644 --- a/Part F/tension_sol.m +++ b/Part F/tension_sol.m @@ -1,3 +1,13 @@ function [T,ea] = tension_sol(P,n) +% tension_sol: outputs tension of a membrane given the pressure and number +% of nodes +% [T,ea] = tension_sol(P,n) +% input: +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% T = Tension (microNewton/micrometer) +% ea = approximate relative error (%) + y =@(T) SE_diff(T,P,n); [T,fx,ea,iter]=bisect(y,.01,1); diff --git a/Part G/SE_diff.m b/Part G/SE_diff.m index bf9e129..1eaddea 100644 --- a/Part G/SE_diff.m +++ b/Part G/SE_diff.m @@ -1,4 +1,16 @@ function [pw_se,w]=SE_diff(T,P,n) +% SE_diff: calculates difference between strain energy and work done by pressure in +% membrane +% [pw_se,w]=SE_diff(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% pw_se = difference between strain energy and work done by pressure in +% membrane +% w = vector of displacement of interior nodes + E = 1000000; %TPa Units may need to be changed v = .31; %Poissons ratio t = .0003; %um diff --git a/Part G/membrane_solution.m b/Part G/membrane_solution.m index ae80fce..af4d17d 100644 --- a/Part G/membrane_solution.m +++ b/Part G/membrane_solution.m @@ -1,25 +1,30 @@ function [w] = membrane_solution(T,P,n) - % T = Tension (microNewton/micrometer) - % P = Pressure (MPa) - % n = # of interior nodes +% membrane_solution: dispalacement of node for membrane with nxn interior nodes +% [w] = membrane_solution(T,P,n) +% input: +% T = Tension (microNewton/micrometer) +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% w = vector of displacement of interior nodes - od = ones(n^2-1,1); - od(n:n:end) = 0; - k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); +od = ones(n^2-1,1); +od(n:n:end) = 0; +k = -4*diag(ones(n^2,1))+diag(ones((n^2)-n,1),n)+diag(ones((n^2)-n,1),-n)+diag(od,1)+diag(od,-1); - y = -(10/(n+1))^2*(P/T)*ones(n^2,1); - w = k\y; - - % Solves for displacement (micrometers) - % Output w is a vector - % Solution represents a 2D data set w(x,y) +y = -(10/(n+1))^2*(P/T)*ones(n^2,1); +w = k\y; - [x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); - z = zeros(size(x)); - z(2:end-1,2:end-1) = reshape(w,[n n]); - surf(x,y,z) - title('Membrane Displacement') - zlabel('Displacement (micrometer)') - - % Membrane displacement is shown on chart +% Solves for displacement (micrometers) +% Output w is a vector +% Solution represents a 2D data set w(x,y) + +[x,y] = meshgrid(0:10/(n+1):10,0:10/(n+1):10); +z = zeros(size(x)); +z(2:end-1,2:end-1) = reshape(w,[n n]); +surf(x,y,z) +title('Membrane Displacement') +zlabel('Displacement (micrometer)') + +% Membrane displacement is shown on chart end \ No newline at end of file diff --git a/Part G/tension_sol.m b/Part G/tension_sol.m index dd534c9..b0f0132 100644 --- a/Part G/tension_sol.m +++ b/Part G/tension_sol.m @@ -1,3 +1,13 @@ function [T,ea] = tension_sol(P,n) +% tension_sol: outputs tension of a membrane given the pressure and number +% of nodes +% [T,ea] = tension_sol(P,n) +% input: +% P = Pressure (MPa) +% n = number of rows and columns of interior nodes +% output: +% T = Tension (microNewton/micrometer) +% ea = approximate relative error (%) + y =@(T) SE_diff(T,P,n); [T,fx,ea,iter]=bisect(y,.01,1);