Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added some more fluff to the report

  • Loading branch information...
commit 89e396ec7d2f0f8f22fb0c37443e4b0c8c5801d6 1 parent 36048a8
@gnuvince authored
Showing with 33 additions and 15 deletions.
  1. +32 −0 rapport.tex
  2. +1 −15 tp3-1.c
View
32 rapport.tex
@@ -20,8 +20,40 @@
\section{Interpolation}
+\subsection{Description du problème et méthodes utilisées}
+
+Étant donné la fonction $\sin(x)$ sur l'intervalle $[0, 3\pi]$, on doit
+trouver des polynômes de collocation d'ordre 1 à 5 qui approximent
+cette fonction. Comme on peut choisir des points équidistants, nous
+avons choisi de trouver les polynômes avec la méthode de
+Newton-Grégory.
+
+La fonction \emph{InterpolationPolynomialNew} s'occupe de créer ce
+polynôme: elle prend en paramètres une fonction $f$ qui sert à créer
+un tableau de points, un entier positif \emph{degree} qui donne
+l'ordre désiré du polynôme et deux valeurs flottantes, \emph{start} et
+\emph{end}, qui définissent l'intervalle désiré.
+
+Comme les polynômes de collocation de la méthode Newton-Grégory ont la
+forme suivante:
+
+\[
+P(x) = c_0 + c_1(x-x_0) + \frac{c_2(x-x_0)(x-x_1)}{2!} + ...
+\]
+
+Et que de faire le développement d'un polynôme se fait en temps
+$O(n^2)$, nous avons choisi de ne pas regrouper les termes et de
+plutôt écrire une fonction spéciale
+\emph{InterpolationPolynomialPrint} pour faire l'affichage des
+polynômes de collocation.
+
\subsection{Graphes de l'erreur des polynômes d'interpolation}
+Les graphiques suivants montrent l'erreur absolue faite entre
+l'approximation par polynôme et la fonction $\sin$. On remarque au
+fur et à mesure que l'on ajoute des termes au polynôme, l'erreur
+absolue diminue.
+
\includegraphics[scale=0.4]{data/p1}
\includegraphics[scale=0.4]{data/p2}
\includegraphics[scale=0.4]{data/p3}
View
16 tp3-1.c
@@ -85,7 +85,6 @@ Polynomial* InterpolationPolynomialNew(double (*f)(double), size_t degree,
/* Initialize table */
for (size_t i = 0; i <= degree; ++i) {
table[0][i] = (*f)(start + i*h);
- //printf(" >> f(%.6lf) = %.6lf\n", (start + i*h), table[0][i]);
}
/* Fill up the table */
@@ -95,19 +94,6 @@ Polynomial* InterpolationPolynomialNew(double (*f)(double), size_t degree,
}
}
- /*
- for (size_t i = 0; i <= degree; ++i) {
- for (size_t j = 0; j <= degree - i; ++j) {
- printf("%+.5lf\t", table[i][j]);
- }
- putchar('\n');
- }
- */
-
-
-
-
-
/* Assign coefficients in polynomial. */
for (size_t i = 0; i <= degree; ++i) {
p->coefficients[i] = table[i][0] / (fact(i) * pow(h, i));
@@ -124,7 +110,7 @@ double InterpolationPolynomialEval(Polynomial *p, double x, double start, double
for (size_t i = 0; i <= p->degree; ++i) {
double t = 1.0;
for (size_t j = 0; j < i; ++j) {
- t *= (x - (start + j*h));
+ t *= (x - (start + j*h)); /* (x - x0)(x - x1)... */
}
y += p->coefficients[i] * t;
}
Please sign in to comment.
Something went wrong with that request. Please try again.