630 likes | 755 Views
Using and Programming with MATLAB as an Engineering Tool [ Part III ]. Lecture outline. Saving variables Basic file input/output Evaluating string commands Functions of functions. Saving Variables. Sometimes you might want to save some or all of your workspace.
E N D
Using and Programming with MATLAB as an Engineering Tool[ Part III ]
Lecture outline • Saving variables • Basic file input/output • Evaluating string commands • Functions of functions
Saving Variables • Sometimes you might want to save some or all of your workspace Don’t want to repeat time consuming calculations
Saving Variables • Sometimes you might want to save some or all of your workspace • MATLAB allows you to save variables from the console workspace
Saving Variables • Sometimes you might want to save some or all of your workspace • MATLAB allows you to save variables from the console workspace • You can load these variables whenever you need them
Saving Variables • Sometimes you might want to save some or all of your workspace • MATLAB allows you to save variables from the console workspace • You can load these variables whenever you need them Mat-files
Saving Variables >> save • Saves the entire workspace to matlab.mat >> save points.mat x y • Saves x and y in points.mat >> save change dx dy dz • Saves dx, dy and dz in change.mat >> save coord.dat x y z –ascii • Saves x, y and z in coord.dat in ASCII format
Loading Variables >> load • Loads the variables in matlab.mat >> load change • Loads the variables in change.mat >> load coord.dat –ascii • Loads the variables in ASCII file coord.dat >> load points x • Only loads x from points.mat
Input from a File • Opening a file fid = fopen(filename, ‘r’); • fid = -1 means can’t open file • Reading formatted data result = fscanf(fid, format); • Reading a line line = fgetl(fid); % fgets keeps end-of-line char • Closing a file fclose(fid);
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Read a real Read an integer Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Read a real Read an integer Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Read a real Read an integer Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Read a real Read an integer Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> fid = fopen(‘data.in’, ‘r’); >> fgetl(fid); >> fgetl(fid); >> T = scanf(fid,‘%g%g%d’) >> fclose(fid) Input from a File data.in
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 T = 23.5000 1.4500 7.0000 29.8000 2.5500 6.0000 13.5000 0.6700 8.0000 31.4000 2.8600 5.0000 Need to manipulate T into matrix form Read three values Input from a File data.in T = zeros(4, 3); for i = 1:4, T(i, :) = fscanf(fid, … ‘%g%g%d’, 3); end
Output to a File • Open a file also using fopen fid = fopen(filename, ‘w’); • ‘w’ means write and create if necessary • replacing ‘w’ by ‘a’ means append (also creating) • Writing formatted data fprintf(fid, format, data) • Writing a line fprintf(fid, ‘…\n’, data) • Use fclose to close a file and write it
>> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File
>> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out
Block Properties >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out
Block Properties Temp Press Vol >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out Moves columnwise
Block Properties Temp Press Vol >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) integer (no width) Width 3 chars, 2 dp Width 3 chars, 1 dp Output to a File data.out
Block Properties Temp Press Vol 23.5 1.45 7 >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) integer (no width) Width 3 chars, 2 dp Width 3 chars, 1 dp Output to a File data.out
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out
Block Properties Temp Press Vol 23.5 1.45 7 29.8 2.55 6 13.5 0.67 8 31.4 2.86 5 >> T = [ 23.5 1.45 7; 29.8 2.55 6; 13.5 0.67 8; 31.4 2.86 5]; >> fid = fopen(‘data.out’, ‘w’); >> fprintf(fid, ‘Block Properties\n’); >> fprintf(fid, ‘Temp Press Vol\n’); >> fprintf(fid, … ‘ %3.1f %3.2f %d\n’, T’); >> fclose(fid) Output to a File data.out
Lab 6 Example (p. 128) function [names, years, rain] = getrain(filename, numnames, numyears) • This line defines a function with inputs • the file’s name (a string) • the number of names to read (an integer) • the number of years to read (an integer) • and outputs • the names (a cell vector) • the years (a integer vector) • the rain (a real matrix)
Lab 6 Example (p. 128) fid = fopen(filename, ‘r’); • This line opens the file (as read only) and assigns a file identifier if fid ~= -1, blah, blah, blah else error([‘Could not open file ‘ filename]); end; • These lines check if the file has been opened and writes an error if it was not
Lab 6 Example (p. 128) fgetl(fid); • This line reads a line from the file • The table heading an column heading, e.g., c = ‘ ’; while c ~= ‘|’, c = fscanf(fid, ‘%c’, 1); end; • These lines initialise a character c to be a space, then keep reading a new character from the file until a | is found Rainfall (in) | Year Rainforest Location | 1998 1999 2000 2001 2002
Lab 6 Example (p. 128) years = fscanf(fid, ‘%d’, numyears); • This line reads the years following the | from the file fgetl(fid); fgetl(fid); • These lines read the remainder of the heading line and the table separator Rainforest Location | 1998 1999 2000 2001 2002 ----------------------------------------------
Lab 6 Example (p. 128) for n = 1:numnames, Read a row from the file end; • These lines read numnames rows from the table using a for loop names = cellstr(namematrix); • This line creates a cell vector from a charatcer matrix (more later) fclose(fid); • This line closes the file
Lab 6 Example (p. 128) name = ‘’; c = ‘ ’; while c ~= ‘|’, c = fscanf(fid, ‘%c’, 1); if c ~= ‘|’, name = [name c]; end; end; namematrix(n, :) = name; • These lines read a name from the table by reading characters and adding them to name, then setting the appropriate row of the namematrix Zaire | 76 84 95 92 107
Lab 6 Example (p. 128) rain(n, :) = fscanf(fid, ‘%g’, numyears)’; • This line reads the rainfall data for the given number of years and saves them in the rainfall matrix fgetl(fid); • This line reads the rest of the line and discards it Zaire | 76 84 95 92 107 India | 95 73 81 67 55
Lab 6 Example (p. 128) • What is a cell vector (or a cell matrix for that matter)?! names = cellstr(namematrix); • Matlab stores information in matrices, each row must have the same number of columns • What about a list of names, where the names have different lengths? • We can use a matrix and fill the remaining columns with spaces (e.g., namematrix) • Or we can use a cell vector or matrix structure where each entry may be a different size (e.g., names)
Cells • No real details here (use help cell) • Work similar to matrices and vectors except use {} instead of [], e.g., names{3} is the third name in names • What about names = cellstr(namematrix); ? • Takes the charater matrix and turns it into a cell vector (removing leading and trailing whitespace)
Concatenated string The sprintf function string = sprintf(format, data); • Write formatted variables into a string >> [‘Give the integer ‘ sprintf(‘%d’, 6) … ‘ a real format ‘ sprintf(‘%3.2f’, 6)] ans = Give the integer 6 a real format 6.00 int2str
Creates files result1 result2 . . . result10 The eval function eval(string); • Evaluates the string as a command eval(‘x = 5 * 6 / 2’) equivalent >> x = 5 * 6 / 2 • Many uses, e. g., batch commands for run = 1:10, outfile = [‘result’ int2str(run)]; % Do some calculations eval([‘save ‘ outfile]) end
The feval function value = feval(name, inputs); • Evalutes the function call with the given inputs, i. e., value = name(inputs); >> y = feval(‘mypoly’, 1) y = 4 function y = mypoly(x) y = x.^2 + 2 * x + 1; return;
Using feval • Calculate the forward difference of a function • function df = fordiff(func, x, h) • df = (feval(func, x + h) – feval(func, x)) / h; • return;
Passing Functions as Variables to Functions • MATLAB has a collection of useful built in functions that require a function name be passed as an argument • Function-functions • Examples:
Passing Functions as Variables to Functions • MATLAB has a collection of useful built in functions that require a function name be passed as an argument • Function-functions • Examples:
Passing Functions as Variables to Functions • MATLAB has a collection of useful built in functions that require a function name be passed as an argument • Function-functions • Examples:
Passing Functions as Variables to Functions • MATLAB has a collection of useful built in functions that require a function name be passed as an argument • Function-functions • Examples: fmin find minima of a function fzero find zeros of a function fplot plot a function quad integral of a function ode23 solves ordinary differential equations ode45 solves ordinary differential equations
Example of Function-functions Plot the function y=x3-x
Example of Function-functions Plot the function y=x3-x Function: function y=cubic(x) y=x.^3-x; return;
Example of Function-functions Plot the function y=x3-x One way: Function: function y=cubic(x) y=x.^3-x; return; x=0:0.01:1; y=cubic(x); plot(x,y);
Example of Function-functions Plot the function y=x3-x Vector of closely spaced x values to give smooth curve One way: Function: function y=cubic(x) y=x.^3-x; return; x=0:0.01:1; y=cubic(x); plot(x,y);