using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AnalisisNumerico{
///
<summary>
/// Programa para encontrar las raices de una función.
///
</summary>
///
<Autor>Alexander Vásquez</Autor>
class
Program {
///
<summary>
/// Metodo principal, encargado de Invocarel metodo a ejecutar de acuerdo a los parametros recibidos.
///
</summary>
///
<param name="args">Nombre del metodo a ejecutar: BISECCION, NEWTON RAPTSON</param>
static
void Main(string[] args){
if(args[0].ToUpper().Equals("BISECCION")){
biseccion();
}
else
if (args[0].ToUpper().Equals("NEWTON") && args[1].ToUpper().Equals("RAPTSON")) {
newtonRaptson();
}
else {
Console.WriteLine("Método no se ha implentado");
}
}
///
<summary>
/// Medoto Newton Raptson
///
</summary>
private
static
void newtonRaptson(){
int iterMax = 0, iter = 0;
Double x = 0, xs = 0, fx = 0, f1x = 0, error=0;
string dato;
Console.WriteLine("Ingrese valor de X:");
dato = Console.ReadLine();
x = Convert.ToDouble(dato);
Console.WriteLine("Ingrese valor del Error:");
dato = Console.ReadLine();
error = Convert.ToDouble(dato);
Console.WriteLine("Ingrese numero maximo de iteraciones:");
dato = Console.ReadLine();
iterMax = Convert.ToInt32(dato);
fx = f(x);
while (Math.Abs(fx) > error && iter < iterMax) {
f1x = f1(x);
xs = x - fx / f1(x);
mostarDatos(iter, x, xs, fx, f1x);
x = xs;
fx = f(x);
iter++;
}
mostarDatos(iter, x, xs, fx, f1x);
}
///
<summary>
/// Mostrar los datos generados por el metodo newton raptson
///
</summary>
///
<param name="iter">Iteracion</param>
///
<param name="x">valor en el punto x</param>
///
<param name="xs">valor siguiente de x</param>
///
<param name="fx">valor de y en el punto x</param>
///
<param name="f1x">valor de dy en el punto x</param>
private
static
void mostarDatos(int iter, double x, double xs, double fx, double f1x) {
Console.Write("Iter: ");
Console.Write(iter.ToString());
Console.Write(" Xi=");
Console.Write(x.ToString());
Console.Write(" F(x)=");
Console.Write(fx.ToString());
Console.Write(" F'(x)=");
Console.Write(f1x.ToString());
Console.Write(" X(i+1)=");
Console.Write(xs.ToString());
Console.Write("\n");
}
///
<summary>
/// Metodo de Biseccion
///
</summary>
private
static
void biseccion(){
int iter = 0;
Double a = 0, b = 0, c = 0, fA = 0, fB = 0, fC = 0, error=0;
string dato;
Console.WriteLine("Ingrese valor de A:");
dato = Console.ReadLine();
a = Convert.ToDouble(dato);
Console.WriteLine("Ingrese valor de B:");
dato = Console.ReadLine();
b = Convert.ToDouble(dato);
Console.WriteLine("Ingrese valor del Error:");
dato = Console.ReadLine();
error = Convert.ToDouble(dato);
while ( Math.Abs(a-b)> error){
fA = f(a);
fB = f(b);
c = (Double)((a + b) / 2);
fC = f(c);
mostrar(a,fA,b,fB,c,fC,iter);
if (fA * fC < 0) {
b = c;
}
else {
a = c;
}
iter++;
}
mostrar(a, fA, b, fB, c, fC, iter);
}
///
<summary>
/// Metodo para mostrar los datos generados en el metod de biseccion
///
</summary>
///
<param name="a">Punto A</param>
///
<param name="fA">Valor de Y en el punto A</param>
///
<param name="b">Punto B</param>
///
<param name="fB">Valor de Y en el punto B</param>
///
<param name="c">Punto C: es el punto medio entre a y b</param>
///
<param name="fC">Valor de Y en el pnto B</param>
///
<param name="iter">Iteracion</param>
private
static
void mostrar(double a, double fA, double b, double fB, double c, double fC, int iter) {
Console.Write("Iter: ");
Console.Write( iter.ToString());
Console.Write(" A=");
Console.Write(a.ToString());
Console.Write(" F(A)=");
Console.Write(fA.ToString());
Console.Write(" B=");
Console.Write(b.ToString());
Console.Write(" F(B)=");
Console.Write(fB.ToString());
Console.Write(" C=");
Console.Write(c.ToString());
Console.Write(" F(C)=");
Console.Write( fC.ToString());
Console.Write("\n");
}
///
<summary>
/// Metodo que devuel ve el valor de y en el punto x
///
</summary>
///
<param name="x">Valor del punto x</param>
///
<returns>Valor de y</returns>
private
static
double f(double x) { return
Math.Pow(x, 2) - 4; }
///
<summary>
/// Metodo que devuelve la derivada de f(x)
///
</summary>
///
<param name="x">Valor de x</param>
///
<returns>Valor de la derivada en el punto x</returns>
private
static
double f1(double x) { return 2 * x; }
}
}