• Lunes 23 de Diciembre de 2024, 04:23

Autor Tema:  Metodos Numericos En C#  (Leído 27028 veces)

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Metodos Numericos En C#
« en: Viernes 23 de Mayo de 2008, 16:58 »
0
hola, ante todo presentarme pues soi nuevo

tengo un examen de metodos numericos y no me entero muy bien.
Un ejercicio es de resolucion de intregales por dos metodos, trapecio y simpson y otro ejercicio para hacer por los metodos de biseccion, secante o newton.

La cosa es que no entiendo nada, ni porque hay tanto static void e static int o doubl, para que sirve cada uno.......
 Si me podeis ayudar a encontar alguna pagina o algo que explique cada metodo o ejemlos de dichos ejercicios porque no encuentro nada por internet.

Sludos y gracias

Del Piero

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #1 en: Viernes 23 de Mayo de 2008, 18:09 »
0
:angry: Mejor manda hacer tu trabajo a otro

             C# es solo para los mejores

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Metodos Numericos En C#
« Respuesta #2 en: Viernes 23 de Mayo de 2008, 18:42 »
0
Cita de: "dlg89"
hola, ante todo presentarme pues soi nuevo

tengo un examen de metodos numericos y no me entero muy bien.
Un ejercicio es de resolucion de intregales por dos metodos, trapecio y simpson y otro ejercicio para hacer por los metodos de biseccion, secante o newton.

La cosa es que no entiendo nada, ni porque hay tanto static void e static int o doubl, para que sirve cada uno.......
 Si me podeis ayudar a encontar alguna pagina o algo que explique cada metodo o ejemlos de dichos ejercicios porque no encuentro nada por internet.

Sludos y gracias
Si tenés el código, publicalo acá a ver en que podemos ayudarte.

Un saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #3 en: Viernes 23 de Mayo de 2008, 19:43 »
0
el problema es que no tengo los codigos de dichos metodos, y los estoy buscando, en internet solo encuentro la forma matematica de cada metodo y su explicacion pero esque no encuentro como es el codigo para visual studio c#

si alguien lo encuentra o puede pasrmelo se lo agradezco.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Metodos Numericos En C#
« Respuesta #4 en: Sábado 24 de Mayo de 2008, 00:43 »
0
Cita de: "dlg89"
el problema es que no tengo los codigos de dichos metodos, y los estoy buscando, en internet solo encuentro la forma matematica de cada metodo y su explicacion pero esque no encuentro como es el codigo para visual studio c#

si alguien lo encuentra o puede pasrmelo se lo agradezco.
En ese caso no. En solocodigo no hacemos tareas. Solamente atendemos dudas puntuales.
Colocá los métodos y de a poco te vamos ayudando para que lo vallas resolviendo.

Un saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #5 en: Sábado 24 de Mayo de 2008, 11:53 »
0
hola de nuevo, gracias por todo, os pongo aki unos codigos que me han dejado. creo que el del trapecio esta bien,, el de simpson esta mal porque no me deja depurarlo. La funcion que uso es la de seno



EDITO ESTO PARA NO HACER LA PAGINA Y LAS CONVERSACIONES ENORMES

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #6 en: Sábado 24 de Mayo de 2008, 13:53 »
0
Citar
using System;

class trapecios
{
    static double Fx1(double x)
    {
        return Math.Sin(x);
    }
    static double trapecio (double A, double B, int N)
    {
        double Integral = 0;
        double h = (B - A) / N;
        for (double x = A; x < B; x += h)
        {
            double xdch = x + h;
            double Fx = Fx1(x);
            double Fxdch = Fx1(xdch);
            Integral += (Fx + Fxdch) / 2 * h;
        }
        return Integral;
    }

    static void Main()
    {
        double Menor = 0.0, Mayor = Math.PI / 2.0;
        int Intervalos = 1000;
        double Ancho = (Mayor - Menor) / Intervalos;
        double Integral = (Fx1(Menor) + Fx1(Mayor)) / 2.0;
        for (int I = 1; I < Intervalos; I++)
        {
            Integral += Fx1(Menor + I * Ancho);
        }
        Integral *= Ancho;

        Console.WriteLine(Integral);
        Console.ReadLine();
    }
}


hola de nuevo, probando en casa e hecho este progrmama para resolver la funcion seno  de x entre 0 y pi/2, pero tengo una duda y es que con el codigo que os dejo me sale el programa pero si quito lo que pongo en rojo tambien salle, y queria saber porque

daniel44

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #7 en: Sábado 24 de Mayo de 2008, 17:22 »
0
Cita de: "dlg89"
Citar
using System;

class trapecios
{
    static double Fx1(double x)
    {
        return Math.Sin(x);
    }
    static double trapecio (double A, double B, int N)
    {
        double Integral = 0;
        double h = (B - A) / N;
        for (double x = A; x < B; x += h)
        {
            double xdch = x + h;
            double Fx = Fx1(x);
            double Fxdch = Fx1(xdch);
            Integral += (Fx + Fxdch) / 2 * h;
        }
        return Integral;
    }

    static void Main()
    {
        double Menor = 0.0, Mayor = Math.PI / 2.0;
        int Intervalos = 1000;
        double Ancho = (Mayor - Menor) / Intervalos;
        double Integral = (Fx1(Menor) + Fx1(Mayor)) / 2.0;
        for (int I = 1; I < Intervalos; I++)
        {
            Integral += Fx1(Menor + I * Ancho);
        }
        Integral *= Ancho;

        Console.WriteLine(Integral);
        Console.ReadLine();
    }
}


hola de nuevo, probando en casa e hecho este progrmama para resolver la funcion seno  de x entre 0 y pi/2, pero tengo una duda y es que con el codigo que os dejo me sale el programa pero si quito lo que pongo en rojo tambien salle, y queria saber porque
Nunca invocas la funcion trapecio(la que esta en rojo), por eso no importa si la escribes o no

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #8 en: Sábado 24 de Mayo de 2008, 17:47 »
0
ok
de acuerdo daniel
muchas gracias por la info.


ahora solo me queda saber si los ejercicios que os puse, que os los pongo aqui, estan bien,
creo que el del trapecio esta bien, aunque cuando me pongo a probar con distintass funciones, como la que pongo, si la hago me da 0,75 pero si la hago con el metdo trapecio con el visula me sale 0.69 y no se porque .


Citar
///desarrollar un programa que calcule la integral definida de la funcion 1/X ENTRE 1 y 2 por el metodo del trapecio , utilizando 1000 intervalos
 
using System;

class trapecio
{
    static double F(double x)
    {
        return 1/x;
    }
    static void Main()
    {
        double Menor = 1.0, Mayor = 2.0;
        int Intervalos = 1000;
        double Ancho = (Mayor - Menor) / Intervalos;
        double Integral = (F(Menor) + F(Mayor)) / 2.0;
        for (int I = 1; I < Intervalos; I++)
            Integral += F(Menor + I * Ancho);
        Integral *= Ancho;
        Console.WriteLine(Integral);
        Console.ReadLine();
    }
}



Citar
///desarrollar un programa que calcule la integrales definida de la funcion seno entre 0 y pi/2 por el metodo de simpson , utilizando 1000 intervalos


using System;
class simpson
{
    static double F(double x)
    {
        return Math.Sin(x);
    }
    static void Main()
    {
        double Menor = 0.0, Mayor = Math.PI / 2.0; int Intervalos = 1000; double Ancho = (Mayor - Menor) / Intervalos,
          Integral = F(Menor) + 4.0 * F(Mayor - Ancho) + F(Mayor);
        for (int I = 2; I < Intervalos; I += 2)
            Integral += 4.0 * F(Menor + I * Ancho);
        Integral *= Ancho / 3.0; Console.WriteLine(Integral); Console.ReadLine();
    }
}

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #9 en: Domingo 25 de Mayo de 2008, 19:06 »
0
hola de nuevo, ya consegui arreglar el problema, ahora me viene otra duda a ver si em ayudais


tengo este codigo, pero dentro del static void Main como hago para invocar el metodo de biseccion???saluddos
Citar
using System;

class metodo
{

    static double F(double x)
    {
        return x * x - 100;
    }
    static double BISECCION(double A, double B, int N)
    {
        double FA = F(x), Fpm, pm;
        do
        {
            pm = (A + B) / 2;
            Fpm = F(pm);
            if (Fpm != 0 && FA * Fpm > 0)
            {
                A = pm;
            }
            if (Fpm != 0 && FA * Fpm < 0)
            {
                B = pm;
            }
            N--;
        } while (N > 0 && Fpm != 0);
        return pm;
    }
    static void Main()
    {
        Console.WriteLine("Dame A: ");
        double A = double.Parse(Console.ReadLine());
        Console.WriteLine("Dame B: ");
        double B = double.Parse(Console.ReadLine());
        Console.WriteLine("Dame N: ");
        int N = int.Parse(Console.ReadLine());
....................................
        }

}

daniel44

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #10 en: Domingo 25 de Mayo de 2008, 19:25 »
0
Cita de: "dlg89"
hola de nuevo, ya consegui arreglar el problema, ahora me viene otra duda a ver si em ayudais


tengo este codigo, pero dentro del static void Main como hago para invocar el metodo de biseccion???saluddos
Citar
using System;

class metodo
{

    static double F(double x)
    {
        return x * x - 100;
    }
    static double BISECCION(double A, double B, int N)
    {
        double FA = F(x), Fpm, pm;
        do
        {
            pm = (A + B) / 2;
            Fpm = F(pm);
            if (Fpm != 0 && FA * Fpm > 0)
            {
                A = pm;
            }
            if (Fpm != 0 && FA * Fpm < 0)
            {
                B = pm;
            }
            N--;
        } while (N > 0 && Fpm != 0);
        return pm;
    }
    static void Main()
    {
        Console.WriteLine("Dame A: ");
        double A = double.Parse(Console.ReadLine());
        Console.WriteLine("Dame B: ");
        double B = double.Parse(Console.ReadLine());
        Console.WriteLine("Dame N: ");
        int N = int.Parse(Console.ReadLine());
....................................
        }

}
Escribes el nombre del metodo, seguido de los parametros entre parentesis. En este caso, como regresas un valor double, necesitas una variable double en el Main para ahi almacenar el valor que regresa la funcion.
Ej

Código: Text
  1.  
  2.     static void Main()
  3.     {
  4.         Console.WriteLine(&#34;Dame A: &#34;);
  5.         double A = double.Parse(Console.ReadLine());
  6.         Console.WriteLine(&#34;Dame B: &#34;);
  7.         double B = double.Parse(Console.ReadLine());
  8.         Console.WriteLine(&#34;Dame N: &#34;);
  9.         int N = int.Parse(Console.ReadLine());
  10.         double resultado=BISECCION(A,B,N);
  11.  
  12.         }
  13.  
  14.  

Tal vez despues quieras imprimir el resultado en pantalla, solo tendrias q mostrar la variable resultado.
O si haces un metodo (void) que no regresa nada, puedes imprimirlo en el mismo metodo, sin la necesidad de usar otra variable en el main.
 :)

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #11 en: Domingo 25 de Mayo de 2008, 19:48 »
0
ok, muchas gracias daniel :D
dime si lo que e puesto esta bien, lo de resultado

ahora despuesde hacer lo que dices, lo compilo todo pero me aparece un eror que no se arreglar que dice exactamente "El nombre 'x' no existe en el contexto actual"   
y no se como arreglarlo

Código: Text
  1. using System;
  2.  
  3. class metodo
  4. {
  5.  
  6.     static double F(double x)
  7.     {
  8.         return x * x - 100;
  9.     }
  10.     static double BISECCION(double A, double B, int N)
  11.     {
  12.         double FA = F(x), Fpm, pm;
  13.         do
  14.         {
  15.             pm = (A + B) / 2;
  16.             Fpm = F(pm);
  17.             if (Fpm != 0 && FA * Fpm &#62; 0)
  18.             {
  19.                 A = pm;
  20.             }
  21.             if (Fpm != 0 && FA * Fpm &#60; 0)
  22.             {
  23.                 B = pm;
  24.             }
  25.             N--;
  26.         } while (N &#62; 0 && Fpm != 0);
  27.         return pm;
  28.     }
  29.     static void Main()
  30.     {
  31.         Console.WriteLine(&#34;Dame A: &#34;);
  32.         double A = double.Parse(Console.ReadLine());
  33.         Console.WriteLine(&#34;Dame B: &#34;);
  34.         double B = double.Parse(Console.ReadLine());
  35.         Console.WriteLine(&#34;Dame N: &#34;);
  36.         int N = int.Parse(Console.ReadLine());
  37.         double resultado = BISECCION(A, B, N);
  38.     }
  39.  
  40. }
  41.  

daniel44

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #12 en: Domingo 25 de Mayo de 2008, 21:05 »
0
Cita de: "dlg89"
ok, muchas gracias daniel :D
dime si lo que e puesto esta bien, lo de resultado

ahora despuesde hacer lo que dices, lo compilo todo pero me aparece un eror que no se arreglar que dice exactamente "El nombre 'x' no existe en el contexto actual"   
y no se como arreglarlo

Código: Text
  1. using System;
  2.  
  3. class metodo
  4. {
  5.  
  6.     static double F(double x)
  7.     {
  8.         return x * x - 100;
  9.     }
  10.     static double BISECCION(double A, double B, int N)
  11.     {
  12.         double FA = F(x), Fpm, pm;
  13.         do
  14.         {
  15.             pm = (A + B) / 2;
  16.             Fpm = F(pm);
  17.             if (Fpm != 0 && FA * Fpm &#62; 0)
  18.             {
  19.                 A = pm;
  20.             }
  21.             if (Fpm != 0 && FA * Fpm &#60; 0)
  22.             {
  23.                 B = pm;
  24.             }
  25.             N--;
  26.         } while (N &#62; 0 && Fpm != 0);
  27.         return pm;
  28.     }
  29.     static void Main()
  30.     {
  31.         Console.WriteLine(&#34;Dame A: &#34;);
  32.         double A = double.Parse(Console.ReadLine());
  33.         Console.WriteLine(&#34;Dame B: &#34;);
  34.         double B = double.Parse(Console.ReadLine());
  35.         Console.WriteLine(&#34;Dame N: &#34;);
  36.         int N = int.Parse(Console.ReadLine());
  37.         double resultado = BISECCION(A, B, N);
  38.     }
  39.  
  40. }
  41.  
Eso es por que al declarar la variable FA, le das el valor de F(x), es decir, que haga la funcion F con el parametro x.
Pero en ninguna parte del codigo definiste a 'x', entonces la funcion no puede realizarse con un parametro que no tiene valor. Debes primero definir el valor de x, para poder pasarlo como parametro.

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #13 en: Domingo 25 de Mayo de 2008, 22:53 »
0
hola de nuevo

como hago entonces para declarar la variable x, y que valor le doi

daniel44

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #14 en: Lunes 26 de Mayo de 2008, 01:27 »
0
Cita de: "dlg89"
hola de nuevo

como hago entonces para declarar la variable x, y que valor le doi
Pues.. la x la declaras solo con un
double x;
El valor depende de tu programa. Tal vez te sirva este enlace
http://es.wikipedia.org/wiki/Método_de_bisección

dlg89

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Metodos Numericos En C#
« Respuesta #15 en: Lunes 26 de Mayo de 2008, 15:01 »
0
gracias de nuevo daniel, ya consegui arreglarlo, ahora estoy buscando como se hace la drevivada de una funcion, tanto la 1º como 2º......

saludos