ME3255_FInalProject
I noticed that I was never assigned to a group so I did this project solo
Part A
function [w] = membrane_solution3(T,P)
od = ones(8,1);
od(3:3:end) = 0;
a = -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 = a\y;
grid on
[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')
xlabel('X (\muM)')
ylabel('Y (\muM)')
zlabel('Displacement (\muM)')
colormap jet
shading interp
disp(w)
end
Part B
membrane_solution3(0.006,0.001)
Part C
function [w] = membrane_solution3(T,P)
od = ones(8,1);
od(3:3:end) = 0;
a = -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 = a\y;
grid on
[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')
xlabel('X (\muM)')
ylabel('Y (\muM)')
zlabel('Displacement (\muM)')
colormap jet
shading interp
disp(w)
end
Part D
membrane_solution(0.006,0.001,10)
Part E
function [pw_se,w]=SE_diff(T,P,n)
E = 1e6;
v = .31;
t = .0003;
h = 10/(n+1);
w = membrane_solution(T,P,n);
z = zeros(n+2);
z(2:end-1,2:end-1) = reshape(w,[n n]);
nt = n + 1;
wn = zeros(nt);
for i = 1:nt
for j = 1:nt
wn(i,j) = mean([z(i,j),z(i+1,j),z(i,j+1),z(i+1,j+1)]);
end
end
pw = sum(sum(wn.*h^2.*P));
dwdx = zeros(nt);
dwdy = zeros(nt);
for i = 1:nt
for j = 1:nt
dwdx(i,j) = mean([z(i+1,j)-z(i,j),z(i+1,j+1)-z(i,j+1)]);
dwdy(i,j) = mean([z(i,j+1)-z(i,j),z(i+1,j+1)-z(i+1,j)]);
end
end
se = E*t*h^2/(2*(1-v^2))*sum(sum(0.25.*dwdx.^4+.25.*dwdy.^4+0.5.*(dwdx.*dwdy).^2));
pw_se = pw-se;
Part F
function [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,varargin)
if nargin<3,error('at least 3 input arguments required'),end
test = func(xl,varargin{:})*func(xu,varargin{:});
if nargin<4||isempty(es), es=0.0001;end
if nargin<5||isempty(maxit), maxit=50;end
iter = 0; xr = xl; ea = 100;
while (1)
xr_old = xr;
xr = (xl + xu)/2;
iter = iter + 1;
if xr ~= 0,ea = abs((xr - xr_old)/xr) * 100;end
test = func(xl,varargin{:})*func(xr,varargin{:});
if test < 0
xu = xr;
elseif test > 0
xl = xr;
else
ea = 0;
end
if ea <= es || iter >= maxit,break,end
end
root = xr; fx = func(xr, varargin{:});
function [T,ea] = tension_sol(P,n)
y =@(T) SE_diff(T,P,n);
[T,fx,ea,iter]=bisect(y,.01,1);
n=[3,20:5:40];
P=0.001;
T = zeros(1,length(n));
ea = zeros(1,length(n));
for i = 1:length(n)
[T(i), ea(i)] = tension_sol(P,n(i));
end
number of nodes | Tension (uN/um) | rel. error |
---|---|---|
3 | 0.049 | n/a |
20 | 0.0599 | 20.5% |
25 | 0.0601 | 0.27% |
30 | 0.0602 | 0.16% |
35 | 0.0602 | 0.09% |
40 | 0.0603 | 0.05% |
Part G
No = linspace(.001,.01,10);
n = 20;
T = zeros(1,length(No));
wmax = zeros(1,length(No));
for i = 1:length(No)
T(i) = tension_sol(No(i),n);
w = membrane_solution(T(i),No(i),n);
wmax(i) = max(w);
end
clf
x = wmax';
y = No';
Z=x.^3;
a=Z\y;
x_fcn=linspace(min(x),max(x));
plot(x,y,'o',x_fcn,a*x_fcn.^3)
title('Pressure vs Maximum Deflection')
xlabel('Maximum Deflection (\muM)')
ylabel('Pressure (MPa)')