forked from eggy/eifueo
ece204: add odes
This commit is contained in:
parent
cb9e3e2308
commit
4252a734e2
@ -171,4 +171,124 @@ For discrete data:
|
|||||||
|
|
||||||
- If the spacing is not equal (to make DD impossible), again creating an interpolation may be close enough.
|
- 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.
|
- 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$$
|
||||||
|
@ -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$
|
- $u(x,0)=f(x),0\leq x\leq L$
|
||||||
- e.g., $u(0,t)=u(L,t)=0,t>0$
|
- 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
|
### 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.
|
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.
|
||||||
|
@ -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.
|
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>
|
<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.
|
||||||
|
Loading…
Reference in New Issue
Block a user