ece204: add odes

This commit is contained in:
eggy 2023-11-20 16:01:05 -05:00
parent cb9e3e2308
commit 4252a734e2
3 changed files with 131 additions and 0 deletions

View File

@ -172,3 +172,123 @@ For discrete data:
- 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$$

View File

@ -225,6 +225,13 @@ Two boundary conditions are requred to solve the problem for all $t>0$ — that
- $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.

View File

@ -124,3 +124,7 @@ $$\text{time}=n_{instructions}\times\underbrace{\frac{\text{cycles}}{\text{instr
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.