Ejercicio obligatorio 1

Fecha de entrega: Viernes 5 de abril

Nota

Nunca es buena idea empezar por un ejercicio integrador antes de tener practicados los temas que el trabajo integra.

Se sugiere antes de desarrollar este trabajo resolver, al menos, los siguientes ejercicios de la guía de Introducción al lenguaje C:

  • Ejercicio 1 (interés compuesto).

  • Ejercicio 4 (cantidad de segundos).

  • Ejercicio 13 (tabla del 7).

  • Ejercicio 18.b (factorial).

  • Ejercicio 18.c (exponencial).

Introducción

Sabemos del CBC que una función puede desarrollarse según el polinomio de Maclaurin como \(f(x) = \sum_{n=0}^\infty \frac{f^{(n)}(0)}{n!} x^n\). Como generalmente no tenemos el tiempo suficiente para sumar infinitos términos suele ser recomendable establecer un valor máximo \(N\) tal que \(n \leq N\) y recortar la serie a una cantidad finita de términos, así ya no tendremos un resultado exacto sino que aproximado.

Para calcular el factorial podemos utilizar la fórmula de Stirling que aproxima al factorial como \(n! \approx \sqrt{2\pi n} \left(\frac ne\right)^n\).

Con estas dos aproximaciones podemos calcular de manera sencilla cualquier función que sepamos derivar.

Supongamos que queremos calcular la función \(f(x) = \sin(x)\). La derivada del seno es el coseno y la del coseno es menos seno, por lo que las derivadas sucesivas son cíclicas. Pero para el polinomio de Maclaurin en realidad necesitamos estas derivadas evaluadas en el \(0\). Como \(\sin(0) = 0\) y \(\cos(0) = 1\) entonces la serie de derivadas tendrá valores sólo en sus términos impares.

Haciendo un conveniente cambio de variables podemos aproximar \(\sin(x) \approx \sum_{n=0}^N \frac{(-1)^n}{(2n+1)!} x^{2n+1}\).

Factorial

Se pide implementar la función double factorial(unsigned int n); que calcule el factorial de n utilizando la fórmula de Stirling.

Seno

Se pide implementar la función double seno(double x, unsigned int n_max); que calcule el seno de x mediante los n_max primeros términos del desarrollo de Maclaurin.

Tabla del seno

Dadas las siguientes definiciones:

#define INICIO -10
#define FIN 10
#define PASO 0.001

#define N_MAX 10

Se pide implementar un programa que calcule la tabla de \(\sin(x)\) entre los valores INICIO \(\leq x \leq\) FIN con intervalos de PASO desarrollando N_MAX términos de la serie para cada valor.

El programa deberá imprimir en formato CSV las columnas \(x_i\) y \(\sin(x_i)\) para cada uno de los valores.

Graficación

Se pide graficar los valores que genera el programa como salida en el software de su preferencia (planilla de cálculos, octave, gnuplot, etc.)

Validación

Se pide calcular por otro método el problema planteado (esto puede ser analíticamente, mediante otro software, etc.) y comparar la gráfica generada por este método con la gráfica generada por nuestro programa.

Entrega

Deberá entregarse:
  1. El código fuente del programa desarrollado.

  2. El gráfico del seno con los valores extraidos de este programa en formato JPG o PNG.

  3. Una pequeña interpretación de las diferencias o similitudes entre los valores obtenidos y los valores esperados.

La entrega se realiza a través del sistema de entregas.

El ejercicio es de entrega individual.