1D vector example

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Vec1dex.m 
% Written by Ebenezer P Gnanamanickam 
% Dec 2006.
% DISCLAIMER - I do not claim to be an expert on MATLAB but what little I
% have learned during the course of grad school here at Purdue University
% I want to share. If it's useful GREAT if not sorry.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% 
% This script gives an idea of how to carry out vector operations in MATLAB 
% using Blasius boundary layer profile as an example. Here delta =f(x). That is
% the boundary layer profile is plotted at different x locations for a single 
% freestream velocity. You can choose between four ways of doing this 
% (i) for loop operations - the standard C/Fortan method of doing it - This
% is extremely slow. PLEASE, I repeat PLEASE do not use for loops for
% anything more than a 1000 points without variable declarations/ memory
% allocation. The reason is that MATLAB evaluates for loops line by line
% and allocates memory as the vector grows. one word - NO!!!!!
% (ii) Vectorized operations for which MATLAB is optimized to work
% (iii) For loop operations with variable declaration (memory 
% allocation) - this as it turns out is almost as efficient as the 
% vectorized option
% (iv) Using variable declaration as well as vectorized operations - no real
% advantage here 

clc; % clears the command window
clear all; % clears all the variables
close all; % close all existing windows

tstart=clock; % starts the clock to calculate the run time

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% INPUTS
n=100000; % number of points
method=1; % choose the method you want to use
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

mu=1.73e-5*10e-5; % in N-s/m^2
rho=1.229; % in kg/m^3

U_inf=20;% in m/s


switch (method)
    case 1
        x=linspace(0,10,n);% in m

        for (i=1:1:length(x))
            delta(i)=3.5*sqrt(mu*x(i)/rho/U_inf);
        end
        smethod='for loop operations';
    case 2
        x=linspace(0,10,n);% in m

        delta=3.5.*sqrt(mu.*x./rho/U_inf);
        smethod='vectorized operations';
    case 3
        x=zeros(1,n);
        delta=zeros(1,n);
        x=linspace(0,10,n);% in m

        for (i=1:1:length(x))
            delta(i)=3.5*sqrt(mu*x(i)/rho/U_inf);
        end

        smethod='for loop operations with variable declaration';
    case 4
        x=zeros(1,n);
        delta=zeros(1,n);
        x=linspace(0,10,n);% in m

        delta=3.5.*sqrt(mu.*x./rho/U_inf);
        smethod='vectorized operations with variable declarations';
end

figure
plot(x,delta)
xlabel('x in m')
ylabel('\delta_{99} in m');
title('Blasius - Boundary layer thickness on flat plate');
legend('\delta_{99}',4);
grid;

tfinish=clock; % end run time

runtime=etime(tfinish,tstart); % estimates the runtimes

s1=['number of points = '  num2str(n)]
s2=['method = ' smethod]
s3=['run time = ' num2str(runtime)]