BME 203 - MATLAB Midterm
placeholders
%d: integer notation %f: fixed point (decimal) notation (Most commonly used placeholder) %e: exponential notation %g: whichever is shorter, %f or %e. (Note: insignificant zeros do not print with %g) %c: character information %s: string of characters
logical operators
& is and ~ is not | is or
array operations
*, /, and ^ are used for matrix multiplication, division, and exponentiation only; .*, ./, and .^ are used for array multiplication, division, and exponentiation (element-by-element operations)
plot line styles
- = solid line (default) -- = dashed line : = dotted line -. = dash-dot line
E = zeros(3,5)
00000 00000 00000
hierarchy of operations
1.Parentheses () 2.Exponentiation (.^) 3.NOT operator (~) 4.Multiplication (.*) and division (./) 5.Addition (+) and subtraction (-) 6.Less than (<), less than or equal to (<=), greater than (>), greater than or equal to (>=), equal to (==), and not equal to (~=) 7.AND operator (&) 8.OR operator (|)
relational operators
< is less than > is greater than == is equal to <= is less than or equal to >= is greater than or equal to ~= is not equal to
fractional relative error
= (absolute error/true value) * 100%; gives an indication of how good the approximation is relative to the true value
absolute error
= true value - approximation; shortcoming (an error of micrometers can be significant for the size of a cell for example)
indexing into an array
A = [2,1,3] A(1,2) = 5, so then A = [2,5,3] can also extend with A(1,6) = 8, so then A = [2,5,3,0,0,8]
colon notation vs. linspace
CN: first value:final value or first:increment:limit ex. H = 1:6 makes H = 1 2 3 4 5 6 and I = 1:3:21 makes I = 1 4 7 10 13 16 19 LS: linspace(X1,X2,N) ex. linspace(1,10,10) makes 1 2 3 4 5 6 7 8 9 10 linspace (1,20,10) makes 1.00 3.11 5.22 7.33 9.44 11.56 13.67 15.78 17.89 20
extracting data using the colon operator
G = [1,2,3;4,5,6;7,8,9] 123 456 789 to extract second row you do J = G(2,:), so J = 4 5 6 to extract the first column you do K = G(:,1), so K = 1 4 7 to extract the second and third rows you do L = G(2:3,:), so L = 456 789 to extract the second and third columns of the first row you do M = G(1,2:3), so M = 2 3
surface mesh plots
[X, Y] = meshgrid(x, y); Z = f (X, Y); mesh (X, Y, Z) or surf (X, Y, Z)
formatting commands
\n = linefeed \r = carriage return \t = tab
variance
a measure of how data points differ from the mean (mean, median, mode,range)
standard deviation
a measure of variation of scores about the mean; population and sample; we usually use sample standard deviation, which is denoted std( )
arithmetic operations
addition a + b subtraction a - b multiplication a .* b division a ./ b exponentiation a .^ b
for loops
allow a sequence of MATLAB statements to be executed more than once; for loops repeat a block of commands for a specified matrix which is known before the loop is executed structure: for index = [index matrix] command #1 command #2 command #3 . . . end ex. clear all, close all for a = [1,8,4,5] disp(a) end >>a a = 5 (because this is the last value in the index after the final time through the loop) ex. for n = 1:5 fprintf(' The value of n is now %d\n', n); end The value of n is now 1 The value of n is now 2 The value of n is now 3 The value of n is now 4 The value of n is now 5 >> ex. clear all; close all for x = [pi/7, pi/5, pi/3] disp([x,sin(x)]) end 0.4488 0.4339 0.6283 0.5878 1.0472 0.8660 >>
fprintf
allows you to print data and array values ex. A1 = [9.9, 9900]; A2 = [8.8, 7.7 ; ...8800, 7700]; formatSpec = 'X is %4.2f meters or %8.3f mm\n'; fprintf(formatSpec,A1,A2) Gives X is 9.90 meters or 9900.000 mm X is 8.80 meters or 8800.000 mm X is 7.70 meters or 7700.000 mm ex. radius = input('Enter the radius: '); area = pi .* radius .^ 2; fprintf('The area of the circle is %f.', area);
nested while loops
as with for loops, we can nest if statements and other loops in a while loop ex. clear all;close all stress = [4.2 3.8 6.7 2.3 8.9 1.6 6.4]; count = 0; i=0; while i<length(stress) % outer while loop i=i+1; if stress(i)<=4.0 % inner if statement count=count+1; end % end if statement end % end while loop fprintf('Number osteoporotic bones: %d\n',count) Number osteoporotic bones:3
=
assignment operator (not "equals"); equals is == (2 equal signs)
functions with no input or output
can be used for a procedure ex. tic toc to time things
functions with no output
can be used in plot figures ex. title(' ') to title a plot
cnew
cnew = poly(r) used to get the polynomial when you know the roots
concatenation
combining matrices (defined under a new matrix) ex. A = [ 12, 18, -3] B = [2, 5, 2 ; 1, 1, 2 ; 0 -2 6] then new matrix C = [A; B] which is C = [ 12, 18, -3; 2, 5, 2 ; 1, 1, 2 ; 0, -2, 6] can also do D = [C, C] as long as the matrices have the same boundaries (3x4 with a 3x4, 2x2 with a 2x2, etc.)
round-off errors
computing device is unable to deal with inexact numbers, so these numbers need to be rounded off to some near approximation which is dependent on the space allotted by the device to represent the number
contour plots
contour(image, #) colormaps: parula jet hsv hot cool spring summer autumn winter grey bone coppur pink lines
fzero( )
designed to find the real root of a single equation using a combination of bisection, secant, and inverse quadratic interpolation methods
if/else
else clause allows you to execute one set of statements if the condition is true and a different set of statements if the condition is false structure: if condition actions else actions end other actions ex. function numCheck(x) if isnumeric(x) fprintf('Input is numeric array \n') else fprintf('Error: input is not a numeric array \n') end
elseif function
elseif clause allows you to check multiple criteria while keeping code easy to read; the first elseif argument that is true will be executed (the program will then go to the end statement) structure: if condition1 actions elseif condition2 actions else actions end other actions ex. function letter=grades(num) if num >= 90 letter='A or A-' elseif num >= 75 letter='B-, B or B+' elseif num >= 60 letter='C-, C or C+' elseif num >= 50 letter='D' else letter='F' end
truncation errors
errors in a method, which occur because some series (finite or infinite) is truncated to a fewer number of terms
riemann sum
estimates graph based on rectangles ex. delta_x=1:-0.0001:0; integral=0; i=1; while abs(integral-0.6593)>1E-4 x=1; integral=0; while x<=2; integral=integral + (sin(x)/x)*delta_x(i) x = x + delta_x(i); end i=i+1; end
simple logical programming
ex. A = [1 2 3 4 0 5 6] A~=0 ans = 1 1 1 1 0 1 1 (tells you which values in A are not zero) A(A~=0); A A = 1 2 3 4 5 6 (tells you the values of A which are not zero)
converting for to while loop
ex. FOR LOOP for index = [index matrix] commands end WHILE LOOP index = [index matrix] while i<length(index) commands i=i+1 end
converting while to for loops
ex. WHILE LOOP while logical expression commands end FOR LOOP for index = [data set] if logical expression break; end commands end
for loops with vectors and matrices
ex. for n=1:5 fprintf('The value of n is now %d\n', n); vector_1(n) = n vector_2(n) = n^2; end Vector_1 stores the value of n vector_1 = [1 2 3 4 5] Vector_2 stores the square of n vector_2 = [1 4 9 16 25]
nested if statement
ex. function numericprime(num) if isnumeric(num) fprintf('Numeric input \n') if isprime(num) fprintf('Prime number \n') else fprintf('Input not prime \n') end else fprintf('Error: Not numeric \n') end
for loops - data analysis
ex. subplot(1,2,1); R=randn(100,100); imagesc(R); colormap hot; axis square colorbar; for i=1:100; for j=1:100; if R(i,j) < 0; R(i,j)=0; else; end end end subplot(1,2,2); imagesc(R); axis square; colorbar;
polar plots
ex. theta = 0:0.01:pi; r=sin(theta); subplot(2,1,1) plot(theta, r); axis square subplot(2,1,2) polar(theta, r)
exponential plots
exponential growth y = Ce^kt, k>0 exponential decay (decreasing form) y = Ce^-kt, k>0 exponential decay (increasing form) y = C(1-e^-kt), k>0
gaussian distribution
f(x) = gaussmf(x, [std mu]) -std is the standard deviation -mu is the mean -x is the parameter under scrutiny ex. [X Y] = hist(height,9); axis square; X = X/sum(X)% Bin fraction bar(Y,X)% Creates a bar plot hold on A = mean(height) % 173.4926 C = std(height) % 10.43 y = max(X)*gaussmf(x,[C A]) xlim([130,210]) title('Class height [cm]','Fontsize',22) plot(x,y,'r') ex. x = -100:1:1200 y1 = gaussmf(x, [50, 100]); y2 = gaussmf(x, [100, 300]); y3 = gaussmf(x, [150, 500]); y4 = gaussmf(x, [200, 700]); plot(x,y1,'r'); hold on plot(x,y2,'b') plot(x,y3,'k') plot(x,y4,'g') xlim([-100 1200])
find function
find( ) to search an array to identify the index values of specific elements in the array ex. x=[1,8,6,3,2,4,9,0,5,7] IndexValues=find(x>5) X(IndexValues) >> ans=8 6 9 7
fplot
fplot(function,[xmin xmax]) fplot(function,xmin xmax ymin ymax)
width and precision field
fprintf('%8.3f\n', 3.3333) width field (8) specifies the minimum number of characters to be printed (if the number is shorter than the number of characters, it will be padded with spaces) in this case 3 spaces will be added to use 8 characters precision field (.3) specifies the number of digits to be printed to the right of the decimal point (if there are more digits to be printed after the decimal than space provided, fprintf( ) will round the number using the same rules as round( )
function with multiple inputs and outputs
function [xx,yy,zz] = sphere2cart(r,theta,phi) zz = r.*cosd(theta); xx = r.*sind(theta).*cosd(phi); yy = r.*sind(theta).*sind(phi); ex. clear,clc xy_ang = [0:1:90]; xyp_z_ang = [0:1:90]; radius=10:1:100; [x,y,z]=sphere2cart(radius, xy_ang, xyp_z_ang); row_results=[x;y;z] column_results=[x',y',z']
functions with no input
function mass_of_earth = moe() mass_of_earth = 5.976E24;
trapz( )
function to get trapezoidal riemann sum ex. X = 1:1/15:2; Y = sin(X)./X; Z = trapz(X,Y) Z=0.6593
plotting commands
grid on/grid off title('Title here') xlabel('x label') xlabel('x label','Fontsize',30) ylabel('y label') Legend('First','Second','Third','Location','NorthEast') semilogx(x,y)/semiology(x,y)/loglog(x,y) set(gca,'Fontsize',32) - modifying axes figure( ) - useful for multiple plots axis([xmin,xmax,ymin,ymax]) - useful for axis scaling text(2,90,'add text') - adding text
infinite loop
i=20 while i<50 fprintf('Count is now %d.\n',i) i=i-1 end
if statement
if statements allow you to execute a series of statements if a condition is true and to skip the stops if the condition is false basic if statement has the form: if condition actions end other actions ex with arrays. g = 0:10:80; if g < 50 fprintf('g is less than 50. \ n'); end (some elements of g are greater than 50, so the statement is false, and therefore there is no output
xlsread( ) and xlswrite( )
importing and exporting excel data
logarithmic plots
logarithmic growth y = a + bln(t) logarithmic growth model y = a/(1+be^-kt), k>0
trapezoidal method
more accurate riemann sum ex. delta_x=1:-0.0001:0; integral=0; i=1; while abs(integral-0.6593)>1E-4 x=1; integral=0; while x<=2; integral = integral + 0.5*delta_x(i)*((sin(x)/x)+(sin(x+delta_x(i))/(x+delta_x(i)))); x = x + delta_x(i); end i=i+1; end i
plot marker symbols
o = circle + = plus sign * = asterisk . = point x = cross s = square d = diamond ^ = upward-pointing triangle v = downward-pointing triangle > = right-pointing triangle < = left-pointing triangle p = pentagram h = hexagram
nested loops
one loop that is written inside another loop (inner loop is the nested loop) ex. clear all,close all r = 1:1:100 c = 1:1:200 A=[ ] % This creates an empty array (see preallocation) for i=1:length(c) %outer for loop for j = 1:length(r) % inner (nested) loop if i >= 90 & i<=110 & j > 40 & j <= 65 A(i,j) = 1; else A(i,j) = 0; end end end imagesc(A);colormap gray
3d plots
plot3(x,y,z) ex. t = 0:pi/50:10*pi; st = sin(t); ct = cos(t); plot3(st,ct,t,'LineWidth',3)
polyfit( ) function
polyfit(x,y,n) takes x data, y data, and degree n of a polynomial function returns the coefficients of the polynomial that best fits the data
polyval( ) function
polyval(coefficients,data) outputs/calculates the fitted data
root function
roots( ) used to calculate roots of polynomials x = roots(c) where x is a column vector containing the roots and c is a row vector containing the polynomials
matrix row/column
rows come first, then column (for example, when finding a value, m(2,3) is in the second row and third column); rows are separated by semicolons and columns are separated by colons
saving variables
save filename var1 var2 var3 ... - saves the variables load filename - loads variables
logarithmic plots
semilogx,semilogy,loglog
sin vs sind
sin of something in radians vs. sin of something in degrees
subplot
subplot(m,n,p) where m is rows, n is columns, and p is the window where the plot would be drawn
transpose operator
switches the array from a row to a column or a column to a row ex. N = [1,3,7] O = N' O = 1 3 7
flowcharts
symbols: oval = indicate beginning/end of a section of code, parallelogram = indicate input or output processes, diamond = indicates a decision point, rectangles = calculations are placed in rectangles
is function
test if something is true/false ex. function is true when... ischar( ) = input is character array isfinite( ) = input is finite isinf( ) = input is infinite isletter( ) = input is alphabetic letter isnumeric( ) = input is numeric array
logic
true is (1) false is (0)
view the path
type pathtool
break
used to terminate loop permanently (when the expression in the first line is still true); causes termination of the smallest enclosing loop ex. sum=0 fprintf('Input positive numbers.\n'); fprintf('Enter a negative number to quit.\n'); num=input('Enter Number: '); while num>=0 if isinf(num) break; end sum=sum+num; num=input('Enter next number: '); end fprintf('The sum of the numbers is: %f.\n', sum);
tic and toc/timing loops
used to time the code; timing loops sees how many random numbers you can write in 20 seconds ex. i=1; tic while toc < 20 num(i)=rand(1,1); i=i+1; end i
while loops
useful for repeating a procedure an unknown number of times as long as a certain statement is true; can be used to acquire data in experiments; useful when a procedure needs to be repeated until a specific criterion is met; repeats as long as an expression is true (1), stops when the expression is false (0) structure: while expression command #1 command #2 command #3 . . . end ex. clear all;close all total = 0 i=1; num(i)=input('Input number to sum\n(to exit enter negative number):') while num(i)>=0 & ~isinf(num(i)) total=total+num(i) i=i+1; num(i)=input('Input number to sum\n(to exit enter negative number):') end fprintf('The total of the numbers you input was %f.\n',total)
pseudocode
verbal description of your plan for writing a program, can be combo of English and MATLAB code or just Enlgish (but not just MATLAB code); typically ends up as your commented lines of code, next to the actual code ex. % Define a vector of mm Hg values % Convert mm HG into Pa % Combine the mm Hg and Pa vectors into a matrix % Create a table title % Display column headings using fprintf() % Display the table using fprintf()
bar graphs
x = [1,3,8,5,4,6]; bar(x) for vertical bar graph and barh(x) for horizontal bar graph
pie charts
x = [1,3,8,5,4,6]; figure(1) pie(x)
Gaussian
y = ae^(-(x-c)^2)/(b^2)
plot colors
y = yellow m = magenta c = cyan r = red g = green b = blue w = white k = black