# Midterm Syntax Key Note
## Getting Help (`help`)
Use the **`help` command** to see the syntax and description for any MATLAB function directly in the Command Window. This is useful for checking how to use a function or avoiding naming conflicts with your own variables.
*(Code cell with `help plot`)*
```matlab
help plot
```
plot - 2-D line plot
This MATLAB function creates a 2-D line plot of the data in Y versus the
corresponding values in X.
Vector and Matrix Data
plot(X,Y)
plot(X,Y,LineSpec)
plot(X1,Y1,...,Xn,Yn)
plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)
plot(Y)
plot(Y,LineSpec)
Table Data
plot(tbl,xvar,yvar)
plot(tbl,yvar)
Additional Options
plot(ax,___)
plot(___,Name,Value)
p = plot(___)
Input Arguments
X - x-coordinates
scalar | vector | matrix
Y - y-coordinates
scalar | vector | matrix
LineSpec - Line style, marker, and color
string scalar | character vector
tbl - Source table
table | timetable
xvar - Table variables containing x-coordinates
string array | character vector | cell array | pattern |
numeric scalar or vector | logical vector | vartype()
yvar - Table variables containing y-coordinates
string array | character vector | cell array | pattern |
numeric scalar or vector | logical vector | vartype()
ax - Target axes
Axes object | PolarAxes object | GeographicAxes object
Name-Value Arguments
Color - Line color
RGB triplet | hexadecimal color code | "r" | "g" | "b" | ...
LineStyle - Line style
"-" (default) | "--" | ":" | "-." | "none"
LineWidth - Line width
0.5 (default) | positive value
Marker - Marker symbol
"none" (default) | "o" | "+" | "*" | "." | ...
MarkerIndices - Indices of data points at which to display markers
1:length(YData) (default) | vector of positive integers |
scalar positive integer
MarkerEdgeColor - Marker outline color
"auto" (default) | RGB triplet | hexadecimal color code | "r" |
"g" | "b" | ...
MarkerFaceColor - Marker fill color
"none" (default) | "auto" | RGB triplet | hexadecimal color code |
"r" | "g" | "b" | ...
MarkerSize - Marker size
6 (default) | positive value
DatetimeTickFormat - Format for datetime tick labels
character vector | string
DurationTickFormat - Format for duration tick labels
character vector | string
Examples
openExample('graphics/CreateLinePlotExample')
openExample('graphics/PlotMultipleLinesExample')
openExample('graphics/CreateLinePlotFromMatrixExample')
openExample('graphics/SpecifyLineStyleExample')
openExample('graphics/SpecifyLineStyleColorAndMarkerExample')
openExample('graphics/DisplayMarkersAtSpecificDataPointsExample')
openExample('graphics/SpecifyLineWidthMarkerSizeAndMarkerColorExample')
openExample('graphics/AddTitleAndAxisLabelsExample')
openExample('matlab/SpecifyDurationTickFormatsExample')
openExample('graphics/PlotTableDataExample')
openExample('graphics/PlotTableMutliVariablesExample')
openExample('graphics/PlotSpecifyAxes19bExample')
openExample('graphics2/ChangeLinePropertiesUsingHandlesExample')
openExample('graphics/PlotCircleExample')
See also title, xlabel, ylabel, xlim, ylim, legend, hold, gca, yyaxis,
plot3, loglog, Line Properties
Introduced in MATLAB before R2006a
Documentation for plot
doc plot
Other uses of plot
alphaShape/plot matlab.buildtool.Plan/plot tall/plot
digraph/plot polyshape/plot timeseries/plot
graph/plot
## File I/O
### save to .mat
> for saving variable
Saves specified workspace variables to a binary .mat file
```matlab
var1 = 1:10;
var2 = 'test';
save('my_data.mat', 'var1', 'var2')
```
### load file
```matlab
load('my_data.mat')
```
### save figure
```matlab
plot(1:10)
saveas(gcf, 'my_plot.fig')
```

## Matrix or Array
### Creating Vectors/Arrays
Common methods for creating vectors:
```matlab
% Creates a vector from 1 to 10 with a step of 2 [cite: 475]
vec = 1:2:10
% Creates 5 points evenly spaced between 0 and 10 [cite: 477, 478]
x = linspace(0, 10, 5)
% Creates 8 points between 10^1 and 10^4 [cite: 486, 488]
y = logspace(1, 4, 8)
```
<html><body><pre>vec = 1×5 double
1 3 5 7 9
</pre></body></html>
<html><body><pre>x = 1×5 double
0 2.5000 5.0000 7.5000 10.0000
</pre></body></html>
<html><body><pre>y = 1×8 double
1.0e+04 *
0.0010 0.0027 0.0072 0.0193 0.0518 0.1389 0.3728 1.0000
</pre></body></html>
### Element-wise Operations (. Operator)
computation for the element of the matrix
se the dot (.) before *, /, \ , ^ to perform operations element by element. Arrays must generally be the same size or one must be a scalar.
```matlab
A = [1 2];
B = [3 4];
% Element-wise multiplication (1*3, 2*4)
C_mult = A .* B % [cite: 635, 649]
% Element-wise division (1/3, 2/4)
C_div = A ./ B % [cite: 649]
% Element-wise power (1^2, 2^2)
C_pow = A .^ 2 % [cite: 649]
```
<html><body><pre>C_mult = 1×2 double
3 8
</pre></body></html>
<html><body><pre>C_div = 1×2 double
0.3333 0.5000
</pre></body></html>
<html><body><pre>C_pow = 1×2 double
1 4
</pre></body></html>
### Matrix Operations (Linear Algebra)
computation for linear algebra opertation
Standard linear algebra operations. Note the specific use of backslash (\) for solving linear systems.
```matlab
A = [1 2; 3 4];
B = [5; 6];
% Standard matrix multiplication
C = A * B % [cite: 642, 649]
% Matrix left division. This is the best way to solve
% the linear equation A*x = B for x [cite: 652-657]
x = A \ B % [cite: 649, 657]
```
<html><body><pre>C = 2×1 double
17
39
</pre></body></html>
<html><body><pre>x = 2×1 double
-4.0000
4.5000
</pre></body></html>
## Display or print
aka 吐出答案
* Simply typing a variable name or calculation shows the result assigned to `ans`.
* **`disp(variable)`**: Displays the *value* of the variable without printing its name. It works well for numbers and text strings.
* **`fprintf('format string', variables...)`**: Provides the most control for printing formatted text and numbers, using conversion characters (like `%f` for float, `%d` for integer, `%s` for string) and escape characters (like `\n` for new line). Use `num2str()` or `int2str()` to convert numbers to strings if needed for `disp`.
```matlab
disp(100/81)
fprintf('100 divided by 81: %6.2f', 100/81)
```
1.2346
100 divided by 81: 1.23
## Logical Structure
### `if`, `else`, `elseif`
```matlab
grade = 85;
if grade >= 90
disp('A')
elseif grade >= 80
disp('B')
else
disp('C or below')
end
```
B
### `switch`
```matlab
day = 3;
switch day
case {1, 7} % Group multiple cases with { }
disp('Weekend')
case 2
disp('Monday')
otherwise % Optional: runs if no case matches aka default
disp('Other weekday')
end
```
Other weekday
### `try`, `catch`
```matlab
try
% Attempt a risky operation
result = 1 / 0;
catch
% This block runs if an error occurs in 'try' [cite: 1114]
disp('Error: Division by zero.')
end
```
### `while`, `for`
```matlab
n = 1;
while n <= 5
disp(n)
n = n + 1;
end
total = 0;
for ii = 1:10
total = total + ii;
end
disp(total)
% Loop over a specific array
for val = [5 9 7]
disp(val)
end
% A 'for' loop iterates over the *columns* of a matrix
for col = [1 2 3; 4 5 6]
disp('Column is:')
disp(col) % Displays [1;4], then [2;5], then [3;6] [cite: 100-106]
end
```
1
2
3
4
5
55
5
9
7
Column is:
1
4
Column is:
2
5
Column is:
3
6
## user defined function
Creating your own functions in separate .m files. The filename must match the function name.
```matlab
% --- Save this content as 'dist.m' ---
function [d, x_diff] = dist(p1, p2)
% H1 Line: Calculates the distance between two points. [cite: 292, 298]
%
% Help Text: This function finds the Euclidean distance
% between p1 (x1, y1) and p2 (x2, y2). [cite: 300]
% Use 'nargin' to check number of inputs [cite: 313]
if nargin < 2
p2 = [0, 0]; % Set default for p2 if not provided [cite: 321]
end
x_diff = p1(1) - p2(1);
y_diff = p1(2) - p2(2);
d = sqrt(x_diff^2 + y_diff^2);
% All output arguments (d, x_diff) must be assigned a value [cite: 289]
end
```
## 2D plot
### single plot
```matlab
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y)
% Add annotations
title('Plot of sin(x)')
xlabel('x')
ylabel('sin(x)')
grid on
xlim([0 2*pi]) % Set x-axis limits [cite: 784, 785]
```

### multiplot
```matlab
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
% Plot both at once with 'LineSpec' strings ('red dashed', 'blue dotted-o')
plot(x, y1, 'r--', x, y2, 'b:o')
% Add a legend
legend('sin(x)', 'cos(x)', 'Location', 'southwest')
```

### Logarithmic Plots
```matlab
t = 0:10000;
N = exp(-t/5730); % Radioactive decay example [cite: 338]
figure(1) % Create a new figure window [cite: 443, 445]
% Use 'subplot' to create a grid of plots (m, n, p) [cite: 450-452]
subplot(2, 2, 1)
plot(t, N); title('plot') % [cite: 332]
subplot(2, 2, 2)
semilogx(t, N); title('semilogx') % [cite: 333]
subplot(2, 2, 3)
semilogy(t, N); title('semilogy') % [cite: 334]
subplot(2, 2, 4)
loglog(t, N); title('loglog') % [cite: 335]
```

### dual y axis
```matlab
x = 0:0.1:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure(3)
% Activate the LEFT axis [cite: 516]
yyaxis left
plot(x, y1)
ylabel('Left-side Data')
% Activate the RIGHT axis [cite: 517]
yyaxis right
plot(x, y2)
ylabel('Right-side Data')
```



### Text Formatting in Plots
Use TeX-like commands within strings for titles, labels, legends, and `text()` objects to add formatting and symbols :
* `\bf` (bold), `\it` (italic). Use `{}` to limit scope (e.g., `{\it only this}`).
* `_` for subscript, `^` for superscript (use `{}` for multiple characters, e.g., `x_{12}`).
* Greek letters (e.g., `\alpha`, `\theta`).
* For complex math, use `'Interpreter', 'latex'` .
## Lab0
```matlab=
% Classwork of Week 3: MATLAB script file to input three temperatures in
% degree Celcius, convert them to Kelvin and Fahrenheit, record the time
% at which the input was captured, and save all the input and output data
% to Temp.mat
% Clearing all variables in the workspace
clear;
% Clear the screen on the workspace
clc;
% Prompt the user to input 3 temperatures in the required format
TempC = input('Please input three temperatures in Celcius in the format [T1 T2 T3]: ');
% Capture the timing information at this instant
TimeIn = clock;
% Do conversion from Celcius to Kelvin
TempK = TempC + 273.15;
% Do conversion from Celcius to Fahrenheit
TempF = 9/5*TempC + 32;
% Save all variables in workspace to Temp.mat
save('Temp.mat')
```
## Lab1
```matlab
% Classwork of Week 6: MATLAB script file to compute and plot the
% relativistic and approximate classical energy formula as a function of
% the normalized speed
% Clearing the workspace, the screen, and the content of any current figure
clear; clc; clf;
% Speed normalized w.r.t. to the speed of light
alpha = linspace(0,1,50);
% Declare the energy arrry
Ek = zeros(length(alpha),2);
% The first column stores the relativistic energy value
Ek(:,1) = sqrt(1+alpha.^2./(1-alpha.^2))-1;
% The second column stores its classical approximation
Ek(:,2) = 1/2*alpha.^2;
% Plot both as a function of alpha with a thickened linewidth
plot(alpha,Ek,'LineWidth',1)
% Turn on grid lines
grid on
% Include the title of the plot
title('Normalized kinetic energy as a function of \alpha','FontSize',14);
% Include the x-label and y-label
xlabel('\alpha','FontSize',14);
ylabel('$\frac{E_K}{mc^2}$','Interpreter','latex','FontSize',14);
% Include the best-positioned legend
legend('Relativistic','Newtonian',Location='best')
% Print the figure to a 300dpi pdf file
print('Ek','-dpdf','-r300');
```

## Lab2
```matlab
% Classwork of Week 7: MATLAB script file to compute the photon energy for
% visible light and the corresponding characteristic temperature
% Clearing the workspace, the screen, and the content of any current figure
clear; clc; clf;
% Definition of various physical constants
h = 6.62607015e-34;
c = 299792458;
q = 1.60217663e-19;
% There's a typo in the slide, the correct value of the Boltzmann constant
% should have been kB = 1.380649e-23;
kB = 1.308649e-23;
% Specification of the data points for the wavelength lambda;
% there's another typo here: the correct range of visible wavelengths
% should be 400 to 700 nm
lambda = linspace(400e-9,900e-9,100);
% Computation of the photon energy
E = h*c./lambda;
% Computation of the characteristic temperature
T = E/kB;
% Since this is the first plot, it's optional to include the following
% command
% yyaxis left;
% Plot the rescaled energy vs the rescaled wavelength
plot(lambda/1e-9, E/q,'b-');
% Include the y-label on the right-hand-side
ylabel('\bfEnergy (eV)','FontSize',11);
hold on;
% Tells MATLAB that we next make plot based on the y-axis on the right
yyaxis right;
% Plot the rescaled energy vs the rescaled temperature
plot(lambda/1e-9, T/1e3,'r-');
% Include the y-label on the left-hand-side
ylabel('\bfTemperature (10^3 K)','FontSize',11)
% Turn on grid lines
grid on
% Include figure legends at the best location
legend('Energy','Temperature','Location','best','FontSize',11)
% Specify the x-label
xlabel('\lambda (nm)','FontSize',11)
```

# NIST PQC Standards (FIPS 203 & 204)
### Section 1: Why We Must Change
1.1. **Current Foundation:**
- **Key Exchange:** ECDH
- **Signatures:** RSA, ECDSA
1.2. **The Vulnerability:**
- Factoring and **Discrete Logarithms**
1.3. **The Threat:**
- **Shor's Algorithm** breaks current cryptography
- "Harvest Now, Decrypt Later"
1.4. **NIST PQC Competition**
---
### Section 2: Lattice Cryptography
2.1. **Hard Problems:**
- **SIS** (Shortest Integer Solution)
- **LWE** (Learning with Errors)
2.2. **Practical Implementation:**
- **MLWE** (Module Learning with Errors)
- **Ring $R_q$**: Structured, compact, fast
- **NTT**: Fast polynomial multiplication
2.3. **Tools:**
- **SHAKE** (XOF)
- **RBG** (SP 800-90)
---
### Section 3: FIPS 203 (ML-KEM)
3.1. **Overview:**
- **KEM:** `KeyGen`, `Encaps`, `Decaps`
- **IND-CCA2 Security**
3.2. **K-PKE Core:**
- `K-PKE.Encrypt`: Uses public key and noise
- `K-PKE.Decrypt`: Uses secret to recover message
3.3. **Requirements:**
- K-PKE alone is not secure
- Parameter sets: ML-KEM-512, 768, 1024
---
### Section 4: FIPS 204 (ML-DSA)
4.1. **Overview:**
- **DSA:** `KeyGen`, `Sign`, `Verify`
- Fiat-Shamir with Aborts
4.2. **Algorithms:**
- `ML-DSA.KeyGen`: Generates keys
- `ML-DSA.Sign`: Rejection sampling prevents key leakage
- `ML-DSA.Verify`: Uses **Hint ($h$)**
4.3. **Variants:**
- **Pure ML-DSA**
- **Hedged Signing:** Best practice
- **Pre-Hash (HashML-DSA):** For large files
---
### Section 5: Summary & Action
5.1. **Summary:**
- Shor's Algorithm breaks RSA/ECC
- Lattices (MLWE) are quantum-resistant
- **FIPS 203:** Key exchange
- **FIPS 204:** Signatures
5.2. **Q&A**