EJERCICIO 1:
Como sabemos,la cuota mensual que hay que pagar a una entidad financiera a la que se le ha pedido un préstamo de c euros para pagar en n años a un interés (nominal) fijo de i % es:
                                                    f(c,i,n)=c \(TraditionalForm\`\(i/1200\)\/\(1 - 1\/\((1 + i/1200)\)\^\(12  n\)\)\).
Un usuario pide una hipoteca de 120.000 euros para pagar en cuotas no superiores a 700 euros:
a) si el interés es fijo e igual a 3 %, ¿cuántos años tardará en amortizar su deuda?
b) si quiere terminar en 20  años, ¿cuál será el  interés máximo que puede pagar?

Resuelve ambos apartados mediante Newton-Raphson usando uno de los bucles For o Do y mostrando todas las iteraciones,y compara el resultado obtenido con la resolución directa mediante FindRoot.

f[c_, i_, n_] := 
        c*((i/1200)/(1 - (1/(((1 + i/1200))^(12  n)))));

Clear[n, i, c]
f1[n_] := 700.  - f[120000, 3, n]
g1[n_] := n - f1[n]/f1'[n]
n = 30. ;
For[k = 1, k ≤ 6, k++, Print[n];  
      n = g1[n]]

Clear[n, i, c]
f2[i_] := 700.  - f[120000, i, 20]
g2[i_] := i - f2[i]/f2'[i]
i = 10. ;
For[k = 1, k ≤ 6, k++, Print[i];  
      i = g2[i]]

Clear[i, n]
FindRoot[700 == f[120000, 3, n], {n, 20}]

Clear[i, n]
FindRoot[700 == f[120000, i, 20], {i, 3}]

EJERCICIO 3:
Calcula la solución del sistema Ax=b siendo (A= diagonal de 2, sub y super diagonales de (-1), resto 0 y de dimensión 501x 501. 
b=(0,1,2,...,499,500,499,...,2,1,0).

A = Table[0. , {i, 501}, {j, 501}];
Do[A[[i, i]] = -2, {i, 501}]
Do[A[[i, i + 1]] = 1, {i, 500}]
Do[A[[i, i - 1]] = 1, {i, 2, 501}]

b = Table[0. , {i, 501}];
Do[b[[i + 1]] = i; b[[501 - i]] = i, {i, 250}]

LinearSolve[A, b];

b) Llamando x=(x_1,x_2,...,x_501) a la solución obtenida,crea una matriz 501x 2 llamada  lista cuyas filas sean los pares de la forma (i, x_i),para cada i=1,...,501.Usando  ListPlot[ lista ] dibuja esos pares.

x = LinearSolve[A, b];
lista = 
        Table[{i, x[[i]]}, {i, 501}];
ListPlot[lista]

c) Programa el método de Jacobi para resolver aproximadamente un SEL,Ax=b,de modo que se detenga cuando la distancia entre iteraciones sea menor que 10^{-4}.

n = Length[A];
x = Table[0. , {i, n}];
tol = 10^(-4);
\(For[i = 1, 
      i ≤ 10, \(i++\), 
					y = 
        x; \ \ \ \ \ \ For[k = 1, k ≤ n, \(k++\), \ 
        x[\([k]\)] = \((b[\([k]\)] - 
                Sum[A[\([k, j]\)]*y[\([j]\)], {j, 1, k - 1}] - 
                Sum[A[\([k, j]\)]*y[\([j]\)], {j, k + 1, n}])\)/
            A[\([k, k]\)]]; 
distancia = 
        Sqrt[Max[\((x - y)\)^\ 
              2]]; \ \ 
Print["iteración n. = ", i, "    distancia = ", distancia]; 
If[
        distancia < tol, Break[]]\ \ \ 
]\)

EJERCICIO 2:
Aproxima el valor de Sen(1) y Sen(2) por el valor de su polinomio de interpolación:
a) De tipo Lagrange en los nodos  {-π\3, -π/4, -π/6, 0, π/6, π/4 , π/3 } 
b) De tipo Hermite en los mismos nodos.
c)Dibuja conjuntamente las gráficas de ambos polinomios y de la propia función seno.
d) Calcula el error relativo cometido en ambos puntos y en los dos tipos de interpolación.

Clear[x, p]
no = {-Pi/4, -Pi/6, 0, Pi/6, 
          Pi/4};
no = N[no];
va = Sin[no];
datos = Transpose[{no, va}];
p1[x_] := 
      InterpolatingPolynomial[datos, 
          t] /. {t -> x}
Print["Aprox. de sen(1) = ", p1[1], ",   valor exacto = ", 
      Sin[1. ]]
Print["Aprox. de sen(2) = ", p1[2], ",   valor exacto = ", 
      Sin[2. ]]

der = Cos[no];
datos2 = 
        Table[{no[[i]], {va[[i]], der[[i]]}}, {i, 
            5}];
p2[x_] := 
      InterpolatingPolynomial[datos2, 
          t] /. {t -> x}
Print["Aprox. de sen(1) = ", p2[1], ",   valor exacto = ", 
      Sin[1. ]]
Print["Aprox. de sen(2) = ", p2[2], ",   valor exacto = ", 
      Sin[2. ]]

Plot[{p1[x], p2[x], Sin[x]}, {x, -2 Pi, 2  Pi}, 
        PlotStyle -> {RGBColor[1, 0, 0], RGBColor[0, 0, 1], 
            RGBColor[0, 0, 0]}];
Print["p1 en rojo, p2 en azul y seno en negro"]

Print["Error relativo en 1 (primer caso) es:  e = ", 
      100*(Sin[1] - p1[1])/Sin[1], " %"]
Print["Error relativo en 2 (primer caso) es:  e = ", 
      100*(Sin[2] - p1[2])/Sin[2], " %"]
Print["Error relativo en 1 (primer caso) es:  e = ", 
      100*(Sin[1] - p2[1])/Sin[1], " %"]
Print["Error relativo en 2 (primer caso) es:  e = ", 
      100*(Sin[2] - p2[2])/Sin[2], " %"]