Programación en Java: Matrices, Números Complejos y Serie de Fibonacci con Ejemplos de Código

Informática y Telecomunicaciones5,45 KB

Matrices bidimensionales en Java: eliminación de filas y columnas

Una matriz bidimensional es una estructura de datos organizada en filas y columnas, equivalente a una matriz matemática. A continuación se muestran métodos para eliminar una fila o una columna de una matriz de tipo double.

a) Eliminar la n-ésima fila

El siguiente método devuelve una nueva matriz sin la fila indicada por el índice n:

public static double[][] quitarFila(double[][] m, int n) {
    if (!esMatriz(m)) {
        return null;
    }
    if (n >= m.length || n < 0) {
        return null;
    }
    double[][] res = new double[m.length - 1][m[0].length];
    for (int i = 0; i < res.length; i++) {
        for (int j = 0; j < res[i].length; j++) {
            if (i < n) {
                res[i][j] = m[i][j];
            } else if (i >= n && i + 1 < m.length) {
                res[i][j] = m[i + 1][j];
            }
        }
    }
    return res;
}

b) Eliminar una columna en lugar de una fila

Para eliminar una columna se define el método quitarCol, cuya firma es la siguiente:

public static double[][] quitarCol(double[][] m, int n)

Obtención de la submatriz menor (getMC)

El método getMC combina ambas operaciones para obtener el menor complementario de un elemento de la matriz, eliminando la fila i y la columna j:

public static double[][] getMC(double[][] m, int i, int j) {
    double[][] res = quitarFila(m, i);
    if (res == null) {
        return null;
    }
    res = quitarCol(res, j);
    if (res == null) {
        return null;
    }
    return res;
}

Números complejos: construcción a partir de coordenadas polares y cartesianas

Un número complejo puede representarse en forma polar, mediante su módulo y su argumento, o en forma cartesiana, mediante su parte real e imaginaria. La clase Complejos permite trabajar con ambas representaciones.

a) Definición de la clase Complejos

public class Complejos {
    private double modulo;
    private double argumento;

    // Constructor en forma polar
    public Complejos(double mod, double arg) {
        modulo = mod;
        argumento = arg;
    }

    // Constructor en forma cartesiana
    public Complejos(char cartesianas, double pReal, double pIm) {
        actualizaPolares(pReal, pIm);
    }

    private void actualizaPolares(double pRe, double pIm) {
        modulo = Math.sqrt(pRe * pRe + pIm * pIm);
        argumento = Math.atan(pIm / pRe);
    }

    public double getModulo() { return modulo; }
    public double getArgumento() { return argumento; }

    public void setModulo(double mod) { modulo = mod; }
    public void setArgumento(double arg) { argumento = arg; }

    // Multiplicación: se multiplican los módulos y se suman los argumentos
    public Complejos multiplicar(Complejos c) {
        return new Complejos(modulo * c.getModulo(), argumento + c.getArgumento());
    }

    // División: se dividen los módulos y se restan los argumentos
    public Complejos dividir(Complejos c) {
        return new Complejos(modulo / c.getModulo(), argumento - c.getArgumento());
    }

    // Potencia: el módulo se eleva a n y el argumento se multiplica por n
    public Complejos potencia(double n) {
        return new Complejos(Math.pow(modulo, n), n * argumento);
    }
}

b) Método main: multiplicación de dos complejos en forma polar

El siguiente programa solicita por teclado el módulo y el argumento de dos números complejos y muestra el resultado de su multiplicación:

public static void main(String[] args) {
    System.out.print("Introduzca módulo del complejo 1: ");
    double M1 = Teclado.readDouble();
    System.out.print("Introduzca argumento del complejo 1: ");
    double A1 = Teclado.readDouble();
    System.out.print("Introduzca módulo del complejo 2: ");
    double M2 = Teclado.readDouble();
    System.out.print("Introduzca argumento del complejo 2: ");
    double A2 = Teclado.readDouble();

    Complejos c1 = new Complejos(M1, A1);
    Complejos c2 = new Complejos(M2, A2);
    Complejos multiplicacion = c1.multiplicar(c2);

    System.out.println("Módulo de multiplicación: " + multiplicacion.getModulo());
    System.out.println("Argumento de multiplicación: " + multiplicacion.getArgumento());
}

Serie de Fibonacci: implementación iterativa

La serie de Fibonacci es una sucesión en la que cada término es la suma de los dos anteriores. El siguiente método calcula el n-ésimo término de forma iterativa, lo que evita el coste exponencial de la versión recursiva:

public static int fibonacciI(int n) {
    if (n < 0) return -1;
    if (n == 0 || n == 1) return 1;
    int f_1 = 1, f_2 = 1, f = 0;
    for (int i = 2; i <= n; i++) {
        f = f_1 + f_2;
        f_2 = f_1;
        f_1 = f;
    }
    return f;
}

Conclusiones

Los ejemplos presentados muestran cómo aplicar en Java conceptos fundamentales de álgebra matricial, números complejos y algoritmos iterativos, habituales en asignaturas de Informática y Telecomunicaciones.

Descargar

PDF Word HTML