1 / 63

Using and Programming with MATLAB as an Engineering Tool [ Part III ]

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.

peigi
Download Presentation

Using and Programming with MATLAB as an Engineering Tool [ Part III ]

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Using and Programming with MATLAB as an Engineering Tool[ Part III ]

  2. Lecture outline • Saving variables • Basic file input/output • Evaluating string commands • Functions of functions

  3. Saving Variables • Sometimes you might want to save some or all of your workspace Don’t want to repeat time consuming calculations

  4. Saving Variables • Sometimes you might want to save some or all of your workspace • MATLAB allows you to save variables from the console workspace

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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);

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. >> 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

  21. >> 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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)

  31. 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

  32. 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

  33. 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 ----------------------------------------------

  34. 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

  35. 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

  36. 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

  37. 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)

  38. 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)

  39. 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

  40. 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

  41. 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;

  42. 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;

  43. 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:

  44. 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:

  45. 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:

  46. 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

  47. Example of Function-functions Plot the function y=x3-x

  48. Example of Function-functions Plot the function y=x3-x Function: function y=cubic(x) y=x.^3-x; return;

  49. 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);

  50. 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);

More Related