- 59 Views
- Uploaded on
- Presentation posted in: General

ME 2016: Computing Techniques

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Learning Objectives

Learn how to write correct and reliable Matlab code

Learn how to debug Matlab code

ME 2016: Computing Techniques

- Designing and Debugging Matlab Code
- Understand
- The Matlab graphical Debugger
- Defensive coding practice
- Error trapping

- Five Steps
- State the problem clearly
- Describe the input and output information
- Work the problem by hand (or with a calculator) for a simple set of data
- Develop a MATLAB solution
- Test the code for a variety of data
- Apply these 5 steps in a hierarchical fashion
- 1) to top-level script
- 2) to function called in script
- 3) to functions called in these functions, etc.

- Study the Matlab Syntax
- Make flash cards for each Matlab command / function and a description of what this command does

- Test your code extensively
- Test every command
- Instead of writing an entire function, test every command at the command prompt before you add it to your m-file
- This is particularly useful when using commands that you are not yet 100% familiar with.

- Test every function
- Before you use your function (in a script or other function), make sure to test it extensively.Try to make it break!

- Test every command

- Check your code. Have you programmed defensively?
- Initialized variables
- Indented code and commented appropriately
- Used descriptive variable names
- Used parentheses if the precedence order may be ambiguous
- Implemented reasonable error trapping
- Named m-files correctly

- So what if we have programmed defensively and our code still doesn't run?
- Debug!!
- Debugging is the process of locating and correcting errors in a computer program code.
- Matlab includes several tools and techniques for debugging

- How to find the value of a variable at the time of error?
- Use fprintf or disp commands, or remove some semi-colons
- Not always a good idea: creates lots of output on the screen; cumbersome to add and remove to your program

- Use ">> dbstop if error" (my favorite)
- At the command prompt, type "dbstop if error" (remains active for the entire Matlab session)
- Matlab will jump into debugger as soon as an error occurs (as if you had use the "keyboard" command; or put in a breakpoint)
- Advantage: you can look inside the function at the values of variables to see what went wrong
- "help debug" for more information

- Use the graphical debugger
- Add some breakpoints, and float the mouse over the variables you want to investigate

Clear all breakpoints

Insert Breakpoint

Step

Step Out

Exit debug mode

PotentialBreakpoints

Step In

Continue

Breakpoint

- Read the error messages!!!
- They contain very valuable information.

- Example: What does the following message tell me?

- ??? Error using ==> ^
- Matrix must be square.
- Error in ==> C:\MATLAB6p1\work\load_torque.m
- On line 32 ==> wind_resistance = 0.5*drag_coefficient*frontal_area*air_density * v^2;
- Error in ==> C:\MATLAB6p1\work\torque_plot.m
- On line 8 ==> lt(i,:) = load_torque(rpm,gear_ratios(i),10);

- function torque = load_torque (rpm, gear_ratio, slope)
- wheel_radius = 16 * 0.0254 / 2; % [m] (16" wheels)
- drag_coefficient = 0.29; % dimensionless
- frontal_area = 1.9; % [m2]
- air_density = 1.29; % [kg/m3]
- rolling_coefficient = 14.3; % [Ns/m]
- mass = 1800; % [kg] includes driver and 3 passengers
- g = 9.81; % in [m/s2]
- v = rpm * 2 * pi * wheel_radius /( 60 * gear_ratio ); % in [m/s]
- wind_resistance = 0.5*drag_coefficient*frontal_area*air_density * v^2; % in [N]
- rolling_resistance = roling_coefficient * v; % in [N]
- drag_force = wind_resistance + rolling_resistance; % in [N]
- alpha = atang(slope/100); % in [radians]
- gravitational_force = mass * g * sin(alpha); % in [N]
- load_force = drag_force + gravitational_force; % in [N]
- torque = load_force * wheel_radius / gear_ratio; % in [Nm]

Warning: the code above contains bugs!

- More Examples:
- What do the following messages tell me?

- ??? Undefined function or variable 'roling_coefficient'.
- Error in ==> C:\MATLAB6p1\work\load_torque.m
- On line 33 ==> rolling_resistance = roling_coefficient * v;
- Error in ==> C:\MATLAB6p1\work\torque_plot.m
- On line 8 ==> lt(i,:) = load_torque(rpm,gear_ratios(i),10);

- ??? Undefined function or variable 'atang'.
- Error in ==> C:\MATLAB6p1\work\load_torque.m
- On line 37 ==> alpha = atang(slope/100); % in [radians]
- Error in ==> C:\MATLAB6p1\work\torque_plot.m
- On line 8 ==> lt(i,:) = load_torque(rpm,gear_ratios(i),10);

- One more example:
- What does the following message tell me?

- Warning: Divide by zero.
- > In C:\MATLAB6p1\work\load_torque.m at line 29
- In C:\MATLAB6p1\work\torque_plot.m at line 8
- Warning: Divide by zero.
- > In C:\MATLAB6p1\work\load_torque.m at line 44
- In C:\MATLAB6p1\work\torque_plot.m at line 8

- Now that we’ve finished coding it is important to make sure that we are trapping common errors.
- Testing (Step 5) will help us catch errors that we may need to trap or address also.
- Example Error: What happens if the gear_ratio is zero? … Try it.

if gear_ratio == 0

error('The gear_ratio should be non-zero.');

end

- The previous statement caught the error, but how
- can we make it show the error without stopping?
- Use the try/catch construct
- Example:

gear_ratio = 0; % for illustration purposes only…

try

load_torque = load_torque (rpm, gear_ratio, slope);

disp(torque);

catch

fprintf('Something went wrong while computing the load torque');

load_torque = 0;

end

- Designing and Debugging Matlab Programs
- Learn how to write correct and reliable Matlab code
- Learn how to debug Matlab code
- The Matlab graphical Debugger
- Defensive coding practice
- Error trapping