Skip to main content
Contents
Calc
Dark Mode Prev Next Profile
\(\newcommand\DLGray{\color{Gray}}
\newcommand\DLO{\color{BurntOrange}}
\newcommand\DLRa{\color{WildStrawberry}}
\newcommand\DLGa{\color{Green}}
\newcommand\DLGb{\color{PineGreen}}
\newcommand\DLBa{\color{RoyalBlue}}
\newcommand\DLBb{\color{Cerulean}}
\newcommand\ds{\displaystyle}
\newcommand\ddx{\frac{d}{dx}}
\newcommand\os{\overset}
\newcommand\us{\underset}
\newcommand\ob{\overbrace}
\newcommand\obt{\overbracket}
\newcommand\ub{\underbrace}
\newcommand\ubt{\underbracket}
\newcommand\ul{\underline}
\newcommand\tikznode[3][]
{\tikz[remember picture,baseline=(#2.base)]
\node[minimum size=0pt,inner sep=0pt,#1](#2){#3};
}
\newcommand\del{\nabla}
\newcommand\R{\mathbb{R}}
\newcommand\C{\mathcal{C}}
\newcommand\N{\mathcal{N}}
\newcommand\eps{\varepsilon}
\renewcommand\epsilon{\varepsilon}
\renewcommand\subset{\subseteq}
\newcommand\norm[1]{\|{#1}\|}
\newcommand\matrixbrackets[4][1]{
\draw (#3,#2) -- (\fpeval{#3+0.2},#2);
\draw (#3,#1) -- (#3 ,#2);
\draw (#3,#1) -- (\fpeval{#3+0.2},#1);
\draw (#4,#2) -- (\fpeval{#4-0.2},#2);
\draw (#4,#1) -- (#4 ,#2);
\draw (#4,#1) -- (\fpeval{#4-0.2},#1);
}
\tikzstyle{circle node 0}=[fill=white, draw=black, shape=circle, inner sep=0pt]
\tikzstyle{circle node 2}=[fill=white, draw=black, shape=circle, inner sep=2pt]
\tikzstyle{hrect node}=[fill=white, draw=black, inner sep=2pt, outer sep=3pt]
\tikzstyle{vrect node}=[fill=white, draw=black, inner sep=0pt, outer sep=0pt]
\tikzstyle{hidden node 0}=[inner sep=0pt, outer sep=0pt]
\tikzstyle{hidden node 2}=[fill=white, inner sep=2pt, outer sep=2pt]
\tikzstyle{rect node 1}=[fill=white, inner sep=2pt, outer sep=0pt]
\tikzstyle{rect node 2}=[fill=white, draw=black, inner sep=2pt, outer sep=0pt]
\newcommand{\lt}{<}
\newcommand{\gt}{>}
\newcommand{\amp}{&}
\definecolor{fillinmathshade}{gray}{0.9}
\newcommand{\fillinmath}[1]{\mathchoice{\colorbox{fillinmathshade}{$\displaystyle \phantom{\,#1\,}$}}{\colorbox{fillinmathshade}{$\textstyle \phantom{\,#1\,}$}}{\colorbox{fillinmathshade}{$\scriptstyle \phantom{\,#1\,}$}}{\colorbox{fillinmathshade}{$\scriptscriptstyle\phantom{\,#1\,}$}}}
\)
π§π»βπ» Class Activities π§π»βπ» Class Activities
As you practice writing scripts, notice the repeated pattern: choose inputs, compute results, and report output. In the next step, functions will let us package that pattern into reusable tools that can accept inputs and return outputs.
1. Circle Report Script.
Write a script that computes the circumference and area of a circle from its radius, then prints a formatted report.
(a)
Create a new script and add
clc and
clear at the top.
(b)
Define a radius variable
r (starting with
\(r = 4.5\) ).
Solution .
% Selected Value
r = 4.5;
(c)
Compute the circumference
\(C = 2\pi r\) and area
\(A = \pi r^2\text{.}\)
Solution .
% Computations
C = 2*pi*r;
A = pi*r^2;
(d)
Print a clean report with three decimal places.
Solution .
% Display Results
fprintf('Circle report\n');
fprintf('Radius: %.3f\n', r);
fprintf('Circumference: %.3f\n', C);
fprintf('Area: %.3f\n', A);
(e)
Change
r to a new value (such as
\(10\) ) and run again.
Solution .
Your script should automatically update the report whenever you change the input.
2. Temperature Conversion Script.
The conversion formula between Fahrenheit and Celsius is:
\begin{equation*}
\text{tempC} = (\text{tempF} - 32)\cdot \frac59
\end{equation*}
Write a script that converts a temperature from Fahrenheit to Celsius and use fprintf to print some relevant messages to the command window.
(a)
Create a new script and add
clc and
clear at the top.
(b)
Define a variable
tempF for the temperature in Fahrenheit and start it at
\(77^{\circ}\) F.
Solution .
% Selected Values
tempF = 77;
(c)
Compute the corresponding Celsius temperature and print both values using
fprintf, rounding to one decimal place.
Solution .
% Computation
tempC = (tempF - 32) * (5/9);
% Display results
fprintf('Temperature: %.1f F = %.1f C\n', tempF, tempC);
(d)
Rerun the script with different temperatures (e.g.,
\(32^{\circ}\) F,
\(100^{\circ}\) F).
Solution .
Your output should show
\(32\) F corresponds to approximately
\(0\) C, and
\(100\) F corresponds to approximately
\(37.8\) C.
3. Projectile Height Script.
A projectileβs height \(h(t)\) at time \(t\) seconds is given by the formula:
\begin{equation*}
h(t) = h_0 + v_0 t - \tfrac12 g t^2\text{,}
\end{equation*}
with parameters:
\(h_0\) is the initial height (in meters),
\(v_0\) is the initial velocity (in meters per second), and
\(g = 9.81\) m/s2 is the acceleration due to gravity.
Write a script that computes the height of a projectile at any given time.
(a)
Create a new script and add
clc and
clear at the top.
(b)
Define the model parameters. Use an initial height of
\(1.5\) meters and an initial velocity of
\(12\) m/s.
Solution .
% Selected Values
h0 = 1.5;
v0 = 12;
g = 9.81;
(c)
Compute the height
h at time
t = 0.8.
Solution .
% Computation (height formula)
t = 0.8;
h = h0 + v0*t - 0.5*g*t^2;
(d)
Compute the time of maximum height
\(t_\text{peak}\) and the maximum height
\(h(t_\text{peak})\text{.}\)
Recall that the peak occurs when the velocity is zero, i.e., when
\(h'(t_\text{peak}) = 0\text{.}\) Do the calculus to find the formula for
\(t_\text{peak}\text{.}\)
Solution .
% compute tPeak and h(tPeak)
tPeak = v0/g;
hMax = h0 + v0*tPeak - 0.5*g*tPeak^2;
(e)
Print a report showing
t,
h,
tPeak, and
hMax (2-decimal places).
Solution .
% Display Results
fprintf('Projectile report\n');
fprintf('At t = %.2f s, height h = %.2f m\n', t, h);
fprintf('Peak occurs at t = %.2f s, max height = %.2f m\n', tPeak, hMax);
Running this should display the following in the Command Window:
Projectile report
At t = 0.80 s, height h = 7.96 m
Peak occurs at t = 1.22 s, max height = 8.84 m
(f)
Rerun your script with (i)
t = 0 and (ii)
t = tPeak.
Solution .
Projectile report
At t = 0.00 s, height h = 1.50 m
Peak occurs at t = 1.22 s, max height = 8.84 m
Part (ii) should display:
Projectile report
At t = 1.22 s, height h = 8.84 m
Peak occurs at t = 1.22 s, max height = 8.84 m
4. Piggy Bank Script.
Create a script that performs the following tasks.
(a)
Create a new script. At the very top, add
clc and
clear so each run starts with a clean state.
Solution .
Add the following lines to the top of your script:
% (a) Add clc and clear
clc; % Clear the Command Window
clear; % Clear the workspace
(b)
Suppose your piggy bank has the following number of coins:
87 pennies
113 nickels
13 dimes
233 quarters
Inside the script, define a variable for the quantity of each type of coin.
Solution .
Add the following lines to your script:
% (b) Inputs: quantity of each type of coin
nPennies = 87;
nNickels = 113;
nDimes = 13;
nQuarters = 233;
(c)
In the same script, compute the worth (in cents) of each type of coin, and then compute the total value of all the coins.
Solution .
Add the following lines to your script:
% (c) Computations: values in cents
pValue = nPennies; % 1 cent each
nValue = 5 * nNickels;
dValue = 10 * nDimes;
qValue = 25 * nQuarters;
totalCents = pValue + nValue + dValue + qValue;
(d)
Display the total value of all the coins using the
fprintf command.
Solution .
Add the following lines to your script:
% (d) Display the total value in cents
fprintf('Total value (in cents): %i cents\n', totalCents);
(e)
Save the script as
piggy_bank_counter.m. Run the script to test it and see the output.
Solution .
The output in the Command Window should be:
Total value (in cents): 6607 cents
(f)
Finally, compute
and run the script again to display these values.
Hint: After getting the total value in dollars, use MATLABβs floor function to round the dollar amount down to the nearest whole number to get the number of dollars.
Solution .
Add the following lines to your script:
% (f) Convert to dollars and print the dollars and cents
totalDollars = totalCents/100;
nDollars = floor(totalDollars);
nCents = totalCents - nDollars * 100;
fprintf('Total value (in dollars): %i dollars and %i cents\n', nDollars, nCents);
The output in the Command Window should be:
Total value (in dollars): 66 dollars and 7 cents
5. Solving a Quadratic Equation.
The solution to the quadratic equation of the form:
\begin{equation*}
a x^2 + b x + c = 0
\end{equation*}
is given by the quadratic formula:
\begin{equation*}
x = \frac{-b \pm \sqrt{b^2 - 4 a c}}{2 a}\text{.}
\end{equation*}
An important part of this formula is the value under the square root, called the discriminant , given by:
\begin{equation*}
\Delta = b^2 - 4 a c\text{.}
\end{equation*}
Knowing the discriminant tells you the nature of the solutions:
If \(\Delta\) is positive, there are two distinct real solutions.
If \(\Delta\) is zero, there is exactly one real (repeated) solution.
If \(\Delta\) is negative, the solutions are complex numbers.
For example, the equation \(x^2 + x - 6 = 0\) has
coefficients \(a = 1\text{,}\) \(b = 1\text{,}\) and \(c = -6\text{,}\) and
discriminant \(\Delta = 1^2 - 4(1)(-6) = 25\text{,}\) which is positive.
So there are two distinct real solutions given by:
\begin{align*}
x_1 \amp = \frac{-1 + \sqrt{1^2 - 4(1)(-6)}}{2(1)} = \frac{-1 + \sqrt{25}}{2} = 2,
\quad \text{and}\\
x_2 \amp = \frac{-1 - \sqrt{1^2 - 4(1)(-6)}}{2(1)} = \frac{-1 - \sqrt{25}}{2} = -3\text{.}
\end{align*}
Write a script that uses the quadratic formula to solve a quadratic equation.
(a)
Create a new script file and add the following to the top:
% This script uses the quadratic formula to solve an equation of the form:
%
% a*x^2 + b*x + c = 0
%
% where a, b, and c are given.
clc; clear;
This ensures each run starts from a clean state.
Solution .
Add the following lines to the top of your script:
% (a) Add clc and clear
clc; % Clear the Command Window
clear; % Clear the workspace
(b)
Define variables
a,
b, and
c in your script to represent the coefficients of any possible quadratic equation.
As a starting point, use the values in the example above.
Solution .
Add the following lines to your script:
% (b) Set a, b, and c (example: x^2 + x - 6 = 0)
a = 1;
b = 1;
c = -6;
(c)
Using these variables, compute
Solution .
Add the following lines to your script:
% (c) Compute the discriminant and the two solutions
discriminant = b^2 - 4*a*c;
x1 = (-b + sqrt(discriminant)) / (2*a);
x2 = (-b - sqrt(discriminant)) / (2*a);
(d)
Display the two solutions using
fprintf and
disp (for the solutions).
Solution .
Add the following lines to your script:
% (d) Print a short report
fprintf('\n');
fprintf('Solving the equation:\n');
fprintf(' %g x^2 + %g x + %g = 0\n\n', a, b, c);
fprintf('Discriminant: %g\n', discriminant);
fprintf('Solutions:\n');
fprintf(' x1 = ');
disp(x1);
fprintf(' x2 = ');
disp(x2);
(e)
Save the script as
quadratic_solver.m and run it to make sure it works.
Solution .
The output in the Command Window should be:
Solutions:
x1 = 2
x2 = -3
(f)
Change the values of a, b, and c to solve the equation
\begin{equation*}
2 x^2 - 4 x - 6 = 0\text{.}
\end{equation*}
Run the script again to see the new solutions.
Solution .
Update the coefficient definitions in your script as follows:
% (f) Update coefficients for new equation
a = 2;
b = -4;
c = -6;
The output in the Command Window should be:
Solutions:
x1 = 3
x2 = -1
(g)
Change the values of a, b, and c to solve the equation
\begin{equation*}
x^2 + 2x + 5 = 0\text{.}
\end{equation*}
Run the script again to see the new solutions.
Solution .
Update the coefficient definitions in your script as follows:
% (g) Update coefficients for new equation
a = 1;
b = 2;
c = 5;
The output in the Command Window should be:
Solutions:
x1 = -1.0000 + 2.0000i
x2 = -1.0000 - 2.0000i
(h)
The previous example shows that our script can handle complex solutions.
Are there any quadratic equations that our script cannot handle? If so, give an example and explain why the script fails.
Solution .
The script fails when a = 0, because the quadratic formula divides by \(2a\text{.}\) For example, the equation
\begin{equation*}
2x + 5 = 0
\end{equation*}
corresponds to a = 0, and then the expressions (2*a) in the denominator become zero.
A more robust solver would first check whether
a is zero, and if so, switch to solving a linear equation. Making that kind of decision requires flow control, which we will study later.