Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
43a1015cb0 | ||
|
d59cb7323a | ||
|
305c0132a0 | ||
|
0d7e78e53a | ||
|
34c1d20461 | ||
|
3268504610 | ||
|
4653b6a148 | ||
|
db3cb7c96d | ||
|
0738b692fc | ||
|
9e3e94605e | ||
|
9b709c4c82 | ||
|
819849f7c6 | ||
|
e0dcf5a960 | ||
|
6466c633c0 | ||
|
04adaedfd3 | ||
|
adedb0c1ad | ||
|
4252a734e2 | ||
|
cb9e3e2308 | ||
|
90df8ccf04 | ||
|
f9a2115408 | ||
|
f57c120590 | ||
|
bb8f159c35 | ||
|
ca29913314 | ||
|
e9cf2d9edf | ||
|
f2b0832dd8 | ||
|
5b7e492766 | ||
|
e02bd8cc46 | ||
|
3a4d48e220 | ||
|
b48570ad09 | ||
|
5a7fd4c8fe | ||
|
373d67f91e | ||
|
34abdbc571 | ||
|
f0712725f3 | ||
|
da393330c3 | ||
|
6258c16a11 | ||
|
1c7de9b0db | ||
|
df169026c3 | ||
|
535a5a687d | ||
|
df268136bb | ||
|
57e8d08e96 | ||
8ce5a49ecb |
@@ -1,12 +1,6 @@
|
||||
# Eifueo
|
||||
|
||||
<p style="font-size: 2rem">
|
||||
**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**
|
||||
</p>
|
||||
|
||||
A "competitor" of sorts to magicalsoup/highschool available at https://eifueo.eggworld.me.
|
||||
A "competitor" of sorts to magicalsoup/highschool available at https://eifueo.eggworld.tk.
|
||||
|
||||
Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines and formatting information.
|
||||
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# ECE 105: Classical Mechanics
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Motion
|
||||
|
||||
Please see [SL Physics 1#2.1 - Motion](/g11/sph3u7/#21-motion) for more information.
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# ECE 150: C++
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Non-decimal numbers
|
||||
|
||||
Binary numbers are prefixed with `0b`.
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# MATH 115: Linear Algebra
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Set theory
|
||||
|
||||
!!! definition
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# MATH 117: Calculus 1
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Functions
|
||||
|
||||
A **function** is a rule where each input has exactly one output, which can be determined by the **vertical line test**.
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# ECE 106: Electricity and Magnetism
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## MATH 117 review
|
||||
|
||||
!!! definition
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# ECE 108: Discrete Math 1
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
An **axiom** is a defined core assumption of the mathematical system held to be true without proof.
|
||||
|
||||
!!! example
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# ECE 124: Digital Circuits
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Base / radix conversion
|
||||
|
||||
Please see [ECE 150: C++#Non-decimal numbers](/1a/ece150/#non-decimal numbers) for more information.
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# ECE 140: Linear Circuits
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Voltage, current, and resistance
|
||||
|
||||
Please see [SL Physics 1#Electric potential](/g11/sph3u7#electric-potential) for more information on voltage.
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# MATH 119: Calculus 2
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Multivariable functions
|
||||
|
||||
!!! definition
|
||||
|
3
docs/2a/ece109.md
Normal file
3
docs/2a/ece109.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# ECE 109: Materials Chemistry
|
||||
|
||||
😜
|
294
docs/2a/ece204.md
Normal file
294
docs/2a/ece204.md
Normal file
@@ -0,0 +1,294 @@
|
||||
# ECE 204: Numerical Methods
|
||||
|
||||
## Linear regression
|
||||
|
||||
Given a regression $y=mx+b$ and a data set $(x_{i..n}, y_{i..n})$, the **residual** is the difference between the actual and regressed data:
|
||||
|
||||
$$E_i=y_i-b-mx_i$$
|
||||
|
||||
### Method of least squares
|
||||
|
||||
This method minimises the sum of the square of residuals.
|
||||
|
||||
$$\boxed{S_r=\sum^n_{i=1}E_i^2}$$
|
||||
|
||||
$m$ and $b$ can be found by taking the partial derivative and solving for them:
|
||||
|
||||
$$\frac{\partial S_r}{\partial m}=0, \frac{\partial S_r}{\partial b}=0$$
|
||||
|
||||
This returns, where $\overline y$ is the mean of the actual $y$-values:
|
||||
|
||||
$$
|
||||
\boxed{m=\frac{n\sum^n_{i=1}x_iy_i-\sum^n_{i=1}x_i\sum^n_{i=1}y_i}{n\sum^n_{i=1}x_i^2-\left(\sum^n_{i=1}x_i\right)^2}} \\
|
||||
b=\overline y-m\overline x
|
||||
$$
|
||||
|
||||
The total sum of square around the mean is based off of the actual data:
|
||||
|
||||
$$\boxed{S_t=\sum(y_i-\overline y)^2}$$
|
||||
|
||||
Error is measured with the **coefficient of determination** $r^2$ — the closer the value is to 1, the lower the error.
|
||||
|
||||
$$
|
||||
r^2=\frac{S_t-S_r}{S_t}
|
||||
$$
|
||||
|
||||
If the intercept is the **origin**, $m$ reduces down to a simpler form:
|
||||
|
||||
$$m=\frac{\sum^n_{i=1}x_iy_i}{\sum^n_{i=1}x_i^2}$$
|
||||
|
||||
## Non-linear regression
|
||||
|
||||
### Exponential regression
|
||||
|
||||
Solving for the same partial derivatives returns the same values, although bisection may be required for the exponent coefficient ($e^{bx}$) Instead, linearising may make things easier (by taking the natural logarithm of both sides. Afterward, solving as if it were in the form $y=mx+b$ returns correct
|
||||
|
||||
!!! example
|
||||
$y=ax^b\implies\ln y = \ln a + b\ln x$
|
||||
|
||||
### Polynomial regression
|
||||
|
||||
The residiual is the offset at the end of a polynomial.
|
||||
|
||||
$$y=a+bx+cx^2+E$$
|
||||
|
||||
Taking the relevant partial derivatives returns a system of equations which can be solved in a matrix.
|
||||
|
||||
## Interpolation
|
||||
|
||||
Interpolation ensures that every point is crossed.
|
||||
|
||||
### Direct method
|
||||
|
||||
To interpolate $n+1$ data points, you need a polynomial of a degree **up to $n$**, and points that enclose the desired value. Substituting the $x$ and $y$ values forms a system of equations for a polynomial of a degree equal to the number of points chosen - 1.
|
||||
|
||||
### Newton's divided difference method
|
||||
|
||||
This method guesses the slope to interpolate. Where $x_0$ is an existing point:
|
||||
|
||||
$$\boxed{f(x)=b_0+b_1(x-x_0)}$$
|
||||
|
||||
The constant is an existing y-value and the slope is an average.
|
||||
|
||||
$$
|
||||
\begin{align*}
|
||||
b_0&=f(x_0) \\
|
||||
b_1&=\frac{f(x_1)-f(x_0)}{x_1-x_0}
|
||||
\end{align*}
|
||||
$$
|
||||
|
||||
This extends to a quadratic, where the second slope is the average of the first two slopes:
|
||||
|
||||
$$\boxed{f(x)=b_0+b_1(x-x_0)+b_2(x-x_0)(x-x_1)}$$
|
||||
|
||||
$$
|
||||
b_2=\frac{\frac{f(x_2)-f(x_1)}{x_2-x_1}-\frac{f(x_1)-f(x_0)}{x_1-x_0}}{x_2-x_0}
|
||||
$$
|
||||
|
||||
## Derivatives
|
||||
|
||||
Derivatives are estimated based on first principles:
|
||||
|
||||
$$f'(x)=\frac{f(x+h)-f(x)}{h}$$
|
||||
|
||||
### Derivatives of continuous functions
|
||||
|
||||
At a desired $x$ for $f'(x)$:
|
||||
|
||||
1. Choose an arbitrary $h$
|
||||
2. Calculate derivative via first principles
|
||||
3. Shrink $h$ and recalculate derivative
|
||||
4. If the answer is drastically different, repeat step 3
|
||||
|
||||
### Derivatives of discrete functions
|
||||
|
||||
Guesses are made based on the average slope between two points.
|
||||
|
||||
$$f'(x_i)=\frac{f(x_{i+1})-f(x_i)}{x_{i+1}-x_i}$$
|
||||
|
||||
### Divided differences
|
||||
|
||||
- Using the next term, or a $\Delta x > 0$ indicates a **forward divided difference (FDD)**.
|
||||
- Using the previous term, or a $\Delta x < 0$ indicates a **backward divided difference (BDD)**.
|
||||
|
||||
The **central divided difference** averages both if $h$ or $\Delta x$ of the forward and backward DDs are equal.
|
||||
|
||||
$$f'(x)=CDD=\frac{f(x+h)-f(x-h)}{2h}$$
|
||||
|
||||
### Higher order derivatives
|
||||
|
||||
Taking the Taylor expansion of the function or discrete set and then expanding it as necessary can return any order of derivative. This also applies for $x-h$ if positive and negative are alternated.
|
||||
|
||||
$$f(x+h)=f(x)+f'(x)h+\frac{f''(x)}{2!}h^2+\frac{f'''(x)}{3!}h^3$$
|
||||
|
||||
!!! example
|
||||
To find second order derivatives:
|
||||
|
||||
\begin{align*}
|
||||
f''(x)&=\frac{2f(x+h)-2f(x)-2f'(x)h}{h^2} \\
|
||||
&=\frac{2f(x+h)-2f(x)-(f(x+h)-f(x-h))}{h^2} \\
|
||||
&=\frac{f(x+h)-2f(x)+f(x-h)}{h^2}
|
||||
\end{align*}
|
||||
|
||||
!!! example
|
||||
$f''(3)$ if $f(x)=2e^{1.5x}$ and $h=0.1$:
|
||||
|
||||
\begin{align*}
|
||||
f''(3)&=\frac{f(3.1)-2\times2f(3)+f(2.9)}{0.1^2} \\
|
||||
&=405.08
|
||||
\end{align*}
|
||||
|
||||
For discrete data:
|
||||
|
||||
- If the desired point does not exist, differentiating the surrounding points to create a polynomial interpolation of the derivative may be close enough.
|
||||
|
||||
!!! example
|
||||
| t | 0 | 10 | 15 | 20 | 22.5 | 30 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| v(t) | 0 | 227.04 | 362.78 | 517.35 | 602.47 | 901.67 |
|
||||
|
||||
$v'(16)$ with FDD:
|
||||
|
||||
Using points $t=15,t=20$:
|
||||
|
||||
\begin{align*}
|
||||
v'(x)&=\frac{f(x+h)-f(x)}{h} \\
|
||||
&=\frac{f(15+5)-f(15)}{5} \\
|
||||
&=\frac{517.35-362.78}{5} \\
|
||||
&=30.914
|
||||
\end{align*}
|
||||
|
||||
$v'(16)$ with Newton's first-order interpolation:
|
||||
|
||||
\begin{align*}
|
||||
v(t)&=v(15)+\frac{v(20)-v(15)}{20-15}(t-15) \\
|
||||
&=362.78+30.914(t-15) \\
|
||||
&=-100.93+30.914t \\
|
||||
v'(t)&=\frac{v(t+h)-v(t)}{2h} \\
|
||||
&=\frac{v(16.1)-v(15.9)}{0.2} \\
|
||||
&=30.914
|
||||
\end{align*}
|
||||
|
||||
- If the spacing is not equal (to make DD impossible), again creating an interpolation may be close enough.
|
||||
- If data is noisy, regressing and then solving reduces random error.
|
||||
|
||||
## Integrals
|
||||
|
||||
If you can represent a function as an $n$-th order polynomial, you can approximate the integral with the integral of that polynomial.
|
||||
|
||||
### Trapezoidal rule
|
||||
|
||||
The **trapezoidal rule** looks at the first order polynomial and
|
||||
|
||||
From $a$ to $b$, if there are $n$ trapezoidal segments, where $h=\frac{b-a}{n}$ is the width of each segment:
|
||||
|
||||
$$\int^b_af(x)dx=\frac{b-a}{2n}[f(a)+2(\sum^{n-1}_{i=1}f(a+ih))+f(b)]$$
|
||||
|
||||
The error for the $i$th trapezoidal segment is $|E_i|=\left|\frac{h^3}{12}\right|f''(x)$. This can be approximated with a maximum value of $f''$:
|
||||
|
||||
$$\boxed{|E_T|\leq(b-a)\frac{h^2}{12}M}$$
|
||||
|
||||
### Simpson's 1/3 rule
|
||||
|
||||
This uses the second-order polynomial with **two segments**. Three points are usually used: $a,\frac{a+b}{2},b$. Thus for two segments:
|
||||
|
||||
$$\int^b_af(x)dx\approx\frac h 3\left[f(a)+4f\left(\frac{a+b}{2}\right)+f(b)\right]$$
|
||||
|
||||
For an arbitrary number of segments, as long as there are an **even number** of **equal** segments:
|
||||
$$\int^b_af(x)dx=\frac{b-a}{3n}\left[f(x_0)+4\sum^{n-1}_{\substack{i=1 \\ \text{i is odd}}}f(x_i)+2\sum^{n-2}_{\substack{i=2 \\ \text{i is even}}}f(x_i)+f(x_n)\right]$$
|
||||
|
||||
The error is:
|
||||
$$|E_T|=(b-a)\frac{h^4}{180}M$$
|
||||
|
||||
## Ordinary differential equations
|
||||
|
||||
### Initial value problems
|
||||
|
||||
These problems only have results for one value of $x$.
|
||||
|
||||
**Euler's method** converts the function to the form $f(x,y)$, where $y'=f(x,y)$.
|
||||
|
||||
!!! example
|
||||
$y'+2y=1.3e^{-x},y(0)=5\implies f(x,y)=1.3e^{-x}-2y,y(0)=5$
|
||||
|
||||
Where $h$ is the width of each estimation (lower is better):
|
||||
|
||||
$$y_{n+1}=y_n+hf(x_n,y_n)$$
|
||||
|
||||
!!! example
|
||||
If $f(x,y)=2xy,h=0.1$, $y_{n+1}=y_n+h2x_ny_n$
|
||||
|
||||
$$
|
||||
y(1.1)=y(1)+0.1×2×1×\underbrace{y(1)}_{1 via IVP}=1.2 \\
|
||||
y(1.2)=y(1.1)+0.1×2×1.1×\underbrace{y(1.1)}_{1.2}=1.464
|
||||
$$
|
||||
|
||||
**Heun's method** uses Euler's formula as a predictor. Where $y^*$ is the Euler solution:
|
||||
|
||||
$$y_{n+1}=y_n+h\frac{f(x_n,y_n)+f(x_{n+1},y^*_{n+1}}{2}$$
|
||||
|
||||
!!! example
|
||||
For $f(x,y)=2xy,h=0.1, y(1)=1$:
|
||||
|
||||
Euler's formula returns $y^*_{n+1}=y_n+2hx_ny_n\implies y^*(1.1)=1.2$.
|
||||
|
||||
Applying Heun's correction:
|
||||
|
||||
\begin{align*}
|
||||
y(1.1)&=y(1)=0.1\frac{2×1×y(1)+2×1.1×y^*(1.1)}{2} \\
|
||||
&=1+0.1\frac{2×1×1+2×1.1×1.2}{2} \\
|
||||
&=1.232
|
||||
\end{align*}
|
||||
|
||||
The **Runge-Kutta fourth-order method** is the most accurate of the three methods:
|
||||
|
||||
$$y_n+1=y_n+\frac 1 6(k_1+2k_2+2k_3+k_4)$$
|
||||
|
||||
- $k_1=hf(x_n,y_n)$
|
||||
- $k_2=hf(x_n+\tfrac 1 2h,y_n+\tfrac 1 2k_1)$
|
||||
- $k_3=hf(x_n+\tfrac 1 2 h, y_n+\tfrac 1 2 k_2)$
|
||||
- $k_4=hf(x_n+h,y_n+k_3)$
|
||||
|
||||
### Higher order ODEs
|
||||
|
||||
Higher order ODEs can be solved by reducing them to first order ODEs by creating a system of equations. For a second order ODE: Let $y'=u$.
|
||||
|
||||
$$
|
||||
y'=u \\
|
||||
u'=f(x,y,u)
|
||||
$$
|
||||
|
||||
For each ODE, the any method can be used:
|
||||
|
||||
$$
|
||||
y_{n+1}=y_n+hu_n \\
|
||||
u_{n+1}=u_n+hf(x_n,y_n,u_n)
|
||||
$$
|
||||
|
||||
!!! example
|
||||
For $y''+xy'+y=0,y(0)=1,y'(0)=2,h=0.1$:
|
||||
|
||||
\begin{align*}
|
||||
y'&= u \\
|
||||
u'&=-xu-y \\
|
||||
y_1&=y_0+0.1u_0 \\
|
||||
&=1+0.1×2 \\
|
||||
&=1.2 \\
|
||||
\\
|
||||
u_1&=u_0+0.1×f(x_0,y_0,u_0) \\
|
||||
&=u_0+0.1(-x_0u_0-y_0] \\
|
||||
&=2+0.1(-0×2-1) \\
|
||||
&=1.9
|
||||
\end{align*}
|
||||
|
||||
### Boundary value problems
|
||||
|
||||
The **finite difference method** divides the interval between the boundary into $n$ sub-intervals, replacing derivatives with their first principles representations. Solving each $n-1$ equation returns a proper system of equations.
|
||||
|
||||
!!! example
|
||||
For $y''+2y'+y=x^2, y(0)=0.2,y(1)=0.8,n=4\implies h=0.25$:
|
||||
$x_0=0,x_1=0.25,x_2=0.5,x_3=0.75,x_4=1$
|
||||
|
||||
Replace with first principles:
|
||||
|
||||
$$\frac{y_{i+1}-2y_i+y_{i-1}{h^2}+2\frac{y_{i+1}-y_i}{h}+y_i=x_i^2$$
|
552
docs/2a/ece205.md
Normal file
552
docs/2a/ece205.md
Normal file
@@ -0,0 +1,552 @@
|
||||
# ECE 205: Advanced Calculus 1
|
||||
|
||||
## Laplace transform
|
||||
|
||||
The Laplace transform is a wonderful operation to convert a function of $t$ into a function of $s$. Where $s$ is an unknown variable independent of $t$:
|
||||
|
||||
$$
|
||||
\mathcal L\{f(t)\}=F(s)=\int^\infty_0e^{-st}f(t)dt, s > 0
|
||||
$$
|
||||
|
||||
??? example
|
||||
To solve for $\mathcal L\{\sin(at)\}$:
|
||||
|
||||
\begin{align*}
|
||||
\mathcal L\{f(t)\}&=\int^\infty_0e^{-st}\sin(at)dt \\
|
||||
\\
|
||||
\text{IBP: let $u=\sin(at)$, $dv=e^{-st}dt$:} \\
|
||||
&=\lim_{B\to\infty} \underbrace{\biggr[
|
||||
\cancel{-\frac 1 se^{-st}\sin(at)}}_\text{0 when $s=0$ or $s=\infty$}+\frac a s\int e^{-st}\cos(at)dt
|
||||
\biggr]^B_0 \\
|
||||
&=\frac a s\lim_{B\to\infty}\left[\int e^{-st}\cos(at)dt \right]^B_0 \\
|
||||
\text{IBP: let $u=\cos(at)$, $dv=e^{-st}dt$:} \\
|
||||
&=\frac a s \lim_{B\to\infty}\left[
|
||||
-\frac 1 s e^{-st}\cos(at)-\frac a s\underbrace{\int e^{-st}\sin(at)dt}_{\mathcal L\{\sin(at)\}}
|
||||
\right]^B_0 \\
|
||||
&=\frac{a}{s^2}-\frac{a^2}{s^2}\mathcal L\{\sin(at)\} \\
|
||||
\mathcal L\{\sin(at)\}\left(1+\frac{a^2}{s^2}\right)&=\frac{a}{s^2} \\
|
||||
\mathcal L\{\sin(at)\}&=\frac{a}{a^2+s^2}, s > 0
|
||||
\end{align*}
|
||||
|
||||
A **piecewise continuous** function on $[a,b]$ is continuous on $[a,b]$ except for a possible finite number of finite jump discontinuities.
|
||||
|
||||
- This means that any jump discontinuities must have a finite limit on both sides.
|
||||
- A piecewise continuous function on $[0,\infty)$ must be piecewise continuous $\forall B>0, [0,B]$.
|
||||
|
||||
The **exponential order** of a function is $a$ if there exist constants $K, M$ such that:
|
||||
$$|f(t)|\leq Ke^{at}\text{ when } t\geq M$$
|
||||
|
||||
!!! example
|
||||
- $f(t)=7e^t\sin t$ has an exponential order of 1.
|
||||
- $f(t)=e^{t^2}$ does not have an exponential order.
|
||||
|
||||
### Linearity
|
||||
|
||||
A **piecewise continuous** function $f$ on $[0,\infty)$ of an exponential order $a$ has a defined Laplace transform for $s>a$.
|
||||
|
||||
Laplace transforms are **linear**. If there exist LTs for $f_1, f_2$ for $s>a_1, a_2$, respectively, for $s=\text{max}(a_1, a_2)$:
|
||||
|
||||
$$\mathcal L\{c_1f_1 + c_2f_2\} = c_1\mathcal L\{f_1\} + c_2\mathcal L\{f_2\}$$
|
||||
|
||||
??? example
|
||||
We find the Laplace transform for the following.
|
||||
|
||||
$$
|
||||
f(t)=\begin{cases}
|
||||
1 & 0\leq t < 1 \\
|
||||
e^{-t} & t\geq 1
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
Clearly $f(t)$ is piecewise ocontinuous on $[0,\infty)$ and has an exponential order of -1 when $t\geq 1$ and 0 when $0\leq t<1$. Thus $\mathcal L\{f(t)\}$ is defined for $s>0$.
|
||||
|
||||
\begin{align*}
|
||||
\mathcal L\{f(t)\}&=\int^1_0 e^{-st}dt + \int^\infty_1e^{-st}e^{-t}dt \\
|
||||
\tag{$s\neq 0$}&=\left[-\frac 1 s e^{-st}\right]^1_0 + \int^\infty_1e^{t(-s-1)}dt \\
|
||||
&=-\frac 1 se^{-s}+\frac 1 s + \lim_{B\to\infty}\left[ \frac{1}{-s-1}e^{t(-s-1)} \right]^B_1 \\
|
||||
\tag{$s\neq 0,s>-1$}&=\frac{-e^{-s}+1}{s} -\frac{e^{-s-1}}{-s-1}
|
||||
\end{align*}
|
||||
|
||||
We solve for the special case $s=0$:
|
||||
\begin{align*}
|
||||
\mathcal L\{f(t)\}&=\int^1_0 e^{0}dt + \int^\infty_1e^{-st}e^{-t}dt \\
|
||||
&=1 -\frac{e^{-s-1}}{-s-1} \\
|
||||
\end{align*}
|
||||
|
||||
$$
|
||||
\mathcal L\{f(t)\}=
|
||||
\begin{cases}
|
||||
\frac{-e^{-s}+1}{s}-\frac{e^{-s-1}}{-s-1} & s\neq 0, s>-1 \\
|
||||
1-\frac{e^{-s-1}}{-s-1} &s=0
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
If there exists a transform for $s>a$, the original function multiplied by $e^{-bt}$ exists for $s>a+b$.
|
||||
|
||||
$$\mathcal L\{f(t)\}=F(s), s>a\implies \mathcal L\{e^{-bt}f(t)\}=F(s),s>a+b$$
|
||||
|
||||
### Inverse transform
|
||||
|
||||
The inverse is found by manipulating the equation until you can look it up in the [Laplace Table](#resources).
|
||||
|
||||
The inverse transform is also **linear**.
|
||||
|
||||
### Inverse of rational polynomials
|
||||
|
||||
If the transformed function can be expressed as a partial fraction decomposition, it is often easier to use linearity to reference the table.
|
||||
|
||||
$$\mathcal L^{-1}\left\{\frac{P(s)}{Q(s)}\right\}$$
|
||||
|
||||
- $Q, P$ are polynomials
|
||||
- $\text{deg}(P) > \text{deg}(Q)$
|
||||
- $Q$ is factored
|
||||
|
||||
??? example
|
||||
\begin{align*}
|
||||
\mathcal L^{-1}\left\{\frac{s^2+9s+2}{(s-1)(s^2+2s-3)}\right\} &=\mathcal L^{-1}\left\{\frac{A}{s-1}+\frac{B}{s+3} + \frac{Cs+D}{(s-1)^2}\right\} \\
|
||||
&\implies A=2,B=3,C=-1 \\
|
||||
&=2\mathcal L^{-1}\left\{\frac{1}{s-1}\right\} + 3\mathcal L^{-1}\left\{\frac{1}{(s-1)^2}\right\}-\mathcal L^{-1}\left\{\frac{1}{s+3}\right\} \\
|
||||
&=2e^t+3te^t-e^{-3t}
|
||||
\end{align*}
|
||||
|
||||
### Inverse of differentiable equations
|
||||
|
||||
If a function $f$ is continuous on $[0,\infty)$ and its derivative $f'$ is piecewise continuous on $[0,\infty)$, for $s>a$:
|
||||
|
||||
$$
|
||||
\mathcal L\{ f'\}=s\mathcal L\{f\}-f(0) \\
|
||||
\mathcal L\{ f''\} = s^2\mathcal L\{f\}-s\cdot f(0)-f'(0)
|
||||
$$
|
||||
|
||||
### Solving IVPs
|
||||
|
||||
Applying the Laplace transform to both sides of an IVP is valid to remove any traces of horrifying integration.
|
||||
|
||||
!!! example
|
||||
\begin{align*}
|
||||
y''-y'-2y=0, y(0)=1, y'(0)=0 \\
|
||||
\mathcal L\{y''-y'-2y\}&=\mathcal L\{0\} \\
|
||||
s^2\mathcal L\{y\}-s\cdot y(0)-y'(0) - s\mathcal L\{y\} +y(0) - 2\mathcal L\{y\}&=0 \\
|
||||
\mathcal L\{y\}(s^2-s-2)-s+1&=0 \\
|
||||
\mathcal L\{y\}&=\frac{s-1}{(s-2)(s+1)} \\
|
||||
&= \\
|
||||
\mathcal L^{-1}\{\mathcal L\{y\}\}&=\mathcal L^{-1}\left\{
|
||||
\frac 1 3\cdot\frac{1}{s-2} + \frac 2 3\cdot\frac{1}{s+1}
|
||||
\right\} \\
|
||||
y&=\frac 1 3\mathcal L^{-1}\left\{\frac{1}{s-2}\right\} + \frac 2 3\mathcal L^{-1}\left\{\frac{1}{s+1}\right\} \\
|
||||
\tag{from Laplace table}&=\frac 1 3 e^{2t} + \frac 2 3 e^{-t}
|
||||
\end{align*}
|
||||
|
||||
### Heaviside / unit step
|
||||
|
||||
The Heaviside and unit step functions are identical:
|
||||
|
||||
$$
|
||||
H(t-c)=u(t-c)=u_c(t)=\begin{cases}
|
||||
0 & t < c \\
|
||||
1 & t \geq c
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
Piecewise continuous functions can be manipulated into a single equation via the Heaviside function.
|
||||
|
||||
For a Heaviside transform $\mathcal L\{u_c(t)g(t)\}$, if $g$ is defined on $[0,\infty)$, $c\geq 0$, and $\mathcal L\{g(t+c)\}$ exists for some $s>s_0$:
|
||||
|
||||
$$
|
||||
\mathcal L\{u_c(t)g(t)\}=e^{-sc}\mathcal L\{g(t+c)\},s>s_0
|
||||
$$
|
||||
|
||||
Likewise, under the same conditions, shifting it twice restores it back to the original.
|
||||
|
||||
$$
|
||||
\mathcal L\{u_c(t)f(t-c)\}=e^{-sc}\mathcal L\{f\}
|
||||
$$
|
||||
|
||||
### Convolution
|
||||
|
||||
Convolution is a weird thingy that does weird things.
|
||||
|
||||
$$(f*g)(t)=\int^t_0f(\tau)g(t-\tau)d\tau$$
|
||||
|
||||
It is commutative ($f*g=g*f$) and is useful in transforms:
|
||||
|
||||
$$\mathcal L\{f*g\}=\mathcal L\{f\}\mathcal L\{g\}$$
|
||||
|
||||
!!! example
|
||||
To solve $4y''+y=g(t),y(0)=3, y'(0)=-7$:
|
||||
|
||||
\begin{align*}
|
||||
4\mathcal L\{y''\}+\mathcal L\{y\}&=\mathcal L\{g(t)\} \\
|
||||
4(s^2\mathcal L\{y\}-s\cdot y(0) - y'(0))+\mathcal L\{y\} &=\mathcal L\{g(t)\} \\
|
||||
\mathcal L\{y\}(4s^2+1)-12s+28&=\mathcal L\{g(t)\} \\
|
||||
\mathcal L\{y\}&=\frac{\mathcal L\{g(t)\}}{4s^2+1} + \frac{12s}{4s^2+1} - \frac{28}{4s^2+1} \\
|
||||
y&=\mathcal L^{-1}\left\{\frac{1}{4s^2+1}\mathcal L\{g(t)\}\right\} + \mathcal L^{-1}\left\{3\frac{s}{s^2+\frac 1 4}\right\}-\mathcal L^{-1}\left\{7\frac{1}{s^2+\frac 1 4}\right\} \\
|
||||
&= \mathcal L^{-1}\left\{\frac 1 2\mathcal L\left\{\sin\left(\tfrac 1 2 t\right)\right\}\mathcal L\{g(t)\} \right\}+3\cos\left(\tfrac 1 2 t\right)-14\sin\left(\tfrac 1 2t\right) \\
|
||||
&=\frac 1 2\left(\sin\left(\tfrac 1 2 t\right)*g(t)\right)+3\cos\left(\tfrac 1 2 t\right)-14\sin\left(\tfrac 1 2t\right) \\
|
||||
&=\frac 1 2\int^t_0\sin(\tfrac 1 2\tau)g(t-\tau)d\tau + 3\cos(\tfrac 1 2 t)-14\sin(\tfrac 1 2 t)
|
||||
\end{align*}
|
||||
|
||||
### Impulse
|
||||
|
||||
The **impulse for duration $\epsilon$** is defined by the **dirac delta function**:
|
||||
|
||||
$$
|
||||
\delta_\epsilon(t)=\begin{cases}
|
||||
\frac 1\epsilon & \text{if }0\leq t\leq\epsilon \\
|
||||
0 & \text{else}
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
As $\epsilon\to 0, \delta_\epsilon(t)\to\infty$. Thus:
|
||||
$$
|
||||
\delta(t-a)=\begin{cases}
|
||||
\infty & \text{if }t=a \\
|
||||
0 & \text{else}
|
||||
\end{cases} \\
|
||||
\boxed{\int^\infty_0\delta(t-a)dt=1}
|
||||
$$
|
||||
|
||||
If a function is continuous, multiplying it by the impulse function is equivalent to turning it on at that particular point. For $a\geq 0$:
|
||||
|
||||
$$\boxed{\int^\infty_0\delta(t-a)dt=g(a)}$$
|
||||
|
||||
Thus we also have:
|
||||
|
||||
$$\mathcal L\{\delta (t-a)\}=e^{-as}\implies\mathcal L^{-1}\{1\}=\delta(t)$$
|
||||
|
||||
## Heat flow
|
||||
|
||||
The temperature of a tube from $x=0$ to $x=L$ can be represented by the following DE:
|
||||
|
||||
$$\text{temp}=u(x,t)=\boxed{u_t=a^2u_{xx}},0<x<L,y>0$$
|
||||
|
||||
Two boundary conditions are requred to solve the problem for all $t>0$ — that at $t=0$ and at $x=0,x=L$.
|
||||
|
||||
- $u(x,0)=f(x),0\leq x\leq L$
|
||||
- e.g., $u(0,t)=u(L,t)=0,t>0$
|
||||
|
||||
Thus the general solution is:
|
||||
|
||||
$$
|
||||
\boxed{u(x,t)=\sum^\infty_{n=1}a_ne^{-\left(\frac{n\pi a}{L}\right)^2t}\sin(\frac{n\pi x}{L})} \\
|
||||
f(x)=\sum^\infty_{n=1}a_n\sin(\frac{n\pi x}{L})
|
||||
$$
|
||||
|
||||
### Periodicity
|
||||
|
||||
The **period** of a function is an increment that always returns the same value: $f(x+T)=f(x)$, and its **fundamental period** of a function is the smallest possible period.
|
||||
|
||||
!!! example
|
||||
The fundamental period of $\sin x$ is $2\pi$, but any $2\pi K,k\in\mathbb N$ is a period.
|
||||
|
||||
The fundamental periods of $\sin \omega x$ and $\cos\omega x$ are both $\frac{2\pi}{\omega}$.
|
||||
|
||||
If functions $f$ and $g$ have a period $T$, then both $af+bg$ and $fg$ also must have period $T$.
|
||||
|
||||
#### Manipulating polarity
|
||||
|
||||
- even: $\int^L_{-L}f(x)dx=2\int^L_0f(x)dx$
|
||||
- odd: $\int^L_{-L}f(x)dx=0$
|
||||
|
||||
- even × even = even
|
||||
- odd × odd = even
|
||||
- even × odd = odd
|
||||
|
||||
## Orthogonality
|
||||
|
||||
$$\int^L_{-L}\cos(\frac{m\pi x}{L})\sin(\frac{n\pi x}{L})dx=0$$
|
||||
|
||||
$$
|
||||
\int^L_{-L}\cos(\frac{m\pi x}{L})(\frac{n\pi x}{L})dx=\begin{cases}
|
||||
2L & \text{if }m=n=0 \\
|
||||
L & \text{if }m=n\neq 0 \\
|
||||
0 & \text{if }m\neq n
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
$$
|
||||
\int^L_{-L}\sin(\frac{m\pi x}{L}\sin(\frac{n\pi x}{L})dx=\begin{cases}
|
||||
L & \text{if }m=n \\
|
||||
0 & \text{if }m\neq n
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
Functions are **orthogonal** on an interval when the integral of their product is zero, and a set of functions is **mutually orthogonal** if all functions in the set are orthogonal to each other.
|
||||
|
||||
If a Fourier series converges to $f(x)$:
|
||||
|
||||
$$f(x)=\frac{a_0}{2} + \sum^\infty_{n=1}\left(a_n\cos(\frac{n\pi x}{L})+b_n\sin(\frac{n\pi x}{L})\right)$$
|
||||
|
||||
The **Euler-Fourier** formulae must apply:
|
||||
$$
|
||||
\boxed{a_n=\frac 1 L\int^L_{-L}f(x)\cos(\frac{n\pi x}{L})dx} \\
|
||||
\\
|
||||
\boxed{b_n=\frac 1 L\int^L_{-L}f(x)\sin(\frac{n\pi x}{L})dx}
|
||||
$$
|
||||
|
||||
!!! example
|
||||
The Fourier series for the square wave function: $f(x)=\begin{cases}-1 & -\pi < x < 0 \\ 1 & 0 < x < \pi\end{cases}$
|
||||
|
||||
The period is clearly $2\pi\implies L=\pi$. $f(x)$ is also odd, by inspection.
|
||||
|
||||
\begin{align*}
|
||||
a_n&=\frac 1\pi\int^\pi_{-\pi}\underbrace{f(x)\cos(\frac{n\pi x}{\pi})}_\text{odd × even = odd}dx=0=a_0 \\
|
||||
b_n&=\frac 1 \pi\int^\pi_{-\pi}f(x)\sin(\frac{n\pi x}{\pi})dx \\
|
||||
\tag{even}&=\frac 2\pi\int^\pi_0f(x)\sin(nx)dx \\
|
||||
\tag{$f(x)>1$ when $x>0$}&=\frac 2\pi\int^\pi_0\sin(nx)dx \\
|
||||
&=\frac 2\pi\left[\frac{-\cos nx}{n}\right]^\pi_0 \\
|
||||
&=\begin{cases}
|
||||
\frac{4}{\pi n} & \text{if $n$ is odd} \\
|
||||
0 & \text{else}
|
||||
\end{cases}
|
||||
\therefore f(x)&=\sum^\infty_{n=1}\frac 2\pi\left(\frac{1-(-1)^n}{n}\sin(nx)\right) \\
|
||||
\tag{only odd $n$s are non-zero}&=\frac4\pi\sum^\infty_{n=1}\frac{1}{2n-1}\sin[(2n-1)x]
|
||||
\end{align*}
|
||||
|
||||
Thus the Fourier series is $$.
|
||||
|
||||
### Separation of variables
|
||||
|
||||
To solve IBVPs, where $X(x)$ and $T(t)$ are exclusively functions of their respective variables:
|
||||
|
||||
$$u(x,t)=X(x)T(t)$$
|
||||
|
||||
Substituting it into the IBVP results in a **separation constant** $-\lambda$.
|
||||
|
||||
$$\boxed{\frac{T'(t)}{a^2T(t)}=\frac{X''(x)}{X(x)}=-\lambda}$$
|
||||
|
||||
Possible values for the separation constant are known as **eigenvalues**, and their corresponding **eigenfunctions** contain the unknown constant $a_n$:
|
||||
|
||||
$$
|
||||
\lambda_n=\left(\frac{n\pi}{L}\right)^2 \\
|
||||
X_n(x)=a_n\sin(\frac{n\pi x}{L})
|
||||
$$
|
||||
|
||||
### Wave equation
|
||||
|
||||
A string stretched between two secured points at $x=0$ and $x=L$ can be represented by the following IBVP:
|
||||
|
||||
$$
|
||||
u_{tt}=a^2u_{xx},0<x<L,t>0 \\
|
||||
u(0,t)=u(L,t)=0,t>0 \\
|
||||
u(x,0)=f(x), 0\leq x\leq L \\
|
||||
u_t(x,0)=g(x), 0\leq x\leq L
|
||||
$$
|
||||
|
||||
The following conditions must be met:
|
||||
|
||||
$$
|
||||
u(x,t)=\sum^\infty_{n=1}\sin(\frac{n\pi x}{L})\left(\alpha_n\cos(\frac{n\pi a}{L}t)+\beta_n\sin(\frac{n\pi a}{L}t)\right) \\
|
||||
\boxed{f(x)=\sum^\infty_{n=1}\alpha_n\sin(\frac{n\pi x}{L}),0\leq x\leq L} \\
|
||||
\boxed{g(x)=\sum^\infty_{n=1}\frac{n\pi a}{L}\beta_n\sin(\frac{n\pi x}{L}), 0\leq x\leq L}
|
||||
$$
|
||||
|
||||
### Fourier symmetry
|
||||
|
||||
To find a Fourier series for functions defined only on $[0, L]$ instead of $[-L, L]$, a **periodic extension** can be used.
|
||||
|
||||
A **half-range sine expansion (HRS)** is used for odd functions:
|
||||
|
||||
$$
|
||||
f_o(x)=\begin{cases}
|
||||
f(x) & x\in(0, L) \\
|
||||
-f(-x) & x\in(-L, 0)
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
A **half-range cosine expansion (HRC)** is used for even functions:
|
||||
|
||||
$$
|
||||
f_e(x)=\begin{cases}
|
||||
f(x) & x\in(0, L) \\
|
||||
f(-x) & x\in(-L, 0)
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
Thus if a Fourier series on $(0,L)$ exists, it can be expressed as either a **Fourier sine series** (via HRS) or a **Fourier cosine series** (via HRC).
|
||||
|
||||
!!! example
|
||||
For $f(x)=\begin{cases}\frac\pi 2 & [0,\frac\pi 2] \\ x-\frac\pi 2 & (\frac\pi2,\pi]\end{cases}$:
|
||||
|
||||
|
||||
\begin{align*}
|
||||
a_n&=\frac 2 L\int^L_0f(x)\cos(\frac{n\pi x}{L})dx \\
|
||||
&=\frac 2\pi \int^{\pi/2}_0\frac\pi 2\cos(\frac{n\pi x}{\pi})dx + \frac 2 \pi\int^\pi_{\pi/2}(x-\frac\pi2)\cos(\frac{n\pi x}{\pi})dx \\
|
||||
&=\frac{2}{n^2\pi}[(-1)^n-\cos(\frac{n\pi}{2})+\frac{n\pi}{2}\sin(\frac{n\pi}{2}) \\
|
||||
\\
|
||||
a_0&=\frac2\pi\int^\pi_0f(x)\cos(0)dx \\
|
||||
&=\frac{3\pi}{4} \\
|
||||
\\
|
||||
\therefore f(x)&=\frac{3\pi}{8}+\sum^\infty_{n=1}\frac{2}{n^2\pi^2}[(-1)^n-\cos(\frac{n\pi}{2})+\frac{n\pi}{2}\sin(\frac{n\pi}{2})]\cos(nx),x\in[0,\pi]
|
||||
\end{align*}
|
||||
|
||||
!!! example
|
||||
For:
|
||||
|
||||
$$
|
||||
u_t=2u_{xx},0<x<\pi,t:0 \\
|
||||
u(0,t)=u(\pi,t)=0,t>0 \\
|
||||
u(x,0)=\begin{cases}
|
||||
\frac\pi 2 & [0,\frac\pi 2] \\
|
||||
x-\frac\pi 2 & (\frac\pi 2,\pi]
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
We have $L=\pi,a=\sqrt 2$.
|
||||
|
||||
\begin{align*}
|
||||
u(x,t)&=\sum^\infty_{n=1}\alpha_ne^{\left(\frac{n\pi\sqrt 2}{\pi}\right)^2t}\sin(\frac{n\pi x}{\pi})
|
||||
&=\sum^\infty_{n=1}\alpha_ne^{-2n^2t}\sin(nx) \\
|
||||
\alpha_n&=\frac 2 L\int^L_0f(x)\sin(\frac{n\pi x}{L})dx \\
|
||||
&=\frac2\pi\int^{\pi/2}_0\frac\pi 2\sin(nx)dx+\frac2\pi\int^\pi_{\pi/2}(x-\frac\pi2\sin(nx)dx \\
|
||||
&=\frac 1 n[1+(-1)^{n+1}-\cos(\frac{n\pi}{2})-\frac{2}{n\pi}\sin(\frac{n\pi}{2}]
|
||||
\end{align*}
|
||||
|
||||
### Convergence of Fourier series
|
||||
|
||||
!!! definition
|
||||
- $f(x^+)=\lim_{h\to0^+}f(x+h)$
|
||||
- $f(x^-=\lim_{h\to0^-}f(x+h)$
|
||||
|
||||
If $f$ and $f'$ are piecewise continuous on $[-L, L]$ for $x\in(-L,L)$, where $a_n$ and $b_n$ are from the Euler-Fourier formulae:
|
||||
|
||||
$$\frac{a_0}{2}+\sum^\infty_{n=1}a_n\cos(\frac{n\pi x}{L})+b_n\sin(\frac{n\pi x}{L})=\boxed{\frac 1 2[f(x^+)+f(x^-)]}$$
|
||||
|
||||
At $x=\pm L$, the series converges to $\frac 1 2[f(-L^+)+f(L^-)]$. This implies:
|
||||
|
||||
- A continuous $f$ converges to $f(x)$
|
||||
- A discontinuous $f$ has the Fourier series converge to the average of the left and right limits
|
||||
- Extending $f$ to infinity using periodicity allows it to hold for all $x$
|
||||
|
||||
!!! example
|
||||
The square wave function $f(x)=\begin{cases}-1 & -\pi<x<0 \\ 1 & 0<x<\pi\end{cases},f(x+2\pi)=f(x)$:
|
||||
|
||||
$f$ and $f'$ are piecewise continuous, but the function is discontinuous at $k\pi,k\in\mathbb Z$. Thus at $x=\pm\pi$, the series converges to $\frac 1 2(-1+1)=0$. At $x=0$, the series converges to $\frac 1 2(1+(-1))=0$.
|
||||
|
||||
If $f$ is 2L-periodic and continuous on $-\infty,\infty$, and $f'$ is piecewise continuous on $[-L,L]$, the Fourier series converges **uniformly** to $f$ on $[-L,L]$ and thus any interval.
|
||||
|
||||
More formally, for every $\epsilon>0$, there exists an integer $N_0$ depending on $\epsilon$ such that $|f(x)-[\frac{a_0}{2}+\sum^N_{n=1}a_n\cos(\frac{n\pi x}{L})+b_n\sin(\frac{n\pi x}{L})]|<\epsilon$ for all $N\geq N_0$ and all $x\in(-\infty,\infty)$.
|
||||
|
||||
More intuitively, for a high enough summation of the Fourier series, the value must lie in an **$\epsilon$-corridor** of $f(x)$ such that $f(x)$ is always between $f(x)\pm\epsilon$.
|
||||
|
||||
!!! example
|
||||
- The Fourier series for the triangle wave function **is** uniformly convergent.
|
||||
- The Fourier series for the square wave function **is not** uniformly convergent, which means that Gibbs overshoots would not fit in an arbitrarily small $\epsilon$-corridor.
|
||||
|
||||
The **Weierstrass M-test** states that if $|a_n(x)|\leq M_n$ for all $x\in[a,b]$ and if $\sum^\infty_{n=1}M_n$ converges, then $\sum^\infty_{n=1}a_n(x)$ converges uniformly to $f(x)$ on $[a,b]$.
|
||||
|
||||
!!! example
|
||||
$\sum^\infty_{n=1}\frac{1}{n^2}\cos(nx)$ converges uniformly on any finite closed interval $[a,b]$.
|
||||
|
||||
$|\frac{\cos(nx)}{n^2}|\leq\frac{1}{n^2}$ for all $x$, and $\sum^\infty_{n=1}\frac{1}{n^2}$ also converges. Thus the result follows from the M-test.
|
||||
|
||||
### Differentiating Fourier series
|
||||
|
||||
You can termwise differentiate the Fourier series of $f(x)$ only if:
|
||||
|
||||
- $f(x)$ is continuous on $(-\infty,\infty)$ and 2L-periodic
|
||||
- $f'(x),f''(x)$ are both piecewise continuous on $[-L,L]$
|
||||
|
||||
You can termwise integrate the Fourier series of $f(x)$ only if $f(x)$ is piecewise continuous on $[-L,L]$.
|
||||
|
||||
Then, for any $x\in[-L,L]$:
|
||||
|
||||
$$\int^x_{-L}f(t)dt=\int^x_{-L}\frac{a_0}{2}dt+\sum^\infty_{n=1}\int^x_{-L}(a_n\cos(\frac{n\pi t}{L})+b_n\sin(\frac{n\pi t}{L}))dt$$
|
||||
|
||||
### Complex Fourier series
|
||||
|
||||
By employing Euler's theorem, sine and cosine can be transformed into exponential forms.
|
||||
|
||||
$$
|
||||
\cos(\frac{n\pi x}{L})=\frac{e^{i\frac{n\pi x}{L}} + e^{-i\frac{n\pi x}{L}}}{2} \\
|
||||
\sin(\frac{n\pi x}{L})=\frac{-ie^{i\frac{n\pi x}{L}} + ie^{-i\frac{n\pi x}{L}}}{2}
|
||||
$$
|
||||
|
||||
Thus the **complex Fourier series** is given by:
|
||||
|
||||
$$
|
||||
f(x)=\sum^\infty_{n=-\infty}c_ne^{i\frac{n\pi x}{L}} \\
|
||||
c_n=\frac{1}{2L}\int^L_{-L}f(x)e^{-i\frac{n\pi x}{L}}dx = \frac 1 2(a_n-ib_n)
|
||||
$$
|
||||
|
||||
To convert it to a real Fouier series:
|
||||
|
||||
- $a_0=2c_0$
|
||||
- $a_n=c_n+\overline{c_n}$
|
||||
- $b_n=i(c_n-\overline{c_n})$
|
||||
|
||||
!!! example
|
||||
The complex Fourier series for the sawtooth wave function: $f(x)=x,-1<x<1,f(x+2)=f(x)$. Thus we have a period of 2 and $L=1$.
|
||||
|
||||
\begin{align*}
|
||||
c_0&=\frac 1 2\int^1_{-1}\underbrace{xe^{0}}_\text{odd}dx \\
|
||||
&=0 \\
|
||||
\\
|
||||
c_n&=\frac 1 2\int^1_{-1}xe^{-in\pi x}dx \\
|
||||
\tag{IBP}&=\frac 1 2\left[\frac{xe^{-in\pi x}}{-in\pi}-\int\frac{1}{-in\pi}e^{-in\pi x}dx\right]^1_{-1} \\
|
||||
&=\frac 1 2\left[\frac{xe^{-n\pi x}}{-in\pi}+\frac{1}{n^2\pi^2}e^{-in\pi x}\right]^1_{-1} \\
|
||||
&=\frac{(-1)^ni}{n\pi} \\
|
||||
\\
|
||||
\therefore f(x)&=\sum^\infty_{\substack{n=-\infty \\ n\neq0}}\frac{(-1)^ni}{n\pi}e^{in\pi x}
|
||||
\end{align*}
|
||||
|
||||
The Fourier coefficients $c_n$ map to the amplitude spectrum $|c_n|$. **Parseval's theorem** maps the frequency domain ($\{c_n\}$) to and from the time domain ($f(t)$):
|
||||
|
||||
If a 2L-periodic function $f(t)$ has a complex Fourier series $f(t)=\sum^\infty_{n=-\infty}c_ne^{\frac{in\pi x}{L}}$:
|
||||
|
||||
$$\frac{1}{2L}\int^L_{-L}\underbrace{[f(t)]^2}_\text{time domain}dt=\sum^\infty_{n=-\infty}\underbrace{|c_n|^2}_\text{time domain}$$
|
||||
|
||||
!!! example
|
||||
For the Sawtooth function, $f(t)=t, -1 < t < 1, f(t+2)=f(t)$:
|
||||
|
||||
\begin{align*}
|
||||
f(x)&=\sum^\infty_{\substack{n=-\infty \\ n\neq 0}}\frac{ni}{n\pi}e^{in\pi t}+0 \\
|
||||
\frac 1 2\int^1_{-1}t^2dt&=\sum^\infty_{\substack{n=-\infty \\ n\neq 0}}\left|\frac{(-1)^ni}{n\pi}\right|^2+|0|^2 \\
|
||||
\tag{$\left|\frac{(-1)^ni}{n\pi}\right|=\frac{1}{n\pi}$}\frac 1 3 &=\sum^\infty_{\substack{n=-\infty \\ n\neq 0}}\left(\frac{1}{n\pi}\right)^2 \\
|
||||
&=\sum^{-1}_{n=-\infty}\left(\frac{1}{n\pi}\right)^2+\sum^\infty_{n=1}\left(\frac{1}{n\pi}\right)^2 \\
|
||||
\tag{$\frac 1 n^2$ sign doesn't matter}&=2\sum^\infty_{n=1}\frac{1}{n^2\pi^2} \\
|
||||
\frac 1 3 &=\frac{2}{\pi^2}\sum^\infty_{n=1}\frac{1}{n^2} \\
|
||||
\frac{\pi^2}{6}&=\sum^\infty_{n=1}\frac{1}{n^2}
|
||||
\end{align*}
|
||||
|
||||
### Fourier transform
|
||||
|
||||
To convert a function to a Fourier series:
|
||||
|
||||
$$\mathcal F\{f(x)\}=\hat f(\omega)=\int^\infty_{-\infty}f(x)e^{-i\omega x}dx$$
|
||||
|
||||
To convert a Fourier series back to the original function, the following conditions must hold:
|
||||
|
||||
- there must not be any infinite discontinuities: $\int^\infty_{-\infty}|f(x)|dx<\infty$
|
||||
- in any finite interval, there must be a finite number of extrema and discontinuities
|
||||
|
||||
Then, the **Fourier integral** / **inverse Fourier transform** converges to $f(x)$ wherever continuous and $\frac 1 2[f(x^+)+f(x^-)]$ at discontinuities.
|
||||
|
||||
$$\mathcal F^{-1}\{\hat f(\omega)\}=f(x)=\frac{1}{2\pi}\int^\infty_{-\infty}\hat f(\omega)e^{i\omega x}d\omega$$
|
||||
|
||||
!!! example
|
||||
For $f(x)=\begin{cases} 1 & -1<x<1 \\ 0 & \text{else}\end{cases}$:
|
||||
|
||||
\begin{align*}
|
||||
\mathcal F\{f(x)\}&=\int^\infty_{-\infty}f(x)e^{-i\omega x}dx \\
|
||||
&=\int^1_{-1}e^{-i\omega x}dx \\
|
||||
&=\frac{i\omega}(e^{i\omega}-e^{-i\omega}) \\
|
||||
&=\frac{2\sin\omega}{\omega}
|
||||
\end{align*}
|
||||
|
||||
Parseval's theorem can be generalised to non-periodic situations via Fourier transforms.
|
||||
|
||||
$$\int^\infty_{-\infty}[f(t)]^2dt=\frac{1}{2\pi}\int^\infty_{-\infty}|\hat f(\omega)|^2d\omega$$
|
||||
|
||||
#### Properties of the Fourier transform
|
||||
|
||||
- FT/IFT are linear: $\mathcal F\{af+bg\}=a\mathcal F\{f\}+b\mathcal F\{g\}$
|
||||
- FT is scalable: $\mathcal F\{f(ax)\}=\frac 1 a\hat f\left(\frac{\omega}{a}\right)$
|
||||
- FT can shift frequencies: $\mathcal F\{e^{iax}f(x)\}=\hat f(\omega-a)$
|
||||
- FT can shift time: $\mathcal F\{f(x-a)\}=e^{ia\omega}\hat f(\omega)$
|
||||
- If the IFT is applicable: $\mathcal F\{f^{(n)}(x)\}=(i\omega)^n\hat f(\omega)$
|
||||
- The FT is symmetrical: $\mathcal F\{\hat f(x)\}=2\pi f(-\omega)$
|
||||
|
||||
## Resources
|
||||
|
||||
- [Laplace Table](/resources/ece/laplace.pdf)
|
211
docs/2a/ece222.md
Normal file
211
docs/2a/ece222.md
Normal file
@@ -0,0 +1,211 @@
|
||||
# ECE 222: Digital Computers
|
||||
|
||||
## Exceptions
|
||||
|
||||
In ARM, anything that interrupts the normal control flow of a program is an exception.
|
||||
|
||||
- An **interrupt** from an **interrupt request (IRQ)** occurs when a peripheral wants to interrupt the current flow
|
||||
- A **fault** indicates a CPU error (e.g., division by zero) and returns to the faulty instruction
|
||||
- A **trap** runs the interrupt handler and returns to the next instruction
|
||||
|
||||
Exceptions are handled by running an exception handler then returning to the original line.
|
||||
|
||||
### Vector table
|
||||
|
||||
A vector table is an array of handler addresses. Each index contains a number (a "vector") and a priority.
|
||||
|
||||
### Exception handling
|
||||
|
||||
First, in hardware: If the exception priority is higher than the current operating priority, the exception is immediately handled.
|
||||
|
||||
- the current context is pushed to the stack
|
||||
- the operating mode is set to privileged
|
||||
- the operating priority is set to the exception priority
|
||||
- the program counter is set to the address of the exception (`vector_table[exception_num]`)
|
||||
|
||||
Next, the handler runs, and it should:
|
||||
|
||||
- preserve the any R4-R11 it modifies
|
||||
- clear the interrupt request (IRQ)
|
||||
- restore R4-R11
|
||||
- return with `BX LR`
|
||||
|
||||
Finally, in hardware:
|
||||
|
||||
- the previous context is restored
|
||||
- the previous operating priority and mode are restored
|
||||
|
||||
!!! warning
|
||||
Interrupts can interrupt other interrupts, if their priority is sufficiently high!
|
||||
|
||||
!!! example
|
||||
How to interrupt-driven I/O:
|
||||
|
||||
**Write the ISR:** Assuming that the IRQ bit is cleared if `R0` is read:
|
||||
|
||||
```asm
|
||||
ISR PUSH {R4-R11} ; save previous state onto stack
|
||||
LDR R3, [R0] ; clear the IRQ by reading from it
|
||||
POP {R4-R11} ; restore state
|
||||
BX LR ; return to original address
|
||||
```
|
||||
|
||||
**Store the interrupt handler in the vector table:** Assuming that the vector number is `22` and the vector table starts 16 addresses after the 0x00:
|
||||
|
||||
```asm
|
||||
MOV32 R0, #ISR ; handler address
|
||||
MOV R1, #38 * 4 ; offset: (16 + 22) * 4 bytes per address
|
||||
STR R1, [R0] ; save address to table
|
||||
```
|
||||
|
||||
**Enable interrupt requests:**
|
||||
|
||||
```asm
|
||||
MOV32 R0, #ADDRESS_INTERRUPT_ENABLE
|
||||
MOV R1, #1
|
||||
STR R1, [R0] ; enable interrupts
|
||||
```
|
||||
|
||||
## Processor design
|
||||
|
||||
Comparing the **complex instruction set computer** architecture to the **reduced instruction set computer** architecture:
|
||||
|
||||
| Task | CISC | RISC |
|
||||
| ---- | ---- | ---- |
|
||||
| ALU operands can come from? | registers, memory | registers (load/store) |
|
||||
| Addressing mode | complex | simple |
|
||||
| Binary size | small | large (~30% larger) |
|
||||
| Instruction size | variable | fixed |
|
||||
| Pipelining | difficult | simple |
|
||||
|
||||
### Operation encoding
|
||||
|
||||
The **R-format** is used for operations of the form `ADD Rd, Rn, Rm`:
|
||||
|
||||
$$\underbrace{\text{op-code}}_\text{11 b}\ \ \overbrace{\text{Rm}}^\text{5 b}\ \ \underbrace{\text{shift amount}}_\text{6 b}\ \ \overbrace{\text{Rn}}^\text{5 b}\ \ \underbrace{\text{Rd}}_\text{5 b}$$
|
||||
|
||||
The **D-format** is used for operations of the form `LDR Rt, [Rn, #offset]`:
|
||||
|
||||
$$\underbrace{\text{op-code}}_\text{11 b}\ \ \overbrace{\text{offset}}^\text{9 b}\ \ 00\ \ \overbrace{\text{Rn}}^\text{5 b}\ \ \underbrace{\text{Rt}}_\text{5 b}$$
|
||||
|
||||
The **CB-format** is used for operations of the form `CBZ Rt, LABEL`:
|
||||
|
||||
$$\underbrace{\text{op-code}}_\text{8 b}\ \ \overbrace{\text{offset}}^\text{19 b}\ \ \underbrace{\text{Rt}}_\text{5 b}$$
|
||||
|
||||
### Instruction data path
|
||||
|
||||
To execute an instruction, the following steps are observed:
|
||||
|
||||
1. Instruction fetch (IF)
|
||||
- fetch the instruction from instruction memory
|
||||
- increment the instruction address (`PC += 4`), latchedd into PC register at the end of the CPU cycle
|
||||
2. Instruction decode (ID)
|
||||
- decode fields like the op-code, offset
|
||||
- read recoded registers
|
||||
3. Execute (EX)
|
||||
- ALU calculates ADD, SUB, etc, as well as addresses for LDR/STR, sets zero status for CBZ
|
||||
- branch adder calculates any branch target addresses
|
||||
4. Memory (ME)
|
||||
- if memory needs to be reached, either `Write` or `Read` must be asserted to prepare for it
|
||||
- write to memory
|
||||
5. Writeback (WB)
|
||||
- write results to registers from memory, the ALU, or another register
|
||||
|
||||
### Performance
|
||||
|
||||
Each step in the instruction data path has a varying time, so the clock period must be at least as long as the slowest step.
|
||||
|
||||
Performance is usually compared by comparing the execution times of standard benchmarks, such that:
|
||||
|
||||
$$\text{time}=n_{instructions}\times\underbrace{\frac{\text{cycles}}{\text{instruction}}}_\text{CPI}\times\frac{\text{seconds}}{\text{cycle}}$$
|
||||
|
||||
## Pipelining
|
||||
|
||||
Pipelining changes the granularity of a clock cycle to be per step, instead of per-instruction. This allows multiple instructions to be processed concurrently.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/c/cb/Pipeline%2C_4_stage.svg" width=500>(Source: Wikimedia Commons)</img>
|
||||
|
||||
### Data forwarding
|
||||
|
||||
If data needs to be used from a prior operation, a pipeline stall would normally be required to remove the hazard and wait for the desired result (a **read-after-write** data hazard). However, a processor can mitigate this hazard by allowing the stalled instrution to read from the prior instruction's result instead.
|
||||
|
||||
### Load hazards
|
||||
|
||||
If a value is produced in memory access (e.g., loads) that is required in the next instruction's EX. a stall is for the dependent instruction. This can be detected in the ID stage by testing if the current instruction sets the memory read flag and the next instruction accesses the destination register.
|
||||
|
||||
A processor **stalls** by disabling the PC and IF/ID write to prevent fetching the next instruction. Additionally, it sets the control in ID/EX to 0 to insert a no-op in the pipeline.
|
||||
|
||||
## Memory
|
||||
|
||||
### Static RAM (SRAM)
|
||||
|
||||
- retains data as long as power is supplied
|
||||
- compared to DRAM, it is faster but more expensive, so it is used for cache
|
||||
|
||||
- To **read**: set word line = 1, turning on transistors, then read the **bit line**'s voltage
|
||||
- To **write**: set word line = 1, turning on transistors, then drive the **bit line**'s voltage
|
||||
|
||||
<img src="https://2.bp.blogspot.com/-dCCrTGB-c6U/T1zaY5TG1oI/AAAAAAAAAu8/MutoYbjglvs/s640/SRAM.gif" width=500 />
|
||||
|
||||
### Dynamic RAM (DRAM)
|
||||
|
||||
- DRAM capacitors lose their charge over time so must be periodically **refreshed**
|
||||
- Roughly 5x slower than SRAM, but cheaper, so it is used for main memory
|
||||
|
||||
- To **read**: precharge the bit line to $V_{DD}/2$, then set word line = 1, then sense and amplify the voltage change on the bit line. This also writes back the value.
|
||||
- To **write**: along the bit line, drive $V_DD$ to charge the capacitor (write a $1$) or $GND$ to discharge (write a $0$).
|
||||
|
||||
<img src="https://www.electronics-notes.com/images/ram-dynamic-dram-basic-cell-01.svg" width=500 />
|
||||
|
||||
### Large DRAM chips
|
||||
|
||||
Each bit cell is placed into a symmetric 2D matrix to avoid linear searching. Assuming each addressing pin can address one byte (8 bits), including one bit to select row or column:
|
||||
|
||||
$$\text{\# addr bits} = \log_2(2\times\text{\# bytes})$$
|
||||
|
||||
The matrix would store a total of eight times the number of bytes / words, so each edge is the square root of that. To read an address, the memory controller gives the row on the address pins and asserts **row address strobe (RAS)**. After the row is read, the controller gives the column and asserts **column address strobe (CAS)**.
|
||||
|
||||
$$
|
||||
\text{\# bits} = 2\times\text{\# bytes}\times\frac{\pu{8 bits}}{\pu{1 word}} \\
|
||||
\text{matrix length}=\sqrt{\text{\# bits}}
|
||||
$$
|
||||
|
||||
!!! example
|
||||
A 16 Mib machine stores 2 MiB, or $1024^2$ bytes. Thus the bits are arranged in a $\sqrt{2\times1024^2\times8}=2^{12}$ by $2^{12}$ matrix, where each row holds $2^9$ 8-bit words.
|
||||
|
||||
### DRAM timing
|
||||
|
||||
**Asynchronous** DRAM:
|
||||
|
||||
1. Provide row number, assert RAS
|
||||
2. Wait
|
||||
3. Provide column number, assert CAS
|
||||
4. Wait
|
||||
5. Transfer data
|
||||
|
||||
**Fast page mode** DRAM:
|
||||
|
||||
1. Provide row number
|
||||
2. Specify multiple column numbers
|
||||
3. Transfer multiple data
|
||||
|
||||
**Synchronous** DRAM (SDRAM) synchronises commands and data transfers to the bus clock. A row is buffered, then data is transferred in bursts of 2<sup>n</sup> words.
|
||||
|
||||
**Double data rate** SDRAM transfers data on the rising and falling edges of the bus clock.
|
||||
|
||||
### DRAM performance
|
||||
|
||||
!!! definition
|
||||
- **Latency** is measured by the time from the start of the request to the start of data transfer.
|
||||
- **Bandwidth** is measured by the volume of data transferred per unit time
|
||||
|
||||
**DDR SDRAM** transfers 64 bits per channel at once. A **rank** of memory chips provides the data, and each rank chip is mounted on a **dual inline memory module (DIMM)**. To increase capacity without increasing latency, each rank is subdivided into **banks**.
|
||||
|
||||
As a JEDEC standard, chips are named by DDR generation and bandwidth:
|
||||
|
||||
$$
|
||||
\text{PC}\#-bandwidth
|
||||
$$
|
||||
|
||||
!!! example
|
||||
A **PC3-12800** chip is DDR3 with a bus transfer rate of 12800 MB/s. Or, at 8 B/transfer, a bus clock rate of 1600 MT/s. At 2 transfers/cycle (DDR), it must thus run at 800 MHz.
|
223
docs/2a/ece240.md
Normal file
223
docs/2a/ece240.md
Normal file
@@ -0,0 +1,223 @@
|
||||
# ECE 240: Electronic Circuits
|
||||
|
||||
## Diodes
|
||||
|
||||
A **diode** is a two-terminal device that only allows current to flow in the direction of the arrow.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/b/b4/Diode_symbol.svg" width=300>(Source: Wikimedia Commons)</img>
|
||||
|
||||
The current across a diode is, where $I_s$ is a forced saturation current, $V$ is the voltage drop across it, and $V_T$ is the **thermal voltage** such that $V_T=\frac{kT}{q}$, where $T$ is the temperature, $k$ is the Boltzmann constant, and $q$ is the charge of an electron:
|
||||
|
||||
$$I=I_s\left(e^{V/V_T}-1\right)$$
|
||||
|
||||
!!! tip
|
||||
- $V_T\approx\pu{25 mV}$ at 20°C
|
||||
- $V_T\approx\pu{20 mV}$ at 25°C
|
||||
|
||||
A diode is open when current is flowing reverse the desired direction, resulting in zero current, until the voltage drop becomes so great that it reaches the **breakdown voltage** $V_B$. Otherwise, the above current formula is followed.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/2/2a/Diode_current_wiki.png" width=500>(Source: Wikimedia Commons)</img>
|
||||
|
||||
Diodes are commonly used in **rectifier circuits** — circuits that convert AC to DC.
|
||||
|
||||
By preventing negative voltage, a relatively constant positive DC voltage is obtained. The slight dip between each hill is known as **ripple** $\Delta V$.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/en/8/8b/Reservoircapidealised.gif" width=500>(Source: Wikimedia Commons)</img>
|
||||
|
||||
In a simple series RC circuit, across a diode, Where $R_LC>>\frac 1 \omega$, and $f=\frac{\omega}{2\pi}$:
|
||||
|
||||
$$\Delta V\approx \frac{I_\text{load}}{2fC}\approx\frac{V_0}{2fR_LC}$$
|
||||
|
||||
### Zener diodes
|
||||
|
||||
A Zener diode is a calibrated diode with a known breakdown voltage, $V_B$. If the voltage across the diode would be greater than $V_B$, it is **capped at $V_B$.**
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/9/92/Zener_diode_symbol-2.svg" width=200>(Source: Wikimedia Commons)</img>
|
||||
|
||||
## Voltage/current biasing
|
||||
|
||||
Solving for current for each element in a series returns a negative linear line and other non-linear lines.
|
||||
|
||||
- the linear line is the **load line**, which represents the possible solutions to the circuit when it is loaded
|
||||
- Depending on the base current $I_s$, the diode or transistor will be **biased** toward one of the curves, and the voltage and current will settle on one of the intersections, or **bias points**.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/2/27/BJT_CE_load_line.svg" width=600>(Source: Wikimedia Commons)</img>
|
||||
|
||||
- To bias current, as $R\to\infty$ (or, in practical terms, $R>>diode$), the slope of the load line $\to 0$, which results in a constant current.
|
||||
- To bias voltage, as $R\to 0$, the slope of the load line $\to\infty$, which results in a constant voltage.
|
||||
|
||||
!!! example
|
||||
<img src="https://miro.medium.com/v2/resize:fit:432/1*mijJgpHdt7DDmrPsb7tOcg.png" width=200 />
|
||||
|
||||
The current across the resistor and the diode is the same:
|
||||
|
||||
\begin{align*}
|
||||
i_D&=\frac{V_s}{R} \\
|
||||
i_D&\approx I_se^{V_D/V_T}
|
||||
\end{align*}
|
||||
|
||||
If a diode is put in series with AC and DC voltage sources $V_d(t)$ and $V_D$:
|
||||
|
||||
\begin{align*}
|
||||
i_D(t)&=I_se^{(V_D+V_d(t))/V_T} \\
|
||||
&=\underbrace{I_se^{V_D/V_T}}_\text{bias current}\ \underbrace{e^{V_d(t)/V_T}}_\text{$\approx 1+\frac{V_d}{V_T}$} \\
|
||||
&=I_D\left(1+\frac{V_d}{V_T}\right) \\
|
||||
&=\underbrace{I_D}_\text{large signal = bias = DC}+\underbrace{I_D\frac{V_d(t)}{V_T}}_\text{small signal = AC}
|
||||
\end{align*}
|
||||
|
||||
Diodes may act as resistors, depending on the bias current. They may exhibit a **differential resistance**:
|
||||
$$r_d=\left(\frac{\partial i_D}{\partial v_D}\right)^{-1} = \frac{V_T}{I_D}$$
|
||||
|
||||
!!! example
|
||||
Thus from the previous sequence:
|
||||
|
||||
$$i_D(t)=I_D+\frac{1}{r_d}V_d(t)$$
|
||||
|
||||
### Signal analysis
|
||||
|
||||
1. Analyse DC signals
|
||||
- assume blocking capacitors are open circuits
|
||||
- turn off AC sources
|
||||
2. Analyse AC signals
|
||||
- assume blocking capacitors are shorts
|
||||
- turn off DC sources
|
||||
- replace diode with effective resistor (the differential resistor)
|
||||
|
||||
!!! tip
|
||||
Most $R$s in the circuit can be assumed to be significantly greater than $r_d$, so $r_d$ can be removed in series or $R$ can be removed in parallel.
|
||||
|
||||
!!! warning
|
||||
Oftentimes, turning off a DC source to nowhere is actually a short to ground.
|
||||
|
||||
## MOSFETs
|
||||
|
||||
A MOSFET is a transistor. Current flows from the drain to the source, and only if voltage is applied to the gate.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/6/69/Mosfet_saturation.svg" width=500>(Source: Wikimedia Commons)</img>
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/9/91/Transistor_Simple_Circuit_Diagram_with_NPN_Labels.svg" width=300>(Source: Wikimedia Commons)</img>
|
||||
|
||||
In strictly DC, current passes the gate if the gate voltage is greater than the threshold voltage $V_G>V_t$. The difference between the two is known as the **overdrive voltage** $V_{ov}$:
|
||||
|
||||
$$V_{ov}=V_G-V_t$$
|
||||
|
||||
At a small $V_{DS}$, or in AC, the slope of $I_D$ to $V_{DS}$ is proportional to $V_G$. The **channel transconductance** $g_{DS}$ represents this slope, which is constant based on the **transconductance parameter** of the device.
|
||||
|
||||
$$\frac{I_D}{V_{DS}}=g_{DS}=k_nV_{ov}$$
|
||||
|
||||
Before the saturation region, the current grows exponentially:
|
||||
|
||||
$$\boxed{I_s=k_n(V_{ov}-\tfrac 1 2V_{DS})V_{DS}}$$
|
||||
|
||||
Afterward, it remains constant, based on the overdrive voltage:
|
||||
|
||||
$$\boxed{I_s=\frac 1 2k_nV_{ov}^2}$$
|
||||
|
||||
### Common-source amplifiers
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/4/4f/N-channel_JFET_common_source.svg" width=200>(Source: Wikimedia Commons)</img>
|
||||
|
||||
Where $V_{out}=V_{DS}$:
|
||||
|
||||
<img src="https://media.cheggcdn.com/media/b65/b65d59bd-ac35-4d28-b811-0ad1b5cf5bb6/phpCBbhn6" width=700 />
|
||||
|
||||
$|V_{ds}|>|V_{gs}|$ indicates AC voltage gain.
|
||||
|
||||
The gain can be modelled with Ohm's law:
|
||||
|
||||
$$V_{DS}=V_{DD}-I_DR_D=V_{DD}-\frac 1 2k_n(V_{GS}-V_t)R_D$$
|
||||
|
||||
At a certain gate voltage:
|
||||
|
||||
\begin{align*}
|
||||
A_V&=\frac{\partial V_{DS}}{\partial V_{GS}} \\
|
||||
&=-g_{DS}R_D
|
||||
\end{align*}
|
||||
|
||||
### Small signal analysis
|
||||
|
||||
The current from the drain to the source is equal to:
|
||||
|
||||
$$i_D=g_mV_{gs}$$
|
||||
|
||||
For small signals, a transistor is equivalent to, where $r_0=\frac{1}{\lambda I_D}=\frac{V_A}{I_D}$:
|
||||
|
||||
<img src="https://i.stack.imgur.com/EZK7K.png" width=600 />
|
||||
|
||||
It can be assumed that the differential resistance is always significantly smaller than any other external resistance: $r_o << R_d$.
|
||||
|
||||
To solve for the output resistance of the amplifier, turn off all sources and take the Thevenin resistance $R_{DS}$.
|
||||
|
||||
### Common-drain amplifiers / source followers
|
||||
|
||||
The input resistance of common amplifiers is infinity.
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/3/30/N-channel_JFET_source_follower.svg" width=200>(Source: Wikimedia Commons)</img>
|
||||
|
||||
As $V_{gs}$ is not necessarily zero, dependent sources must be left in when solving for output resistance, and so a small test source at the point of interest is required.
|
||||
|
||||
### Common-gate amplifiers
|
||||
|
||||
These can be represented by either the T-model or pi-model. The gate of the transistor is grounded.
|
||||
|
||||
$$
|
||||
A_{VO}=g_mR_d \\
|
||||
G_V=\frac{V_o}{V_{sig}}=g_mR_d\left(\frac{1}{1+g_mR_{sig}}\right)
|
||||
$$
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/9/99/Common_Gate.svg" width=200 />
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/a/a9/Common_gate_output_resistance.PNG" width=400 />
|
||||
|
||||
### Differential pairs
|
||||
|
||||
These are used at the input of opamps.
|
||||
|
||||
In **differential mode,** assuming $Q_1=Q_2$:
|
||||
|
||||
$V_{in}^+=-V_{in}^-=\frac{V_d}{2}$, so the current going down from both gates is equal $i_{gs1}=-i_{gs2}$. This means that node before $R_E$ is effectively ground, so the circuit can be split into two common source circuits.
|
||||
|
||||
$$G_D=\frac{V_o^--V_o^+}{V_d}=\frac{R_{C1}g_m}{1}=-\frac{-R_{C1}}{r_m}$$
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/3/3a/Differential_amplifier_long-tailed_pair.svg" width=300 />
|
||||
|
||||
In **common mode**:
|
||||
|
||||
$V_{in}^+=V_{in}^-$
|
||||
|
||||
$$G_{CM}=-\frac{R_D}{r_m+R_S+2R_C}$$
|
||||
|
||||
The **common-mode rejection ratio** is:
|
||||
|
||||
$$\frac{G_D}{G_{CM}}=1+\frac{2R_C}{r_m+R_s}$$
|
||||
|
||||
## MOSFET biasing
|
||||
|
||||
To bias a MOSFET:
|
||||
|
||||
- the transistor must be on: $V_{GS}>V_t$
|
||||
- the transistor must be saturated $V_{DS} > (V_{GS}-V_t)$
|
||||
|
||||
$$V_{GS}=V_G-R_EI_D$$
|
||||
|
||||
This is a negative feedback loop that forces a constant $I_D$.
|
||||
|
||||
<img src="https://i.stack.imgur.com/Yxslx.png" width=300 />
|
||||
|
||||
With two DC supplies ($-V_{EE}, V_{DD}$), having an $R_G$ results in:
|
||||
|
||||
$$I_D=\frac{-V_{EE}}{R_S}-\frac{V_{GS}}{R_S}$$
|
||||
|
||||
## PMOS transistors
|
||||
|
||||
These have current flowing from the source to the drain. It is effectively equal to an NMOS at all points but with its polarity reversed.
|
||||
|
||||
\begin{align*}
|
||||
\tag{triode}I_D&=k_p\left(|V_{ov}|-\frac 1 2V_{SD}\right)V_{SD} \\
|
||||
\tag{saturation}I_D&=\frac 1 2 k_p(V_{SG}-|V_{tp}|)^2
|
||||
\end{align*}
|
||||
|
||||
### Frequency dependence
|
||||
|
||||
A **parasitic capacitor** from the gate to the source of an NMOS limits the bandwidth (gain). These represent physical limitations of electrodes. At the output, the current through the capacitor can be neglected. At the input, the current through the capacitor dominates.
|
||||
|
290
docs/2a/ece250.md
Normal file
290
docs/2a/ece250.md
Normal file
@@ -0,0 +1,290 @@
|
||||
# ECE 250: DSA
|
||||
|
||||
## Solving recurrences
|
||||
|
||||
The **master method** is used to solve recurrences. For expressions of the form $T(n)=aT(n/b)+f(n)$:
|
||||
|
||||
- If $f(n)=O(n^{\log_b a})$, we have $T(n)=\Theta(n^{\log_b a}\log n)$
|
||||
- If $f(n) < O(n^{\log_b a})$, we have $T(n)=O(n^{\log_b a})$
|
||||
- If $f(n) > \Omega(n^{\log_b a})$, and $af(n/b)\leq cf(n), c<0$, we have $T(n)=\Theta(f(n))$
|
||||
|
||||
|
||||
## Heaps
|
||||
|
||||
A heap is a binary tree **stored in an array** in which all levels but the lowest are filled. It is guaranteed that the parent of index $i$ is greater than or equal to the element at index $i$.
|
||||
|
||||
- the parent of index $i$ is stored at $i/2$
|
||||
- the left child of index $i$ is stored at $2i$
|
||||
- the right child of index $i$ is stored at $2i+1$
|
||||
|
||||
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/c/c4/Max-Heap-new.svg" width=600>(Source: Wikimedia Commons)</img>
|
||||
|
||||
The **heapify** command takes a node and makes it and its children a valid heap.
|
||||
|
||||
```rust
|
||||
fn heapify(&mut A: Vec, i: usize) {
|
||||
if A[2*i] >= A[i] {
|
||||
A.swap(2*i, i);
|
||||
heapify(A, 2*i)
|
||||
} else if A[2*i + 1] >= A[i] {
|
||||
A.swap(2*i + 1, i);
|
||||
heapify(A, 2*i + 1)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Repeatedly heapifying an array from middle to beginning converts it to a heap.
|
||||
|
||||
```rust
|
||||
fn build_heap(A: Vec) {
|
||||
let n = A.len()
|
||||
for i in (n/2).floor()..0 { // this is technically not valid but it's much clearer
|
||||
heapify(A, i);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Heapsort
|
||||
|
||||
Heapsort constructs a heap annd then does magic things that I really cannot be bothered to figure out right now.
|
||||
|
||||
```rust
|
||||
fn heapsort(A: Vec) {
|
||||
build_heap(A);
|
||||
let n = A.len();
|
||||
for i in n..0 {
|
||||
A.swap(1, i);
|
||||
heapify(A, 1); // NOTE: heapify takes into account the changed value of n
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Priority queues
|
||||
|
||||
A priority queue is a heap with the property that it can remove the highest value in $O(\log n)$ time.
|
||||
|
||||
```rust
|
||||
fn pop(A: Vec, &n: usize) {
|
||||
let biggest = A[0];
|
||||
|
||||
A[0] = n;
|
||||
*n -= 1;
|
||||
heapify(A, 1);
|
||||
return biggest;
|
||||
}
|
||||
```
|
||||
|
||||
```rust
|
||||
fn insert(A: Vec, &n: usize, key: i32) {
|
||||
*n += 1;
|
||||
|
||||
let i = n;
|
||||
while i > 1 && A[parent(i)] < key {
|
||||
A[i] = A[parent(i)];
|
||||
i = parent(i);
|
||||
}
|
||||
A[i] = k;
|
||||
}
|
||||
```
|
||||
|
||||
## Sorting algorithms
|
||||
|
||||
### Quicksort
|
||||
|
||||
Quicksort operates by selecting a **pivot point** that ensures that everything to the left of the pivot is less than anything to the right of the pivot, which is what partitioning does.
|
||||
|
||||
```rust
|
||||
fn partition(A: Vec, left_bound: usize, right_bound: usize) {
|
||||
let i = left_bound;
|
||||
let j = right_bound;
|
||||
|
||||
while true {
|
||||
while A[j] <= A[right_bound] { j -= 1; }
|
||||
while A[i] >= A[left_bound] { i += 1; }
|
||||
|
||||
if i < j { A.swap(i, j); }
|
||||
else { return j } // new bound!
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Sorting calls partitioning with smaller and smaller bounds until the collection is sorted.
|
||||
|
||||
```rust
|
||||
fn sort(a: Vec, left: usize, right: usize) {
|
||||
if left < right {
|
||||
let pivot = partition(A, left, right);
|
||||
sort(A, left, pivot);
|
||||
sort(A, pivot+1, right);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- In the best case, if partitioning is even, the time complexity is $T(n)=T(n/2)+\Theta(n)=\Theta(n\log n)$.
|
||||
- In the worst case, if one side only has one element, which occurs if the list is sorted, the time complexity is $\Theta(n^2)$.
|
||||
|
||||
### Counting sort
|
||||
|
||||
If items are or are linked to a number from $1..n$ (duplicates are allowed), counting sort counts the number of each number, then moves things to the correct position. Where $k$ is the size of the counter array, the time complexity is $O(n+k)$.
|
||||
|
||||
First, construct a count prefix sum array:
|
||||
|
||||
```rust
|
||||
fn count(A: Vec, K: usize) {
|
||||
let counter = vec![0; K];
|
||||
|
||||
for i in A {
|
||||
counter[i] += 1;
|
||||
}
|
||||
|
||||
for (index, val) in counter.iter_mut().enumerate() {
|
||||
counter[index + 1] += val; // ignore bounds for cleanliness please :)
|
||||
}
|
||||
return counter
|
||||
}
|
||||
```
|
||||
|
||||
Next, the prefix sum represents the correct position for each item.
|
||||
|
||||
```rust
|
||||
fn sort(A: Vec) {
|
||||
let counter = count(A, 100);
|
||||
let sorted = vec![0; A.len()];
|
||||
|
||||
for i in n..0 {
|
||||
sorted[counter[A[i]]] = A[i];
|
||||
counter[A[i]] -= 1;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Graphs
|
||||
|
||||
!!! definition
|
||||
- A **vertex** is a node.
|
||||
- The **degree** of a node is the number of edges connected to it.
|
||||
- A **connected graph** is such that there exists a path from any node in the graph to any other node.
|
||||
- A **connected component** is a subgraph such that there exists a path from any node in the subgraph to any other node in the subgraph.
|
||||
- A **tree** is a connected graph without cycles.
|
||||
|
||||
### Directed acyclic graphs
|
||||
|
||||
a DAG is acyclic if and only if there are no **back edges** — edges from a child to an ancestor.
|
||||
|
||||
### Bellman-Ford
|
||||
|
||||
The Bellman-Ford algorithm allows for negative edges and detects negative cycles.
|
||||
|
||||
```rust
|
||||
fn bf(G: Graph, s: Node) {
|
||||
let mut distance = Vec::new(INFINITY);
|
||||
let mut adj_list = Vec::from(G);
|
||||
|
||||
distance[s] = 0;
|
||||
|
||||
for i in 1..G.vertices.len()-1 {
|
||||
for (u,v) in G.edges {
|
||||
if distance[v] > distance[u] + adj_list[u][v] {
|
||||
distance[v] = distance[u] + adj_list[u][v];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (u, v) in G.edges {
|
||||
if distance[v] > distance[u] + adj_list[u][v] {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
### Topological sort
|
||||
|
||||
This is used to find the shortest path in a DAG simply by DFS.
|
||||
|
||||
```rust
|
||||
fn shortest_path(G: Graph, s: Node) {
|
||||
let nodes: Vec<Node> = top_sort(G);
|
||||
let mut adj_list = G.to_adj_list();
|
||||
let mut distance = Vec::new(INFINITY);
|
||||
|
||||
for v in nodes {
|
||||
for adjacent in adj_list[v] {
|
||||
if distance[adjacent] > distance[v] + adjacent[v] {
|
||||
distance[v] = distance[adjacent] + adjacent[v];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Minimum spanning tree
|
||||
|
||||
!!! definition
|
||||
- A **cut** $(S, V-S)$ is a partition of vertices into disjoint sets $S$ and $V-S$.
|
||||
- An edge $u,v\in E$ **crosses the cut** $(S,V-S)$ if t`he endpoints are on different sides of the cut.
|
||||
- A cut **respects** a set of edges $A$ if and only if no edge in $A$ crosses the cut.
|
||||
- A **light edge** is the minimum of all edges that could cross the cut. There can be more than one light edge per cut.
|
||||
|
||||
A **spanning tree** of $G$ is a subgraph that contains all of its vertices. An MST minimises the sum of all edges in the spanning tree.
|
||||
|
||||
To create an MST:
|
||||
|
||||
1. Add edges from the spanning tree to an empty set, maintaining that the set is always a subset of an MST (only "safe edges" are added)
|
||||
|
||||
The **Prim-Jarnik algorithm** grows a tree one vertex at a time. $A$ is a subset of the already computed portion of $T$, and all vertices outside $A$ have a weight of infinity if there is no edge.
|
||||
|
||||
```rust
|
||||
// r is the start vertex
|
||||
fn create_mst_prim(G: Graph, r: Vertex) {
|
||||
// clean all vertices
|
||||
for vertex in G.vertices.iter_mut() {
|
||||
vertex.min_weight = INFINITY;
|
||||
vertex.parent = None;
|
||||
}
|
||||
|
||||
let Q = BinaryHeap::from(G.vertices); // priority queue
|
||||
|
||||
while let Some(u) = Q.pop() {
|
||||
for v in u.adjacent_vertices.iter_mut() {
|
||||
if Q.contains(v) && v.edge_to(u).weight < v.min_weight {
|
||||
v.min_weight = v.edge_to(u).weight;
|
||||
Q."modify_key"(v);
|
||||
v.parent = u;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
**Kruskal's algorithm** is objectively better by relying on edges instead.
|
||||
|
||||
```rust
|
||||
fn create_mst_kruskal(G: Graph) -> HashSet<Edge> {
|
||||
let mut A = HashSet::new();
|
||||
let mut S = DisjointSet::new(); // vertices set
|
||||
|
||||
for v in G.vertices.iter() {
|
||||
S.add_as_new_set(v);
|
||||
}
|
||||
G.edges.sort(|edge| edge.weight);
|
||||
|
||||
for (from, dest) in G.edges {
|
||||
if S.find_set_that_contains(from) != S.find_set_that_contains(dest) {
|
||||
A.insert((from, to));
|
||||
let X = S.pop(from);
|
||||
let Y = S.pop(to);
|
||||
S.insert({X.union(Y)});
|
||||
}
|
||||
}
|
||||
return A;
|
||||
}
|
||||
```
|
||||
|
||||
The time complexity is $O(E\log V)$.
|
||||
|
||||
### All pairs shortest path
|
||||
|
||||
Also known as an adjacency matrix extended such that each point represents the minimum distance from one edge to that other edge.
|
1
docs/2b/biol240.md
Normal file
1
docs/2b/biol240.md
Normal file
@@ -0,0 +1 @@
|
||||
# BIOL 240: Microbiology 1
|
1
docs/2b/ece203.md
Normal file
1
docs/2b/ece203.md
Normal file
@@ -0,0 +1 @@
|
||||
# ECE 203: Probability
|
2
docs/2b/ece207.md
Normal file
2
docs/2b/ece207.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# ECE 207: Signals and Systems
|
||||
|
22
docs/2b/ece208.md
Normal file
22
docs/2b/ece208.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# ECE 208: Discrete Math 2
|
||||
|
||||
## Hilbert system rules
|
||||
|
||||
**Axioms:**
|
||||
|
||||
- $\vdash (A\implies (B\implies A))$
|
||||
- $\vdash (A\implies (B\implies C))\implies ((A\implies B)\implies (A\implies C))$
|
||||
- $\vdash (\neg B\implies\neg A)\implies (A\implies B))$
|
||||
|
||||
**Inference (MP):**
|
||||
|
||||
- $\frac{\vdash A, \vdash A\implies B}{\vdash B}$
|
||||
|
||||
**Derived rules:**
|
||||
|
||||
- Deduction: $\frac{U\cup \{A\}\vdash B}{U\vdash A\implies B}$
|
||||
- Contrapositive: $\frac{U\vdash \neg B\implies\neg A}{U\vdash A\implies B}$ (and vice versa)
|
||||
- Transitivity: $\frac{u\vdash A\implies B, U\vdash B\implies C}{U\vdash A\implies C}$
|
||||
- Exchange of antecedent: $\frac{U\vdash A\implies (B\implies C)}{U\vdash B\implies (A\implies C)}$
|
||||
- Double negation: $\frac{U\vdash \neg\neg A}{U\vdash A}$ (and vice versa)
|
||||
- Reductio ad absurdum: $\frac{U\vdash\neg A\implies false}{U\vdash A}$
|
1
docs/2b/ece224.md
Normal file
1
docs/2b/ece224.md
Normal file
@@ -0,0 +1 @@
|
||||
# ECE 224: Embedded
|
1
docs/2b/ece252.md
Normal file
1
docs/2b/ece252.md
Normal file
@@ -0,0 +1 @@
|
||||
# ECE 252: Concurrency
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **CHW3MZ**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Command terms
|
||||
|
||||
The following terms are regularly used by IB and have specific meanings:
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **ENG3UZ**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Literary techniques/devices
|
||||
|
||||
### Description
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **MCV4U7**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Integration
|
||||
|
||||
Integration is an operation that finds the **net** area under a curve, and is the opposite operation of differentiation. As such, it is also known as **anti-differentiation**.
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **MHF4U7**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Review
|
||||
|
||||
### Logarithm rules
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **SCH3UZ**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## 1.1 - Review and base knowledge
|
||||
|
||||
### Binary ionic and molecular compound nomenclature
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **SPH3U7**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## 1.1 - Measurements in physics
|
||||
|
||||
!!! reminder
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **SPH4U7**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Magnetism
|
||||
|
||||
Magnets are objects with north/south dipoles that create a field around them. Although ferromagnetic substances can repel each other, paramagnetic substances are always attracted to a magnetic field. See [HL Chemistry#Physics properties of transition elements](/sch3uz/#physical-properties-of-transition-elements) for more details.
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# Theory of Knowledge
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Knowledge questions and claims
|
||||
|
||||
There are two types of knowledge **claims**:
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **SCH4UZ**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Thermal concepts
|
||||
|
||||
!!! definition
|
||||
|
@@ -2,11 +2,6 @@
|
||||
|
||||
The course code for this page is **SNC4MZ**.
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
## Organic chemistry
|
||||
|
||||
!!! definition
|
||||
|
@@ -1,10 +1,5 @@
|
||||
# Home
|
||||
|
||||
!!! warning
|
||||
<p style="font-size: 1rem">**The Eifueo project is no longer maintained
|
||||
as of 19 April 2023. Information in this repository may no longer be accurate.
|
||||
Please see [the main blog post](https://eggworld.me/blog/2023/sunsetting-eifueo) for more details.**</p>
|
||||
|
||||
Eifueo (eh-FWAY-oh) is intended to be primarily for personal use, with documentation here licensed under the GNU Free Documentation License.
|
||||
|
||||
Testing math rendering: $a^2+b^2=c^2$
|
||||
|
16
mkdocs.yml
16
mkdocs.yml
@@ -1,7 +1,7 @@
|
||||
site_name: Eifueo
|
||||
site_description: "A collection of personal notes throughout school"
|
||||
site_author: "Daniel Chen"
|
||||
copyright: "Text licensed under the GNU General Public License, version 3"
|
||||
copyright: "Text licensed under the GNU Free Documentation License"
|
||||
site_url: "https://eifueo.eggworld.me"
|
||||
repo_url: "https://git.eggworld.me/eggy/eifueo"
|
||||
repo_name: Gitea
|
||||
@@ -35,6 +35,20 @@ nav:
|
||||
- "ECE 140: Linear Circuits": 1b/ece140.md
|
||||
- "ECE 192: Engineering Economics": 1b/ece192.md
|
||||
- "MATH 119: Calculus 2": 1b/math119.md
|
||||
- Computer Engineering 2A:
|
||||
- "ECE 109: Materials Chemistry": 2a/ece109.md
|
||||
- "ECE 240: Electronic Circuits": 2a/ece240.md
|
||||
- "ECE 222: Digital Computers": 2a/ece222.md
|
||||
- "ECE 250: DSA": 2a/ece250.md
|
||||
- "ECE 205: Advanced Calculus 1": 2a/ece205.md
|
||||
- "ECE 204: Numerical Methods": 2a/ece204.md
|
||||
- Computer Engineering 2B:
|
||||
- "ECE 208: Discrete Math 2": 2b/ece208.md
|
||||
- "ECE 207: Signals": 2b/ece207.md
|
||||
- "BIOL 240: Microbiology 1": 2b/biol240.md
|
||||
- "ECE 203: Probability": 2b/ece203.md
|
||||
- "ECE 224: Embedded": 2b/ece224.md
|
||||
- "ECE 252: Concurrency": 2b/ece252.md
|
||||
|
||||
theme:
|
||||
name: material
|
||||
|
Reference in New Issue
Block a user