1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# Algorithmic thinking
## Learning Objectives
By the end of this lesson, students will be able to:
- Apply algorithmic thinking to solve engineering problems using computational tools.
- Translate engineering problems into structured programming logic.
- Use software tools to implement, test, and refine engineering solutions.
## Define the Problem
Like many other classes we need to frame the problem before working it. So before jumping straight into coding or building models, clearly define the engineering problem.
- **List knowns and unknowns.** What inputs are given? What outputs are required?
- **Establish system constraints and assumptions.** Identify physical laws, design requirements, and performance limits.
- **Clarify computational objectives.** What are you trying to calculate, simulate, or optimize?
## Think Algorithmically
Since we are going to use computers to calculate our solution we first need to break the problem into logical steps that a computer can follow.
- **Define the inputs and outputs.** What variables will the program take in, and what results will it produce?
- **Break the problem into sub-tasks.** Identify steps such as data input, logic processing and output.
- **Outline the algorithm.** Write pseudocode or flowcharts that describe the computational steps.
- **Identify patterns or formulas.** Can loops, conditionals, or equations be used to automate parts of the solution?
**Example:** For processing stress-strain data:
1. Import data from a file.
2. Convert force and displacement to stress and strain.
3. Plot the stress-strain curve.
4. Identify the yield point or modulus.
## Write & Execute the Code
- **Choose the right tools.** Are there libraries I can use to get to my objective more effectively?
- **Write modular code.** Use functions to separate different tasks (e.g., reading data, computing values, plotting).
- **Check for syntax and logic errors.** Debug line-by-line using print statements or a debugger.
**Example:** Write a Python script that uses NumPy and Matplotlib to load a CSV file, compute stress and strain, and generate plots.
## Test and Validate
- **Assess the feasibility of your results.** Do the values align with expected physical behavior?
- **Compare against established benchmarks.** Validate solutions using experimental data, literature values, or known theoretical limits.
- **Check units and scaling.** Ensure computations are consistent with physical meaning.
**Example:** If your plot shows stress values in the thousands when you expect hundreds, check unit conversions in your formula.
## Case Study: Simulating a Spring-Mass System
**Scenario:** Model the motion of a mass-spring-damper system using a numerical solver.
1. **Define the Problem:** Set up the differential equation from Newton’s Second Law.
2. **Develop a Strategy:** Discretize time, apply numerical integration (e.g., Euler or Runge-Kutta).
3. **Execute the Code:** Write a Python function that computes motion over time.
4. **Test the Model:** Compare results with analytical solutions for undamped or lightly damped systems.
5. **Refine the Model:** Add adjustable damping and stiffness parameters.
6. **Troubleshoot Issues:** If the model becomes unstable, reduce the time step or use a more accurate integrator.
|