Antecedentes matemáticos
Sea A una matriz N de N de números reales, un vector ba de N números reales y un vector N de números reales desconocidos. Una ecuación matricial es Ax = b.
El método de Jacobi es el siguiente: descomponer A = D + R, donde D es la matriz de diagonales y R son las entradas restantes.
Si realiza una solución inicial de conjetura x0, una solución mejorada es x1 = inversa (D) * (b - Rx) donde todas las multiplicaciones son multiplicación de matriz-vector e inversa (D) es la matriz inversa.
Especificación del problema
- Entrada : Su programa completo debe aceptar como entrada los siguientes datos: la matriz A, el vector b, una suposición inicial x0 y un número de 'error' e.
- Salida : El programa debe generar la cantidad mínima de iteraciones de manera que la última solución difiera de la solución verdadera, a lo sumo e. Esto significa que cada componente de los vectores en magnitud absoluta difiere como máximo en e. Debe usar el método de Jacobi para las iteraciones.
Cómo se ingresan los datos es su elección ; podría ser su propia sintaxis en una línea de comando, podría tomar la entrada de un archivo, lo que elija.
Cómo se emiten los datos es su elección ; puede escribirse en un archivo, mostrarse en la línea de comando, escribirse como arte ASCII, cualquier cosa, siempre que sea legible por un humano.
Más detalles
No se le da la solución verdadera: la forma de calcular la solución verdadera depende completamente de usted. Puede resolverlo mediante la regla de Cramer, por ejemplo, o calculando un inverso directamente. Lo importante es que tenga una verdadera solución para poder comparar con las iteraciones.
La precisión es un problema; Las 'soluciones exactas' de algunas personas para la comparación pueden diferir. Para los propósitos de este código de golf, la solución exacta debe ser verdadera a 10 decimales.
Para ser absolutamente claro, si incluso un componente de su solución de iteración actual excede su componente correspondiente en la solución verdadera por e, entonces debe seguir iterando.
El límite superior a N varía según el hardware que esté utilizando y cuánto tiempo esté dispuesto a pasar ejecutando el programa. Para los propósitos de este código de golf, suponga un máximo de N = 50.
Condiciones previas
Cuando se llama a su programa, puede asumir que lo siguiente se cumple en todo momento:
- N> 1 y N <51, es decir, nunca se le dará una ecuación escalar, siempre una ecuación matricial.
- Todas las entradas están sobre el campo de números reales, y nunca serán complejas.
- La matriz A siempre es tal que el método converge a la solución verdadera, de modo que siempre puede encontrar una serie de iteraciones para minimizar el error (como se definió anteriormente) a continuación o igual a e.
- A nunca es la matriz cero o la matriz de identidad, es decir, hay una solución.
Casos de prueba
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
La verdadera solución es (0.586, 1.138). La primera iteración da x1 = (5/9, 1), que difiere en más de 0.04 de la solución verdadera, en al menos un componente. Tomando otra iteración encontramos, x2 = (0.555, 1.148) que difiere en menos de 0.04 de (0.586, 1.138). Por lo tanto, la salida es
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
En este caso, la verdadera solución es (2.2, -0.8) y la suposición inicial x0 ya tiene un error menor que e = 1.0, por lo tanto, arrojamos 0. Es decir, cuando no necesita hacer una iteración, simplemente genera
0
Evaluación de envío
Este es el código de golf, con todas las lagunas estándar por la presente no permitidas. El programa completo correcto más corto (o función), es decir, gana el menor número de bytes. Se desaconseja usar cosas como Mathematica que envuelven muchos de los pasos necesarios en una función, pero use el lenguaje que desee.