JimmyChung (Talk | contribs) |
|||
Line 2: | Line 2: | ||
{{Queens Canada/Navbar}} | {{Queens Canada/Navbar}} | ||
<html> | <html> | ||
+ | <head> | ||
+ | <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?lang=m"></script> | ||
<style> | <style> | ||
body { | body { | ||
Line 10: | Line 12: | ||
} | } | ||
</style> | </style> | ||
+ | </head> | ||
<body> | <body> | ||
<h2 style="width:70%;margin-left:15%">Fluid Dynamics</h2> | <h2 style="width:70%;margin-left:15%">Fluid Dynamics</h2> | ||
+ | |||
+ | <h3>Matlab code</h3> | ||
+ | <pre class="prettyprint"> | ||
+ | anArray = zeros(1,10); %Initialize storage array | ||
+ | storageCounterMax = 10; | ||
+ | |||
+ | for storageCounter = 1:storageCounterMax | ||
+ | |||
+ | %Variable Declaration | ||
+ | n = 1; %Initialize loop counter | ||
+ | N=0.25; %Range from random selection will be [-N,N] | ||
+ | loopMax=10000; %Number of random walk movements | ||
+ | ColorSet = varycolor(loopMax); %Set amount of colours | ||
+ | diameter = 6.94; %Set diameter of cylinder | ||
+ | radius = diameter*0.5; %Set radius of cylinder | ||
+ | totalHeight = 10.85; %Set total height of container | ||
+ | pauseTime = 0.0; %Set time between plotting iterations | ||
+ | boundaryCondition = true; | ||
+ | |||
+ | %Cylinder Figure | ||
+ | maxHeight = totalHeight - radius; | ||
+ | h=maxHeight; | ||
+ | x0=0;y0=0;z0=0; | ||
+ | [x,y,z]=cylinder(radius); | ||
+ | x=x+x0; | ||
+ | y=y+y0; | ||
+ | z=z*h+z0; | ||
+ | |||
+ | %Half Sphere Figure | ||
+ | A = [0 0 0 radius]; | ||
+ | [X, Y, Z] = sphere; | ||
+ | XX = X * A(4) + A(1); | ||
+ | YY = Y * A(4) + A(2); | ||
+ | ZZ = Z * A(4) + A(3); | ||
+ | XX = XX(11:end,:); | ||
+ | YY = YY(11:end,:); | ||
+ | ZZ = -ZZ(11:end,:); | ||
+ | |||
+ | %Display Information | ||
+ | figure | ||
+ | xlabel('X'); | ||
+ | ylabel('Y'); | ||
+ | zlabel('Z'); | ||
+ | surface(x,y,z, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on | ||
+ | surface(XX, YY, ZZ, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on | ||
+ | axis equal | ||
+ | view(3); | ||
+ | set(gca,'GridLineStyle','-') | ||
+ | Information=strcat('Brownian Motion in 3D Space'); | ||
+ | title(Information ,'FontWeight','bold'); | ||
+ | view(-109,40); | ||
+ | hold all | ||
+ | set(gca, 'ColorOrder', ColorSet); | ||
+ | |||
+ | |||
+ | %Initialize Beginning Location | ||
+ | heightInitialize = maxHeight + radius; | ||
+ | xF = (2*radius*rand())-radius; | ||
+ | yF = (2*radius*rand())-radius; | ||
+ | zF = (heightInitialize*rand())-radius; | ||
+ | |||
+ | while(boundaryCondition == true) | ||
+ | |||
+ | n = n + 1; | ||
+ | |||
+ | xI = xF; | ||
+ | yI = yF; | ||
+ | zI = zF; | ||
+ | |||
+ | xF = xI + (2*N*rand())-N; | ||
+ | yF = yI + (2*N*rand())-N; | ||
+ | zF = zI + (2*N*rand())-N; | ||
+ | |||
+ | dist = sqrt(xF^2 + yF^2); | ||
+ | length = sqrt(xF^2 + yF^2 + zF^2); | ||
+ | |||
+ | |||
+ | if (zF >= maxHeight) | ||
+ | flag = 1; | ||
+ | disp(n); | ||
+ | break; | ||
+ | end | ||
+ | |||
+ | if (zF >= 0 && zF < maxHeight && dist < radius) | ||
+ | |||
+ | v1=[xI,yI,zI]; | ||
+ | v2=[xF,yF,zF]; | ||
+ | v=[v2;v1]; | ||
+ | plot3(v(:,1),v(:,2),v(:,3)); | ||
+ | pause(pauseTime); | ||
+ | |||
+ | elseif (zF < 0 && length < radius) | ||
+ | |||
+ | v1=[xI,yI,zI]; | ||
+ | v2=[xF,yF,zF]; | ||
+ | v=[v2;v1]; | ||
+ | plot3(v(:,1),v(:,2),v(:,3)); | ||
+ | pause(pauseTime); | ||
+ | |||
+ | else | ||
+ | |||
+ | boundaryCondition = false; | ||
+ | while(boundaryCondition == false) | ||
+ | |||
+ | xF = xI + (2*N*rand())-N; | ||
+ | yF = yI + (2*N*rand())-N; | ||
+ | zF = zI + (2*N*rand())-N; | ||
+ | |||
+ | length = sqrt(xF^2 + yF^2 + zF^2); | ||
+ | dist = sqrt(xF^2 + yF^2); | ||
+ | |||
+ | if ((zF >= 0 && zF < maxHeight && dist < radius)||(zF < 0 && length < radius)) | ||
+ | boundaryCondition = true; | ||
+ | v1=[xI,yI,zI]; | ||
+ | v2=[xF,yF,zF]; | ||
+ | v=[v2;v1]; | ||
+ | plot3(v(:,1),v(:,2),v(:,3)); | ||
+ | pause(pauseTime); | ||
+ | |||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | anArray(storageCounter)=n; | ||
+ | disp(anArray); | ||
+ | end | ||
+ | |||
+ | plot3(xF,yF,zF,'ok','MarkerFaceColor','r'); | ||
+ | hold off | ||
+ | disp(anArray) | ||
+ | disp(n) | ||
+ | |||
+ | function ColorSet=varycolor(NumberOfPlots) | ||
+ | % VARYCOLOR Produces colors with maximum variation on plots with multiple | ||
+ | % lines. | ||
+ | % | ||
+ | % VARYCOLOR(X) returns a matrix of dimension X by 3. The matrix may be | ||
+ | % used in conjunction with the plot command option 'color' to vary the | ||
+ | % color of lines. | ||
+ | % | ||
+ | % Yellow and White colors were not used because of their poor | ||
+ | % translation to presentations. | ||
+ | % | ||
+ | % Example Usage: | ||
+ | % NumberOfPlots=50; | ||
+ | % | ||
+ | % ColorSet=varycolor(NumberOfPlots); | ||
+ | % | ||
+ | % figure | ||
+ | % hold on; | ||
+ | % | ||
+ | % for m=1:NumberOfPlots | ||
+ | % plot(ones(20,1)*m,'Color',ColorSet(m,:)) | ||
+ | % end | ||
+ | |||
+ | %Created by Daniel Helmick 8/12/2008 | ||
+ | |||
+ | narginchk(1,1)%correct number of input arguements?? | ||
+ | nargoutchk(0, 1)%correct number of output arguements?? | ||
+ | |||
+ | %Take care of the anomolies | ||
+ | if NumberOfPlots<1 | ||
+ | ColorSet=[]; | ||
+ | elseif NumberOfPlots==1 | ||
+ | ColorSet=[0 1 0]; | ||
+ | elseif NumberOfPlots==2 | ||
+ | ColorSet=[0 1 0; 0 1 1]; | ||
+ | elseif NumberOfPlots==3 | ||
+ | ColorSet=[0 1 0; 0 1 1; 0 0 1]; | ||
+ | elseif NumberOfPlots==4 | ||
+ | ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1]; | ||
+ | elseif NumberOfPlots==5 | ||
+ | ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0]; | ||
+ | elseif NumberOfPlots==6 | ||
+ | ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0; 0 0 0]; | ||
+ | |||
+ | else %default and where this function has an actual advantage | ||
+ | |||
+ | %we have 5 segments to distribute the plots | ||
+ | EachSec=floor(NumberOfPlots/5); | ||
+ | |||
+ | %how many extra lines are there? | ||
+ | ExtraPlots=mod(NumberOfPlots,5); | ||
+ | |||
+ | %initialize our vector | ||
+ | ColorSet=zeros(NumberOfPlots,3); | ||
+ | |||
+ | %This is to deal with the extra plots that don't fit nicely into the | ||
+ | %segments | ||
+ | Adjust=zeros(1,5); | ||
+ | for m=1:ExtraPlots | ||
+ | Adjust(m)=1; | ||
+ | end | ||
+ | |||
+ | SecOne =EachSec+Adjust(1); | ||
+ | SecTwo =EachSec+Adjust(2); | ||
+ | SecThree =EachSec+Adjust(3); | ||
+ | SecFour =EachSec+Adjust(4); | ||
+ | SecFive =EachSec; | ||
+ | |||
+ | for m=1:SecOne | ||
+ | ColorSet(m,:)=[0 1 (m-1)/(SecOne-1)]; | ||
+ | end | ||
+ | |||
+ | for m=1:SecTwo | ||
+ | ColorSet(m+SecOne,:)=[0 (SecTwo-m)/(SecTwo) 1]; | ||
+ | end | ||
+ | |||
+ | for m=1:SecThree | ||
+ | ColorSet(m+SecOne+SecTwo,:)=[(m)/(SecThree) 0 1]; | ||
+ | end | ||
+ | |||
+ | for m=1:SecFour | ||
+ | ColorSet(m+SecOne+SecTwo+SecThree,:)=[1 0 (SecFour-m)/(SecFour)]; | ||
+ | end | ||
+ | |||
+ | for m=1:SecFive | ||
+ | ColorSet(m+SecOne+SecTwo+SecThree+SecFour,:)=[(SecFive-m)/(SecFive) 0 0]; | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | </pre> | ||
+ | |||
<footer style="background-color: #212121;height:90px "> | <footer style="background-color: #212121;height:90px "> | ||
<div class="container"> | <div class="container"> |
Revision as of 18:14, 20 September 2018
Fluid Dynamics
Matlab code
anArray = zeros(1,10); %Initialize storage array storageCounterMax = 10; for storageCounter = 1:storageCounterMax %Variable Declaration n = 1; %Initialize loop counter N=0.25; %Range from random selection will be [-N,N] loopMax=10000; %Number of random walk movements ColorSet = varycolor(loopMax); %Set amount of colours diameter = 6.94; %Set diameter of cylinder radius = diameter*0.5; %Set radius of cylinder totalHeight = 10.85; %Set total height of container pauseTime = 0.0; %Set time between plotting iterations boundaryCondition = true; %Cylinder Figure maxHeight = totalHeight - radius; h=maxHeight; x0=0;y0=0;z0=0; [x,y,z]=cylinder(radius); x=x+x0; y=y+y0; z=z*h+z0; %Half Sphere Figure A = [0 0 0 radius]; [X, Y, Z] = sphere; XX = X * A(4) + A(1); YY = Y * A(4) + A(2); ZZ = Z * A(4) + A(3); XX = XX(11:end,:); YY = YY(11:end,:); ZZ = -ZZ(11:end,:); %Display Information figure xlabel('X'); ylabel('Y'); zlabel('Z'); surface(x,y,z, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on surface(XX, YY, ZZ, 'FaceAlpha', 0.1, 'FaceColor', [ 1 1 0], 'EdgeColor', [0.4, 0.4, 0.4]); hold on axis equal view(3); set(gca,'GridLineStyle','-') Information=strcat('Brownian Motion in 3D Space'); title(Information ,'FontWeight','bold'); view(-109,40); hold all set(gca, 'ColorOrder', ColorSet); %Initialize Beginning Location heightInitialize = maxHeight + radius; xF = (2*radius*rand())-radius; yF = (2*radius*rand())-radius; zF = (heightInitialize*rand())-radius; while(boundaryCondition == true) n = n + 1; xI = xF; yI = yF; zI = zF; xF = xI + (2*N*rand())-N; yF = yI + (2*N*rand())-N; zF = zI + (2*N*rand())-N; dist = sqrt(xF^2 + yF^2); length = sqrt(xF^2 + yF^2 + zF^2); if (zF >= maxHeight) flag = 1; disp(n); break; end if (zF >= 0 && zF < maxHeight && dist < radius) v1=[xI,yI,zI]; v2=[xF,yF,zF]; v=[v2;v1]; plot3(v(:,1),v(:,2),v(:,3)); pause(pauseTime); elseif (zF < 0 && length < radius) v1=[xI,yI,zI]; v2=[xF,yF,zF]; v=[v2;v1]; plot3(v(:,1),v(:,2),v(:,3)); pause(pauseTime); else boundaryCondition = false; while(boundaryCondition == false) xF = xI + (2*N*rand())-N; yF = yI + (2*N*rand())-N; zF = zI + (2*N*rand())-N; length = sqrt(xF^2 + yF^2 + zF^2); dist = sqrt(xF^2 + yF^2); if ((zF >= 0 && zF < maxHeight && dist < radius)||(zF < 0 && length < radius)) boundaryCondition = true; v1=[xI,yI,zI]; v2=[xF,yF,zF]; v=[v2;v1]; plot3(v(:,1),v(:,2),v(:,3)); pause(pauseTime); end end end end anArray(storageCounter)=n; disp(anArray); end plot3(xF,yF,zF,'ok','MarkerFaceColor','r'); hold off disp(anArray) disp(n) function ColorSet=varycolor(NumberOfPlots) % VARYCOLOR Produces colors with maximum variation on plots with multiple % lines. % % VARYCOLOR(X) returns a matrix of dimension X by 3. The matrix may be % used in conjunction with the plot command option 'color' to vary the % color of lines. % % Yellow and White colors were not used because of their poor % translation to presentations. % % Example Usage: % NumberOfPlots=50; % % ColorSet=varycolor(NumberOfPlots); % % figure % hold on; % % for m=1:NumberOfPlots % plot(ones(20,1)*m,'Color',ColorSet(m,:)) % end %Created by Daniel Helmick 8/12/2008 narginchk(1,1)%correct number of input arguements?? nargoutchk(0, 1)%correct number of output arguements?? %Take care of the anomolies if NumberOfPlots<1 ColorSet=[]; elseif NumberOfPlots==1 ColorSet=[0 1 0]; elseif NumberOfPlots==2 ColorSet=[0 1 0; 0 1 1]; elseif NumberOfPlots==3 ColorSet=[0 1 0; 0 1 1; 0 0 1]; elseif NumberOfPlots==4 ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1]; elseif NumberOfPlots==5 ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0]; elseif NumberOfPlots==6 ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0; 0 0 0]; else %default and where this function has an actual advantage %we have 5 segments to distribute the plots EachSec=floor(NumberOfPlots/5); %how many extra lines are there? ExtraPlots=mod(NumberOfPlots,5); %initialize our vector ColorSet=zeros(NumberOfPlots,3); %This is to deal with the extra plots that don't fit nicely into the %segments Adjust=zeros(1,5); for m=1:ExtraPlots Adjust(m)=1; end SecOne =EachSec+Adjust(1); SecTwo =EachSec+Adjust(2); SecThree =EachSec+Adjust(3); SecFour =EachSec+Adjust(4); SecFive =EachSec; for m=1:SecOne ColorSet(m,:)=[0 1 (m-1)/(SecOne-1)]; end for m=1:SecTwo ColorSet(m+SecOne,:)=[0 (SecTwo-m)/(SecTwo) 1]; end for m=1:SecThree ColorSet(m+SecOne+SecTwo,:)=[(m)/(SecThree) 0 1]; end for m=1:SecFour ColorSet(m+SecOne+SecTwo+SecThree,:)=[1 0 (SecFour-m)/(SecFour)]; end for m=1:SecFive ColorSet(m+SecOne+SecTwo+SecThree+SecFour,:)=[(SecFive-m)/(SecFive) 0 0]; end end end