ESCUELA DE INGENIERÍA
DEPARTAMENTO DE CIENCIA DE LA COMPUTACIÓN
IIC 1102 INTRODUCCIÓN A LA PROGRAMACIÓN
Profesor: Rodrigo Sandoval U.
Los métodos numéricos permiten resolver problemas obteniendo aproximaciones para las
soluciones mediante algoritmos iterativos.
Estos algoritmos reciben el nombre de algoritmos numéricos.
Las aproximaciones resultan de mucha utilidad cuando las soluciones analíticas o algebraicas resultan
muy difíciles o hasta imposibles de obtener empleando métodos tradicionales. Los computadores ayudan
en gran manera, al facilitar la programación de los algoritmos basados en iteración.
En esta sección se presentan ejemplos de estos métodos.
/***************************************************************************
* Ejemplo: Calculo de la constante e mediante una serie infinita
***************************************************************************/
using System;
/***************************************************************************
* Función que calcula el factorial de su argumento. Tanto el argumento de
* entrada (x) como el valor de retorno son de tipo double. No se hacen
* controles sobre la validez del argumento, cuyo valor debe ser > 0.
* Cualquier valor de entrada 0 o negativo arrojara un resultado de 1.
* Formula del factorial: x! = 1 * 2 * 3 * ... * (x-1) * x
***************************************************************************/
public class CCalculateE
{
public double iter;
double e = 1,
eanterior;
do{
eanterior = e;
e += 1/mFactorial(iter);
iter++;
}while( e != eanterior);
return e;
}
}
/***************************************************************************
* Programa que calcula el valor de la constante e, base de los logaritmos
* neperianos. Se emplea una aproximación de la siguiente serie infinita:
* e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ...
* El cálculo se detiene cuando el valor acumulado de e, no se logra
* diferenciar (por la precisión del computador), del valor calculado
* en la iteración anterior.
***************************************************************************/
public class CMain
{
public static void Main()
{
CCalculateE ce = new CCalculateE();
Ejemplo de ejecución:
Valor de e:
2.718281828459045534884808148490265011787000000000
Se emplearon 19 iteraciones
/***************************************************************************
* Ejemplo: Calculo de e**x (e elevado a la x), empleando serie infinita *
***************************************************************************/
using System;
return(fact);
}
pot = x;
return(pot);
}
// Miembro público ya que se llama desde afuera de la clase para calcular e**x
public double mGetEX(double power)
{
exacto = Math.Exp(power);
do {
res += mPotencia(power,iter)/mFactorial(iter);
iter++;
} while((exacto - res) >= precision);
return res;
}
}
Ejemplo de ejecución:
Ingrese el valor de x: 5
Ingrese la precision para el calculo de e(x): 0.01
Ingrese el valor de x: 5
Ingrese la precision para el calculo de e(x): 0.000001
using System;
bas = (x-1.0)/(x+1.0);
basem = bas;
res = bas;
rep = 3.0;
do
{ resa = res;
basem = basem * bas * bas;
res = res + (1/rep)*basem;
rep += 2.0;
} while (res != resa);
return(2*res);
}
return fact;
}
do
{
resa = res;
basem = basem * bas;
res += ( basem / mFactorial(rep) );
rep++;
} while (res != resa);
return(1+res);
}
}
Ejemplo de ejecución:
Introducir valores: 2 3
valores de a: 2.00000 y x: 3.00000
resultado 8.00000
La fórmula básica empleada en el método de Newton para generar la siguiente aproximación para la
solución es:
El algoritmo que aquí se presenta hace también una aproximación numérica para la derivada f ' (x),
obteniendo entonces la siguiente ecuación:
1.4.1 Implementación
La función a la que se quiere encontrar el cero se define en el programa mediante la siguiente definición:
public double f(double x) { return Math.Log(x) + 3*x - 10.8074; }
El resto de la implementación es bastante sencilla, y muy similar a otros ejemplos mostrados
anteriormente.
using System;
xi1 = x1;
do{
xi = xi1;
di = 0.0001 * xi;
xi1 = xi - di * (f(xi) / (f(xi+di)-f(xi)));
iter++;
} while(Math.Abs(xi1-xi) >= precision);
return xi1;
}
}
/***************************************************************************
* Programa que calcula x tal que f(x) = 0, empleando el método de Newton.
* El proceso continúa mientras el valor calculado mantenga una diferencia
* con el valor obtenido en la iteración anterior que sea mayor que una
* precisión dada por el usuario.
***************************************************************************/
{
public static void Main()
{
double x,pres;
Ejemplo de ejecución:
x = 3.213360870175253400000000000000000000000000000000
f(x) = 0.000000000000000000
Se emplearon 4 iteraciones.