Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear // Limpa as variáveis armazenadas na última execução do programa
- clc // Apaga texto na saída do programa
- // Criando matriz dos coeficientes de ordem n = 3(3x3)
- A = [10 1 -1;
- 2 10 8;
- 7 1 10];
- // Criando matriz das constantes
- b = [10; 20; 30];
- // Define a tolerância do programa, o erro máximo que ele aceitará antes de convergir
- tol = 1 * 10^-6;
- // Cria a matriz das variáveis, com o chute inicial do método
- x = [0; 0; 0];
- // Definindo número máximo de iterações que o programa irá fazer,forma de previnir que seu programa
- // não seja executado para sempre quando a tolerância não for alcançada
- N = 100;
- // Definindo função que resolve o sistema de equações pelo método de Jacobi
- // Essa função retorna um vetor na forma [x, deltax]
- // onde x é uma matriz 3x1 com os valores finais da varíavel x
- // E deltax é a variação(delta) que teve do último valor calculado de x com seu penultimo valor
- // Os parâmetros da função são:
- // A: Matriz dos coeficientes
- // b: Matriz das constantes
- // x: Matriz das variáveis(geralmente é o chute inicial)
- // tol: tolerância máxima
- // N: Número máximo de iterações
- function [x, deltax] = jacobi(A, b, x, tol, N)
- // Descobrindo a ordem da matriz A
- // A função size calcula o tamanho de um vetor. Nesse caso, estamos interessados em calcular o
- // tamanho do vetor A(1) = [10 1 -1], que será 3.
- n = size(A, 1)
- // Cria uma variável auxiliar para assumir os valores de x a cada iteração do método
- // Inicializamos ela com o valor do chute inicial
- xnew = x
- // Criamos uma variável para controlar o loop(while) e parar o processo
- // de iteração caso o método convirja
- convergiu = %F
- // Criamos uma variável contadora para sabermos em qual iteração estamos
- k = 1
- // O código dentro do while repetirá enquanto o número de iterações não esgotar o máximo definido(N)
- // ou enquanto o método não tenha convergido
- while k <= N & ~convergiu
- // Aplicação do método iterativo
- xnew(1) = (b(1) - A(1, 2:n) * x(2:n)) / A(1, 1)
- for i = 2: (n - 1)
- xnew(i) = (b(i) - A(i, 1:i - 1) * x(1:i - 1)
- - A(i, i + 1:n))* x(1 + 1:n)) / A(i, i)
- end
- xnew(n) = (b(n) - A(n, 1:n - 1) * x(1:n - 1)) / A(n, n)
- // A função max pega o maior valor em um vetor. Exemplo:
- // max([2, -2, 833]) = 833
- // A função abs transforma em módulo todos os números numa matriz. Exemplo:
- // abs([2, -2, 833]) = [2, 2, 833]
- // A seguinte linha irá descobrir qual o maior Delta entre a iteração atual e a iteração anterior
- // x: iteração anterior
- // xnew: iteração atual
- deltax = max(abs(x - xnew))
- // Descobrindo se a tolerância definida foi alcançada
- if deltax < tol then
- // Altera o valor da variável convergiu para que o while seja parado
- convergiu = %T
- end
- // Aumenta +1 no número da iteração
- k = k + 1
- // Atribui os últimos valores calculados das variáveis à variável x
- x = xnew
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement