11.07.2015 Views

Introdução ao Scilab - LEE - Uerj

Introdução ao Scilab - LEE - Uerj

Introdução ao Scilab - LEE - Uerj

SHOW MORE
SHOW LESS
  • 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/SR­1/UERJ


<strong>Introdução</strong> <strong>ao</strong> <strong>Scilab</strong> (aula 3) – UERJ/FEN/<strong>LEE</strong>ContatosE­mail: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 ­ If­then­else4.2 ­ Select­case


<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 criou­se 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 Newton­Raphson.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 Newton­Raphson: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 Newton­Raphson*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((xn1­xn) / 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 execute­o 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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!