Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Métodos Numéricos: Sustitución Directa

Métodos Numéricos: Sustitución Directa

Por jc mouse martes, mayo 10, 2016

El Método de Sustitución Directa básicamente consiste en asumir un valor, reemplazar el mismo en la función despejada y emplear el resultado como nuevo valor de prueba. Repitiendo este procedimiento hasta que los valores asumido y calculado sean iguales en un determinado número de dígitos (en una precisión preestablecida).

No obstante se debe aclarar que  el método de sustitución directa no siempre encuentra la solución (no siempre converge). En ocasiones puede alejarse de la misma u oscilar entre dos o más valores.

El algoritmo es el siguiente

Direct Replacement

En el algoritmo, el proceso se lleva a cabo en un ciclo que termina cuando se alcanza la precisión o alternativamente la exactitud: |x1-y1| < err.

  • La precisión es el número de dígitos que son correctos en el valor de la incógnita (en el resultado calculado) y se determina comparando los valores de la incógnita de dos iteraciones consecutivas.
  • La exactitud es el número de dígitos que son correctos cuando se calcula el valor de la ecuación. La forma más sencilla de determinar la exactitud es igualar la ecuación a 0, entonces la exactitud es simplemente el número de ceros después del punto. Para determinar la exactitud en el algoritmo se compara el valor de la función igualada a cero, con el error predeterminado.

Como ya dijimos más arriba, este método a veces no encuentra la solución lo que nos llevaría a un ciclo infinito, para evitar esto se implementa un numero máximo de iteraciones tras los cuales el método retornaría «-1» para romper el ciclo.

Implementando el algoritmo en código java, tenemos:

/**
 * @see https://www.jc-mouse.net/
 * @author jc mouse
 */
public class SustitucionDirecta {
    
    /**
     * @param x1 Valor incial Ej. 3
     * @param err Error permitdo Ej. 1e-10
     * @param li Limite de iterraciones Ej. 100
     * @return double 
     */
    public double calcular(double x1, double err, double li){
        double y1;
        double c=1;
        while (true){
            y1 = g(x1);
            if (Math.abs(x1-y1)<err) 
                return y1;
            if (Math.abs(x1/y1-1)<err) 
                return y1;
            if (c==li)
                return -1;                            
            c++;
            x1=y1;
        }        
    }
    
    /**
     * Funcion a resolver
     * @param x incognita
     * @return double
     */
    private double g(double x){
        return Math.pow(52+3*Math.sqrt(x)-8*Math.pow(x,0.8),0.36);        
    }
    
}

En la clase, al declarar el método g(x), se escribe la ecuación que se busca resolver que para nuestro ejemplo es:

metodos numericos

Y para resolver esa ecuación haríamos lo siguiente:

SustitucionDirecta sustitucionDirecta = new SustitucionDirecta();
double valor = sustitucionDirecta.calcular(3, 1e-10, 100);        
System.out.println(valor);

y por consola tenemos:

metodos java

enjoy!!!

Tags

Artículos similares

Firebird iSQL – introducción

iSQL: Es una herramienta de linea de comandos que acompaña a Firebird, se encuentra en la carpeta BIN, sirve para realiz[...]

Personalizar JTable: Problema resuelto

En este post se da respuesta a una pregunta realizada por facebook. El problema dice así: Se quiere personalizar un JTab[...]

Utiliza 2 bases de datos diferentes en una aplicación parte I

Cuando se desarrolla una aplicación, puede ser un requisito que este tenga soporte para varias tipos de base de datos, s[...]

Gráfico de columnas con iReport

El gráfico de columnas es uno  tipo de gráfico que nos permite representar fácilmente la cantidad de veces que ocurre un[...]

CUF: Código Único en Kotlin

En este post implementamos en lenguaje Kotlin (lenguaje de programación de tipado estático que corre sobre la máquina vi[...]

Rompecabezas [Código Fuente]

Hace tiempo me pidieron el código fuente de un juego de Puzzle de Neon Genesis Evangelión, este juego es completo, tiene[...]