Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Exemplos_Algoritmos_Scilab-Sistemas Lineares.docx Algoritmos para aplicação no Scilab 5.5.2 (2016) (Sistemas lineares utilizando métodos diretos e iterativos) 1- Aplicação de algoritmos simples. Algoritmo 1: Soma de dois números //Programador: //Data: //O programa calculará a soma de dois números. clear; clc; mprintf("Entre com dois numeros"); Num1=input("Primeiro valor: "); Num2=input("Segundo valor: "); som = Num1 + Num2; mprintf("O resultado da soma é %.3f ", som); Algoritmo 2: Média das notas do semestre //Programador: //Data: //O programa calculará a média das notas do semestre clear; clc; mprintf("\nCálculo da média das notas."); N1 = input ("Nota 1: "); N2 = input ("Nota 2: "); N3 = input ("Nota 3: "); Media = median((N1+N2+N3)/3); mprintf("\n O Valor da média é %.1f",Media); if (Media>=7.0) then mprintf("\n Aprovado."); end if (Media>=4.0 & Media<7.0) then mprintf("\n Exame."); end if(Media<4.0) then mprintf("\n Reprovado."); end mprintf("\nFim do programa!"); Algoritmo 3: Conversão de Celsius em Kelvin. //Programador: //Data: //Cálculo de conversão de Celsius em Kelvin. clear; clc; Celsius=input("Digite a Temperatura: "); Kelvin=Celsius+273.15; mprintf("\nTemperatura em Kelvin= %.3f", Kelvin); mprintf("\nTemperatura em Celsius= %.3f", Celsius); Algoritmo 4: Hipotenusa de um triângulo retângulo. //Programador: //Data: //O programa calculará a hipotenusa de um triângulo retângulo por meio dos catetos clear; clc; a=input("Cateto oposto: "); b=input("Cateto adjacente: "); c=sqrt((a^2)+(b^2)); mprintf("\n Valor da hiponusa é %f",c); mprintf("\nFim do programa!"); 2- Aplicação de algoritmos em resolução de sistemas lineares 2.1- Métodos Diretos: Algoritmo 5: Método de Gauss //A é a matriz dos coeficientes das variáveis //b é o vetor de termos independentes clear; clc; function elimGauss(A, b) //Eliminação de Gauss ou Método de Gauss [n c] = size (A); r = zeros (n,1); for k = 1 : n-1 for i = (k+1): n; m = A(i,k) / A(k,k); A(i,k) = 0.0; for j = (k+1) : n A(i,j) = A(i,j) - m * A(k,j); end b (i) = b (i) - m * b (k); end end disp(A) //Resolução do sistema r(n)=b(n)/A(n,n); for k=(n-1):-1:1 s = 0; for j=(k+1):n s=s+A(k,j)*r(j); end r(k)=(b(k)-s)/A(k,k); end mprintf ("\n Matriz de Gauss = \n"); disp (A) mprintf ("\n Vetor independete de Gauss = \n"); disp (b) mprintf ("\n Solução do sistema = \n"); disp (r) endfunction Algoritmo 6: Método de Gauss com pivotamento parcial //Método de Gauss com pivotamento parcial clear; clc; function x=linearGaussianPivot(A, b) n = length(b); A = [A,b]; //Eliminação de Gauss for k=1:n-1 //A(k,k) é o pivô //Escolhendo o maior número em módulo, ou absoluto (abs) Amax = abs(A(k,k)); imax = k; for i=k+1:n if abs(A(i,k))>Amax Amax = abs(A(i,k)); imax = i; end end if (imax~=k) //Encontrando o maior número em módulo, troca-se as linhas u = A(k,:); //copiar a linha enésima A(k,:) = A(imax,:); //substituí-lo com a linha IMAX A(imax,:) = u; //substituir a linha IMAX com a linha de ordem k originais end //Finalização do pivotamento for i=k+1:n //eliminando ou zerando os elementos em que i>k for j=n+1:-1:k A(i,j) = A(i,j)-A(k,j)*A(i,k)/A(k,k); end end //i loop end //k loop //Substituição //Eliminação de Gauss ou Método de Gauss [n c] = size (A); r = zeros (n,1); for k = 1 : n-1 for i = (k+1): n; m = A(i,k) / A(k,k); A(i,k) = 0.0; for j = (k+1) : n A(i,j) = A(i,j) - m * A(k,j); end b (i) = b (i) - m * b (k); end end //Resolução do sistema r(n)=b(n)/A(n,n); for k=(n-1):-1:1 s = 0; for j=(k+1):n s=s+A(k,j)*r(j); end r(k)=(b(k)-s)/A(k,k); end mprintf ("\n Matriz de Gauss = \n"); disp (A) //Substituição x = zeros(n,1); x(n) = A(n,n+1)/A(n,n); for i=n-1:-1:1 x(i) = A(i,n+1); for j=i+1:n x(i) = x(i)-A(i,j)*x(j); end x(i) = x(i)/A(i,i); end endfunction Algoritmo 7: Método de Jordan //Método de Jordan clear; clc; function x=linearJordan(A,b) n = length(b);//tamanho da matriz dos termos independentes A = [A,b]; //matriz for k=1:n //A(k,k) é o pivô for j=n+1:-1:k //normalizar a linha k assim A(k,k)=1 A(k,j) = A(k,j)/A(k,k); end for i=1:n //eliminando ou zerando todos os elementos i diferente de k (i ~= k), ou seja, ficará ao final somente a diagonal principal if (i~=k) for j=n+1:-1:k A(i,j) = A(i,j)-A(k,j)*A(i,k); end end end end x = A(:,n+1); //a última coluna da matriz aumentada é agora x endfunction Algoritmo 8: Método de LU //Programador: // Data: // O programa resolverá o sistema linear utilizando o método LU, sem pivotamento. clear; clc; function A=linearLU(A) n = size(A,1); for k = 1 : n-1 for i = k+1 : n A(i,k) = A(i,k) / A(k,k); for j = k+1 : n A(i,j) = A(i,j) - A(i,k) * A(k,j); end end end endfunction function x=linearLUsubstituto(A, b) n = length(b); y = zeros(b); for i=1:n //aplicando a substituição, utilizando a matriz Ly=b, para encontrar os valores de y. y(i) = b(i); for j=1:i-1 y(i) = y(i)-A(i,j)*y(j); //A(i,j) = L(i,j) para j<i end end x = zeros(b); for i=n:-1:1 ////aplicando a substituição, utilizando a matriz Ux=y, para encontrar os valores de x. x(i) = y(i); for j=i+1:n x(i) = x(i)-A(i,j)*x(j); //A(i,j) = U(i,j)para j>i end x(i) = x(i)/A(i,i); end endfunction Algoritmo 9: Método de LU com pivotamento parcial //Programador: // Data: // O programa resolverá o sistema linear utilizando o método LU, com pivotamento parcial. clear; clc; function [A, p]=linearLUP(A) n = size(A,1); p = [1:n]'; for k=1:n-1 amax = abs(A(k,k)); imax = k; for i=k+1:n if abs(A(i,k))>amax amax = abs(A(i,k)); imax = i; end end if (imax~=k) w = A(k,:); A(k,:) = A(imax,:); A(imax,:) = w; t = p(k); p(k) = p(imax); p(imax) = t; end for i=k+1:n A(i,k) = A(i,k)/A(k,k); for j=k+1:n A(i,j) = A(i,j)-A(i,k)*A(k,j); end end end endfunction 2.2 Métodos Iterativos Algoritmo 10: Métodos Jacobi e Gauss-Seidel // Gauss Seidel clear; clc; function [x, erroFinal]=GaussSeidel(A, b, x) for k=2:numItera for i=1:n x(i,k)=b(i); for j=1:n if i<>j if i>j x(i,k)=x(i,k)-A(i,j)*x(j,k); else x(i,k)=x(i,k)-A(i,j)*x(j,k-1); end end end x(i,k)=(1/A(i,i))*x(i,k); erroNovo=abs(x(i,k)-x(i,k-1)); if erroNovo > erro erro=erroNovo; end end erroFinal(k)=erro; erro=0; end endfunction // Jacobi function [x, erroFinal]=Jacobi(A, b, x) for k=2:numItera for i=1:n x(i,k)=b(i); for j=1:n if i<>j x(i,k)=x(i,k)-A(i,j)*x(j,k-1); end end x(i,k)=(1/A(i,i))*x(i,k); erroNovo=abs(x(i,k)-x(i,k-1)); if erroNovo > erro erro=erroNovo; end end erroFinal(k)=erro; erro=0; end endfunction // Definição da Matriz A function A=leMatrizA() printf("\n\nEntrada da Matriz A"); for i=1:n for j=1:n printf("Entre com o elemento A(%d,%d) :",i,j); A(i,j)=input(""); end end endfunction // Definição da Matriz b function b=leVetorb() for i=1:n printf("Entre com o elemento b(%d) :",i); b(i)=input(""); end endfunction // Definição das condições iniciais function x=leCondInic() printf("\n\nEntrada das condições iniciais"); for i=1:n printf("Entre com o elemento x%d(0)",i); x(i,1)=input(""); end endfunction // Definição da ordem do sistema n=input("Entre com a ordem do sistema: "); numItera=input("Entre com o número de iterações: "); erro=0; A = leMatrizA(); b = leVetorb(); x = leCondInic(); i=1; while i<>0 i=input("Entre com valor de i: "); select i case 1 then [x,erroFinal]=Jacobi(A,b,x); // Imprime resultados printf("\nIter "); for i=1:n printf("x%d ",i); end printf("\n"); for k=1:numItera; printf(" %d ",k); for i=1:n printf("%f ",x(i,k)); end printf("Erro =%.15f\n",erroFinal(k)); //printf("\n"); end case 2 then [x,erroFinal]=GaussSeidel(A,b,x); // Imprime resultados printf("\nIter "); for i=1:n printf("x%d ",i); end printf("\n"); for k=1:numItera; printf(" %d ",k); for i=1:n printf("%f ",x(i,k)); end printf("Erro =%.15f\n",erroFinal(k)); //printf("\n"); end end end Trabalho 1 no Scilab-sistemas lineares-Diurno.docx Trabalho no Scilab. (Resolução de sistemas lineares) 1- Montar grupos de 4 pessoas. 2- Escolher um único problema na área de engenharia que utilize sistemas lineares na resolução. Obs.: diferente dos exercícios trabalhados em sala ou dados na lista de exercícios. 3- Escrever o enunciado do problema e montar o sistema linear. 4- Resolver este sistema linear, encontrar o vetor solução (valores de x) utilizando o software SCILAB, para isto: a) Escolha um método direto sem pivotamento, b) Um método direto com pivotamento parcial e c) Um método iterativo. Então, o problema terá 3 resoluções. 5- Esclareça o porquê fez as escolhas dos métodos e compare os resultados. 6- Imprima o algoritmo utilizado, a resolução, os resultados obtidos e as conclusões encontradas. 7- Prazo para a entregar: 14/04/16. Bom trabalho!
Compartilhar