More stuff
This commit is contained in:
commit
1ab0a1a490
6
.gitignore
vendored
6
.gitignore
vendored
@ -38,3 +38,9 @@
|
||||
*.bib
|
||||
*.synctex.gz
|
||||
*.bbl
|
||||
|
||||
# C++ specifics
|
||||
src/*
|
||||
!src/Makefile
|
||||
!src/*.cpp
|
||||
!src/*.py
|
||||
|
||||
Binary file not shown.
@ -74,6 +74,9 @@
|
||||
%%
|
||||
%% Don't ask me why, I don't know.
|
||||
|
||||
% custom stuff
|
||||
\graphicspath{{./images/}}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\title{Project 1} % self-explanatory
|
||||
|
||||
BIN
latex/images/analytical_solution.pdf
Normal file
BIN
latex/images/analytical_solution.pdf
Normal file
Binary file not shown.
@ -1,8 +1,17 @@
|
||||
\section*{Problem 1}
|
||||
|
||||
First, we rearrange the equation.
|
||||
|
||||
\begin{align*}
|
||||
- \frac{d^2u}{dx^2} &= 100 e^{-10x} \\
|
||||
\frac{d^2u}{dx^2} &= -100 e^{-10x} \\
|
||||
\end{align*}
|
||||
|
||||
Now we find $u(x)$.
|
||||
|
||||
% Do the double integral
|
||||
\begin{align*}
|
||||
u(x) &= \int \int \frac{d^2 u}{dx^2} dx^2\\
|
||||
u(x) &= \int \int \frac{d^2 u}{dx^2} dx^2 \\
|
||||
&= \int \int -100 e^{-10x} dx^2 \\
|
||||
&= \int \frac{-100 e^{-10x}}{-10} + c_1 dx \\
|
||||
&= \int 10 e^{-10x} + c_1 dx \\
|
||||
@ -10,7 +19,7 @@
|
||||
&= -e^{-10x} + c_1 x + c_2
|
||||
\end{align*}
|
||||
|
||||
Using the boundary conditions, we can find $c_1$ and $c_2$ as shown below:
|
||||
Using the boundary conditions, we can find $c_1$ and $c_2$
|
||||
|
||||
\begin{align*}
|
||||
u(0) &= 0 \\
|
||||
|
||||
@ -1,3 +1,11 @@
|
||||
\section*{Problem 2}
|
||||
|
||||
% Write which .cpp/.hpp/.py (using a link?) files are relevant for this and show the plot generated.
|
||||
The code for generating the points and plotting them can be found under.
|
||||
|
||||
Point generator code: https://github.uio.no/FYS3150-G2-203/Project-1/blob/main/src/analyticPlot.cpp
|
||||
|
||||
Plotting code: https://github.uio.no/FYS3150-G2-2023/Project-1/blob/main/src/analyticPlot.py
|
||||
|
||||
Here is the plot of the analytical solution for $u(x)$.
|
||||
|
||||
\includegraphics[scale=.5]{analytical_solution.pdf}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
\section*{Problem 3}
|
||||
|
||||
To derive the discretized version of the Poisson equation, we first need
|
||||
the taylor expansion for $u(x)$ around $x + h$ and $x - h$.
|
||||
the Taylor expansion for $u(x)$ around $x$ for $x + h$ and $x - h$.
|
||||
|
||||
\begin{align*}
|
||||
u(x+h) &= u(x) + u'(x) h + \frac{1}{2} u''(x) h^2 + \frac{1}{6} u'''(x) h^3 + \mathcal{O}(h^4)
|
||||
@ -24,8 +24,8 @@ If we add the equations above, we get this new equation:
|
||||
We can then replace $\frac{d^2u}{dx^2}$ with the RHS (right-hand side) of the equation:
|
||||
|
||||
\begin{align*}
|
||||
- \frac{d^2u}{dx^2} &= 100 e^{-10x} \\
|
||||
\frac{ - u_{i+1} + 2 u_i - u_{i-1}}{h^2} + \mathcal{O}(h^2) &= 100 e^{-10x} \\
|
||||
- \frac{d^2u}{dx^2} &= f(x) \\
|
||||
\frac{ - u_{i+1} + 2 u_i - u_{i-1}}{h^2} + \mathcal{O}(h^2) &= f_i \\
|
||||
\end{align*}
|
||||
|
||||
And lastly, we leave out $\mathcal{O}(h^2)$ and change $u_i$ to $v_i$ to
|
||||
@ -33,5 +33,5 @@ differentiate between the exact solution and the approximate solution,
|
||||
and get the discretized version of the equation:
|
||||
|
||||
\begin{align*}
|
||||
align* \frac{ - u_{i+1} + 2 u_i - u_{i-1}}{h^2} &= 100 e^{-10x} \\
|
||||
\frac{ - v_{i+1} + 2 v_i - v_{i-1}}{h^2} &= 100 e^{-10x_i} \\
|
||||
\end{align*}
|
||||
|
||||
@ -1,10 +1,15 @@
|
||||
CC=g++
|
||||
|
||||
all: simpleFile
|
||||
.PHONY: clean
|
||||
|
||||
all: simpleFile analyticPlot
|
||||
|
||||
simpleFile: simpleFile.o
|
||||
$(CC) -o $@ $^
|
||||
|
||||
analyticPlot: analyticPlot.o
|
||||
$(CC) -o $@ $^
|
||||
|
||||
%.o: %.cpp
|
||||
$(CC) -c $< -o $@
|
||||
|
||||
|
||||
@ -6,17 +6,36 @@
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
|
||||
#define RANGE 1000
|
||||
#define FILENAME "analytical_solution.txt"
|
||||
|
||||
double u(double x);
|
||||
void generate_range(std::vector<double> &vec, double start, double stop, int n);
|
||||
void write_analytical_solution(std::string filename, int n);
|
||||
|
||||
int main() {
|
||||
int n = 1000;
|
||||
write_analytical_solution(FILENAME, RANGE);
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
double u(double x) {
|
||||
return 1 - (1 - exp(-10))*x - exp(-10*x);
|
||||
};
|
||||
|
||||
void generate_range(std::vector<double> &vec, double start, double stop, int n) {
|
||||
double step = (stop - start) / n;
|
||||
|
||||
for (int i = 0; i <= vec.size(); i++) {
|
||||
vec[i] = i * step;
|
||||
}
|
||||
}
|
||||
|
||||
void write_analytical_solution(std::string filename, int n) {
|
||||
std::vector<double> x(n), y(n);
|
||||
generate_range(x, 0.0, 1.0, n);
|
||||
|
||||
// Set up output file and strem
|
||||
std::string filename = "datapoints.txt";
|
||||
std::ofstream outfile;
|
||||
outfile.open(filename);
|
||||
|
||||
@ -32,21 +51,5 @@ int main() {
|
||||
<< std::endl;
|
||||
}
|
||||
outfile.close();
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
double u(double x) {
|
||||
double result;
|
||||
|
||||
result = 1 - (1 - exp(-10))*x - exp(-10*x);
|
||||
return result;
|
||||
};
|
||||
|
||||
void generate_range(std::vector<double> &vec, double start, double stop, int n) {
|
||||
double step = (stop - start) / n;
|
||||
|
||||
for (int i = 0; i <= vec.size(); i++) {
|
||||
vec[i] = i * step;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,17 +1,19 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
x = []
|
||||
y = []
|
||||
v = []
|
||||
with open('testdata.txt') as f:
|
||||
for line in f:
|
||||
a, b, c = line.strip().split()
|
||||
x.append(float(a))
|
||||
# y.append(float(b))
|
||||
v.append(float(c))
|
||||
def main():
|
||||
FILENAME = "analytical_solution.pdf"
|
||||
x = []
|
||||
v = []
|
||||
|
||||
fig, ax = plt.subplots()
|
||||
ax.plot(x, v)
|
||||
plt.show()
|
||||
# plt.savefig("main.png")
|
||||
with open('analytical_solution.txt') as f:
|
||||
for line in f:
|
||||
a, b = line.strip().split()
|
||||
x.append(float(a))
|
||||
v.append(float(b))
|
||||
|
||||
plt.plot(x, v)
|
||||
plt.savefig(FILENAME)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user