segunda-feira, 30 de agosto de 2021

Método de Gauss-Seidel no SCILAB

 O método de Gauss-Seidel é um método iterativo para resolução de sistemas de equações lineares. Embora seja de fácil implementação, a condição de convergência se limita a matrizes diagonais dominantes.

Aqui descrevo o código feito no Scinotes do Scilab 6.1.1. Optei por figuras, em vez de simplesmente colar o código aqui porque esse blog é dedicado a aprendizagem.

A primeira figura é basicamente o cabeçalho com as variáveis que serão utilizadas pela função criada pelo script. Você pode clicar sobre a imagem para ler melhor, se for preciso.

A função GS criada deve receber a matriz do sistema de equações e o tamanho do erro admitido, designados pelas letras m e eps, respectivamente.
Logo em seguida, l recebe o número de linhas da matriz e c, o número de colunas. Criamos duas matrizes auxiliares, a e b, vazias, inicialmente.

Na linha 8, iniciamos um laço que percorre as linhas seguido de outro laço que percorre as colunas da matriz (chamamos isso de laços aninhados). A função desses laços é simplesmente separar a matriz m em duas matrizes: a dos coeficientes e a dos termos independentes. Ainda temos as variáveis soma e converge, com valores 0 e 1, respectivamente. A variável soma será utilizada para acumular os valores dos coeficientes multiplicados pela respectiva incógnita, que é usada no isolamento da incógnita de interesse. A variável converge é para o caso de a matriz não ser diagonal dominante e a função emitir um alerta ao usuário.
Em if (++1) == c, temos uma verificação sobre a dimensão da matriz. Isto é, precisamos saber se o número de linhas mais 1 é igual ao número de colunas. Caso afirmativo, entramos no laço sobre as linhas aninhado com um laço sobre as colunas. Aqui temos o cuidado de percorrer c-1 colunas, pois a incógnita que está sendo isolada está em uma coluna que não deve ser contada. Para que a função ignore a coluna da diagonal, temos uma verificação: se i == j, a soma não sobre nenhuma alteração. Caso contrário, incrementamos seu valor com o valor absoluto da posição (i,j) da matriz dos coeficientes.
Logo depois do fechamento do laço condicional e do laço das colunas, temos uma verificação sobre a matriz ser ou não diagonal dominante. Se não for, o valor de converge é mudado para 0. A soma é novamente zerada e os laços condicional e das linhas são fechados.
Lembra do condicional sobre se a matriz tinha o número de linhas mais 1 igual ao número de colunas? Caso isso não seja verdade, a função muda o valor de converge para 0 e emite um alerta ao usuário. Depois do fechamento desse laço condicional, se o valor de converge não tiver mudado nas condições anteriores, a função inicia o bloco que vai efetivamente aplicar o método de Gauss-Seidel.
Primeiro criamos uma matriz coluna de zeros com o mesmo número de linhas da matriz m. A matriz auxiliar y recebe a matriz x e a mesma é apresentada na tela, pois será nosso vetor inicial. Temos dois laços aninhados pela frente, um percorrendo as linhas e outro percorrendo as colunas da matriz dos coeficientes. A variável soma é redefinida como zero e um laço condicional verifica se estamos num elemento da diagonal. Se for verdade, não faz nada. 
Se não for um elemento da diagonal, a soma é subtraído do valor da respectiva componente do vetor multiplicada pelo seu coeficiente no sistema original. Na linha 48, fora do laço das colunas, o valor de x(i,1) é atualizado - correspondendo ao seu isolamento na equação original. O vetor x atualizado é mostrado na tela pelo comando disp(x). Definimos, então, a variável cont, a matriz SX e a variável smax, que serão usadas adiante.
Entramos em um laço para calcular o erro relativo que percorre as linhas de x e de y, ou seja, o valor atual do vetor e seu valor antigo.
A variável smax recebe o maior valor entre as diferenças dos dois vetores. Daí, temos um laço que será repetido enquanto o erro for maior que o valor predefinido de eps. Na linha 59, fica claro que a variável cont será usada para saber quantas iterações foram executadas. Na linha 60, o vetor y recebe o x mais recente. Os próximos laços repetirão o processo de isolamento da componente da diagonal para cada linha. O bloco em branco no laço condicional indica que o elemento da diagonal não é considerado para o cálculo da soma. 
Na última figura, as linhas 68 e 69 encerram os laços condicional (mais interno) e das colunas. O vetor a componente i do vetor x é atualizada na linha 70 e o laço das linhas é fechado. O vetor x é mostrado novamente na tela, e outro laço calcula o erro relativo para que seja comparado com o valor de eps no laço while. O smax recebe o erro máximo e o laço while é fechado. O end na linha 80 fecha o laço condicional aberto na linha 35.
O fechamento da função é feito pela expressão endfunction. Precisamos salvar e executar o script para usá-lo a partir do console do Scilab.
Primeiro, escrevemos a matriz M, conforme a sintaxe da figura. Temos uma matriz que inclui a matriz dos coeficientes e os termos independentes.
Na linha nova do prompt, digitamos a chamada da função criada. Suas entradas são a matriz e o valor de eps. 
Com esses parâmetros, a função aplicará o método de Gauss-Seidel e retornará a resposta correta depois de 8 iterações. Como usamos uma matriz diagonal dominante, temos a convergência garantida. Veja o resultado na última figura, mostrando o vetor inicial e os vetores intermediários, obtidos em cada iteração.
Se ficou com alguma pergunta a fazer, basta comentar aí, ou me procurar pelo Facebook ou Instagram: @marcospinnto.


quinta-feira, 19 de agosto de 2021

Gravar Áudio do PC usando o Audacity no Windows 10

 Você quer fazer com que o software Audacity capture som direto do seu PC? Então, vou direto ao ponto. Primero, saiba que o procedimento foi realizado no Windows 10, mas em outras plataformas o procedimento deve ser, pelo menos, parecido.

1. Clique com o botão auxiliar do mouse (direto par destros) sobre a figura Alto-Falantes e  Escolha a opção Abrir Configurações de som.


2. Desça até a seção Entrada e troque a opção atual de entrada pela Mixagem estéreo. Se ela não estiver presente, vá para o passo 3. Se estiver, pule para o passo 5.

3.  Caso a opção Mixagem estéreo não esteja presente, clique no link para Gerenciar dispositivos de som. Em seguida, verifique que a Mixagem estéreo está desabilitada.

4.  Clique sobre o item Mixagem estéreo e, depois, sobre o botão Habilitar.

5. No Audacity, mude a entrada para Mixagem estéreo.


Eu segui exatamente esses passos e consegui gravar os sons diretos do meu notebook. Espero que você também consiga.
Abraço e até breve!


Como Aprender Qualquer Coisa em 36 passos

  Olá! É sempre um prestígio a sua visita. Para tirar o máximo de proveito do nosso conteúdo, tenha  papel e caneta em mãos . Faça anotações...