Introdução ao Scilab - LEE - Uerj
Introdução ao Scilab - LEE - Uerj
Introdução ao Scilab - LEE - Uerj
- No tags were found...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Universidade do Estado do Rio de JaneiroFaculdade de EngenhariaLaboratório de Engenharia Elétrica<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong>(Aula 3)Elaine de Mattos SilvaOrientador: Prof. José Paulo Vilela Soares da CunhaAbril de 2007Apoio: Programa de Estágio Interno Complementar do CETREINA/SR1/UERJ
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>ContatosEmail:elaine@lee.eng.uerj.brPágina do curso:http://www.lee.eng.uerj.br/~elaine/scilab.htmlApostila <strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> versão 3.0:Prof. Paulo Sérgio da Motta Pires (UFRN)http://www.dca.ufrn.br/~pmotta
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>Conteúdo Geral Aula 1O que é o <strong>Scilab</strong>Principais Características do ambiente <strong>Scilab</strong>Operações Básicas Aula 2Polinômios, Vetores e Matrizes Aula 3ListasProgramação com <strong>Scilab</strong> Aula 4Gráficos em <strong>Scilab</strong><strong>Introdução</strong> <strong>ao</strong> Scicos
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>Aula 3Aula 31 – ListasProgramação com <strong>Scilab</strong>2 Características da linguagem <strong>Scilab</strong>3 Comandos para Iterações3.1 O laço for3.2 O laço while4 Comandos Condicionais4.1 Ifthenelse4.2 Selectcase
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>Aula 3(cont.)Aula 3 (cont.)5 Scripts6 Funções6.1 Variáveis globais x locais7 Exercícios
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>1 – Listas (cont.)Para exemplificar criouse uma lista composta do número “23” ,o caracter “q” e uma matriz identidade 2x2.L=23 , q ,[ 1 00 1] >L=list(23, 'q',eye(2,2))L =L(1) //elemento 1= 2323.L(2) //elemento 2= qqL(3) //elemento 3=matriz identidade 2x21. 0.0. 1.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>1 – Listas (cont.)>L(2)=list('q','abc') //faz L(2) = (q , abc)L =L(1)23.L(2)L(2)(1)qL(2)(2)abcL(3)1. 0.0. 1.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>1 – Listas (cont.)Acesso a elementos de uma lista:Ex.1: acessando o primeiro elemento:>L(1)ans =23.Ex.2: acessando o segundo elemento da sub lista dentro de L(2):>L(2)(2)ans =abc
Programação com <strong>Scilab</strong><strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>2 Características da Linguagem <strong>Scilab</strong>O <strong>Scilab</strong> é um interpretador de comandos e por isso o códigogerado não precisa ser compilado.Facilidade e simplicidade da linguagem estruturada.Não há necessidade de declaração prévia das variáveis.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para IteraçãoExistem duas estruturas de controle iterativo no <strong>Scilab</strong>: olaço for e o comando while.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para Iteração3.1 O laço forForma geral:for variavel = vetor_linha ou listainstruc<strong>ao</strong>_1instruc<strong>ao</strong>_2instruc<strong>ao</strong>_3endO comportamento das iterações é baseado no vetor linha ou nalista. Se o vetor tem 3 elementos, existirão 3 iterações.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para Iteração (cont.)3.1 O laço forEx.1(usando variável tipo vetor):m=1:3;for k=ma=k+1end>m=1:3;>for k=m>a=k+1>enda =2.a =3.a =4.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para Iteração (cont.)3.1 O laço forEx.2 (usando variável tipo vetor):y=0;m=3:5;for k=m, y=y+k,end>y=0;>for k=3:5,y=y+k,endy =3.y =7.y =12.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para Iteração (cont.)3.2 O laço whileForma geral:while condic<strong>ao</strong>instruc<strong>ao</strong>_1instruc<strong>ao</strong>_2... ...instruc<strong>ao</strong>_nendO laço while repete uma seqüência de instruções enquanto umacondição for satisfeita.Útil quando não se sabe o número de iterações.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para Iteração (cont.)3.2 O laço whileOperadores permitidos:== ou = (igual a)< (menor que)> (maior que)= (maior ou igual) ou ~= (diferente)
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>3 – Comandos para Iteração (cont.)3.2 O laço whileEx.1: x=1;while xx=1;>while xx=2*x//instruc<strong>ao</strong> : faca x = 2x>endx =2. //x=1*2=2x =4. //x=2*2=4x =8. //x=4*2=8x =16. //x=8*2=16. Como x>14 o loop termina.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos CondicionaisComandos condicionais são usados para executarseqüências de instruções a partir da avaliação de condiçõesbooleanas.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos Condicionais4.1 if – then – elseForma simples:if condic<strong>ao</strong>_1 thensequencia_1elsesequencia_2endAvalia a condic<strong>ao</strong>_1 se ela for verdadeira (T, true) executa asequencia_1, caso contrário executa a sequencia_2.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos Condicionais (cont.)4.1 if – then – elseForma geral:if condic<strong>ao</strong>_1 thensequencia_1elseif condic<strong>ao</strong>_2sequencia_2elsesequencia_3endSe a condic<strong>ao</strong>_1 for verdadeira executa a sequencia_1.Se a condic<strong>ao</strong>_1 for falsa avalia a condic<strong>ao</strong>_2 e assim por diante.Se todas as condições são falsas executa a sequencia_3.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos Condicionais (cont.)4.1 if – then – elseEx.1(forma simples):>x=1;>if xy=x;//faca y=x>else//caso contrario>y=x;//faca x=x>end>disp(y)//mostra valor de y1.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos Condicionais (cont.)4.1 if – then – elseEx.2(forma geral):>x=10;>if xy=x;>elseif x==1>y=2*x;>elseif x==2>y=3*x;>elseif x==3>y=4*x;>else>y=5*x;>end>disp(y)50.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos Condicionais (cont.)4.2 select caseForma geral:select variavel_de_testecase express<strong>ao</strong>_1sequencia_1case express<strong>ao</strong>_nsequencia_nelsesequencia_n+1endO valor da variavel_de_teste é comparado às expressões.Se os valores são iguais, a seqüência correspondente éexecutada.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>4 – Comandos Condicionais (cont.)4.2 select caseEx.:>M=['a' 'b']; //define matriz simbolica>select M(1,2) //seleciona elemento (1,2) de M>case 'a'//se o elemento (1,2)=a>disp('letra a encontrada') //escreve 'letra a ...'>case 'b'//se o elemento (1,2)=b>disp ('letra b encontrada') //escreve 'letra b...'>end
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>5 – ScriptsOs scripts são arquivos de texto puro que contém comandos queseriam usados em um prompt do <strong>Scilab</strong>.Por convenção estes arquivos possuem extensão .sceOs arquivos são criados no editor de texto do <strong>Scilab</strong>, o Scipad(ouem qualquer outro editor de texto).Os arquivos são executados no <strong>Scilab</strong>:com o comando exec, oucom o menu File> File Operations selecionando oarquivo e clicando no botão exec
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>5 – Scripts (cont.)Ex.1 – script que calcula as raízes quadradas dos númerosinteiros de 10 a 10.Obs.: Este script deve ser digitado em um editor de textos e salvocom a extensão .sce//script que calcula raizes dos numeros inteiros//de 10 a 10n=0;for x=10:10n=n+1;y(n)=sqrt(x);endy
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>5 – Scripts (cont.)Para executar este script use o comando exec nome_do_script.sceno prompt do <strong>Scilab</strong>:>exec raizes.sce //chamando o script raizes.sce>//script que calcula as raízes quadradas dos númerosinteiros de 10 a 10.>n=0;>for x=10:10>n=n+1;>y(n)=sqrt(x);>end>yy =3.1622777i3.i2.8284271i2.6457513i...
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>5 – Scripts (cont.)Caso o comando exec seja executado com ' ; ' (ponto e vírgula) nofim apenas os resultados são apresentados:>exec raizes.sce;y =3.1622777i3.i2.8284271i2.6457513i2.4494897i2.236068i2.i1.7320508i1.4142136ii01....
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – FunçõesÉ possível definir novas funções no <strong>Scilab</strong>;O que distingue uma função de um script é que a função possuium ambiente local, separado do global, mas que se comunicaatravés de argumentos de entrada e saída;Variáveis definidas no escopo da função (variáveis locais) nãopermanecem no ambiente após a execução da função;
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – FunçõesDefinição :Uma função pode ser definida de três formas:no ambiente <strong>Scilab</strong>;usando o comando deff oudigitando o texto no Scipad e clicando no menu Execute,opção load into <strong>Scilab</strong>
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – FunçõesDefinição no ambiente:function [y1,...,yn]= nome_da_func<strong>ao</strong>(x1,...,xm)instruc<strong>ao</strong>_1instruc<strong>ao</strong>_2...instruc<strong>ao</strong>_pendfunctiononde:x1,...,xm são os argumentos de entrada;y1,...,yn são argumentos de saída einstrucão_1,...,instruc<strong>ao</strong>_p são as instruções executadas pelafunção.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – Funções (cont.)Ex.(definição no ambiente):>function[y1]=func<strong>ao</strong>1(x1,x2)>y1=x1+x2>endfunction>[a]=func<strong>ao</strong>1(1,2) //chamando a func<strong>ao</strong>a =3.>//o valor da função retorna na variavel 'a'
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – Funções (cont.)Definição usando o comando deff:deff('[y1,...,yn]=nome_da_func<strong>ao</strong>(x1,...,xm)','instruc<strong>ao</strong>_1,...,instruc<strong>ao</strong>_p')onde:x1,...,xm são os argumentos de entrada;y1,...,yn são argumentos de saída einstrucão1,...,instruc<strong>ao</strong>_p são as instruções executadas pelafunção.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – Funções (cont.)Ex.(definição usando o comando deff):>deff('[y1]=func<strong>ao</strong>2(x1,x2)', 'y1=x1+x2')>[a]=func<strong>ao</strong>2(1,2) //chamando a func<strong>ao</strong>a =3.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – Funções (cont.)6.1 variáveis globais x variáveis locaisVariáveis globais são válidas no ambiente <strong>Scilab</strong>;Variáveis locais são válidas apenas no escopo de uma função.Ex. variáveis globais:>x3=5;>function[y1]=f(x1,x2)>y1=x1+x2+x3>endfunction>[r1]=f(1,3) //entrada=(1,3), saída=[r1]r1 =9.
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>6 – Funções (cont.)6.1 variáveis globais x variáveis locaisEx. variáveis locais:>function[y1]=f(x1,x2)>y1=x1+x2>endfunction>[r1]=f(1,3) //entrada=(1,3), saída=[r1]r1 =4.>y1//y1 n<strong>ao</strong> existe fora da func<strong>ao</strong>!error 4undefined variable : y1
Exercícios<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>7 – Exercícios7.1 Exercícios com scriptsCalcular2usando o método de NewtonRaphson.A raiz de uma função, f(x) pode ser obtida através daexpressão:x i1=x i− f x if ' x i
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>7 – Exercícios7.1 Scripts2A função que permite calcular é:f x=x 2 −2usando a fórmula de NewtonRaphson:x i1=x i− x2 −22 x
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>7 – Exercícios7.1 ScriptsÉ necessária uma aproximação inicial. Podemos dizer oresultado será próximo de 1, então fazemos x 0 =1.Façamos i variar de 1 a 10, completando 10 iterações.Consideremos um erro de 10 5 .
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>7 – Exercícios7.1 ScriptsScript para calcular a raiz de 2 através do método de NewtonRaphson*N = 10;x0 = 1.0;erro = 10^(5);//número máximo de iterações//aproximação inicialxn = x0;//valor inicial da raizfor n = 1:Nxn1 = xn – (xn * xn 2)/(2 * xn);if abs((xn1xn) / xn1) < erro thenprintf( ' Valor da raiz = %10.7f ' , xn1 )returnendendxn = xn1;* este script foi retirado da apostila <strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> – ver referências no fim destes slides
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>7 – Exercícios7.1 Exercícios com scripts (cont).Digite este script no editor do <strong>Scilab</strong> e executeo no ambiente <strong>Scilab</strong>clicando em Execute > Load into <strong>Scilab</strong>' ;O resultado esperado é:> Valor da raiz = 1.4142136
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>7 – Exercícios7.2 Exercícios com funçõesCalcular o fatorial de um número usando uma função recursiva:Para calcular o fatorial definiremos a função fat(x). Dizemos que ela érecursiva porque chama a si mesma.Para definir a função usamos o editor do <strong>Scilab</strong>:function y = fat(x)if x
<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 1) 3) – UERJ/FEN/<strong>LEE</strong>ReferênciasPires, P.S.M. (2004). <strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong>, Rio Grandedo Norte.Noble, B. e Daniel, J.W. (1986). Álgebra LinearAplicada, Prentice Hall do Brasil, Rio de Janeiro.