25 de febrero de 2010

Bisección y Newton Raptson en C Sharp

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; }

}

}

No hay comentarios:

Publicar un comentario