Dev - C++ - Ayuda para calcular la raiz de una ecuación no lineal por el método Newton

   
Vista:

Ayuda para calcular la raiz de una ecuación no lineal por el método Newton

Publicado por Andrés (1 intervención) el 15/03/2015 19:27:27
11072542_10204694422938508_959407891_n

Necesito ayuda urgente con el programa que aparece escrito en la imagen adjunta. Es sobre calcular la raiz de una ecuación no lineal por el método de Newton. Por favor!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda para calcular la raiz de una ecuación no lineal por el método Newton

Publicado por agustin (310 intervenciones) el 17/03/2015 17:28:46
yo la verdad es que no se que eso tienes que hacer y no entiendo lo de las formulas esas pero supongo que si sabes como resolverlo a mano podrás hacerlo programando. Usa la libreria math.h. Yo me pierdo ya que lo mas que vi son ecuaciones de segundo grado y creo que esto es mas avanzado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda para calcular la raiz de una ecuación no lineal por el método Newton

Publicado por Martín (65 intervenciones) el 18/03/2015 04:41:41
Hola; te paso una solución en C++ (usando el estándar del 2011). Si te piden que lo resuelvas usando el estándar de 1998, supongo que podrás ajustarlo.

Dependiendo del nivel de tu curso, quizá debas poner algún esfuerzo adicional de tu parte para entender cada línea, pero creo que puede valer la pena, espero.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <iomanip>
#include <cmath>
#include <limits>
#include <future>
 
double f(const double& x)  // valor de la función en x
{
    return (pow(x,4) - 3*(pow(x,2)) + 75*x - 10000.0);
}
 
inline
double df(const double& x)  // valor de la derivada de la función en x
{
    return (4*pow(x,3) - 6*x + 75);
}
 
int main()
{
    double x0 = 1;  // primera aproximación (puede pedirse al usuario).
    double x1;      // intersección de la tangente con el eje de las abscisas.
    double y;       // valor de la función en x0.
    double y_prima; // valor de la derivada de la función en x0 (pendiente de la tangente en x0).
    const double epsilon = std::numeric_limits<double>::epsilon() ; // diferencia entre 1 y el siguiente
                                                                    // menor double representable.
    const int iteraciones_max = 500;  // máxima cantidad de iteraciones (puede pedirse al usuario).
    bool hallada = false;      // solución aún no hallada.
 
    int i;
    for(i=0; i<iteraciones_max; ++i) {
 
        auto h  = std::async(std::launch::async, f, x0);
 
        y_prima = df(x0);
        if(fabs(y_prima) <= epsilon)  // denominador prácticamente nulo
            break;
 
        y = h.get();
 
        x1 = x0 - y/y_prima;
 
        if(fabs(x1 - x0)/fabs(x1) <= epsilon) {  // diferencia despreciable
            hallada = true;
            break;
        }
        x0 = x1;
    }
 
    if(hallada) {
        std::cout << "Raiz hallada = " << std::setprecision(16) << x1 << " (en " << i << " iteraciones).\n";
    }
    else
        std::cout << "Raiz no hallada.\n";
 
}

Martín
Profesor de C++
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Carlos

Ayuda para calcular la raiz de una ecuación no lineal por el método Newton

Publicado por Juan Carlos (8 intervenciones) el 05/04/2015 17:25:34
Hola Andres, puedo ayudarte con este u otros trabajos de programacion.
Concretamente un programa que calcule la raiz de una ecuacion no lineal
por el método de Newton, lo tendria terminado esta tarde.

Puedes escribirme a ciencia123@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar