Formação Matemática
Seja A uma matriz N de N de números reais, vetor ba de N números reais e xa vetor N números reais desconhecidos. Uma equação da matriz é Ax = b.
O método de Jacobi é o seguinte: decomponha A = D + R, onde D é a matriz de diagonais e R são as entradas restantes.
se você fizer uma solução inicial de adivinhação x0, uma solução aprimorada será x1 = inversa (D) * (b - Rx), em que todas as multiplicações são multiplicação de vetores matriciais e inversa (D) é inversa da matriz.
Especificação do Problema
- Entrada : Seu programa completo deve aceitar como entrada os seguintes dados: a matriz A, o vetor b, um palpite inicial x0 e um número de 'erro' e.
- Saída : O programa deve gerar o número mínimo de iterações, de modo que a solução mais recente seja diferente da solução verdadeira, no máximo e. Isso significa que cada componente dos vetores em magnitude absoluta difere no máximo e. Você deve usar o método de Jacobi para iterações.
Como os dados são inseridos é sua escolha ; pode ser sua própria sintaxe em uma linha de comando; você pode receber informações de um arquivo, o que quiser.
Como os dados são gerados é sua escolha ; pode ser gravado em um arquivo, exibido na linha de comando, gravado como arte ASCII, qualquer coisa, desde que seja legível por um humano.
Detalhes adicionais
Você não recebe a solução verdadeira: como você calcula a solução verdadeira depende inteiramente de você. Você pode resolvê-lo pela regra de Cramer, por exemplo, ou computando um inverso diretamente. O que importa é que você tenha uma solução verdadeira para poder comparar com as iterações.
Precisão é um problema; as 'soluções exatas' de algumas pessoas para comparação podem ser diferentes. Para os fins deste código de golfe, a solução exata deve ser verdadeira com 10 casas decimais.
Para ser absolutamente claro, se mesmo um componente da sua solução de iteração atual exceder o componente correspondente na solução verdadeira por e, será necessário continuar iterando.
O limite superior de N varia de acordo com o hardware que você está usando e quanto tempo está disposto a gastar executando o programa. Para os fins deste código de golfe, assuma o máximo de N = 50.
Condições prévias
Quando seu programa é chamado, você pode assumir que o seguinte é válido o tempo todo:
- N> 1 e N <51, ou seja, você nunca receberá uma equação escalar, sempre uma equação matricial.
- Todas as entradas estão no campo de números reais e nunca serão complexas.
- A matriz A é sempre tal que o método converge para a solução verdadeira, de modo que você sempre pode encontrar várias iterações para minimizar o erro (conforme definido acima) abaixo ou igual a e.
- A nunca é a matriz zero ou a matriz de identidade, ou seja, existe uma solução.
Casos de teste
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
A verdadeira solução é (0,586, 1,138). A primeira iteração fornece x1 = (5/9, 1), diferindo em mais de 0,04 da solução verdadeira, em pelo menos um componente. Fazendo outra iteração, encontramos x2 = (0,555, 1,148), que difere em menos de 0,04 de (0,586, 1,138). Assim, a saída é
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
Nesse caso, a verdadeira solução é (2.2, -0.8) e o palpite inicial x0 já possui um erro menor que e = 1.0, portanto, produzimos 0. Ou seja, sempre que você não precisar fazer uma iteração, basta gerar
0
Avaliação da submissão
Este é o código de golfe, com todas as brechas padrão aqui proibidas. O menor programa completo correto (ou função), ou seja, vence o menor número de bytes. É desencorajado o uso de coisas como o Mathematica, que agrupam muitas das etapas necessárias em uma função, mas usam o idioma desejado.