Universidade Federal de Minas Gerais Departamento de Ciˆncia da Computa¸˜o do ICEx e ca

Fundamentos de SCILAB
vers˜o preliminar a

Frederico F. Campos, filho
setembro de 2008

Pref´cio a
O SCILAB ´ um software para computa¸˜o cient´ e ca ıfica e visualiza¸ao, gratuito, com c´digo c˜ o fonte aberto e interface para as linguagens FORTRAN e C. Ele permite a solu¸˜o de problemas ca num´ricos em uma fra¸˜o do tempo que seria necess´rio para escrever um programa em uma e ca a linguagem como FORTRAN, Pascal ou C, devido `s suas centenas de fun¸˜es matem´ticas. a co a O SCILAB ´ desenvolvido pelo INRIA (Institut National de Recherche en Informatique e ´ et en Automatique) e ENPC (Ecole Nationale des Ponts et Chauss´es) da Fran¸a. Em e c www.scilab.org est˜o dispon´ a ıveis v´rias informa¸˜es, documenta¸ao e instru¸˜es de como a co c˜ co baixar o programa. As vers˜es do SCILAB est˜o dispon´ o a ıveis na forma pr´-compilada para e diversas plataformas: Linux, Windows, HP-UX e Mac OSX . Como o c´digo fonte tamb´m o e est´ dispon´ a ıvel, ele pode ser compilado para uso em um computador espec´ ıfico. O objetivo deste texto ´ apresentar o SCILAB (vers˜o 4.1.2) como uma linguagem de proe a grama¸˜o dotada de fun¸˜es n˜o dispon´ ca co a ıveis nas linguagens convencionais. Por isto, este material pode ser utilizado em disciplinas, tais como, Programa¸˜o de Computadores, C´lculo ca a ´ Num´rico, An´lise Num´rica, Algebra Linear e quaisquer outras dos cursos de Engenharia e a e e das ´reas de Ciˆncias Exatas. Tamb´m, s˜o exploradas algumas caracter´ a e e a ısticas pr´prias o que mostram por que o SCILAB ´ uma poderosa ferramenta de apoio ao aprendizado e e utiliza¸˜o da Computa¸˜o Cient´ ca ca ıfica. No Cap´ ıtulo 1 ´ descrito o ambiente de programa¸˜o do SCILAB mostrando a janela de e ca comandos e como obter informa¸˜es de comandos durante a sess˜o. O Cap´ co a ıtulo 2 apresenta as estruturas de dados suportadas pelo SCILAB, como constantes, vetores, matrizes, hipermatrizes, polinˆmios e listas. No Cap´ o ıtulo 3 s˜o mostradas as express˜es aritm´ticas, a o e l´gicas e literais, bem como, o modo de execut´-las. O Cap´ o a ıtulo 4 apresenta os formatos de exibi¸˜o, grava¸˜o e leitura de vari´veis do espa¸o de trabalho, al´m de leitura de grava¸˜o ca ca a c e ca de dados em arquivos. No Cap´ ıtulo 5, o SCILAB ´ visto como uma linguagem de proe grama¸˜o, sendo mostrado como escrever programas e fun¸˜es, estruturas condicionais e de ca co repeti¸˜o e depura¸˜o de programas. O Cap´ ca ca ıtulo 6 ´ dedicado ` elabora¸˜o de gr´ficos bi e a ca a e tridimensionais. Finalmente, o Cap´ ıtulo 7 apresenta fun¸˜es do SCILAB para resolver co problemas de Computa¸˜o Cient´ ca ıfica. Sugest˜es para aprimorar o presente texto, bem como, para efetuar corre¸˜es ser˜o bemo co a vindas pelo e-mail: ffcampos@dcc.ufmg.br. Belo Horizonte, setembro de 2008. Frederico F. Campos, filho DCC.ICEx.UFMG

.

. . . . 1. .2 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . c Mudan¸a do diret´rio corrente . . . . . . . . . . . . 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando apropos . . . . . c o Gerenciamento de arquivos . . . .1 2. . . . . . . . . . . . . . . . . . .1. . . . . ılio a 1. . . .1 1. . . . . . . . . . . . . .2. . . . . . . .2. . . . . .2 Comandos de aux´ ao usu´rio . .1. . . . .1. . . . . . . . . . . . . . . . . . . . . . . .1 1. . . . . 2. . . . . . . . . . . . . . . .1 Janela de comando . . . . . . . . . Menu de barras . . . . . . .2. .1 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . .Sum´rio a 1 Ambiente de programa¸˜o ca 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 2. . . . . . . iii 9 9 9 10 10 . . . . . . . . . . . . . . . . .1. o Literais . . . 1 1 3 4 4 4 5 5 6 6 1. . . . . . . . . . . . . . . . . . . 2 Estruturas de dados 2. . . . . .2 1. e L´gicas . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Num´ricas . . . . . .1. . . . . . . . . .3 Espa¸o de trabalho . . .3 Exerc´ ıcios . . . . . .3 Comando help . . .

5 2. .6 Regras para nomes de vari´veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. . . a o Vari´veis literais . . . . .7 Constru¸˜o . . . . . . . . . . . . . . . . . . . . . . ca Vari´veis especiais . . . . . ca C´lculo de ra´ a ızes . . . . . . . . . . . . . .7 2.2. . . . . . . . . . Hipermatrizes . . . . . . . Polinˆmios . . . . . . . . . a Listas . . . . . . . . . . . . . . . . . . ca ca Multiplica¸˜o . . .3 2. . . . . . . . . . . . . . . . . . . . . .6 2. . . . . . . . . . . . . . .iv ´ SUMARIO 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Divis˜o . . . . . . . .6. . . .2. 2. . . . . . . . . . . . .2 2. . . . . . . . .5 2. . . . . . . . . . . . . . . . . . . .4 2. . . . .2 Vari´veis .9 Vari´veis l´gicas . . . . . . . . . . . . . .3 2. . . . . . . . . . . ca Avalia¸˜o . . . . . . . . . . . . . .6. . . . . . . . . . . .6. . . . . . . . . . . . . . .10 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . .6. . . . . .1 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matrizes . . . . . . . . . . . . . . .1 Express˜es aritm´ticas . . o e 33 33 .6. . . . . . . . . . . 2. . . . . . . . . . . . . .8 2. . . . . . o 2. . . . .3 2. . . .6. . . . . . . . . . . . . . a Deriva¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . 3 Express˜es o 3. . . . . . . . . . . . . . . . . . . a 2. . . . . .1 2. a 10 10 10 11 12 15 24 25 25 26 26 27 27 28 28 29 30 30 31 Vetores . . . . . . . . . . . a Comando de atribui¸˜o . . . . . . . . . ca Adi¸˜o e subtra¸˜o . . . . . . . . . . . .2 2. . . . . . . . . . . . . . . .

. . . . . . . .4 Leitura e grava¸˜o de dados . . . . . . . . . . . . . . .3.2 Express˜es l´gicas . . . . . . . . . . ca Leitura em arquivo . . . . . . . . . . . 53 53 55 56 56 57 57 59 59 60 60 61 61 4. . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Execu¸˜o de express˜es . . . .1 3. . . . . .4. . . . Fechamento de arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 3. . . . . .2. . . . . . . . . . . . . . . . . . .1 4. . . . . . . . . . . . . . . . . . . . . . . . .2 4. . . . . . . . .2. . . . . . . . . . . . . . . . c 4. Recuperar dados . . . Janela de mensagem . . . . . . . . . . . a Manipula¸˜o de caracteres . . . ca 4. . . . . . . . . . . . . . . . . . . a 4. .1. .´ SUMARIO 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . .1 4. . . ca o 3. . . . 4 Comandos de entrada e sa´ ıda 4.4 Abertura de arquivo . . . . .1 Formato de exibi¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Convers˜o de caracteres . . . . . . . . . . . . ca 4. . . . . . . . o v 34 35 39 41 41 44 49 50 3. . . . . . . . . . . . . . .4. . . . . . .2 4. . . . . . ca 3. . .3 Express˜es literais . . . . . Grava¸˜o em arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Di´rio .3. . . . . o 3. . . . . . . . . . . . .3 4. . . . . . . . . . . .3 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . .2 Espa¸o de trabalho . . . . . . Entrada de dados . . . .1. .2 Express˜es vetoriais . . . . . . . . . . . . . . . . . . . .4. . .4 Gravar dados . o o 3. . . . . . . . . o Express˜es matriciais . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .1 5. . . . . . . . . . . . . . ca 83 83 83 86 88 Gr´ficos tridimensionais . . . . . . .2 5. ca 5. . .1. . . . . . . . . . . .vi ´ SUMARIO 4. . .3 Estrutura for-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Programa . . . .3. . . . . . . . . . .4 Estrutura if-end . . 63 5 Linguagem de programa¸˜o ca 5. . .2. . . . . . . . ca 5. . .5 Exerc´ ıcios . . . . . .2 5. . . . . 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 6. . . . . . . . . . ca Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . Subprograma function . . . . . . . . Estrutura if-elseif-end . . . . . .3 5. . . . . . . . . . . . . . . . . a 6. . . . . . . . . . . . . . . . . . . . . .2. . . . Estrutura while-end . . . .2 5. . . . . . . . . Estrutura select-case-end . .1. . . . . . . . . . . . . . . . . . . . . . .3 Estruturas de repeti¸˜o . . . . . . . .2 Fun¸˜o plot . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Gr´ficos a 6.1. . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . .2 6. .3. . .1. . . . Estrutura com interrup¸˜o no interior . . . . . . . . .1 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . . . . . . . . . .1 5. . . . .2. . .1 Gr´ficos bidimensionais . . . . . . . . . . . . . . . . ca Fun¸˜o fplot2d . . . . . . . . . . . . . . . . . . . .5 Depura¸˜o de programa . . . .4 5. . . . . . . . . . . . . . . . . . . . . ca 5. . . . . . . . . . . . . . . . .1 Programa¸˜o . . 65 65 65 67 72 72 72 73 74 75 75 77 78 79 80 Estruturas condicionais . . . . . . . . . . Estrutura if-else-end . . . . . . . . . . . . . .

. . . . . . .4 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 ca 7. . .2. . . . . . . . 7. . . . . . . . . . . .2. . . . 7 Computa¸˜o cient´ ca ıfica 7. . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . .´ SUMARIO 6. . . . . . .3. .4 Fun¸˜o meshgrid . . . . . . . . . .3 Janela de figura . . . . . . ca Fun¸˜o plot3d . . . . . . . . .2. . 6. . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . ´ 7. . . . . . . . . . . . . . . ca vii 89 90 93 94 94 94 97 97 98 98 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 7. . .4 Integra¸˜o num´rica . . . . . . . .2. . . . . . . . . . . .2. . . . . . . . . . . . . . . .3 Interpola¸˜o . . . . .1 Medidas de tempo . . . . . . . . . . . . . . . . . . . . . . .2 6. . . . . . . 107 Autovalores e autovetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 7. . . . . . . . . . . . . . .3 7. . . . . . . . . . . . . . .4 7. . . . . . 108 a c Interpola¸˜o unidimensional . . . . . . . . . . . . .3. . .2. . . . . . . . . . . . . .5 Parˆmetros da matriz . . . . . . . . . . . . 101 co Solu¸˜o de sistemas . ca Fun¸˜o surf . . . . . . .2. . . . a Decomposi¸˜es . . . . . . .1 6. . 109 ca 7. .2 C´lculo das diferen¸as finitas ascendentes . . . . ca Fun¸˜o mesh . . . . . . . . . . . . . . . . . . . 107 7. . 106 ca Inversa . . . . . . .2 Algebra linear . . .3 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 ca e . . . . . . . . . . . . . . . . . .1 7. . . . . . . . .

viii ´ SUMARIO .

e Um comando ´ finalizado acionando-se a tecla Enter ou Return. entrar com o comando scilab ou scilab -nw (no window) em uma janela de comando. na qual um comando ´ fornecido e o resultado a e e e exibido. Neste cap´ ıtulo ser´ descrita a janela de comando do SCILAB e seus comandos b´sicos. e 1.1 Janela de comando Para executar o SCILAB em ambiente Windows ou Macintosh. a Se for utilizada a op¸˜o -nw a janela do SCILAB aparecer´ na pr´pria janela de comando ca a o (ver Figura 1. V´rios comandos podem ser colocados em a o a uma mesma linha se eles forem separados por v´ ırgulas ou pontos-e-v´ ırgulas. Se um comando for muito e longo. A intera¸˜o entre o SCILAB e o o ca usu´rio ´ feita por interm´dio de uma janela. Al´m disto. Sem a op¸˜o -nw aparecer´ uma nova janela pela qual ser´ feita a intera¸ao entre ca a a c˜ o SCILAB e o usu´rio (ver Figura 1. O sinal de que o programa est´ pronto para receber um comando ´ indicado a e pelo prompt formado pelos trˆs caracteres -->. no caso de d´ vida a a u sobre a sintaxe ou mesmo a existˆncia de um comando.2). sendo que e o <SCIDIR> denota o diret´rio onde o programa foi instalado. ent˜o trˆs pontos (.Cap´ ıtulo 1 Ambiente de programa¸˜o ca O SCILAB ´ executado por meio do script scilab no diret´rio <SCIDIR>/bin. o cursor deve ser colocado sobre o seu ´ ıcone e pressionado o bot˜o da esquerda do mouse ou ent˜o. no caso de ambia a ente Linux. os meios que o programa tem de auxiliar o usu´rio durante a sess˜o...1). bem a a como. as e v´ ırgulas indicam ao SCILAB para mostrar os resultados e os pontos-e-v´ ırgulas para suprimir 1 .) seguidos do pressionamento da tecla Enter ou Return indica a e que o comando continuar´ na pr´xima linha.

Sua sintaxe ´ e lines(<n´mero-de-linhas>. u u u respectivamente. Ambiente de programa¸˜o ca Figura 1.2 do SCILAB (com -nw). ele pode ser utilizado como um o e coment´rio para a documenta¸˜o de um programa.<n´mero-de-colunas>) u u onde <n´mero-de-linhas> e <n´mero-de-colunas> definem o n´ mero de linhas e colunas.1: Janela de comando da vers˜o 4. a Figura 1.2 Cap´ ıtulo 1.2 do SCILAB (sem -nw). O comando ´ e . sendo o segundo argumento opcional.2: Janela de comando da vers˜o de 4.1. ca Um texto ap´s duas barras invertidas (//) ´ ignorado. ca O n´ mero de linhas e colunas a serem exibidas de cada vez na janela de comando pode ser u redefinida pelo comando lines. a a exibi¸˜o. a serem exibidas. a ca As teclas ↑ e ↓ podem ser usadas para listar os comandos previamente dados e as teclas → e ← movem o cursor na linha de comando facilitando a sua modifica¸˜o.1.

O comando who lista o nome das vari´veis que est˜o sendo usadas. Este comando lista as vari´veis criadas pelo a c a usu´rio e as definidas pelo pr´prio SCILAB. quando a o ıcio a o usu´rio criou apenas uma vari´vel. Quando o SCILAB ´ ativado. O t´rmino de execu¸˜o do SCILAB ´ feito e ca e pelos comandos quit ou exit. a Deste modo. and 58 variables out of 9231 1 Quando o SCILAB for executado sem a op¸ao -nw. defini¸˜o de constantes a ca matem´ticas e f´ a ısicas. co A abrangˆncia e potencialidade do SCILAB est´ muito al´m do que ser´ mostrado neste e a e a 1 texto...ini s˜o automatie a camente executados. c˜ . por exemplo. ou c a a seja. no in´ de uma sess˜o. os comandos contidos no arquivo scilab. caso ele exista. a scicos_pal %scicos_menu %scicos_short %scicos_help %scicos_display_mode modelica_libs scicos_pal_libs %scicos_lhb_list %CmenuTypeOneVector %helps home SCIHOME CreateScilabHomeDir PWD TMPDIR MSDOS SCI guilib sparselib xdesslib percentlib polylib intlib elemlib utillib statslib alglib siglib optlib autolib roblib soundlib metalib armalib tkscilib tdcslib s2flib mtlblib %F %T %z %s %nan %inf COMPILER %gtk %gui %pvm %tk $ %t %f %eps %io %i %e using 31686 elements out of 5000000. Por exemplo. a a -->a = 1 // cria a variavel a com o valor 1 a = 1. Janela de comando desativado por lines(0). para que sejam atribu´ ıdos valores a alguns parˆmetros. formatos de exibi¸˜o ou quaisquer comandos do SCILAB para persoca nalizar a sua janela de comando. 3 O comando clc ´ usado para limpar a janela de comando1 e tohome posiciona o cursor no e canto superior esquerdo da janela de comando. que est˜o presentes no espa¸o de trabalho. o usu´rio pode criar um arquivo contendo. -->who your variables are. e 1.1. dependendo do sistema operacional utilizado (use help startup para mais informa¸˜es). Este arquivo deve ser criado em um diret´rio espec´ o ıfico.1.1.1 Espa¸o de trabalho c As vari´veis criadas durante uma sess˜o ficam armazenadas em uma mem´ria denominada a a o espa¸o de trabalho. por isso ´ aconselh´vel executar a op¸˜o Demos para visualizar uma demonstra¸˜o e e a ca ca se ter uma id´ia dessa potencialidade.

4

Cap´ ıtulo 1. Ambiente de programa¸˜o ca

your global variables are... LANGUAGE %helps demolist %browsehelp %toolboxes %toolboxes_dir using 1122 elements out of 11000. and 7 variables out of LCC

767

1.1.2

Mudan¸a do diret´rio corrente c o

Diret´rio corrente ´ aquele considerado em uso, sem ser necess´rio especific´-lo explicitao e a a mente durante uma a¸˜o. Para saber qual o diret´rio de trabalho corrente utiliza-se o ca o comando pwd,
-->pwd // mostra o diretorio de trabalho corrente ans = /pkg/ccc/scilab

O resultado exibido depende do diret´rio de onde o SCILAB foi executado. O diret´rio o o corrente pode ser alterado por meio do comando cd,
-->cd ferramentas // muda o diretorio de trabalho corrente para ’ferramentas’ ans = /pkg/ccc/scilab/ferramentas

1.1.3

Gerenciamento de arquivos

O SCILAB fornece diversos comandos para gerenciamento de arquivos, os quais s˜o mostraa dos na Tabela 1.1. Tabela 1.1: Comandos para gerenciamento de arquivos. Comando dir ou ls mdelete(<nome do arquivo>) cd <dir> ou chdir <dir> pwd Descri¸˜o ca lista os arquivos do diret´rio corrrente; o remove o arquivo <nome do arquivo>; muda o diret´rio para <dir>; o mostra o diret´rio corrente. o

1.2

Comandos de aux´ ao usu´rio ılio a

O SCILAB possui muito mais comandos do que aqueles apresentados neste texto, o que torna mais dif´ lembr´-los. Com o intuito de auxiliar o usu´rio na procura de comandos, o ıcil a a programa provˆ assistˆncia por interm´dio de suas extensivas capacidades de aux´ direto. e e e ılio Estas capacidades est˜o dispon´ a ıveis em trˆs formas: o comando help, o comando apropos e e, interativamente, por meio de um menu de barras.

1.2. Comandos de aux´ ao usu´rio ılio a

5

1.2.1

Comando help

O comando help ´ a maneira mais simples de obter aux´ no caso de se conhecer o t´pico e ılio o em que se quer assistˆncia. Sua sintaxe ´ e e help <t´pico> o onde <t´pico> ´ o nome da fun¸˜o ou de diret´rio. Por exemplo, quando se usa help sqrt, o e ca o abre-se uma janela como a mostrada na Figura 1.3.

Figura 1.3: Janela do comando help. Assim s˜o dadas informa¸˜es sobre a fun¸˜o sqrt para extrair raiz quadrada. O comando a co ca help funciona a contento quando se conhece exatamente o t´pico sobre o qual se quer o assistˆncia. Considerando que muitas vezes este n˜o ´ o caso, o help pode ser usado sem e a e <t´pico> para apresentar uma p´gina de hipertexto contendo a lista de ´ o a ıtens dispon´ ıveis. O comando help ´ mais conveniente se o usu´rio conhecer exatamente o t´pico em que e a o deseja aux´ ılio. No caso de n˜o saber soletrar ou mesmo desconhecer um t´pico as outras a o duas formas de assistˆncia s˜o muitas vezes mais proveitosas. e a

1.2.2

Comando apropos

O comando apropos provˆ assistˆncia pela procura em todas as primeiras linhas dos t´picos e e o de aux´ e retornando aquelas que contenham a palavra-chave especificada. O mais imporılio tante ´ que a palavra-chave n˜o precisa ser um comando do SCILAB. Sua sintaxe ´ e a e apropos <palavra-chave> onde <palavra-chave> ´ a cadeia de caracteres que ser´ procurada nos comandos do SCIe a

6

Cap´ ıtulo 1. Ambiente de programa¸˜o ca

LAB. Por exemplo, para informa¸˜es sobre fatoriza¸˜o, tecla-se apropos factorization, co ca resultando em uma p´gina listando os nomes de v´rias fun¸˜es com esta finalidade. Apesar a a co de a palavra factorization n˜o ser um comando do SCILAB, ela foi encontrada na desa cri¸˜o de v´rios comandos. Um clique sobre uma das linhas na p´gina exibida, por exemplo ca a a chfact - sparse Cholesky factorization, ´ equivalente ao comando help, como mose trado na Figura 1.4.

Figura 1.4: Janela do comando apropos.

1.2.3

Menu de barras

Quando o SCILAB ´ executado sem a op¸˜o -nw, um aux´ por interm´dio de menu-dirigido e ca ılio e ´ dispon´ e ıvel selecionando Help browser ou Apropos na op¸˜o Help do menu de barras. ca Como o uso desta forma de assistˆncia ´ bem intuitivo, o melhor a fazer ´ experimentar! e e e

1.3

Exerc´ ıcios

Se¸˜o 1.1 ca 1.1. Executar o programa SCILAB. 1.2. Verificar a diferen¸a entre , e ; nos comandos %pi+1, %pi*10 e %pi+1; %pi*10;. c 1.3. Testar o funcionamento das teclas ↑ e ↓. 1.4. Ver o funcionamento das teclas → e ←. 1.5. Verificar a diferen¸a entre lines(20), lines() e lines(0). c

Comparar a soma dos autovalores (eigenvalues) com o tra¸o (trace) de uma matriz de c ordem qualquer. Fazer a mesma compara¸˜o usando uma matriz com elementos aleat´rios.10.1. Quantos parˆmetros tem a fun¸˜o erro erf? a ca 1. ca o . Exerc´ ıcios Se¸˜o 1.9.6.2 ca 1. Quais s˜o os comandos utilizados para interpola¸˜o (interpolation)? a ca 1.3. Qual o comando usado para calcular o determinante (determinant) de uma matriz? 1. Qual o comando para achar ra´ (roots) de uma equa¸˜o polinomial? ızes ca 7 1.8.7.

8 Cap´ ıtulo 1. Ambiente de programa¸˜o ca .

1 Constantes O SCILAB suporta trˆs tipos de constantes: num´ricas. d ou D seguida de outra ue a seq¨ˆncia de d´ ue ıgitos precedida ou n˜o de um sinal positivo (+) ou um negativo (-). tais como. o que n˜o ´ o caso do SCILAB.123 -->4. 9 . Para indicar a parte imagin´ria basta u a √ acrescentar os trˆs caracteres (*%i). e -->1.1 Num´ricas e Uma constante num´rica ´ formada por uma seq¨ˆncia de d´ e e ue ıgitos que pode estar ou n˜o a precedida de um sinal positivo (+) ou um negativo (-) e pode conter um ponto decimal (. Opera¸˜es matem´ticas com n´ meros complexos s˜o a e co a u a escritas do mesmo modo como para n´ meros reais. 2. polinˆmios e listas. E. o conhecimento sobre as estruturas de dados ´ e e fundamental para um uso eficiente do programa. a a vetores. ou seja.23e-1 significa 1. 1. Esta a segunda seq¨ˆncia ´ a potˆncia de 10 pela qual a primeira seq¨ˆncia ´ multiplicada.23×10 = 0. vari´veis. constantes. l´gicas e literais. hipermatrizes.1.7 Algumas linguagens de programa¸˜o requerem um tratamento especial para n´ meros comca u plexos.). matrizes.567d2 ´ 4.123 e 4.Cap´ ıtulo 2 Estruturas de dados Neste cap´ ıtulo ser˜o apresentados alguns ´ a ıtens b´sicos. Al´m disto. Esta seq¨ˆncia pode terminar ou n˜o por uma das letras e.23e-1 ans = 0. multiplicar (*) por −1 = i representado por e (%i).567×10 = 456.567d2 ans = 456. Por ue e e ue e −1 2 exemplo. o que tornar´ poss´ o uso imediato o a ıvel do SCILAB no modo interativo.7. e e o 2.

2 Comando de atribui¸˜o ca O SCILAB ´ um interpretador de express˜es. ca 2. Estruturas de dados -->3+2*%i ans = 3.3 Literais Uma constante literal ´ composta por uma cadeia de caracteres em vez de n´ meros ou e u verdadeiro e falso. .2.2. o SCILAB tem regras a respeito do nome ca de vari´veis. A express˜o fornecida ´ analisada sintaticae o a e mente e se estiver correta ent˜o ser´ avaliada.1.1. respectivaa o mente.2 Vari´veis a Uma vari´vel ´ uma regi˜o da mem´ria do computador utilizada para armazenar uma ina e a o forma¸˜o. A cadeia de caracteres deve estar delimitada por aspas (’) ou ap´strofos o ("). sendo representada por um identificador. -->%t // valor verdadeiro ans = T -->%f // valor falso ans = F 2. -->’abcde’ ans = abcde // um valor literal 2. + 2.i As vari´veis reais e complexas em SCILAB ocupam 24 e 32 bytes de mem´ria.1 Regras para nomes de vari´veis a Como qualquer outra linguagem de programa¸˜o. conforme mostrado na Tabela 2.2 L´gicas o Uma constante l´gica pode assumir apenas dois valores: %t (ou %T) para verdadeiro e %f (ou o %F) para falso. a 2.1. 2.10 Cap´ ıtulo 2. O resultado ´ atribu´ ` uma vari´vel por a a e ıdo a a interm´dio do comando de atribui¸˜o e ca <vari´vel> = <express~o> a a Por exemplo.

Elas est˜o listadas na a a a Tabela 2. #. faz-se a -->%e.3 Quando o comando de atribui¸˜o for finalizado pelo caracter (. %s %e = 2. %inf.6 2. Vari´veis a 11 Tabela 2.1415927 %s = s .2.7182818 %eps = 2.1 a = 15. // atribuicao sem exibir o resultado -->b // conteudo da variavel b ans = 3.2. as quais s˜o consideradas como pr´-definidas. Para obter os valores destas vari´veis especiais. Raiz e RAIZ s˜o vari´veis distintas. %eps. %pi. %i. a Regra sobre nome de vari´vel a Coment´rio a conter at´ 24 caracteres e caracteres al´m do 24o s˜o ignorados.2+5. por´m o seu conte´ do n˜o ´ exibido. Se o nome da vari´vel e o sinal de atribui¸˜o (=) forem omitidos ent˜o o resultado ser´ dado a ca a a ` vari´vel default ans. %nan.2.220D-16 %i = i %inf = Inf %nan = Nan %pi = 3. $.2.) ent˜o o resultado ´ atribu´ ca a e ıdo ` vari´vel. n´ meros ou dos caracteres u . a a -->8/5 ans = 1. e a a -->a=10. a a e u a e -->b=5-2. e a come¸ar com letra seguida de alguns caracteres de pontua¸˜o s˜o permitidos.1: Regras para nomes de vari´veis. c ca a letras. ! e ? tamanho da letra ´ diferenciador raiz. a a e n˜o podendo ser alteradas ou removidas (com excess˜o de ans).3 Vari´veis especiais a O SCILAB tem diversas vari´veis especiais.

<vetor> = [ e1 .71828 . a a -->u = 5:9 u = 5. e = 2. Se os valores do arranjo forem igualmente espa¸ados ele pode ser definido por interm´dio da express˜o c e a <vetor> = <valor inicial>:<incremento>:<valor final> Para gerar um vetor com o primeiro elemento igual a 10.3] a = 5.. 20.2204×10−16 em computadores com aritm´tica de ponto flutuante IEEE. infinito.3 Vetores Um vetor ou arranjo ´ um conjunto de vari´veis homogˆneas (conte´ do de mesmo tipo) e a e u identificadas por um mesmo nome e individualizadas por meio de um ´ ındice. o segundo igual a 15. .3 O vetor a possui os elementos a(1)=5. 25. . No SCILAB o arranjo ´ definido de v´rias formas. elemento por elemento. 15. e2 .12 Cap´ ıtulo 2. a base do logaritmo natural. . Seu valor ´ eps = 2 e ≈ 2.0. en ] sendo <vetor> o nome da vari´vel e ei o i-´simo elemento. . 0/0. usada como vari´vel de polinˆmio. .-0. a e u π = 3. a o %i %inf %nan %pi %s 2. 6. 8. menor n´ mero tal que quando adicionado a 1 cria um n´ mero de u u −52 ponto flutuante maior que 1.5 e a(3)=-0. 9.3. 7. a Vari´vel a ans %e %eps Valor nome de vari´vel default usada para resultados. n˜o ´ um n´ mero (Not-A-Number). 40. por exemplo. a e -->a = [5 1.2: Vari´veis especiais do SCILAB. por exemplo. .. Se o incremento desejado for igual a 1 ent˜o ele poder´ ser omitido. separados por e a espa¸o em branco ou v´ c ırgula e delimitado por [ e ]. . 35. por exemplo. 14159 . 1/0. Estruturas de dados Tabela 2. 30. o terceiro igual a 20 e assim sucessivamente at´ o ultimo igual a 40 basta o comando e ´ -->b = 10:5:40 b = 10. 1.5. e √ i = −1.5 . a(2)=1.

a -->d = linspace(1+%i.5. Lembrando que 5:-2:1 gera a seq¨ˆncia 5. No caso a u a a de n´ meros complexos. 10.7) c = 10. + 4. -->c(2) ans = 15.5 + 2. 1.5) d = 1. 10. ent˜o. 20. e2 . Se no comando linspace o e parˆmetro <n´mero de elementos> for omitido ent˜o ser˜o gerados 100 pontos.9.i Os elementos podem ser acessados individualmente. cuja sintaxe ´ ca e <vetor> = linspace(<valor inicial>. para criar um arranjo com o primeiro elemento igual a 10.2 e -8. 3. // segundo elemento de c ou em blocos usando os comandos de defini¸˜o de arranjos..2+4*%i. // terceiro ao quinto elementos 25.) <vetor> = [ e1 . . um arranjo pode tamb´m ser constru´ definindo o n´ mero e ıdo u desejado de elementos na fun¸˜o linspace. + i 1. permitindo referenciar os elementos em qualquer ordem -->c([4 1]) // quarto e primeiro elementos ans = 25. por isto s˜o tamb´m a a e chamados vetores linha. -->c = linspace(10. para gerar um vetor coluna com os elementos 1. O endere¸amento indireto ´ tamb´m poss´ c e e ıvel. ue a -->c(5:-2:1) // quinto. terceiro e primeiro elementos ans = 30. ca -->c(3:5) ans = 20. Vetores 13 Em vez de usar incremento.. -3. 15.25i 2. 35. Isto produz um vetor idˆntico a b=10:5:40 definido acima. en ] Deste modo. Do mesmo modo. 30. 25.40. ou seja.3.<n´mero de elementos>) u Assim. os incrementos s˜o feitos separadamente para a parte real e para a u a parte imagin´ria.5i 1.75i 1.75 + 3. . 20. podem existir vetores coluna.2.<valor final>. arranjos com v´rias linhas e uma unica coluna.25 + 1. o ultimo igual a 40 e ´ possuindo 7 elementos. 30. 40. . Para criar um vetor coluna elemento por elemento a ´ estes devem estar separados por (. Nos exemplos acima os arranjos possuem uma linha e v´rias colunas.

3. 2. 2.’).2 . -->z = (1:3)+(0.2i 3.5 .2.1:0.3i Assim.9 Por isto. . ca -->x = v’ x = 1.1i 2.’).9] v = 1.0.0.3. separando os elementos por ponto-e-v´ ırgula especifica-se os elementos em diferentes linhas (vetor coluna).2 -->y = (1:3)’ y = 1. pois o uso do ca e operador (’) resultar´ em um complexo conjugado transposto. + 0.8. Estruturas de dados -->v = [1. seja o vetor a complexo.3i e o complexo conjugado transposto -->cc = z’ cc = 1.8.1:0.1i + 0. 3. z.1i 2. Por exemplo. . + 0. Para transformar um vetor linha em vetor coluna e vice-versa.-8.3i o transposto ´ e -->t = t = 1.0. a ca A fun¸˜o length ´ utilizada para saber o comprimento de um vetor ca e -->l = length(z) l = 3. a transposi¸˜o ´ obtida pelo operador (. 3. usa-se o operador de transposi¸˜o (’). separando os elementos de um arranjo por brancos ou v´ ırgulas s˜o especificados os a elementos em diferentes colunas (vetor linha).-3.5. Por fim. + 0. Por outro lado.’ + 0.5 .9 No caso do vetor ser complexo.14 Cap´ ıtulo 2. . no caso do vetor n˜o ser complexo a transposi¸˜o pode ser feita usando (’) ou (. .3)*%i z = 1. deve-se notar a importˆncia da posi¸˜o do caractere branco na defini¸˜o de um a ca ca vetor .2i 3.2i + 0.

. 0. 0. . Uma vez definidas. al´m dos elementos da ıdo a e matriz ent˜o o SCILAB aumenta esta matriz automaticamente preenchendo-a com valores a nulos de forma a matriz permanecer retangular. 8. elas a a podem ser modificadas de v´rias formas. 9. para construir uma matriz os elementos de uma mesma linha devem estar separados por branco ou v´ ırgula e as linhas separadas por ponto-e-v´ ırgula ou Enter (ou Return). a ca ca Similarmente aos vetores..5. 7.2. extra¸˜o e rearranjo. 4. como por inser¸˜o. 4. -->A(1.. 7. . emn ] Para criar uma matriz A com 2 linhas e 3 colunas.. Matrizes 15 -->p=[1+2] p = 3. 0. 0. 0.. 4 7 9] A = 3. 9. 2. . Seja agora a matriz quadrada B de ordem 3. 2. 2.5. <matriz> = [ e11 e12 . e1n .. 0.6)=1 A = 3.. 7. e2n . ou seja. 4. 0. -->A(3. 0. . 0. . -->p=[1 + 2] p = 3. em1 em2 .2)=8 A = 3. -->p=[1+ 2] p = 3. Se for atribu´ um valor a um elemento n˜o existente.4. . 8. 0. Para modificar um elemento basta atribuir-lhe um novo valor. -->p=[1 +2] p = 1. -->A = [3 2 -5.4 Matrizes As matrizes s˜o arranjos bidimensionais homogˆneos e constituem as estruturas fundamena e tais do SCILAB e por isto existem v´rias maneiras de manipul´-las. e21 e22 . 9. 1. 0..5.

2 e 3 de B. 9. 6. 6.3) ans = 6. a -->C = B(3:-1:1. 2. 5. 4. ou em conjuntos. 8. 6. tamb´m pode ser ca e usada ou at´ mesmo linspace. ou seja. neste caso usando a nota¸˜o de arranjo.16 Cap´ ıtulo 2. ent˜o o comando. -->B([1 3]. <valor inicial>:<incremento>:<valor final>. 2. -->B(2. 2 e 3. tal como. 4. a Considerando que s˜o referenciadas todas as 3 colunas de B. 3. 2 e 1 e 1:3 e ue produz 1. 1. Estruturas de dados -->B = [1 2 3. 4. 3. Para criar uma matriz D a partir das linhas 1 e 2 e colunas 1 e 3 de B. cria uma matriz C a partir das linhas 3. 2. 4. Para construir uma matriz E a partir da matriz B seguida da coluna 2 de C seguida ainda de uma coluna com os elementos iguais a 3. os elementos das ca linhas 1 e 3 e coluna 2. 5. 7 8 9] B = 1. os elementos de uma matriz podem ser referenciados individualmente. cria uma matriz C a partir das linhas de B em ordem contr´ria. 9.1:3) C = 7. 5. 1. 9. A nota¸˜o de vetor. De modo similar aos arranjos. . 6. 8. a nota¸˜o simplificada (:) pode a ca ser igualmente usada em vez de 1:3 -->C = B(3:-1:1. 8.:) C = 7.2) ans = 2. Lembrando que 3:-1:1 gera a seq¨ˆncia 3. 7. 4 5 6. 3. 3. faz-se -->D = B(1:2. 8.[1 3]) D = 1. 2 e 1 e colunas 1. Por exemplo.

3) E = 1. 3. -->E(1. 7. 6. Quando o s´ ımbolo (:) for usado sozinho para referenciar os dois ´ ındices de uma matriz ent˜o a ´ gerado um vetor constitu´ pelas colunas da matriz.2) [3 3 3]’] E = 1.$-1) ans = 5. 3. contendo o n´ mero de linhas e colunas a e co u de E. respectivamente. 5. 7. 5.4. // elemento da primeira linha e penultima coluna da matriz E A fun¸˜o size ´ usada para fornecer o n´ mero de linhas e colunas de uma matriz. 7. -->E(:. 3. 2. 3. 5. 8. 4. 2. 2. 4. 5. 2. 3. // vetor formado pelas colunas da matriz E O s´ ımbolo ($) ´ utilizado para indicar o ´ e ındice da ultima linha ou coluna da matriz. 9. 5. 7. 4. = [] 2. 8. 5. 8. Seja o vetor vet obtido das colunas e ıdo da matriz E. Para remover uma linha ou coluna de uma matriz usa-se a matriz vazia []. 8. 2. 3. Matrizes 17 -->E = [B C(:. -->vet = E(:) vet = 4. 5. Para remover a coluna 3 de E. onde a vari´vel t ´ um vetor linha com duas posi¸˜es.:) = [] E = 4. 3. 3.2. 3. 3. A outra forma ´ e . Ela pode ca e u ser usada de duas formas: -->t = size(E) t = 2. 5. ´ -->E(1. 8. 8. 3. E posteriormente para remover a linha 1.

18 Cap´ ıtulo 2.c] = size(E) c = 4. Se n˜o for usado o argumento a a a extra ent˜o a fun¸˜o se aplica a todos elementos. Uso de sum. onde as vari´veis simples c e l cont´m o n´ mero de colunas e linhas de E. Estruturas de dados -->[l. 6. e e desvio padr˜o. Tabela 2. Para a matriz A. ordena¸˜o em ordem decrescente. a ca -->A = [1 2 3. ca a u -->e = length(E) e = 8.4 A = 1. 18. -->sum(A. 5. respectivamente. 2. 24. O SCILAB tem fun¸˜es que se aplicam a vetores e a matrizes. co Fun¸˜o ca sum prod max min sort mean stdev Descri¸˜o ca soma dos elementos. 5 6. a e u Se a fun¸˜o length for usada em uma matriz ela fornecer´ o n´ mero de elementos da matriz. 15. . 4. 15.3.’c’) ans = 6.3: Exemplos de fun¸˜es do SCILAB. Algumas destas fun¸˜es s˜o co co a mostradas na Tabela 2. a Se for acrescentado o argumento ’r’ ent˜o a fun¸˜o se aplica `s linhas da matriz. -->sum(A) ans = 45.7 8 9] 3. 9. Se o a ca a argumento for ’c’ ent˜o ser˜o utilizadas as colunas da matriz. 8.’r’) ans = 12. produto dos elementos. menor elemento. 7. maior elemento. ca m´dia aritm´tica. l = 2. -->sum(A.

-->max(A. 2. 7.’r’) ans = 7. -->max(A.’c’) ans = 3.’r’) ans = 28. 9. . -->prod(A. 6. Uso de sort. 1. 9. Uso de min. 504. -->min(A) ans = 1. 8. 9. 162. Matrizes 19 Uso de prod.4. 4. 6. 5. 120. 2.2. 4. -->prod(A. -->prod(A) ans = 362880. 3.’r’) ans = 1.’c’) ans = 3. Uso de max. 3. -->min(A. 1.’c’) ans = 1. -->sort(A. 2. -->min(A. 80. -->max(A) ans = 9.’r’) ans = 7. -->sort(A.’c’) ans = 6. 8.

20

Cap´ ıtulo 2. Estruturas de dados

6. 5. 9. 8. -->sort(A) ans = 9. 6. 8. 5. 7. 4.

4. 7.

3. 2. 1.

Uso de mean,
-->mean(A,’r’) ans = 4. 5. 6. -->mean(A,’c’) ans = 2. 5. 8. -->mean(A) ans = 5.

Uso de stdev,
-->stdev(A,’r’) ans = 3. 3. 3. -->stdev(A,’c’) ans = 1. 1. 1. -->stdev(A) ans = 2.7386128

O SCILAB possui tamb´m v´rias fun¸˜es para manipula¸ao de matrizes dentre as quais e a co c˜ destacam-se aquelas mostradas na Tabela 2.4. Tabela 2.4: Algumas fun¸˜es para opera¸˜es de matrizes. co co Fun¸˜o ca diag Descri¸˜o ca se o argumento for uma matriz ent˜o produz um vetor coluna cona tendo os elementos da diagonal; se o argumento for um vetor ent˜o a cria uma matriz diagonal com os elementos do vetor; obt´m a parte triangular inferior de uma matriz; e obt´m a parte triangular superior de uma matriz; e altera a forma de uma matriz; cria uma matriz esparsa.

tril triu matrix sparse

Para a matriz A dada acima,

2.4. Matrizes

21

-->d = d = 1. 5. 9. -->D = D = 1. 0. 0. -->L = L = 1. 4. 7. -->U = U = 1. 0. 0.

diag(A)

// diagonal de A em um vetor coluna

diag(d) 0. 5. 0. tril(A) 0. 5. 8. triu(A) 2. 5. 0.

// cria matriz diagonal a partir de um vetor 0. 0. 9. // obtem a parte triangular inferior 0. 0. 9. // obtem a parte triangular superior 3. 6. 9.

A fun¸˜o ca matrix(<matriz>,<linhas>,<coluna>) cria uma matriz com n´ mero de linhas dados por <linhas> e n´ mero de colunas igual a u u <colunas>, a partir de <matriz> com (<linhas> × <colunas>) elementos selecionados no sentido das colunas. Por exemplo, para a matriz B de dimens˜o 2 × 3, a
-->B = [1 2 3;4 5 6] B = 1. 2. 3. 4. 5. 6. -->c = matrix(B,1,6) // matriz de dimensao 1 x 6 c = 1. 4. 2. 5. 3. 6. -->D = matrix(B,3,2) // matriz de dimensao 3 x 2 D = 1. 5. 4. 3. 2. 6.

A partir de <matriz> com alguns elementos nulos, a fun¸˜o sparse(<matriz>) cria uma ca matriz esparsa armazenando somente os elementos n˜o nulos. Para a matriz E, a
-->E = [2 0 -1; 0 5 6; 7 0 9] E = 2. 0. - 1. 0. 5. 6. 7. 0. 9. -->S = sparse(E) // cria matriz esparsa S =

22

Cap´ ıtulo 2. Estruturas de dados

( ( ( ( ( ( (

3, 1, 1, 2, 2, 3, 3,

3) sparse matrix 1) 2. 3) - 1. 2) 5. 3) 6. 1) 7. 3) 9.

Os tripletos acima indicam (linha, coluna, valor), ou seja, linha = 1, coluna = 1, valor = 2; linha = 1, coluna = 3, valor = −1 e assim sucessivamente. De forma alternativa, a partir de uma matriz <linha coluna> com duas colunas contendo os ´ ındices dos elementos n˜o nulos e do vetor <valor> com os valores desses elementos, o comando a sparse(<linha coluna>,<valor>) cria uma matriz esparsa,
-->mat = [1 1; 1 3; 2 2; 2 4; 3 3; 4 1; 5 5] // matriz de dimensao 7 x 2 mat = 1. 1. 1. 3. 2. 2. 2. 4. 3. 3. 4. 1. 5. 5. -->vet = [2 -1 5 4 3 8 -9] // vetor com 7 elementos vet = 2. - 1. 5. 4. 3. 8. - 9. -->F = sparse(mat,vet) // cria matriz esparsa F = ( 5, 5) sparse matrix ( 1, 1) 2. ( 1, 3) - 1. ( 2, 2) 5. ( 2, 4) 4. ( 3, 3) 3. ( 4, 1) 8. ( 5, 5) - 9.

O comando full(<esparsa>) converte a matriz <esparsa> para a sua representa¸˜o cheia. ca Para a matriz F acima,
-->FF = full(F) FF = 2. 0. - 1. 0. 5. 0. 0. 0. 3. 8. 0. 0. 0. 0. 0.

0. 4. 0. 0. 0.

0. 0. 0. 0. - 9.

O SCILAB fornece v´rias matrizes elementares de grande utilidade, como as mostradas na a Tabela 2.5. O n´ mero de parˆmetros providos fornecem as dimens˜es da matriz. u a o Por exemplo,

elementos iguais a 1. e ıdo o qual ´ alterado a cada chamada da fun¸˜o rand. Por exemplo.4) // matriz nula de dimensao 1 x 4 z = 0.4. 1.3) // matriz de 1’s de dimensao 2 x 3 U = 1.4. A fun¸˜o rand com ou sem o argumento extra ’uniform’ gera uma matriz com elementos ca aleat´rios uniformemente distribu´ o ıdos entre 0 e 1.7560439 0.5. 0. -->U = ones(2.3) // matriz identidade de dimensao 3 x 3 I = 1. a o ca e a -->Ru = rand(2.0. Quando o SCILAB for ativado.2113249 0.’uniform’) matriz 2 x Ru = 0. identidade ou parte dela.0) // atribui 0 ao estado -->a = rand(1. 0.429D+09 -->b = rand(1.5: Algumas matrizes elementares do SCILAB. 0. 0.3303271 0. 0.6283918 -->Rn = rand(2. 0. Para atribuir um valor ao estado do e ca gerador quando esta fun¸˜o j´ tiver sido executada usa-se os argumentos ’seed’ e n (valor ca a do estado). Matrizes 23 Tabela 2.9273333 .0002211 0.0002211 0.5417209 4 aleatoria com distribuicao uniforme 0.1.’uniform’) // gera uma sequencia aleatoria uniforme a = 0. Fun¸˜o ca zeros ones eye rand Descri¸˜o da matriz ca nula. elementos aleat´rios com dada distribui¸˜o. 0.2. -->rand(’seed’. 1.0. 1.’normal’) // matriz 2 Rn = 0.7209534 A fun¸˜o rand produz n´ meros pseudo-aleat´rios e a seq¨ˆncia gerada ´ determinada pelo ca u o ue e estado do gerador. Se o argumento extra for ’normal’ ent˜o a a matriz conter´ elementos aleat´rios com distribui¸˜o normal com m´dia 0 e variˆncia 1.7560439 0. 1. ´ atribu´ um valor inicial ao estado.’uniform’) // gera outra sequencia aleatoria uniforme b = .6857310 x 4 aleatoria com distribuicao normal . -->I = eye(3. 1. 1. 0.5.4. o ca -->z = zeros(1.8498895 . 1.6653811 -->rand(’seed’) // verifica o valor do estado ans = 1.6653811 0.8497452 0.0.7223316 0.3303271 0.2113249 0.6834217 . 0.6380837 0.2546697 1.

:.1.6 As hipermatrizes podem ser manipuladas como as matrizes bidimensionais.3 3.’uniform’) // gera uma sequencia igual a primeira c = 0.1 3.3 2.6653811 2.5 2.1 1.5 Hipermatrizes Hipermatrizes s˜o vari´veis homogˆneas com v´rias dimens˜es.3 4.2 3.6 (:.4 1.0683740 -->rand(’seed’. Assim.4 2. faz-se o -->mat1 = [1.1) 1.1 2.6] // define submatriz 4 mat4 = 4.0002211 0. 4.4) 4.4 1.2 4.5 2.3 os elementos da posi¸˜o (2.6] // define submatriz 2 mat2 = 2.2 1.5 4.4 2.2 4.1 3.1 4.2 2.2 2.5 4.3.1 4.7560439 0.5 4.4 3.4 3.6 -->mat3 = [3.6 -->mat4 = [4.6857310 0. 1.24 Cap´ ıtulo 2.5 3.1 1.4 4.3 3.5 1.3 1.5 1.1 1.3 H = .[mat1 mat2 mat3 mat4]) // hipermatriz H de dimensao 2 x 3 x 4 H = (:.3 4.2 3.3) 3.4 4.2113249 0.5 1.6 (:. composta por 4 submatrizes de dimens˜es 2 × 3.<val>).4 1. 2.6 -->H = hypermat([2 3 4].0) // atribui 0 ao estado -->c = rand(1.6] define submatriz 1 mat1 = 1.2 2. Estruturas de dados 0.3 1.1 4.3.2) 2.3303271 0.2 1.2 1. 3. Elas podem ser criadas pelo a a e a o comando hypermat(<dim>. ou seja.8497452 0.5.6283918 0.5 3. Por exemplo. para alterar para 12.4 2.5 2.3.1 2.4 4.2 3.6 (:.8782165 0.1 2.[1 4]) = 12.4 3.3.:. -->H(2. onde o vetor <dim> define as dimens˜es da hipermatriz e o a matriz <val> define os elementos.6 -->mat2 = [2.:.6] // define submatriz 3 mat3 = 3.:.1 3.1) das submatrizes 1 e 4 da hipermatriz H ca acima. para criar a hipermatriz H com dimens˜es o 2 × 3 × 4.5 3.3 2.2 4.

3) 3.3 (:.1 2.1 12.4 (:. onde <vari´vel> ´ uma cadeia de caracteres a a a e que determina a vari´vel do polinˆmio e a outra cadeia de caracteres <modo> especifica como a o o polinˆmio ser´ constru´ o a ıdo.3 1.:.2 2.:. + cn−1 xn−2 + cn xn−1 pode ser conso tru´ a partir dos coeficientes ci definidos no vetor <par^metros>.13x . .:.5 1.3 3.6 2. Polinˆmios o 25 (:.1 12.’c’) // menores elementos das colunas da submatriz 2 ans = 2. utilizando a fun¸˜o ıdo a ca poly(<par^metros>.4 (:.<vari´vel>.3). -->size(H) // dimensoes da hipermatriz ans = 2.6. . Por exemplo.2).:.’x’.1 3.6 Outros comandos. -->P = poly([24 14 -13 -2 1]. Se <modo> = ’coeff’ ent˜o ele ser´ constru´ a partir de a a ıdo seus coeficientes.’coeff’) P = 2 3 4 24 + 14x .5 4.2 1.3 1.2.:. 2.2) 2.6.2 4.4) 4.4 2.’r’) // soma das linhas da submatriz 3 ans = 6. para construir o polinˆmio P (x) = 24 + 14x−13x2 −2x3 + x4 o basta.1) 1.<modo>).6 4.3 2.3 4. -->sum(H(:.6 Polinˆmios o O SCILAB fornece v´rias fun¸˜es que permitem que as opera¸˜es envolvendo polinˆmios a co co o seja feita de um modo bem simples.1 Constru¸˜o ca Os polinˆmios podem ser constru´ o ıdos ou a partir de seus coeficientes ou de seus zeros.:.7 6.2 3.5 6.5 2. 4.6 3.1 2.9 -->min(H(:. 3. Constru¸˜o a partir dos coeficientes ca Um polinˆmio na forma P (x) = c1 + c2 x + c3 x2 + .5 3.2x + x // polinomio P(x) a partir dos coeficientes .

-->a = poly([1 0 -4 5 8].’coeff’) // constroi T(x) a partir dos coeficientes T = 2 3 4 5 1 . e para subtrair -->d = a .26 Cap´ ıtulo 2. 2 e 3 y = 1.’x’.’coeff’) // constroi b(x) b = 2 3 .6. 757.4x + 5x + 8x -->b = poly([-4 -1 5 2]. faz-se o -->R = poly([-1 -3 2 4].13s .2 Avalia¸˜o ca Um polinˆmio ´ avaliado por meio da fun¸˜o horner(<polin^mio>.’roots’) R = 2 3 4 24 + 14s .6.’x’.4 . Assim.<abscissas>). onde o e ca o <polin^mio> cont´m o polinˆmio e <abscissas> cont´m os pontos nos quais ele deve ser o e o e avaliado. ξ3 = 2 e ξ4 = 4.’s’. basta usar os operadores de o adi¸˜o (+) e substra¸˜o (-).’coeff’) // constroi a(x) a = 2 3 4 1 .x + 5x + 2x -->c = a + b // soma polinomios c = 2 3 4 . -->T = poly([1 -3 7 5 -2 3].9x + 3x + 8x . 0. 127.2s + s // polinomio R(s) a partir dos zeros 2.(-1:3)) // avalia T(x) em x = -1. ξ2 = −3. Por exemplo.2x + 3x -->y = horner(T.3 . mas com <par^metros> contendo os zeros do polinˆmio e ca a o sendo <modo> = ’roots’ ou n˜o sendo especificado ent˜o ele ser´ constru´ a partir de a a a ıdo seus zeros. 1.’x’. 2. 1. Estruturas de dados Constru¸˜o a partir das ra´ ca ızes Usando a mesma fun¸˜o poly. mesmo de graus diferentes. para avaliar T (x) = 1 − 3x + 7x2 + 5x3 − 2x4 + 3x5 nos pontos x = −1.3x + 7x + 5x . 0.x + x + 7x + 8x resultando c(x) = −3 − x + x2 + 7x3 + 8x4 . Para um polinˆmio com zeros ξ1 = −1. 11. para somar os polinˆmios a(x) = 1 − 4x2 + 5x3 + 8x4 e ca ca o 2 3 b(x) = −4 − x + 5x + 2x . 2 e 3. 1.b d = // subtrai polinomios 2 3 4 5 + x .3 Adi¸˜o e subtra¸˜o ca ca Para somar e subtrair polinˆmios.

3x + x -->[r.6.’coeff’) h = // constroi h(x) 2 3 4 6 . <polin^mio 1> = o a o <polin^mio 2> * <quociente> + <resto>. Sejam ca o e ca 2 os polinˆmios e(v) = 4 − 5v + 3v e f (v) = −1 + 2v. o -->j = h / i // polinomio racional obtido da divisao de h(x) por i(x) . Polinˆmios o 27 2. No caso do uso do operador de divis˜o (/) em vez da fun¸˜o pdiv. e -->h = poly([6 -5 4 -3 2]. ou seja.’v’.’coeff’) // constroi e(v) e = 2 4 .6.<quociente>] = pdiv(<polin^mio 1>.’coeff’) // constroi f(v) f = .4 Multiplica¸˜o ca A multiplica¸˜o de dois polinˆmios ´ feita utilizando o operador de multiplica¸˜o (*).5 + 25x resultado no quociente q(x) = 11 + 3x + 2x2 com resto r(x) = −5 + 25x.13v + 6v resultando no polinˆmio g(v) = −4 + 13v − 13v 2 + 6v 3 .2. Por exemplo.’v’.i) // divide h(x) por i(x) q = 2 11 + 3x + 2x r = .<polin^mio 2>) faz a dio o vis˜o entre o <polin^mio 1> e o <polin^mio 2>.’x’.6. retornando o polinˆmio quociente em a o o o <quociente> e o polinˆmio do resto da divis˜o em <resto>. a multiplica¸˜o resulta em.’coeff’) // constroi i(x) i = 2 1 .1 + 2v -->g = e * f g = // multiplica e(v) por f(v) 2 3 . Para os a ca e o polinˆmios h(x) e i(x) definidos acima.4 + 13v .3x + 2x -->i = poly([1 -3 1]. ´ criado um polinˆmio racional.q] = pdiv(h.5x + 4x .’x’. o 2.5 Divis˜o a O comando [<resto>.5v + 3v -->f = poly([-1 2]. o ca -->e = poly([4 -5 3]. a divis˜o de h(x) = 6 − 5x + o a 4x2 − 3x3 + 2x4 por i(x) = 1 − 3x + x2 ´ efetuada por.

Por exemplo.4.7 C´lculo de ra´ a ızes A fun¸˜o roots(<polin^mio>) calcula os zeros de <polin^mio>.2.’coeff’) // constroi T(x) T = 2 3 4 24 . caso contr´rio. Quando o polinˆmio for real e possuir grau menor ou igual a 100 a fun¸˜o roots calcula o ca os zeros por um algoritmo r´pido. Estruturas de dados j = 2 3 4 6 .’coeff’) // constroi p(x) p = 2 3 4 .24 + 12x + 12x resultando P ′ (x) = 14 − 24x + 6x2 + 4x3 e P ′′ (x) = −24 + 12x + 12x2 .3x + 2x --------------------2 1 .24x + 6x + 4x -->p2 = derivat(p1) // derivada segunda de p(x) p2 = 2 .’x’. dado por ’e’.28 Cap´ ıtulo 2.5x + 4x . 3. -->p = poly([-5 14 -12 2 1]. o .6 Deriva¸˜o ca A fun¸˜o derivat efetua a deriva¸˜o polinomial.6. os zeros s˜o calculados por meio dos a a a autovalores da matriz companheira. . ent˜o os zeros ser˜o calculados utilizando os autovalores.6. 2.3x + x 2.12x + 2x + x -->p1 = derivat(p) // derivada primeira de p(x) p1 = 2 3 14 . Se for acrescentado o segundo argumento da fun¸˜o ca roots.5 + 14x . .14x . Deste modo. para obter a primeira e ca ca segunda derivada de P (x) = −5 + 14x − 12x2 + 2x3 + x4 .13x + 2x + x -->raizes = roots(T) // calcula as raizes de T(x) = 0 raizes = 1. ızes -->T = poly([24 -14 -13 2 1]. para calcular ca o o 2 3 4 as quatro ra´ de T (x) = 24 − 14x − 13x + 2x + x = 0. independente a a do grau do polinˆmio.’x’.

13. . a o Quando o valor for verdadeiro o ´ ındice ´ acessado e no caso de ser falso o ´ e ındice n˜o ser´ a a acessado. r = roots(T. 1. . Vari´veis l´gicas a o 29 Pode ser mostrado que as ra´ ızes de P (x) = c1 + c2 x + c3 x2 + . 18. Por exemplo. 0.2. . 0. 12. 2.7 Vari´veis l´gicas a o Conforme visto. -->v = [ 11 12 13 14 15 16 17 18 ] // define o vetor v com 8 elementos v = 11. 0. + cn−1 xn−2 + cn xn−1 = 0 s˜o os autovalores da matriz companheira.. -->ind = [%t %t %f %t %f] // define vetor logico ind com 5 elementos . 0 0 .   . . 14. . . com estrutura de vetor a a o ou matriz. 0.%f %T %F] // matriz logica C = T F T F T F As vari´veis l´gicas podem ser utilizadas para acessar os elementos de uma matriz (ou vetor).. . 1. -->a = %t // variavel logica simples a = T -->b = [%f %F %t %T] // vetor logico b = F F T T -->C = [%T %f %t.’e’) ´ equivalente ` e a -->A = companion(T) // matriz companheira do polinomio T(x) A = . 13. 0. Por exemplo. 16. 0 0 C= . . . 0. −c2 /cn −c1 /cn   1 0 . 15. . 0. . . 14.. 0.. 0 0     0 1 . 0.24. .2.   . .7.. 1 0 Deste modo. . a   −cn−1 /cn −cn−2 /cn . 1. . 1. . -->r = spec(A) // autovalores da matriz companheira A r = . os quais podem ser atribu´ ıdos ` uma vari´vel l´gica.2. uma constante l´gica tem os valores %t (ou %T) para verdadeiro e %f (ou o %F) para falso.. 3. . 17. .4.

As listas s˜o uteis para definirem dados estruturados.[1 2 3. -->Rol(2) // objeto 2 de Rol ans = // gera a lista Rol com 3 objetos . 6.8 Vari´veis literais a Uma vari´vel literal cont´m uma constante literal formada por uma cadeia de caracteres a e delimitada por aspas (’) ou ap´strofos ("). 2 e 4 do vetor v ans = 11. O n´ mero de elementos do vetor l´gico deve ser menor ou igual ao n´ mero de elementos do u o u vetor que ele referencia. 3. O uso de vari´veis l´gicas ´ fundamental nas express˜es l´gicas que a o e o o ser˜o vistas na Se¸˜o 3. 14. podendo conter e a matrizes ou mesmo outras listas.2. a ´ Uma lista ´ constru´ a partir do comando list. Estruturas de dados ind = T T F T F -->v(ind) // elementos 1. a ca 2. ca a a ca 2. 4. 2. e ıda -->Rol = list(’tipo’.30 Cap´ ıtulo 2. Por exemplo. b = "cadeia de caracteres" a = SCILAB b = cadeia de caracteres Os caracteres podem ser concatenados usando o operador (+) ou a nota¸˜o vetorial. o -->a = ’SCILAB’. ca -->d = a+’ manipula ’+b d = SCILAB manipula cadeia de caracteres -->e = [a ’utiliza’ b] e = !SCILAB utiliza cadeia de caracteres ! A utiliza¸˜o de vari´veis literais ser´ abordada com mais detalhes na Se¸˜o 3. 5.3. 12.%f. 4 5 6]) Rol = Rol(1) tipo Rol(2) F Rol(3) 1.9 Listas Uma lista ´ um conjunto de dados n˜o necessariamente do mesmo tipo.

1) do objeto 3 de Rol Uma lista pode ser um objeto de outra lista. 2. 55. 20.10 Exerc´ ıcios Se¸˜es 2.1. Rol(2) F Rol(3) 1. Area=3. Apesar de os comandos estarem separados por v´ ırgula. .3) // elemento (1. Atribuir o valor −1.2. 4.2. // objeto 1 de Rol torna-se uma lista Para obter e atribuir valor a objeto da lista. Rol(2) F Rol(3) 1. // elemento (2. 30. 30.23×103 ` vari´vel a e 4. entrar com um de cada vez. limite:sup=3. 2.10. Exerc´ ıcios 31 F -->Rol(3)(2. 3. 5. 20.3) do objeto 2 de Rol(1) ans = 30.1) = 55. faz-se -->Rol(1)(2)(1. -->Rol(3)(2.2 co Observar atentamente e anotar o resultado dos comandos do SCILAB. 6. Conferir os nomes permitidos de vari´veis arco-seno=0.8 5.1) de Rol(3) Rol = Rol(1) Rol(1)(1) tamanho Rol(1)(2) 10.1 e 2.17×10−2 ` vari´vel b. -->Rol(1) = list(’tamanho’.[10 20 30]) Rol = Rol(1) Rol(1)(1) tamanho Rol(1)(2) 10. a area=1.1) ans = 4. 6. a a a a 2.8 // atribuindo novo valor ao elemento (2. 3. 2. 2.

triu(D). Se¸˜o 2. Criar uma matriz de dimens˜o 2 × 3 com elementos l´gicos.5).20.10. prod(A. e(2:4). 0 2 -3.2. 2.9. size(C). f([6 5 1 3]). prod(A. segundo e quarto com o o valor verdadeiro e os outros com o valor falso. A(2.8.1. g = linspace(2.3). D = rand(3.[2 4])=[].5].11. eye(5. tril(D).4 ca Construir as matrizes e verificar o resultado das opera¸˜es e fun¸˜es co co 2.32 Cap´ ıtulo 2. sum(A. C(:.4.3. Criar um vetor l´gico com cinco elementos sendo o primeiro.11.’c’). 2. 2. B = A(2:3. c = 5:-2:-6. . e = linspace(0.3 ca Construir os vetores e analisar as opera¸˜es: co 2.5 -4. f = linspace(10. d = 5:10.’c’).3.4)*%i . ones(2. 2.5. sum(A. b = 10:5:30. 5 7 8].5). = []. 2.’uniform’).’c’). al = [1 3. 2. Atribuir a cadeia de caracteres ’abc’ ` vari´vel literal letras e ’01234’ ` vari´vel a a a a literal numeros.1) = 1. 2. C(2.[2 3 1]). max(B.13.4).’ Se¸˜o 2. A = [6 -1 4. com a terceira coluna com a o elementos com o valor falso e as demais com o valor verdadeiro.’r’). min(B. ac = (2:3:11)’. Estruturas de dados 2. diag(diag(D)).6).14.12.15. 2. C = [A B’]. i = g.6. e(3). zeros(3.10.7.2 7.1. f(3:-1:1). h = g’.’r’).4) + linspace(0. 2.’r’).:) 2.

Por exemplo. Os parˆnteses s˜o usados para alterar a ca ca e e a b ordem de precedˆncia. seguida pela multiplica¸˜o e divis˜o (ambas tendo igual precedˆncia) e seguida e ca a e pela adi¸˜o e subtra¸˜o (com igual precedˆncia). vari´veis e operadores.1-4.Cap´ ıtulo 3 Express˜es o Uma express˜o ´ uma combina¸˜o de constantes.b / c. tendo a potencia¸˜o maior ordem de o a ca precedˆncia.1: Opera¸˜es aritm´ticas b´sicas do SCILAB. enquanto e e c a−b ´ y = (a .7 * 6*9.b) / c. l´gicas e literais. e o 3. Neste cap´ ´ ıtulo ser˜o mostrados os trˆs tipos de express˜es do a e o SCILAB: aritm´ticas. cuja avalia¸˜o a e ca a ca resulta em um valor unico.1 Express˜es aritm´ticas o e ´ E dispon´ ıvel no SCILAB as opera¸˜es aritm´ticas b´sicas mostradas na Tabela 3. co e a Opera¸˜o ca adi¸˜o ca subtra¸˜o ca multiplica¸˜o ca divis˜o a potencia¸˜o ca Express˜o a a+b a−b a×b a÷b ab Operador Exemplo + 1+2 5.98 / ou \ 6/7 5\3 ^ 2^10 express˜es s˜o avaliadas da esquerda para a direita.1. e que y = c 33 . x = a − ´ expresso como x = a . As co e a Tabela 3.

Adi¸˜o vetorial..34 Cap´ ıtulo 3.. ca -->a + c ans = 3. ca .. 4. 55. 44. 33. Estas opera¸˜es b´sicas s˜o apresentadas na Tabela 3.2: Opera¸˜es vetoriais b´sicas. 5.. an ^bn ] [ a1 ∗c a2 ∗c . an /bn ] [ b1 /a1 b2 /a2 . bn /an ] [ a1 ^c a2 ^c ..*b a..2.bn ] e c um escalar Opera¸˜o ca adi¸˜o escalar ca adi¸˜o vetorial ca multiplica¸˜o escalar ca multiplica¸˜o vetorial ca divis˜o ` direita a a divis˜o ` esquerda a a potencia¸˜o ca Express˜o a a+c a+b a*c a../b a. 40...an ]..... Express˜es o 3. an +c ] [ a1 +b1 a2 +b2 .. ca co a a As opera¸˜es de multiplica¸˜o. 3. an ∗c ] Adi¸˜o escalar.. c = 2 a = 1. c^an ] [ a1 ^b1 a2 ^b2 . divis˜o e potencia¸ao envolvendo vetores quando antecedico ca a c˜ das pelo caracter (. 20. Multiplica¸˜o escalar. ca -->a + b ans = 11. co a Sejam a = [ a1 a2 . Tabela 3.. 2. 5.\b a.. an ^c ] [ c^a1 c^a2 . 22.^a a.. b = 10. 50. b = [ b1 b2 ..^c c. Resultado [ a1 +c a2 +c . 6.^b Considere as vari´veis.. 7.. a -->a = 1:5.. 4.1 Express˜es vetoriais o As opera¸˜es b´sicas entre vetores s´ s˜o definidas quando estes tiverem o mesmo tamanho co a o a e orienta¸˜o (linha ou coluna).) significa que estas opera¸˜es s˜o efetuadas entre os correspondentes co a elementos dos vetores. an ∗bn ] [ a1 /b1 a2 /b2 . c = 2.1. 30. an +bn ] [ a1 ∗b1 a2 ∗b2 . b = 10:10:50.

30. -->a . 50.882D+34 3.209D+24 8. 2 3. 1048576. 7 8 9]. 4./ b ans = 0.1 Divis˜o vetorial ` esquerda entre elementos correspondentes. 60.\ b ans = 10. 10. 80. 32. c = 3 2. 10. B = 10. 10. 70 80 90].2 Express˜es matriciais o De modo similar `s opera¸˜es vetorias. B = [10 20 30. Potencia¸˜o. 7. 9.1 0.^ b ans = 1. -->c . 250.059D+14 1.^ a ans = 2.3. 20. ca a ca Sejam as matrizes A e B de ordem 3 e o escalar c. Express˜es aritm´ticas o e 35 -->a * c ans = 2. 90.1.1 0. 160. 4. 3. a a -->a . 6.^ c ans = 1. 40. 4. 6. 90.1 0. O operador (\) envolvendo matrizes e vetores est´ relacionado a com solu¸˜o de sistemas lineares.1 0. 10. 10. 40. 8. 2. . c = 3. 4. conforme ser´ visto na Se¸˜o 7. ca -->a . 70. -->A = [1 A = 1.* b ans = 10. 16. 4 5 6.3. existem as opera¸˜es matriciais b´sicas.1. as quais est˜o a co co a a compiladas na Tabela 3.3. 16. 8. ca -->a . 8. a a -->a . Multiplica¸˜o vetorial entre elementos correspondentes.2. 40 50 60. 5. 9. 25. Divis˜o vetorial ` direita entre elementos correspondentes.

ca . 55.^c c.. 8. bp1 bp2 . 24. . b2n .. 11.. . Multiplica¸˜o escalar. a21 a22 . Express˜es o Tabela 3. .. 44.^B Resultado aij + c aij + bij aij ∗ c AB aij ∗ bij aij /bij Ac ac ij caij ij aij bij /aij b Adi¸˜o escalar.. 15.^A A. a1p . amp ] B = [ b11 b12 . 9. b1n .. 27. co a Sejam c um escalar e A = [ a11 a12 . bpn ] Opera¸˜o ca adi¸˜o escalar ca adi¸˜o matricial ca multiplica¸˜o escalar ca multiplica¸˜o matricial ca multiplica¸˜o entre elementos correspondentes ca divis˜o ` direita entre elementos correspondentes a a divis˜o ` esquerda entre elementos correspondentes a a potencia¸˜o ca Express˜o a A+c A+B A*c A*B A. Adi¸˜o matricial. 12. 5. 66.) deve c o e ser observada.36 Cap´ ıtulo 3. . 99. 12. 22. b21 b22 . 18. a2p . 88... 9. Na multiplica¸˜o matricial.3: Opera¸˜es matriciais b´sicas. 10. 33..*B A. 21. ca -->A + B ans = 11.. ca -->A + c ans = 4./B A. 6... 6. 77..\B A^c A. 7.. ca -->A * c ans = 3. A diferen¸a no resultado das express˜es quando os operadores cont´m o caracter (.. am1 am2 ..

2034.887D+46 1. 1048576. 27.1 0.618D+85 . 960. 216.209D+24 8.1 0. 10. 19683. 729.1 Divis˜o ` esquerda entre elementos correspondentes. 10. ca -->A . Multiplica¸˜o entre elementos correspondentes. 810. 660. 10. 576. 1500. 10. E nos diferentes tipos de potencia¸˜o.\ B ans = 10. 2. 1305. 684. ca -->A .435D+59 1. Express˜es aritm´ticas o e 37 -->A * B ans = 300. 81. 8. 1260.1 0. 729.^ c // elemento da matriz elevado a uma constante ans = 1. 10.1 0.882D+34 4. a a -->A . 10.1 0. 2187. 40. 1062. 420.3. -->A ^ c // matriz elevada a uma constante ans = 468.^ A // constante elevada a elemento da matriz ans = 3. -->A .1.1 0. 9.1 0. 343. 27. 810. 1548. 250. 90. a a -->A . 1020.* B ans = 10.1 0. 360. 125. 10.767D+72 7.^ B // elemento de matriz elevado a elemento de matriz ans = 1./ B ans = 0. 1656. -->c . 243. 640. 2412. 360. Divis˜o ` direita entre elementos correspondentes. 6561. 490.059D+14 1. 64. 160. 10. 512.

Tabela 3. 1. 5. 3.7320508 2. 2.38 Cap´ ıtulo 3. 1. Express˜es o ´ E importante observar que no SCILAB as opera¸˜es c.b]’ ans = 1. Se a vari´vel for um vetor ou uma matriz a avalia¸˜o de uma fun¸˜o se d´ para cada elemento a ca ca a da vari´vel. o SCILAB oferece v´rias fun¸˜es importantes.^A e c^A s˜o equivalentes. 2. co a Fun¸˜o ca acos asin atan cos acosh asinh atanh cosh coth exp abs conj ceil fix floor gcd Descri¸˜o ca arco co-seno arco seno arco tangente co-seno Fun¸˜o ca trigonom´tricas e cotg sin tan Descri¸˜o ca co-tangente seno tangente logaritmo natural logaritmo decimal seno hiperb´lico o raiz quadrada tangente hiperb´lica o parte imagin´ria do complexo a parte real do complexo m´ ınimo m´ ltiplo comum u resto de divis˜o a arredonda em dire¸˜o ao inca teiro mais pr´ximo o sinal exponenciais arco co-seno hiperb´lico o log arco seno hiperb´lico o log10 arco tangente hiperb´lica o sinh co-seno hiperb´lico o sqrt co-tangente hiperb´lica o tanh exponencial complexas valor absoluto imag complexo conjugado real num´ricas e arredonda em dire¸˜o a +∞ ca lcm arredonda em dire¸˜o a 0 ca modulo arredonda em dire¸˜o a −∞ ca round m´ximo divisor comum a sign . A Tabela 3. Como pode co a ser esperado de uma linguagem para aplica¸˜es nas ´reas t´cnicas e cient´ co a e ıficas. a -->a = 1:5 a = 1.4: Fun¸˜es matem´ticas elementares do SCILAB.4 apresenta algumas fun¸˜es matem´ticas a co co a elementares do SCILAB. -->b = sqrt(a) // raiz quadrada b = 1. 4.4142136 1.236068 Os resultados acima podem ser apresentados na forma de uma tabela por interm´dio do e comando -->[a.

7. caso contr´rio cont´m o valor F (falso). 3. 2. A natureza da compara¸˜o ´ indicada por um operador relacional conforme a ca e Tabela 3.5. 5. 2. Os operadores relacionais s˜o usados para comparar ca a vetores ou matrizes do mesmo tamanho ou comparar um escalar com os elementos de um vetor ou de matriz. . 1.7320508 2. c = 5 a = 1. 2. Assim. 4. 10. 5. ca o a e sendo que F vale 0 e T tem o valor 1. Uma rela¸˜o ´ uma compara¸˜o realizada entre valores do a o ca e ca mesmo tipo. No SCILAB ca a o e o resultado ´ literal. sendo que T significa verdadeiro e F significa falso. Operador relacional == > >= < <= ~= ou <> Descri¸˜o ca igual a maior que maior ou igual a menor que menor ou igual a diferente de O resultado de uma rela¸˜o ou de uma express˜o l´gica ´ verdadeiro ou falso. Apesar de o resultado a e da rela¸˜o l´gica ser um valor literal.4142136 1. 3. -->a = 1:10. ele pode fazer parte de uma express˜o aritm´tica.5: Operadores relacionais do SCILAB. b = 9. 8.2. 6. b = 9:-1:0. 0. Note que o caracter e (=) ´ usado para atribui¸˜o de um valor ` uma vari´vel enquanto que os caracteres (==) s˜o e ca a a a usados para compara¸˜o de igualdade. 3. c = 5. Express˜es l´gicas o o 39 2. 1. Tabela 3. 4. 7. 9. 8. -->d = a >= c d = F F F F T T T T T T produz um vetor que cont´m o valor T (verdadeiro) quando o elemento correspondente do e vetor a for maior ou igual a 5.236068 3.2 Express˜es l´gicas o o Uma express˜o se diz l´gica quando os operadores forem l´gicos e os operandos forem rela¸˜es a o o co e/ou vari´veis do tipo l´gico. 6.3. Sejam os vetores a e b e o escalar c. 4. 5.

40 Cap´ ıtulo 3. 4. 3. 10.8. o Operador l´gico Descri¸˜o o ca & e | ou ~ n˜o a Para os vetores a e b definidos anteriormente.^2 > -9 & 3*b <= 15 h = F F F F T T T F F F . 6. o a Os parˆnteses podem ser usados para alterar a ordem de precedˆncia. o valor 1 (resultado da rela¸˜o l´gica) ´ ca o e adicionado ao correspondente valor de a. ca a -->h = -(a-5).6: Operadores l´gicos do SCILAB.7 apresenta a tabela verdade para os operadores l´gicos do SCILAB. a T T F F b T F T F a & b T F F F a | b ~a T F T F T T F T A ordem de precedˆncia no SCILAB para express˜es envolvendo operadores aritm´ticos e e o e l´gicos s˜o indicados na Tabela 3. a -->g = ~f g = T T T F F F F F T T A Tabela 3.7: Tabela verdade. o Tabela 3. Os operadores l´gicos permitem a combina¸˜o ou o ca nega¸˜o das rela¸˜es l´gicas. onde for T ser´ F e vice-versa basta. Express˜es o -->e = a + (b <= 3) e = 1. caso contr´rio s˜o iguais a F. 11. Os operadores l´gicos do SCILAB s˜o listados na Tabela 3. 8. -->f = (a>3) & (a<=8) f = F F F T T T T T F F Uso conjun¸˜o ca disjun¸˜o ca nega¸˜o ca Os elementos de f s˜o iguais a T quando os correspondentes elementos de a forem maiores a do que 3 e menores ou iguais a 8. 9. a avalia¸˜o da express˜o. Quando um elemento de b for menor ou igual a 3. 2. Para os vetores a e b e e definidos acima. 5. Para fazer a nega¸˜o. ca co o o a Tabela 3. ou a a ca seja.6.

.1 Convers˜o de caracteres a Ser˜o apresentadas fun¸˜es para alterar o tamanho da caixa das letras e fazer a convers˜o a co a de caracteres para n´ mero e vice-versa.<tipo>) converte a cadeia de caracteres <texto> de acordo ca com o <tipo>.2. 15. 4.3. -->h3 = 3*b h3 = 27. . . 3.’ / \ .^2 h2 = 16.^ ’ .3 Express˜es literais o O SCILAB disp˜e de v´rias fun¸˜es para manipula¸˜o de cadeia de caracteres. 4.9. 16.1. .~ +(un´rio) -(un´rio) a a >= < <= == ~= & ´ equivalente `s v´rias etapas. 1.25.\ . ./ .4.16. Se ele for ’u’ ent˜o converte para caixa alta (mai´ sculo) e se for ’l’ ou a u omitido converte para caixa baixa (min´ sculo). 18. 25. 21. 0. 5. 24. u . 3. e co e o Ordem de precedˆncia e 1a 2a 3a 4a 5a ^ * + > | Operadores . 3. . sendo algumas o a co ca delas mostradas a seguir. 0. 1.4. 0.1. 4. .8: Ordem de precedˆncia das opera¸˜es aritm´ticas e l´gicas.9. 3. 6. -->h4 = -h2 h4 = . e a a -->h1 = a-5 h1 = .16. Express˜es literais o 41 Tabela 3. 0.4.3. u Caixas altas e baixas A fun¸˜o convstr(<texto>. . 12.3. 9. 9. 1. .* . . .1. -->h2 = h1. -->h5 = h4 > -9 h5 = F F T T T T T F F F -->h6 = h3 <= 15 h6 = F F F F T T T T T T -->h = h5 & h6 h = F F F F T T T F F F 2. 9.3.

105.’u’) // converte para caixa alta ans = CAIXAS ALTAS E BAIXAS -->convstr(texto) // converte para caixa baixa ans = caixas altas e baixas C´digo ASCII o Os comandos <n´mero> = ascii(<texto>) e <texto> = ascii(<n´mero>) fazem a conu u vers˜o dos caracteres ASCII (American Standard Code for Information Interchange) contia dos no vetor de caracteres <texto> para valores num´ricos e atribuem ao vetor <n´mero> e e u vice-versa.9: Caracteres em c´digo ASCII. Express˜es o -->texto = ’Caixas Altas e Baixas’ // define o texto texto = Caixas Altas e Baixas -->convstr(texto. 45 46 . de acordo com a Tabela 3. 43. -->s = ’5+3*i’ s = 5+3*i -->n = ascii(s) n = 53. 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 94 95 96 97 98 99 ] ^ _ ‘ a b c 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 100 d 101 e 102 f 103 g 104 h Por exemplo.9. // converte numeros para caracteres . 42.42 Cap´ ıtulo 3. para o vetor s de tamanho 5. 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 . o Representa¸˜o decimal dos caracteres ca 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ’ 40 ( 41 ) 42 * 43 + 44 . Tabela 3. -->t = ascii(n) t = 5+3*i // converte caracteres para numeros 51.

231. 14. -->c = ascii(m) c = Fun¸~o ca 227.12. Express˜es literais o 43 Tabela 3. 27. 10. 117. 12. -->d = ’N’+ascii(250)+’mero’ d = N´mero u C´digo do SCILAB o Os comandos <texto> = code2str(<n´mero>) e <n´mero> = str2code(<texto>) fazem a u u convers˜o de um vetor num´rico <n´mero> para a cadeia de caracteres <texto> e vice-versa. 29. a ca . ou de um modo mais simples. o Representa¸˜o decimal dos caracteres ca 192 ` A 193 ´ A A 194 ^ 195 ~ A 196 ¨ A A 197 ˚ 198 Æ 199 C ¸ 200 ` E 201 ´ E E 202 ^ 203 ¨ E 204 ` I I 205 ´ 206 ^ I 207 ¨ I 208 209 210 211 212 213 214 D ~ N ` O ´ O ^ O ~ O ¨ O 216 Ø 217 ` U U 218 ´ 219 ^ U 220 ¨ U Y 221 ´ 222 223 ß 224 ` a 225 ´ a 226 ^ a 227 ~ a 228 ¨ a 229 ˚ a 230 æ 231 ¸ c 232 ` e 233 ´ e 234 ^ e 235 ¨ e 236 ` ı 237 ´ ı 238 ^ ı 239 ¨ ı 240 241 242 243 244 245 246 ∂ ′ 248 ø 249 ` u 250 ´ u 251 ^ u 252 ¨ u 253 ´ y 254 255 ¨ y ~ n ` o ´ o ^ o ~ o ¨ o 215 × 247 ÷ Este comando ´ particularmente util para escrever textos em portuguˆs (ver Tabela 3.3.10: Caracteres em c´digo ASCII estendido do SCILAB. 27. a e u segundo o c´digo do SCILAB.10). 10. 111. 110.3. 14. o -->texto = ’Caracteres’ // define o texto texto = Caracteres -->numero = str2code(texto)’ // converte texto para numero (vetor transposto) numero = . -->palavra = code2str(numero) // converte numero para texto palavra = Caracteres ´ E importante observar que os c´digos de convers˜o produzidos pelas fun¸˜es code2str e o a co str2code s˜o diferentes daqueles produzidos pela fun¸˜o ascii. e ´ e -->m = [ 70 117 110 231 227 111 ] m = 70. 28.

. -->length([’ab’ ’123’. se ela for uma matriz ent˜o ´ informado o n´ mero de caracteres de a a e u cada elemento. -->v = 4. <vari´vel> = a a a emptystr(<matriz>) cria a matriz de caracteres <vari´vel> vazia com as mesmas dia mens˜es de <matriz>. 90. .35.25 m/s 3.3. conforme ser´ visto no a a Cap´ ıtulo 6. -->asc = ascii(car) // converte para codigo ASCII asc = 48. 3. 4. 35.<colunas>) gera uma matriz de caractea res <vari´vel> vazia de dimens˜o <linhas> × <colunas>. operar e procurar caracteres. Por sua vez. 10.25 -->titulo = ’velocidade = ’ + string(v) + ’ m/s’ titulo = velocidade = 4. fun¸˜es para obter o tamanho. 65.10.44 Cap´ ıtulo 3. 49. ’*’ ’abcd’]) // numero de caracteres de matriz ans = 2. Este comando ´ de ca e grande utilidade quando da escrita de r´tulos e t´ o ıtulos em gr´ficos. 122.2 Manipula¸˜o de caracteres ca Ser˜o descritas. Express˜es o -->car = ’01AZaz’ // define caracteres car = 01AZaz -->cod = str2code(car)’ // converte para codigo do SCILAB (vetor transposto) cod = 0. -->length(’abcde’) // numero de caracteres ans = 5. N´meros u O comando <texto> = string(<n´mero>) converte a constante num´rica <n´mero> para u e u a sua representa¸˜o em caracteres e atribui o resultado a <texto>. Cria¸˜o ca O comando <vari´vel> = emptystr(<linhas>. a seguir. 1. a co Tamanho A fun¸˜o length(<vari´vel>) fornece o n´ mero de caracteres presentes na cadeia de caca a u racteres <vari´vel>. o .25 v = 4. 97. 1. criar.

’ >= ’) // insere ’ >= ’ entre cada elemento ve = a >= b >= c >= d >= e Opera¸˜o ca O comando <matriz pos> = justify(<matriz>.d. A fun¸˜o strcat(<vetor>. 0. 0. Se for igual a ’l’ as colunas ser˜o movidas para a esquerda. -->vet = [’a’ ’b’ ’c’ ’d’ ’e’] // define vetor de caracteres vet = !a b c d e ! -->vv = strcat(vet. -->matnum = [ 1 2. Express˜es literais o 45 -->mat = emptystr(2.3. 0. 4. alterando a posi¸˜o das colunas da matriz de caracteres <matriz> de ca acordo com <posi¸~o>.3.’. 3 4] // define matriz numerica matnum = 1. 0.’ entre cada elemento vv = a. se for ca a ’c’ elas ser˜o centradas e se <posi¸~o> = ’r’ as colunas ser˜o movidas para a direita. uma maca triz de caracteres.’c’) // cria matriz C a partir de M com colunas centradas . -->S = emptystr(matnum) // matriz vazia com mesma dimensao de matnum S = ! ! ! ! ! ! -->length(S) // numero de caracteres de S ans = 0. 3. ’abc’ ’01’ ’def’] // matriz M = !abcdefg h ijklmnopq ! ! ! !1 1234567 7890 ! ! ! !abc 01 def ! -->C = justify(M.e -->ve = strcat(vet. 0. 0. 0.b.<posi¸~o>) cria <matriz pos>. ’1’ ’1234567’ ’7890’. a ca a -->M = [’abcdefg’ ’h’ ’ijklmnopq’.’) // insere ’.3) // matriz vazia de dimensao 2 x 3 mat = ! ! ! ! ! ! -->length(mat) // numero de caracteres de mat ans = 0.c.<caracteres>) insere a cadeia <caracteres> entre cada eleca mento da cadeia de caracteres <vetor>. 0. 2.

Express˜es o C = !abcdefg ! ! 1 ! ! abc h 1234567 01 ijklmnopq 7890 def ! ! ! ! ! A fun¸˜o stripblanks(<texto>) elimina os caracteres brancos do in´ e do final da cadeia ca ıcio de caracteres <texto>.46 Cap´ ıtulo 3. e ı -->s = ’1234567890abcdefgh’ s = 1234567890abcdefgh -->v = strsplit(s.’E’) // substitui as letras ’e’ por ’E’ ans = dEtErminantE = produto dos autovalorEs -->strsubst(frase. A fun¸˜o strsplit(<texto>. -->frase = ’determinante = produto dos autovalores’ // define o texto frase = determinante = produto dos autovalores -->strsubst(frase. -->v = ’ a b c ’ // vetor v com 3 caracteres brancos no inicio e no final v = a b c -->length(v) // numero de caracteres de v ans = 11.’ = ’.’e’.<´ndice>) quebra a cadeia de caracteres <texto> nas posi¸˜es ca ı co dadas no vetor num´rico <´ndice> gerando um vetor de caracteres.[3 8 12]) v = !123 ! ! ! !45678 ! ! ! !90ab ! ! ! !cdefgh ! // define vetor de caracteres // quebra o vetor s nas posicoes 3. 8 e 12 A fun¸˜o strsubst(<matriz>.<texto 1>.’’) // remove todos os caracteres brancos ans = determinante=produtodosautovalores .’ ’.’ e’’ igual ao ’) // substitui simbolo por texto ans = determinante e’ igual ao produto dos autovalores -->strsubst(frase. -->s = stripblanks(v) // remove caracteres brancos do inicio e do final de v s = a b c -->length(s) // numero de caracteres de s ans = 5.<texto 2>) substitui todas as ocorrˆncias da caca e deia de caracteres <texto 1> na matriz de caracteres <matriz> pelos caracteres contidos em <texto 2>.

linha = 1. -->[ind. 8. 7. Os caracteres aa e da foram encontrados nas posi¸˜es 2. 8. 1.<qual>] = grep(<vetor>.’a’) // procura os indices de ocorrencia de ’a’ ind = 1. 7. 1 (aa) e 2 (da). respectivamente.scilab. 6. 6. sendo que na linha 1 o primeiro a ser encontrado tem o ´ ındice 2 (scilab) e na linha 3 foi o de ´ ındice 1 (ver). Estes ´ ındices s˜o retornados no vetor num´rico a e <´ndices>. 2.3.<delimitador>) cria um vetor coluna de caracteres <elementos> particionando a cadeia de caracteres <texto> onde ocorrer a presen¸a c . -->vetor = [’o scilab e’’ um software livre’.[’aa’ ’da’]) qual = 1. Por exemplo. Express˜es literais o 47 Procura Seja o comando [<linhas>. O comando <elementos> = tokens(<texto>. pelo menos. 1 (aa).’scilab’]) // procura por ’ver’ e ’scilab’ qual = 2. Considere o comando [<´ndices>.org’] // define o vetor de caracteres vetor = !o scilab e’ um software livre ! ! ! !para aplicacoes cientificas ! ! ! !ver www. O argumento opcional <qual> fornece ´ ı ındices informando qual das cadeias de caracteres de <vetor i> foram encontradas. 2.<qual>] = strindex(<texto>. --> ’para aplicacoes cientificas’. 1.qual] = strindex(’baad daaa bdac’. -->ind = strindex(’abcd dabc’. a fun¸˜o grep pesquisa se pelo menos uma cadeia de caracteres no ca vetor <texto> ´ igual a uma subcadeia de <vetor>. Os caracteres ver e scilab foram encontrados nas linhas 1 e 3. uma igualdade foi encontrada. --> ’ver www. Por exemplo. e 12 e os elementos que co apareceram foram. -->ind = strindex(’baad daaa’.[’ver’. O argumento opcional <qual> fornece ´ ındices informando qual das cadeias de caracteres de <texto> foi a primeira a ser encontrada. ind = 2. A fun¸˜o ı ca strindex procura os ´ ındices de onde o i-´simo elemento do vetor de caracteres <vetor i> foi e encontrado na cadeia de caracteres <texto>. 12. 1 (aa).org ! -->[linha. 7.scilab. 3.’aa’) // indices de ocorrencia de ’aa’ ind = 2. 8.qual] = grep(vetor. O vetor num´rico <linhas> informa e e os ´ ındices das entradas de <vetor> onde. 1. Para cada entrada do <vetor> de caracteres. 7.<texto>).3.<vetor i>). 2 (da).

9. Se este argumento for omitido ent˜o ´ assumido o vetor e ´ a e [’ ’. Express˜es o de um dos componentes do vetor <delimitador>. // particiona com delimitador ’ ’ . A fun¸˜o tokenpos ca particiona a cadeia de caracteres <texto> onde ocorrer a presen¸a de um dos componentes c do vetor <delimitador>. 20.48 Cap´ ıtulo 3. -->tokenpos(’Exemplo de cadeia de caracteres’) ans = 1. 7. 12.<Tab>] (caracteres branco e ascii(9)). Cada componente do segundo a e argumento ´ formado por um unico caracter. 10. Por exemplo. -->tokens(’Exemplo de cadeia de caracteres’) // particiona com delimitador ’ ’ ans = !Exemplo ! ! ! !de ! ! ! !cadeia ! ! ! !de ! ! ! !caracteres ! -->tokens(’Exemplo de cadeia de caracteres’. 17. Se este argumento for omitido ent˜o ´ assumido e ´ a e o vetor [’ ’.<Tab>] (caracteres branco e ascii(9)).’c’) // delimitador ’c’ ans = !Exemplo de ! ! ! !adeia de ! ! ! !ara ! ! ! !teres ! -->tokens(’Exemplo de cadeia de caracteres’.<delimitador>). Cada componente do segundo argumento ´ formado por um unico caracter. Por exemplo. 19. Os ´ ındices inicial e final de cada elemento resultante da parti¸˜o ca s˜o atribu´ a ıdos ` matriz num´rica de duas colunas <matriz>.[’d’ ’t’]) ans = !Exemplo ! ! ! !e ca ! ! ! !eia ! ! ! !e carac ! ! ! !eres ! // delimitadores ’d’ e ’t’ Seja o comando <matriz> = tokenpos(<texto>.

Execu¸˜o de express˜es ca o 49 22. -->c = part([’123’. 13. -->x = 1. 28. 31.’bcd’. // delimitadores ’d’ e ’t’ Seja o comando <elementos> = part(<texto>. eval(’2*x+exp(y-2)’) ans = 3. A fun¸˜o eval ´ tamb´m capaz de executar tarefas mais complexas. 15. 4 e 1 O comprimento do primeiro componente ’a’ ´ 1 que ´ menor que 2 e 4.4 Execu¸˜o de express˜es ca o O SCILAB possui comandos com o prop´sito de executar express˜es. a a -->vet = part([’a’. 18. um dos quais ´ o eval.[’d’ ’t’]) ans = 1. Note que para avaliar uma express˜o que possui as vari´veis x e y. portanto. 2. co ı Por exemplo.4. 20.[1. y = 2.3.’890’]. 31.’4567’.3]) c = !13 46 80 ! // obtencao usando indices 1 e 3 Se um elemento de <´ndice> for maior que o comprimento de um componente de <texto> ı ent˜o <elementos> receber´ um caractere branco. o primeiro e e componente de vet recebe dois caracteres brancos nas posi¸˜es 2 e 3. -->tokenpos(’Exemplo de cadeia de caracteres’. Por exemplo. A fun¸˜o part obt´m ca e <elementos> a partir dos elementos de <texto> nas posi¸˜es especificadas em <´ndice>.4.1]) vet = !a a bc b efhe ! // obtencao usando indices 1. estas tˆm que ser previa a e amente definidas.<´ndices>). ca e e . ıda a a -->r = eval(’sin(%pi/2)’) r = 1. 10. 26. o o e cuja sintaxe ´ e <resultado> = eval(<express~o>) a A cadeia de caracteres <express~o> cont´m a express˜o matem´tica que deve ser interprea e a a tada e atribu´ ` vari´vel <resultado>.2. onde <elementos> e <texto> ı s˜o matrizes de caracteres e <´ndices> ´ um vetor num´rico de ´ a ı e e ındices.[1. e ca 3. 8. O segundo componente co ’bcd’ tem comprimento 3 que ´ menor que 4 por isso recebe um branco na posi¸˜o 3.’efghi’].

d = 4.:)) // avalia a expressao da linha 1 com x = 16 ans = 4.5678i com este valor num´rico ´ poss´ e e ıvel.1. Se¸˜o 3. Avaliar as express˜es escalares o 5+3. b = 2. e = 5. O argua o ca e mento <express~o> deve estar escrito de acordo com as regras de defini¸˜o de constantes a ca num´ricas vistas na Se¸˜o 2. Apesar de os comandos estarem separados por v´ ırgula. Sejam a = 1. Avaliar x= 3 e(e − a)(e − b) + cd .090566 + 0. 3. calcular a raiz quadrada.678e-1*%i’) x = 123. por exemplo.23d2+5. 6*2^3. 3^2. Express˜es o -->Tabela = [’sqrt(x)’.5 Exerc´ ıcios Observar atentamente e anotar o resultado dos comandos do SCILAB.:)) // avalia a expressao da linha 3 com x = 2 ans = 20. 2\ 5.1. ’exp(x)’. 1+2*3-4/5.50 Cap´ ıtulo 3. -->x = 2. -->y = sqrt(x) y = 11. c2 √ b+a 1 + b2 . c = 3.2. + b − a 1 + b3 .1 ca 3.’1/x+5*x^2’] // define uma matriz com 3 expressoes Tabela = !sqrt(x) ! ! ! !exp(x) ! ! ! !1/x+5*x^2 ! -->x = 16.0255983i 3.5 A fun¸˜o evstr(<express~o>) converte a representa¸˜o do valor num´rico da cadeia de ca a ca e caracteres <express~o> escrita em c´digo ASCII para a representa¸˜o num´rica. 4-1. 6*3. 10/2. cos(a) d + sen(b + c) + exp 3 b2 − c + y =a− d+e z = log10 b d + e2 . eval(Tabela(1. e ca -->x = evstr(’1. + 0. eval(Tabela(3. entrar com um de cada vez.

3.14. x > -1. M*N. abs(x) == 1. 3.9. u-k.^k. z^M. 4 6 -1. Exerc´ ıcios 51 Avaliar as express˜es vetoriais para u = 2:6.4.cos(u-k*v). -5 2 1]. M. 3. c co ceil(a).7. round(a). x <= -1 & v > 1. fix(a). 3.3.8.14. Verificar a diferen¸a entre as fun¸˜es usando a = π e a = −5. M*x. u.5.6. u.6. M*z./N.^u. u.^z. d = ca a a o exp(0) == 0. 3 2 1].11. k = 5. 3. dados a = %t.5). sign(a).\v. conj(c).13. M+N. real(c). v = linspace(10. Se¸˜o 3. M-z. 3 1 -1. z.10.^M. c = sqrt(2) > 1.^u. u+v. x = (1:3)’.\N. 3. M^z. floor(a). u*k. Com rela¸˜o `s vari´veis l´gicas. w = sqrt(u+v) .*N.15./v. . o 3. M.2 ca 3. x > 1 | abs(v-3) < 1. u. 3.*v. M.5.^N.3.12. co abs(c). imag(c). Avaliar as express˜es matriciais para o M = [2 -3 1. observar os resultados das fun¸˜es complexas. 3. M. completar a tabela a b c d a&b a&c b&d a|b a|c b|d ~a ~b Avaliar as express˜es l´gicas para x = -2:2 e v = 1:5. o o 3. v. M. 3. z = 2. k. b = %f. N = [1 1 2. Para c = 3 + 4i e c = 5 − 3i. 3.

substituir toda ocorrˆncia do caracter ’d’ pelo caracter e ’X’.22.23. 3. Dado ’abcde edabc eacdb’. Converter para n´ mero as cadeias de caracteres ’12.20. u 3.52 Cap´ ıtulo 3. co 3. 3.16. a Para x = 1:5 e y = 3.17. ı a co 3. Dada a seq¨ˆncia de caracteres ’abcdeedabceacdbdbcae’ determinar os ´ ue ındices de onde ocorre ’bc’. Quebrar a cadeia de caracteres ’123456789012345’ nas posi¸˜es 5 e 10.3d-1’ e ’0. 3. Definir os comandos para gerar as cadeias de caracteres T´tulo.21. ’exp(x-y)’. vari´vel e equa¸~es. Dada a cadeia de caracteres [’1’ ’2’ ’3’ ’4’]. inserir ’ menor que ’ entre eles.25.24.0456789e2’. o 3.19.18. Se¸˜o 3.4 ca 3. Qual a diferen¸a entre as fun¸˜es evstr e string? c co .* sinh(x*y/10)’. 3.y) . Express˜es o Se¸˜o 3. Avaliar o resultado da express˜o dada pela cadeia de caracteres ’sqrt(4)+cos(%pi)’. ’modulo(x. avaliar as express˜es abaixo.3 ca 3.

6857310 0.8782165 0. ıda grava¸˜o e leitura das vari´veis de uma sess˜o de trabalho e de arquivos. Se o resultado for um e n´ mero real (ponto flutuante).1415927 O comando disp(<vari´vel>) ´ usado para exibir o conte´ do de <vari´vel> sem mostrar a e u a o seu nome ou para exibir uma cadeia de caracteres contida na <vari´vel>.3303271 0. Se os e d´ ıgitos significativos do resultado estiverem fora desta faixa ent˜o o resultado ser´ exibido a a em nota¸˜o cient´ ca ıfica.<d´gitos>) ´ usada para alterar o formato num´rico de exibi¸˜o.18 2.Cap´ ıtulo 4 Comandos de entrada e sa´ ıda O SCILAB fornece algumas facilidades para especificar o formato de sa´ dos resultados.0683740 0. ele ´ mostrado com dez caracteres.718D-10 2.8497452 0. Quando o sinal for positivo ´ exibido um caracter branco em seu lugar.6.’uniform’)) numeros aleatorios entre 0 e 1 0. O resultado ´ exibido a e usando um formato pr´-definido.6653811 0.0002211 0. ca a a 4. incluindo o ponto decimal u e e o sinal. e -->%pi %pi = 3.1 Formato de exibi¸˜o ca Para saber o valor de uma vari´vel basta entrar com o seu nome. disp(rand(2.0000272 271828.2113249 0. ca ı e e ca onde <tipo> ´ um dos caracteres ’v’ ou ’e’ para indicar formato vari´vel ou em nota¸˜o e a ca 53 .6623569 Ao exibir um resultado num´rico o SCILAB segue diversas regras.718D+10 A fun¸˜o format(<tipo>. a -->disp(’numeros aleatorios entre 0 e 1’).6283918 0. -->disp([%e*1e-5 %e*1e5 %e*1e-10 %e*1e10]) 0.7560439 0.5608486 0.

de ou %n. %n. %eps // eps em notacao cientifica com 12 caracteres ans = 2. %eps // eps em notacao cientifica com 8 caracteres ans = 2.df. incluindo sinal.888. ca Formato Especifica¸˜o ca %ni usado para valores inteiros.12).df nota¸˜o na forma [−]888.49012D-08 A fun¸˜o mprintf exibe dados formatados pertencentes ao espa¸o de trabalho na tela princa c cipal do SCILAB. sendo n o tamanho do campo de exibi¸˜o.8). respectivamente.1: Formatos de exibi¸˜o.888 ± 88. ca %n. Comandos de entrada e sa´ ıda cient´ ıfica. al´m disso os zeros insignificantes n˜o s˜o exibidos. ponto decimal e no caso de formato ’e’ os quatro caracteres referentes ` potˆncia de 10. %n.54 Cap´ ıtulo 4. -->mprintf(’a precisao deste computador =%12. Deste modo. g ou s. Tabela 4. sendo n o tamanho do campo (n´ mero ca u total de caracteres exibidos) e d o n´ mero de d´ u ıgitos decimais. -->format(’v’.<vari´veis>) a onde a cadeia de caracteres <formato> cont´m caracteres alfanum´ricos e/ou especifica¸˜es e e co de convers˜o para exibir na tela a lista <vari´veis>. de acordo com a Tabela 4.%eps/2) a precisao deste computador = 1.1.141592654 -->format(’e’.de nota¸˜o na forma [−]8.5e\n’. sendo n o tamanho do campo (n´ mero ca u total de caracteres exibidos) e d o n´ mero de d´ u ıgitos decimais. %pi // pi com formato variavel com 8 caracteres ans = 3. Caso esse parˆmetro n˜o seja fornecido ´ assumido o valor 10.2D-16 -->format(’e’.14159 -->format(’v’. a e a a e Uma vez definido o formato de exibi¸˜o ele ´ mantido at´ que seja modificado por um outro ca e e comando format.dg equivalente a %n.22045D-16 -->sqrt(%eps) // verificar que o ultimo formato e’ mantido ans = 1. f. O parˆmetro <d´gitos> indica o n´ mero m´ximo de caracteres a a ı u a serem exibidos.8). e. %pi // pi com formato variavel com 12 caracteres ans = 3. Estas especifica¸˜es de convers˜o s˜o a a co a a delimitadas pelo caracter % e uma das letras i. e a a %ns exibe caracteres em um campo de tamanho n.12).11022e-16 . dependendo de qual formato for mais curto. Sua sintaxe ´ e mprintf(<formato>.

73205 4.000 1.58114 3.41421 2.5.2. C = [2.000 1. Conforme visto.2 .%pi) o valor de pi e’ aproximadamente 3.2 3. -->disp(M) 1. a exibi¸˜o pode ser feita pelos comandos disp e mprintf.1 3. b = [1. Espa¸o de trabalho c 55 onde \n ´ usado para come¸ar uma nova linha. -->M = [x. Estes dois comandos listam as vari´veis criadas pelo usu´rio e as definidas pelo a a a pr´prio SCILAB. Quando for necess´rio ter o caracter (’) e c a exibido basta us´-lo duas vezes. a -->mprintf(’o valor de pi e’’ aproximadamente%13.1 .4].2 3.2247449 2. 1. Por exemplo. ou seja.4.5. 1.5 1. quando o usu´rio criou apenas as o ıcio a a vari´veis a.4 6.5 b = 1.M) 1.9.000 1. o comando who lista o nome das vari´veis que est˜o sendo usadas. 6.4. no in´ de uma sess˜o.5 1.00000 1.7320508 -->mprintf(’%5.22474 2. ca -->x = 1:0.5f\n’.500 1. o comando whos fornece informa¸˜es mais detalhadas sobre essas co vari´veis.500 1.1 -9. que est˜o presentes no espa¸o a a a c de trabalho.4 C = 2.2 Espa¸o de trabalho c Durante uma sess˜o as vari´veis utilizadas residem no espa¸o de trabalho do SCILAB e a a c podem ser armazenadas em um arquivo quando desejado. 1.4142136 2.2 a = 2.10f\n’.sqrt(x)]’. d = ’caracteres’ Type function string constant constant Size 1 by 1 2 by 2 1 by 3 Bytes 8512 64 48 40 . b.1415926536 Assim. C e d. 1.3f%10. Por sua vez.3].5811388 3.1 3. a -->a = 2. tem-se.5:3.3 d = caracteres -->whos Name whos d C b -5.

dat’) // salva as quatro variaveis no arquivo ’quatro.dat’ -->save(’duas.2 Recuperar dados O comando load ´ usado para recuperar os dados gravados em um arquivo pelo comando e save e coloc´-los de volta no espa¸o de trabalho.dat’.<vari´veis>) a a a onde <nome do arquivo> e <vari´veis> s˜o os mesmos definidos para o comando save. Comandos de entrada e sa´ ıda a constant 1 by 1 scicos_pal string 14 by 2 . e a c Sua sintaxe ´ e save(<nome do arquivo>.2.2. irremediavelmente. a a 4. ent˜o todas as vari´veis do espa¸co de a a a a c trabalho criadas pelo usu´rio ser˜o salvas.1 Gravar dados O comando save ´ usado para gravar as vari´veis do espa¸o de trabalho em um arquivo. Sua sintaxe ´ a c e load(<nome do arquivo>.b. incondicioa c a nalmente. %t boolean 1 by 1 %f boolean 1 by 1 %eps constant 1 by 1 %io constant 1 by 2 %i constant 1 by 1 %e constant 1 by 1 %pi constant 1 by 1 24 2352 24 24 24 32 32 24 24 As vari´veis no espa¸o de trabalho criadas pelo usu´rio podem ser removidas. Por exemplo. a . algumas variaveis foram removidas da lista . As vari´veis devem estar separadas por v´ a ırgula. Todas ca a a ca as vari´veis estar˜o. C e a a a d criadas acima.56 Cap´ ıtulo 4. Se o arquivo contiver uma vari´vel com o mesmo nome de uma j´ existente no espa¸o de a a c trabalho ent˜o o comando load faz com que a vari´vel do espa¸o de trabalho seja substitu´ a a c ıda pela vari´vel existente no arquivo. a remove todas as vari´veis do espa¸o de trabalho. -->save(’quatro.<vari´veis>) a e onde <nome do arquivo> ´ uma cadeia de caracteres que especifica o nome do arquivo bin´rio onde vari´veis do espa¸o de trabalho ser˜o gravadas e <vari´veis> ´ uma lista a a c a a e de nomes que define quais as vari´veis do espa¸o de trabalho criadas pelo usu´rio ser˜o a c a a gravadas no arquivo <nome do arquivo>.dat’ 4. considerando as vari´veis a. usando o comando clear --> clear tempo raiz --> clear remove as vari´veis tempo e raiz. Se os nomes <vari´veis> n˜o forem especificados. a c Aten¸˜o: n˜o ser´ solicitada a confirma¸˜o. removidas. b. .d) // salva as variaveis b e d no arquivo ’duas.

caso seja acionado o bot˜o Cancel ent˜o <resultado> = [].dat’.2.<r´tulos i>. v´rios ı a vetores de caracteres <r´tulos i> com o nome do i-´simo valor requerido e os vetores de o e caracteres <valores i> com os valores iniciais sugeridos. O segundo argumento ’string’ ou simplesmente ’s’ a ´ opcional e informa que <vari´vel> ´ uma cadeia de caracteres. O comando ı o <resultado> = x mdialog(<t´tulo>. a a -->nomes = [’Comprimento:’. cuja sintaxe ´ e e O comando acima exibe a cadeia de caracteres <mensagem> e espera at´ que o usu´rio forne¸a e a c o valor de <vari´vel> pelo teclado. e a e -->Indice = input(’entre com o indice: ’) entre com o indice: -->13 Indice = 13.’string’) a A leitura de dados pelo teclado ´ feita pelo comando input. mas com ’ ’ fornecer o texto: -->’programa SCILAB’ texto = programa SCILAB 4. Espa¸o de trabalho c 57 -->clear // remove todas as variaveis do espaco de trabalho -->d = ’novos’ // atribui novo valor a variavel d d = novos -->load(’duas. x mdialog e x message.’Altura:’] nomes = !Comprimento: ! ! ! !Largura: ! ! ! // define os nomes das variaveis .4 Janela de mensagem A intera¸˜o SCILAB / usu´rio pode tamb´m ser feita por meio de janelas de mensagens ca a e utilizando comandos. o Se for acionado o bot˜o Ok ent˜o <resultado> receber´ os valores sugeridos ou os outros a a a valores digitados. tais como.’Largura:’.2. correspondentes a <r´tulos i>.’d’) // recupera as variaveis b e d do arquivo ’duas.<valores i>) exibe uma janela contendo a cadeia de caracteres <t´tulo> com uma mensagem.’s’) // cadeia de caracteres com parametro ’s’ fornecer o texto: -->programa SCILAB texto = programa SCILAB -->texto = input(’fornecer o texto: ’) // caracteres sem o parametro ’s’.’b’.4.3 Entrada de dados <vari´vel> = input(<mensagem>.dat’ -->d // verifica o valor de d ans = caracteres 4. -->texto = input(’fornecer o texto: ’.2. Por exemplo.

Se <bot~es i> n˜o for especificado assume-se o valor Ok.’’] // define os valores iniciais (nenhum no caso) valor_ini = ! ! ! ! ! ! ! ! ! ! -->dimensao = x_mdialog(’Entre com as dimensoes’.<bot~es i>) ı o exibe uma janela contendo a cadeia de caracteres <t´tulo> com uma mensagem e v´rios ı a co e a a vetores de caracteres <bot~es i> com as op¸˜es. Em seguida converte os caracteres para e n´ meros.56 -->alt = eval(dimensao(3)) alt = 7. nomes.58 Cap´ ıtulo 4.23 -->lar = eval(dimensao(2)) lar = 4.4).1: Janela do comando x mdialog. Por sua vez. <resultado> = x message(<t´tulo>. Se for acionado o i-´simo bot˜o ent˜o o <resultado> = i.89 // valor numerico do comprimento // valor numerico da largura // valor numerico da altura Figura 4. Comandos de entrada e sa´ ıda !Altura: ! -->valor_ini = [’’. O vetor de caracteres dimensao ´ apresentado.’’. o a o comando .1. utilizando a fun¸˜o eval (ver Se¸˜o 3. Por exemplo.56 ! ! ! !7. valor_ini) // abre a janela apresenta a janela mostrada na Figura 4.89 ! -->com = eval(dimensao(1)) com = 1.23 ! ! ! !4. Digita-se os valores desejados e pressiona-se Ok. u ca ca dimensao = !1.

por exemplo. ’Usar Cholesky?’]. ca e -->diary(’diario’) // cria o arquivo diario -->a = 1.490D-08 -->diary(0) // fecha o arquivo diario 4. u e -->unix(’more diario’). a partir do qual a ca intera¸˜o SCILAB / usu´rio ser´ registrada no arquivo. e co . b = 1. A finaliza¸˜o do registro ´ feita por diary(0). // executa o comando ’more’ do Linux -->a = 1.490D-08 -->diary(0) // fecha o arquivo diario O conte´ do do arquivo diario ´. b = sqrt(%eps) a = 1. cujo nome ´ dado pela cadeia de ca a a e caracteres <nome do arquivo>. Se for escolhida a op¸˜o Sim ent˜o a vari´vel ca a a resp receber´ o valor 1.4 Leitura e grava¸˜o de dados ca A transferˆncia de dados entre o espa¸o de trabalho e algum dispositivo de entrada e sa´ e c ıda (arquivo em disco.3. b = sqrt(%eps) a = 1. at´ a troca de informa¸˜es com um outro programa.4. 4. Por exemplo. b = 1. impressora etc) aumenta a utiliza¸˜o do SCILAB visto tornar poss´ ca ıvel.2: Janela do comando x message.[’Sim’ ’Nao’]) apresenta a janela mostrada na Figura 4.3 Di´rio a Todos os comandos solicitados pelo usu´rio e as respostas fornecidas pelo SCILAB (com exa cess˜o de gr´ficos) podem ser gravados em um arquivo ASCII para que possam ser impressos a a ou mesmo inclu´ ıdos em algum relat´rio. a resp = 1.2. Figura 4. Di´rio a 59 -->resp = x_message([’A matriz e’’ simetrica.’. como foi feito neste texto! o Para esta grava¸˜o basta usar o comando diary(<nome do arquivo>).

cujo ca ca identificador associado a este arquivo seja <idenarq>. Quando um arquivo ´ fechado.1 Abertura de arquivo a [<idenarq>.4. Abre o arquivo para atualiza¸˜o (leitura e escrita). e a Tabela 4. a e associa¸˜o entre o identificador <idenarq> e o arquivo f´ ca ısico <nome do arquivo> ´ desfeita. O <idenarq> ´ usado com outras rotinas de entrada e sa´ para identificar a e ıda o arquivo no qual as opera¸˜es ser˜o realizadas. mas n˜o cria o ca a arquivo. co a -->[fid. Cria e abre um arquivo novo ou abre um arquivo j´ existente para a atualiza¸˜o (leitura e escrita). Os caracteres permitidos para <permiss~o> est˜o listados na Tabela 4.4. ele retornar´ o identificador de arquivo <idenarq> contendo um a n´ mero inteiro positivo e o valor de <erro> ser´ 0. Todavia. O a a caractere b indica que o arquivo ´ bin´rio.erro] = mopen(’dados. Em caso de algum erro o valor de <erro> u a ser´ negativo. ca Se <permiss~o> for omitida ent˜o ser´ assumido o valor ’r’. // fecha o arquivo dados. O escalar <erro> indica a ocorrˆncia de ıda a e algum erro. Comandos de entrada e sa´ ıda 4. Abre o arquivo para escrita e caso necess´rio cria o arquivo.<permiss~o>) A fun¸˜o mopen abre um arquivo. u Cria e abre um arquivo novo ou abre um arquivo j´ existente para a escrita. u Abre o arquivo para atualiza¸˜o (leitura e escrita) e se necess´rio ca a cria o arquivo. Caso o comando mopen tenha a a a sucesso ao abrir o arquivo. Por´m.’w’) erro = 0.dat . anexando ao final do arquivo. // abre o arquivo dados.2. sendo sua sintaxe ca Deste modo. fid = 1. a fun¸˜o mopen associa o nome externo do arquivo dado pela cadeia de caracca teres <nome do arquivo> ` unidade <idenarq> que ser´ utilizada nos comandos de entrada a a e sa´ no modo especificado pela <permiss~o>. anexando ao final do arquivo.60 Cap´ ıtulo 4.2: Atributos de arquivo.dat para escrita 4. e -->mclose(1) ans = 0.<erro>] = mopen(<nome do arquivo>.2 Fechamento de arquivo A fun¸˜o mclose(<idenarq>) fecha o arquivo previamente aberto pela fun¸˜o mopen. a e remove o conte´ do do arquivo existente. Por exemplo. <permiss~o> a ’r’ ou ’rb’ ’r+’ ou ’r+b’ ’w’ ou ’wb’ ’w+’ ou ’w+b’ ’a’ ou ’ab’ ’a+’ ou ’a+b’ Especifica¸˜o ca Abre o arquivo para leitura.dat’. remove o conte´ do do arquivo existente.

4. e.2:2.<vari´veis>) a A fun¸˜o mfprintf grava dados formatados em um arquivo e sua sintaxe ´ ca e onde a cadeia de caracteres <formato> cont´m caracteres alfanum´ricos e/ou especifica¸˜es e e co de convers˜o para gravar no arquivo com identificador associado <idenarq> a lista contendo a <vari´veis>.6 1. // define o vetor x -->tab = [x.2018965180 1. fid = 1.80 1. O conte´ do do arquivo sqrtexp. exp(-x)]’ // gera a tabela tab tab = 1. Leitura e grava¸˜o de dados ca 61 4. -->mfprintf(fid.<vari´veis>] = mfscanf(<num>.1652989 2. sendo sua sintaxe ca onde <idenarq> ´ o identificador associado ao arquivo no qual est´ sendo feita a leitura e a dos dados escritos no formato especificado na cadeia de caracteres <formato> e o parˆmetro a . 1.3416407865 0.0000000000 0.0954451150 0.<idenarq>. u e -->unix(’more sqrtexp.2649110641 0. uma tabela contendo x.8 1.40 1.dat’).<formato>.tab) // escreve tabela no arquivo -->mclose(fid) // fecha o arquivo ans = 0.1353352832 4.dat para escrita erro = 0.3011942 1.1832159566 0.2f%15.3 Grava¸˜o em arquivo ca mfprintf(<idenarq>.4 Leitura em arquivo [<tamanho>. g ou s.2465969639 1.2018965 1.183216 0. f. √ x e e−x para 1 ≤ x ≤ 2 ´ gerada e gravada e -->x = 1:0.’w’) // abre o arquivo sqrtexp. de acordo com a Tabela 4.2649111 0.3678794 1.4 1.1353353 -->[fid.1652988882 2. 0.00 1.4142135624 0.4.dat.10f%15.2 1.20 1.erro] = mopen(’sqrtexp.60 1.4.2465970 1.10f\n’. 1. Estas especifica¸˜es de convers˜o s˜o delimitadas pelo caracter % e uma das a co a a letras i. sqrt(x).dat’.dat ´.’%5.<formato>) a A fun¸˜o mfscanf efetua a leitura de dados formatados em um arquivo.1.0954451 0.3416408 0. No exemplo abaixo.3011942119 1. no arquivo sqrtexp.4142136 0.4.3678794412 1.00 1. // executa o comando ’more’ do Linux 1.

´ a a a a a Continuando o exemplo acima. -->[n.fid.1652989 2.’%5f%15f%15f’) // leitura de 1 linha em 3 variaveis c = 0. u -->fid = mopen(’sqrtexp.fid) // posiciona leitura para o inicio do arquivo -->matriz = mfscanf(6.’r’) // abre arquivo para leitura fid = 1. Comandos de entrada e sa´ ıda opcional <num> especifica o n´ mero de vezes que o formato ´ usado. -->meof(fid) // verifica se fim de arquivo ans = 0.fid.4142135 0.2 1.2465970 1.m] = mfscanf(1.<posi¸~o>) ´ usada para posicionar ca u ca e registro do arquivo.2 1.3678795 1.62 Cap´ ıtulo 4.fid.2465970 1.2018965 A fun¸˜o mseek(<n´mero>. Se -->mseek(0.b.6 1.4 1. -->vetor = mfscanf(1. a = 1. a ca a e o acesso a um especificada a ’set’). A fun¸˜o meof(<idenarq>) faz esta verifica¸˜o no arquivo de identificador <idenarq>.2649111 0.0954452 0. cujo identificador seja <idenarq>. caso contr´rio 0 ser´ retornado.3678795 b = 1.3416408 0. ca ca Se o ultimo registro j´ foi lido ent˜o ser´ retornado o valor 1. n = 3.4 1.183216 0.0954452 0.dat’.c] = mfscanf(1. Os dados s˜o conu e a vertidos segundo a cadeia de caracteres <formato> e atribu´ ıdos ` lista <vari´veis>. ou da = ’end’).fid.fid.’%5f%15f%15f’) // leitura de 2 linhas em 1 matriz matriz = 1. 1.2649111 0.2018965 1.’%5f%15f%15f’) // leitura de 1 linha em 1 vetor vetor = 1.a.1353353 Durante o processo de leitura ´ importante verificar se o ultimo registro do arquivo j´ foi e ´ a lido.1.6 1. As a a especifica¸˜es de convers˜o s˜o mostradas na Tabela 4.183216 0. A nova posi¸˜o ´ ca e partir da distˆncia dada pelo <n´mero> de bytes do in´ (se <posi¸~o> = a u ıcio ca posi¸˜o atual (se <posi¸~o> = ’cur’) ou do fim de arquivo (se <posi¸~o> ca ca ca o parˆmetro <posi¸~o> n˜o for especificado ´ assumido o valor ’set’.3011942 1.<idenarq>. -->[n.8 1.’%5f%15f%15f’) // leitura das 6 linhas em 1 matriz matriz = 1.’%5f%15f%15f’) // leitura de 1 linha em 1 variavel .3011942 -->matriz = mfscanf(2. 0. A vari´vel <tamanho> retorna o co a a a n´ mero de elementos que foram lidos do arquivo com sucesso. 1.

1f\n’. -->mclose(fid) // fecha o arquivo ans = 0. 4. save (’dados’).1.e). who. disp(a). x.4. 4. disp(M).a. load (’esptrab’). 4.1 ca Verificar as diferen¸as entre os formatos de exibi¸˜o para as vari´veis a = sqrt(2).5. save (’esptrab’.7. 4.x.9. e = c ca a exp(10). 4. who. a.y).4.1f\n’. a.8.3.x) e mprintf(’%5.10.6.5f %12. -->meof(fid) // verifica se fim de arquivo ans = 1.y). ca Se¸˜o 4.3e\n’. who. clear.4. 4. y = x’ e M = rand(3.3. mprintf(’%10. 4.1–4. mprintf(’%5.5. x.5. whos. e.5 Exerc´ ıcios Se¸˜o 4. 4. 4.’e’). who. clear.3). 4.1. Explicar a diferen¸a de d´ c ıgitos entre a vari´vel tab e o conte´ do do arquivo sqrtexp. . M.dat a u na mostrado Se¸˜o 4. load (’dados’). who. y.2 ca Observar os resultados dos comandos para controle do espa¸o de trabalho utilizando as c vari´veis dos Exerc´ a ıcios 4.2. 4. Exerc´ ıcios 63 m n = [] = . format(15. x = 1:10.

19. Gerar uma tabela com 10 linhas de x.13. 4. 0 ≤ x ≤ π/2 e grav´-la no arquivo a seno. 4.12.dat e verificar ´ o seu conte´ do.3 ca Entre com os comandos abaixo. Acrescentar o valor π + 1. Fechar o arquivo seno.16. Abrir o arquivo seno. diary(’meudiario’). 4.dat para leitura e ler a primeira linha. Gravar os valores -1 e -2 na ultima linha de seno. 4.15. 4.17. ´ . a = 4.dat. sen(x).dat e observar o resultado. u 4.18. u Se¸˜o 4. 4. diary(0).16 e verificar o seu conte´ do.14. 4.dat gravado no Exerc´ 4. ıcio u 4.4 ca 4. Comandos de entrada e sa´ ıda Se¸˜o 4. sen(π + 1) na ultima linha do arquivo seno. b = log10(a).20.64 Cap´ ıtulo 4. Verificar o conte´ do do arquivo meudiario.11.

a ca de acordo com a Tabela 5. Neste cap´ ca ıtulo ser˜o abordadas algumas a estruturas de programa¸˜o que tornar˜o poss´ desenvolver programas e fun¸˜es escritos ca a ıvel co em SCILAB. estruturas condicionais e estruturas de repeti¸˜o.1 Programa Um arquivo contendo um programa ´ criado usando um editor de texto qualquer e para e executar esse programa utiliza-se o comando exec. cuja sintaxe ´ e exec(<arquivo>. tais como.sci para gerar uma matriz com elementos aleat´rios entre −100 e 100 e decompˆ-la na soma de trˆs matrizes: uma triangular inferior. ca 5. os quais possibilitam sua utiliza¸˜o em um modo interativo. que seja executada uma seq¨ˆncia de comandos escrita ca ue em um arquivo. Ser˜o a e a apresentados dois tipos de roteiros: programa e fun¸˜o.1. Seja o programa escrito no arquivo decsomat. Por esta raz˜o este tipo de arquivo ´ chamado de roteiro (script).Cap´ ıtulo 5 Linguagem de programa¸˜o ca Nos cap´ ıtulos anteriores foram descritos os elementos fundamentais do SCILAB. ca 5. como qualquer e outra linguagem de programa¸˜o. 65 .1 Programa¸˜o ca Al´m de poder entrar com cada comando de uma vez. o SCILAB permite.1. o o e uma diagonal e outra triangular superior.<modo>) onde a cadeia de caracteres <arquivo> determina o nome do arquivo (incluido o caminho) com o programa a ser executado e o escalar opcional <modo> especifica como ser´ a execu¸˜o.

n))). 0. U A = .1) -->// editado no arquivo decsomat. 0.n)-0. a o modos 3 e 4 juntos. L.5*ones(n. // gera matriz com elementos aleatorios D = diag(diag(A)). D. L. nada ´ exibido. 0. L = 0. e ecoa cada linha de comando.33. n˜o ecoa linha de comando e n˜o exibe a a o prompt --> (valor default).sci -->// programa decomposicao_matriz -->// Objetivo: decompor uma matriz aleatoria na soma de tres matrizes: -->// uma triangular inferior. uma diagonal e outra triangular superior n = input(’Ordem da matriz: ’). A = fix(200*(rand(n. // matriz triangular inferior com diagonal nula U = triu(A) . 51. . o prompt --> ´ exibido. uma diagonal e outra triangular superior -->n = input(’Ordem da matriz: ’).D. // obtem matriz diagonal -->L = tril(A) .D. 0. .66 Cap´ ıtulo 5. 33.99. 0. // matriz triangular superior com diagonal nula A. 25.sci’. p´ra antes de cada prompt e continua ap´s um Enter. D = .1: Modos de execu¸˜o do comando exec. -->exec(’decsomat.n))). 51. // editado no arquivo decsomat. 69.D. 37. Linguagem de programa¸˜o ca Tabela 5.57.D. // matriz triangular superior com diagonal nula -->A. Ordem da matriz: -->3 -->A = fix(200*(rand(n. 25.99. 0. ca <modo> 0 -1 1 2 3 4 7 Descri¸˜o ca exibe resultados. D. // matriz triangular inferior com diagonal nula -->U = triu(A) . 75. e ecoa cada linha de comando e exibe o prompt -->.sci // programa decomposicao_matriz // Objetivo: decompor uma matriz aleatoria na soma de tres matrizes: // uma triangular inferior. // obtem matriz diagonal L = tril(A) . U Executando com <modo> = 1 para ecoar cada linha de comando. . 0.n)-0. .57.5*ones(n. // gera matriz com elementos aleatorios -->D = diag(diag(A)).

delta = sqrt(b^2-4*a*c). seja o arquivo parabola.1. Um programa tem acesso `s vari´veis no espa¸o de trabalho e as vari´veis criadas por ele a a c a far˜o parte do espa¸o de trabalho. 69. c O comando halt interrompe a execu¸˜o do SCILAB at´ que se tecle Enter. Sua sintaxe ´ e function [<par^metros sa´da>] = <nome fun¸~o> (<par^metros entrada>) a ı ca a <comandos> endfunction sendo function uma palavra-chave que determina o in´ da fun¸˜o. Os <par^metros entrada> s˜o a a opcionais e mesmo no caso de sua omiss˜o os parˆnteses devem ser mantidos.5. 0.33. 0.B. 37. <nome fun¸~o> ´ uma cadeia de caracteres que especifica o nome da fun¸˜o e <par^metros entrada> ´ um conjunto de vari´veis com os argumentos fornecidos ca a e a ` fun¸˜o (separados por v´ a ca ırgula e delimitados por ( e )). 75. 0. D. a function raizes = parabola(a. No exemplo acima. Programa¸˜o ca 67 U 0. u ca Por exemplo. -->halt // causa a interrupcao do SCILAB halt-->b = 2 // atribui o valor 2 a variavel b -->b // a atribuicao acima nao foi efetuada !--error 4 undefined variable : b 5.1. . as matrizes A. Os <comandos> a e especificam o conte´ do da fun¸˜o e a palavra-chave endfunction o seu final.b. 0. a -->a = 1 // comando qualquer a = 1. 0.sci contendo uma fun¸˜o para calcular as duas ra´ ca ızes de uma par´bola. 0. .C) calcula as duas raizes da parabola // P(X) = A*X^2 + B*X + C = 0 // retornando-as no vetor RAIZES. 0. 0.2 Subprograma function Um outro tipo de arquivo de roteiro ´ usado para o pr´prio usu´rio criar novas fun¸˜es para e o a co o SCILAB. <par^metros sa´da> ´ ıcio ca a ı e um conjunto de vari´veis contendo os argumentos gerados pela fun¸˜o (separados por v´ a ca ırgula ca e e delimitados por [ e ]). L e U foram criadas a c no espa¸o de trabalho. Qualquer ca e comando digitado entre o prompt e o Enter ser´ ignorado. 33.c) // Objetivo: calcular as duas raizes de uma parabola // PARABOLA(A. = 0.

A. elas n˜o tem acesso `s a a a a a vari´veis do espa¸o de trabalho. a vari´vel raizes ´ criada no espa¸o a e c de trabalho do SCILAB.Exibe) // Objetivo: Calcular raiz de equacao pelo metodo pegaso. usando o metodo pegaso. endfunction O comando exec. os <par^metros sa´da> s˜o criados no espa¸o a c a ı a c de trabalho. ´ E possivel chamar uma function com n´ meros diferentes de parˆmetros de entrada ou de u a sa´ do que aqueles definidos no arquivo que a cont´m.4714045i Ao contr´rio do programa no qual as vari´veis s˜o globais. o qual ´ e e ca a e descrito na Se¸˜o 3. ou seja.a. raizes(2) = (-b . apresentado na Se¸˜o 5.IterMax. O segundo argumento ´ opcional.Erro.<n´mero par^metros entrada>] = argn() u a ı u a a ı Ao evocar argn dentro da function s˜o fornecidos o <n´mero par^metros sa´da> e o a u a e <n´mero par^metros entrada>.delta ) / (2*a).ITERMAX. u A function pegaso escrita no arquivo pegaso. Por exemplo. -->exists(’parabola’) // verifica que parabola nao existe ans = 0.-1) // function carregada do arquivo para o espaco de trabalho -->exists(’parabola’) // verifica que parabola agora existe ans = 1. No caso da function parabola acima.b. .B. utilizando o robusto e eficiente m´todo ca e p´gaso. ızes -->r = parabola(3.EXIBE) calcula a raiz de uma // equacao F(X)=0 contida no intervalo [A B] com tolerancia TOLER // e com no maximo ITERMAX iteracoes.3333333 .4714045i 0.3333333 + 0.1.1.1) r = 0.68 Cap´ ıtulo 5. em uma function a lista dos a a a <par^metros entrada> e as vari´veis internas s˜o locais. Nesta function ´ utilizado o comando eval para avalia¸˜o de express˜o.0.sci’.-2. ´ utilizado para que as function’s editadas ca e em um dado arquivo passem a fazer parte da biblioteca do SCILAB para uso posterior. cuja ıda e e ca sintaxe ´ e [<n´mero par^metros sa´da>. Para calcular as ra´ de p(x) = 3x2 − 2x + 1 faz-se. -->exec(’parabola. Isto ´ feito pela fun¸˜o argn. Por sua vez.TOLER.Toler. ca function [Raiz.Iter] = pegaso(funcao.sci calcula o zero pertence ao intervalo [a b] da fun¸˜o definida na cadeia de caracteres funcao. Linguagem de programa¸˜o ca raizes(1) = (-b + delta ) / (2*a). // // PEGASO(FUNCAO.4.

b.5e\n’.1.Fx.5f%11. Programa¸˜o ca 69 // sendo a funcao F(X) dada na cadeia de caracteres FUNCAO. if nargsai > 1.a. // FUNCAO. if Exibe ~= 0 mprintf(’%3i%11. ca a ca . No entanto. end if nargsai > 2. Se forem especificados mais de seis argumentos de sa´ haver´ a e ıda a exibi¸˜o de uma mensagem de erro e a interrup¸˜o da function.nargent] = argn() // numero de argumentos de saida e de entrada if nargent < 3. a e b devem ser fornecidos sen˜o uma mensagem de erro ser´ exibida a a e a execu¸˜o da function interrompida. Fb = Fx.DeltaX). Fa = Fb. // EXIBE especifica se os resultados intermediarios serao // mostrados. Se forem trˆs argumentos de sa´ ent˜o ser˜o retornados ca a e ıda a a Raiz. Fx = Fb. Fx = eval(funcao).5.5f%14. x = x + DeltaX. DeltaX = -Fx / (Fb . caso n˜o sejam inclu´ a a ıdos na lista de argumentos de entrada ser˜o atribu´ a ıdos valores pr´-definidos. Erro = abs(DeltaX) >= Toler | abs(Fx) >= Toler.a). Fb = eval(funcao). ca ca Se nenhum ou apenas um argumento de sa´ for especificado ent˜o ser´ retornado a raiz da ıda a a equa¸˜o na vari´vel Raiz. end if ((abs(DeltaX) < Toler & abs(Fx) < Toler) | k >= IterMax).Fa) * (b . Erro e o n´ mero de itera¸˜es Iter. Fa = eval(funcao). end endfunction O comando erro(<mensagem>) exibe a cadeia de caracteres <mensagem> e interrompe a execu¸˜o de um programa ou fun¸˜o. ca ca Os argumentos funcao. while 1 k = k + 1. // [nargsai. end if nargent < 4. end x = a.5f%11.x. x = b. Iter = k. IterMax (n´ mero m´ximo de itera¸˜es) e Exibe (exibe resultados intermedi´rios) u a co a s˜o opcionais. Toler = 1e-10. end if nargent < 6. IterMax = 100. end b = x. end if Fx*Fb < 0 a = b. error(’Numero de argumentos insuficientes’). ITERMAX e // EXIBE terao valores pre-definidos caso nao sejam fornecidos. Se forem dois argumentos ent˜o al´m da Raiz ser´ retornado a ca a a e a condi¸˜o de erro na vari´vel Erro. Exibe = 0.k. break. end Raiz = x. if Exibe ~= 0 disp(’ Calculo de raiz de equacao pelo metodo pegaso’) disp(’iter a b x Fx delta_x’) end k = 0. x = b. Mais de trˆs argumentos de sa´ causam a u co e ıda exibi¸˜o de uma mensagem de erro e a n˜o execu¸˜o da function pegaso. else Fa = Fa * Fb / (Fb + Fx).5e%14. O: nao exibe e 1: exibe. A e B sao necessarios enquanto que TOLER. end if nargent < 5. os argumentos Toler (tolerˆncia da ca a raiz).

ou seja.72828e-01 -1. function somadiag = soma_diagonal // Objetivo: // calcular a soma da diagonal do produto das matrizes A*B do espaco de trabalho global A B somadiag = sum(diag(A*B)).47920 8. m´ximo de 100 itera¸˜es.0) -->[r.68045 1.sci para calcular a ca soma da diagonal da matriz resultante do produto das matrizes A e B definidas no espa¸o de c trabalho. ou seja. ca u c˜ -->exec(’pegaso.99219 1.52552 1. A declara¸˜o e a ca global <lista de vari´veis> a faz com que as vari´veis especificadas na <lista de vari´veis>. faz-se a e ca -->[r. ca . com no m´ximo 10 itera¸˜es. n˜o listando os resultados a a co a intermedi´rios e al´m disto retornado somente a raiz e a condi¸˜o de erro.2) e = F r = 1.60038 1.e] = pegaso(’cos(x^2-1)*sqrt(x+1)’.00000 0.1) Calculo de raiz de equacao pelo metodo pegaso iter a b x Fx delta_x 1 0.99219 1. Linguagem de programa¸˜o ca √ Para calcular a raiz de f (x) = cos(x2 − 1) x + 1 = 0 pertencente ao intervalo [0 2].sci’.09987e-01 6.00000 0. endfunction A sua execu¸˜o fornece.10. n˜o sendo reconhecidas pelo espa¸o de trabalho e outras function’s.2.54933e-01 5 1.48614e-02 i = 5.0.88254e-01 4 0.0.68045 -4. a a tornem-se globais e portanto esta declara¸˜o deve aparecer no programa e nas function’s ca de interesse.68045 1.6033703 Conforme j´ mencionado. a c No entanto.54647e-02 7. s´ podem ser refea a a o renciadas internamente.i] = pegaso(’cos(x^2-1)*sqrt(x+1)’.6003769 Por sua vez.70 Cap´ ıtulo 5. a condi¸˜o de erro e o n´ mero de itera¸oes. Por exemplo.52552 3.47920 0. seja a fun¸˜o no arquivo soma diagonal.e.99219 1. calculando a mesma raiz com os argumentos de entrada opcionais previamente atribu´ ıdos. tolerˆncia ǫ = 10−10 . al´m do uso de argumentos.00000 0.41128e+00 5. separadas por branco.83307e-01 -1. as vari´veis de uma function s˜o locais. listando os resultados intermedi´rios e a a co a retornado a raiz. e = F r = 1.52080e+00 2 2. com tolerˆncia ǫ = 10−1 .1e-1.00000 2. um outro modo de trocar informa¸˜es entre o espa¸o e co c de trabalho e as functions’s ´ pelo uso de vari´veis globais.12995e-01 3 2.

. endfunction O seu uso resulta em. function y = consiste(a.sci’. -->x = consiste(100. -->exec(’consistencia.. a utiliza¸˜o de o o ca vari´veis globais deve ser evitada.sci...<varesp n>] = return (<varloc 1>. B = [5 6. 3 4].3) // uso com argumentos invalidos x = i -->e.b) end y = log10(a) + sqrt(1-b). seja a fun¸˜o para multiplicar e dividir dois n´ meros. f = 3.-3) // uso da function com argumentos validos x = 4. O uso de vari´veis globais dificulta o entedimento e a modifica¸˜o das function’s.. Por estas raz˜es.. Programa¸˜o ca 71 -->exec(’soma_diagonal.<varloc n>) faz com que as vari´veis locais <varloc i> sejam copiadas no espa¸o de trabalho com os a c ca correspondentes nomes <varesp i>. ca e ca deff(’[<param sa´da>] = <nome fun¸~o> (<param entrada>)’. A matriz de caracteres <comandos> especifica o corpo da fun¸˜o. J´ o comando a a [<varesp 1>. Por exemplo. 7 8]. ca ca u .5.b) // Objetivo: // exemplo de consistencia de dados if a <= 0 | b > 1 y = %i [e. <nome fun¸~o> ´ uma cadeia de caracteres que especifica ca e e a ca o nome da fun¸˜o e <param entrada> ´ uma lista com os argumentos fornecidos ` fun¸˜o ca (separados por v´ ırgula e delimitados por ( e )).sci’..f] = return(a. a O comando return colocado dentro de uma function causa um retorno normal para o comando seguinte `quele que chamou a function.0) -->A = [1 2.0) // carrega a function do arquivo -->x = consiste(100. -->somdg = soma_diagonal() somdg = 69.1. al´m a ca e de tornar os m´dulos do programa menos independentes.. Uma fun¸˜o pode tamb´m ser definida na janela de comando pela fun¸˜o deff.f // verifica que as variaveis estao no espaco de trabalho e = 100. Seja a fun¸˜o descrita no arquivo consistencia. [<comandos>]) ı ca ı e ca onde <param sa´da> ´ uma lista contendo os argumentos gerados pela fun¸˜o (separados por v´ ırgula e delimitados por [ e ]).

2.2. uma outra estrutura condicional deve ser usada . // programa logaritmo_decimal // Objetivo: calcular logaritmo decimal x = input(’Entre com x: ’).2 Estrutura if-else-end if <condi¸~o> ca <comandos 1> else No caso de haver duas alternativas.2 Estruturas condicionais Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condi¸˜o for satisfeita ou n˜o.sci. ca e a o 5.001 0. Se o resultado for F (falso) ent˜o <comandos> n˜o ser˜o executados. if x > 0 LogDec = log10(x).001. Esta condi¸˜o ´ representada por uma express˜o l´gica.001 .[’mul = a * b’. Neste exemplo.div] = operacao(a.-1) Entre com x: -->0. Linguagem de programa¸˜o ca -->deff(’[mul. Cona a a a sidere o programa logaritmo decimal. o valor a ıdo de x for maior que 0. 5.72 Cap´ ıtulo 5.’div = a / b’]) -->[multiplica.3. possibilitando desta forma alterar o fluxo ca a natural de comandos.sci’. ca -->exec(’logaritmo_decimal.1 Estrutura if-end if <condi¸~o> ca <comandos> end A estrutura condicional mais simples do SCILAB ´ e Se o resultado da express˜o l´gica <condi¸~o> for T (verdadeiro) ent˜o a lista <comandos> a o ca a ser´ executada. end e a execu¸˜o para x = 0. o logaritmo decimal de x ser´ atribu´ a LogDec se.5 multiplica = 6. // define funcao 5.2) // uso da funcao operacao divide = 1. e somente se. divide] = operacao(3.b)’. disp([x LogDec]).

Quando a <condi¸~o i> co a a ca for satisfeita e os <comandos i> executados.5. O programa funcao modular. 6. j´ a lista a ca a a ca co <comandos 2> ser´ executada se <condi¸~o 2> for T e assim para as outras condi¸˜es.sci para calcular o valor absoluto de um n´ mero real ou complexo.sci’. Estruturas condicionais <comandos 2> end 73 Se o resultado da express˜o l´gica <condi¸~o> for T (verdadeiro) ent˜o somente a lista a o ca a contendo <comandos 1> ser´ executada. else fx = -2 * x.3 Estrutura if-elseif-end if <condi¸~o 1> ca <comandos 1> elseif <condi¸~o 2> ca <comandos 2> elseif <condi¸~o 3> ca <comandos 3> .2.-1) Entre com x: -->-3 . 5. Se nenhuma das condi¸˜es for T ent˜o <comandos n> ser´ executada. o controle do processamento ser´ transferido para o comando imediatamente ap´s a o o end. a estrutura if-elseif-end ser´ abandonada. . u . else <comandos n> end Quando houver mais de duas alternativas. a ou seja.3.2. a estrutura if-else-end do SCILAB torna-se A lista <comandos 1> ser´ executada se <condi¸~o 1> for igual a T (verdadeiro). -->exec(’funcao_modular. if x >= 0 fx = 2 * x. Seja o programa modulo. end disp([x fx]). Se <condi¸~o> for F (falso) ent˜o ser´ a lista a ca a a ´ ca <comando 2> a unica a ser executada. todavia. a a // programa funcao_modular // Objetivo: avaliar uma funcao modular x = input(’Entre com x: ’).sci utiliza a fun¸˜o modular f (x) = |2x|. Se x for positivo ou nulo ent˜o ser´ atribu´ ` vari´vel fx o resultado a a ıdo a a de 2*x. Executando com x = -3 produz. . se x for negativo ent˜o fx ser´ igual a -2*x.

case <express~o n> a else <comandos e> end Esta estrutura ´ similar a if-elseif-end e sua sixtaxe ´ e e then <comandos 1> then <comandos 2> then <comandos 3> then <comandos n> A lista <comandos 1> ser´ executada se <express~o> for igual a <express~o 1>. fila = fix(poltrona/4) + 1.i 5. else b = a. Para a = 3 .-1) Entre com a: -->3-4*%i 3. ´ e 5.sci’.sci para determinar a posi¸˜o de uma poltrona ca para quem entra em um ˆnibus. select modulo(poltrona. Deste modo foi executado o primeiro comando para o qual a condi¸˜o imag(a) ~= 0 foi ca satisfeita.^2).74 Cap´ ıtulo 5.4*%i. elseif a < 0 b = -a. -->exec(’modulo.4. Cabe ressaltar que somente uma lista de comandos ser´ executada. Se <express~o> n˜o for igual a nenhuma das express˜es anteriores ent˜o o a a o a a a <comandos e> ser´ executada. Linguagem de programa¸˜o ca // programa modulo // Objetivo: calcular o valor absoluto de um numero real ou complexo a = input(’Entre com a: ’).^2+imag(a). .4) case 0 then . o // programa posicao_poltrona // Objetivo: determinar a posicao de uma poltrona em onibus poltrona = input(’Entre com o numero da poltrona: ’). if imag(a) ~= 0 b = sqrt(real(a). . A lista a a a <comandos 2> ser´ executada se <express~o> for igual a <express~o 2> e assim para as a a a outras express˜es. Considere o programa posicao poltrona. Assim.2. .4 Estrutura select-case-end select <express~o> a case <express~o 1> a case <express~o 2> a case <express~o 3> a . na estrutura if-elseif-end uma unica lista de comandos ´ executada. end disp([a b]).

poltrona.poltrona.3.fila. Estruturas de repeti¸˜o ca 75 if poltrona > 0 fila = fila .posicao) else posicao = ’nao existe’ mprintf(’poltrona%3i %s\n’.5.posicao) end Por exemplo.poltrona.sci’. posicao = ’esquerda / corredor’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.poltrona.3. O SCILAB possui e ca ca duas estruturas de repeti¸˜o.sci’.3 Estruturas de repeti¸˜o ca As estruturas de repeti¸˜o fazem com que uma seq¨ˆncia de comandos seja executada reca ue petidamente at´ que uma dada condi¸˜o de interrup¸˜o seja satisfeita. com as quais ´ poss´ ca e ıvel construir uma terceira estrutura com interrup¸˜o no interior.posicao) else posicao = ’nao existe’ mprintf(’poltrona%3i %s\n’.fila.poltrona.posicao) end case 1 then posicao = ’direita / janela’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.-1) Entre com o numero da poltrona: -->15 poltrona 15 na fila 4 ’a esquerda / janela -->exec(’posicao_poltrona.fila. Sua sintaxe ´ e for <vari´vel>=<arranjo> a <comandos> . 42 e −5 s˜o co u a -->exec(’posicao_poltrona. as estruturas for-end e a while-end.posicao) case 2 then posicao = ’direita / corredor’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.-1) Entre com o numero da poltrona: -->42 poltrona 42 na fila 11 ’a direita / corredor -->exec(’posicao_poltrona.1 Estrutura for-end A estrutura for-end permite que um grupo de comandos seja repetido um n´ mero deteru minado de vezes. as posi¸˜es das poltronas de n´ meros 15.poltrona. ca 5.sci’.-1) Entre com o numero da poltrona: -->-5 poltrona -5 nao existe 5.fila.posicao) case 3 then posicao = ’esquerda / janela’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.1.

Linguagem de programa¸˜o ca end onde <vari´vel> ´ a vari´vel-de-controle que assume todos os valores contidos no vetor a e a linha <arranjo>. a . cuja soma ´ igual a 25. 25.-1) Entre com n: -->5 25.sci mostra que a soma dos n primeiros n´ meros ´ u ımpares ´ igual ao quadrado de n. // programa soma_matriz // Objetivo: calcular a soma dos elmentos das linhas. das colunas e da diagonal sejam iguais. considere o programa soma matriz.i). Soma_Diagonal = 0. end disp([Soma n^2]) Quando executado para n = 5. Para o quadrado m´gico de ordem 4.1). Soma_Colunas = zeros(1. for j = 1:ncol Soma_Linhas(i) = Soma_Linhas(i) + A(i. o n´ mero de repeti¸˜es da lista <comandos> ´ igual ao n´ mero u co e u de elementos no vetor <arranjo>. Assim. Para n = 5 a vari´vel-de-controle i assume os valores 1 3 5 7 9. for i = 1:2:2*n-1 Soma = Soma + i. O programa primeiros impares.76 Cap´ ıtulo 5. Soma_Colunas. tal que a soma dos elementos das linhas.sci para calcular a soma dos elementos das linhas. [nlin. Soma = 0. Soma_Linhas = zeros(nlin. for i = 1:nlin Soma_Diagonal = Soma_Diagonal + A(i. a e Para mostrar que as estruturas for-end podem estar encadeadas. e // programa primeiros_impares // Objetivo: verificar propriedade dos numeros impares n = input(’Entre com n: ’). Soma_Diagonal Um quadrado m´gico de ordem n ´ uma matriz com elementos n˜o repetidos e com valores a e a 2 entre 1 e n .sci’.ncol).j). colunas e diagonal de uma matriz. end end A. Soma_Linhas.j).ncol] = size(A). colunas e diagonal de matriz A = input(’Entre com a matriz: ’). A vari´vel-de-controle n˜o pode ser redefinida dentro da a a estrutura for-end. Soma_Colunas(j) = Soma_Colunas(j) + A(i. -->exec(’primeiros_impares.

9. 34. 12. seja o programa precisao. Sua sintaxe ´ e while <condi¸~o> ca <comandos 1> [else <comandos 2>] end Enquanto a express˜o l´gica <condi¸~o> for T (verdadeira) a lista <comandos 1> ser´ repea o ca a tida. ca 5. Soma_Colunas = 34. Epsilon = 1. 13. end n. 2. 14. 34.3. 6. %eps Quando executado fornece -->exec(’precisao. Soma_Linhas = 34. e Por exemplo. 7. 4 14 15 1] A = 16. 8.sci’.sci para determinar a precis˜o de um computador. Cumpre observar que o SCILAB possui comandos para determinar estes somat´rios de um o modo bem simples. Quando ela for F (falsa) ent˜o a lista <comandos 2> ser´ executada.2 Estrutura while-end A estrutura while-end. Epsilon. 10. Estruturas de repeti¸˜o ca 77 -->exec(’soma_matriz.0) Entre com a matriz: -->[16 2 3 13.3. Soma_Diagonal = 34. pelo uso da fun¸˜o sum que fornece a soma dos elementos de uma matriz. 34. 34. 34. 1. 11.5. a // programa precisao // Objetivo: determinar a precisao de um computador n = 0.sci’. O comando else a a ´ opcional.0) n = . while 1 + Epsilon > 1 n = n + 1. 3. ao contr´rio da for-end. 4. 15. 5 11 10 8. 5. repete um grupo de comandos um n´ mero a u indeterminado de vezes. 9 7 6 12. Epsilon = Epsilon / 2. 34.

-->1 + %eps . porque qualquer valor igual ou menor do que ele somado a 1 ser´ a a simplesmente 1.78 Cap´ ıtulo 5. ou seja. o maior n´ mero que somado a 1 ´ e a a u e −53 igual a 1. Comparada com a vari´vel e a −52 especial %eps = 2 do SCILAB. a condi¸˜o de interrup¸ao ´ testada no in´ da estrutura. pois a condi¸˜o do while ca ´ sempre T (verdadeira). Para computadores com aritm´tica IEEE ǫ = 2 .3 Estrutura com interrup¸˜o no interior ca A estrutura while-end permite que um grupo de comandos seja repetido um n´ mero indeu terminado de vezes. Linguagem de programa¸˜o ca 53. quando a <condi¸~o> do if for satisfeita o comando e ca break ser´ executado causando a interrup¸˜o da repeti¸˜o while-end. O comando break interrompe a execu¸˜o de uma estrutura while-end ou for-end e transca fere a execu¸˜o para o comando imediatamente seguinte ao end.1 ans = 2. O mesmo u n˜o ocorre com Epsilon.220D-16 -->1 + Epsilon . uma repeti¸˜o com ca ca condi¸˜o de interrup¸˜o no interior pode ter a forma ca ca while %T <comandos 1> if <condi¸~o> ca break end <comandos 2> end A estrutura while-end ´ executada indefinidamente a princ´ e ıpio. a . Assim. Epsilon = 1. o computador j´ n˜o consegue mais representar 1 + ǫ. o ca co break interrompe a execu¸˜o apenas da estrutura mais interna. no entanto.220D-16 Epsilon ´ a chamada precis˜o da m´quina ǫ.110D-16 %eps = 2.3.sci para fornecer a aproxima¸˜o racional de um n´ mero positivo ca u com uma dada tolerˆncia. Em repeti¸˜es aninhadas. a a 5. Contudo. Note que quando %eps for somado a 1 resulta em um n´ mero maior do que 1. ou seja.1 ans = 0. a ca ca Seja o programa racional. ca c˜ e ıcio Em v´rias situa¸˜es em programa¸˜o se faz necess´rio interromper a execu¸˜o da repeti¸˜o a co ca a ca ca verificando a condi¸˜o no interior ou final da estrutura e n˜o somente no seu in´ ca a ıcio.

169.<varesp n>] = return (<varloc 1>. if numero <= 0 break end tol = input(’Entre com tolerancia: ’)...den] = rat(numero. 1.0) Entre com um numero > 0: -->sqrt(2) Entre com tolerancia: -->1e-5 1. mesmo as vari´veis de uma fun¸˜o. function expressao = avalia(a) divide = a/10.sci. disp([numero num den numero-num/den]) end Por exemplo..4. Seja a fun¸˜o a ıvel a a ca no arquivo avalia.0000124 Entre com um numero > 0: -->%pi Entre com tolerancia: -->1e-10 3. 0. logdec = log10(a) expressao = divide + raiz + logdec. 5.tol). E disponibilizado. -->exec(’racional.224D-10 Entre com um numero > 0: -->0 Ele lista continuamente a representa¸˜o racional de um n´mero fornecido enquanto este for ca u positivo. -1->. quando em uma fun¸˜o ele interrompe a sua execu¸˜o.sci’.4 Depura¸˜o de programa ca O comando pause interrompe a execu¸˜o de um programa e transfere o controle para o ca teclado.4142136 239.. Conforme c mencionado na Se¸˜o 5.2 o comando ca [<varesp 1>.1. raiz = sqrt(a).. para √ 2 e π. 66317.. um novo espa¸o de trabalho no qual todas as vari´veis de n´ a c a ıvel mais baixo est˜o a acess´ ıveis.5. ent˜o. [num. No modo de pausa aparece ca ca ´ o s´ ımbolo do prompt indicando o n´ ıvel da pausa. Depura¸˜o de programa ca 79 // programa racional // Objetivo: fornecer a aproximacao racional de um numero positivo com dada precisao while %T numero = input(’Entre com um numero > 0: ’). endfunction . por exemplo... Se o comando n˜o for usado ent˜o as vari´veis de n´ mais baixo est˜o protegidas e n˜o podem ser modificadas.1415927 208341. a ca Para voltar ao espa¸o de trabalho que evocou a pausa usa-se o comando return.<varloc n>) faz com que as vari´veis locais <varloc i> sejam copiadas no espa¸o de trabalho que evocou a c a a a pausa com os correspondentes nomes <varesp i>.

10 e 30.2. Escrever uma function para calcular a norma-2 de um vetor. Por exemplo.sci n = input(’Ordem da matriz: ’). 5.sci’. -->exists(’raiz’) // verifica a inexistencia da variavel local raiz ans = 0. todas as vari´veis definidas antes dele estar˜o dispon´ a a ıveis. Criar o arquivo almaxmin. Neste caso a vari´vel local raiz est´ dispon´ no espa¸o de trabalho e logdec n˜o est´ a a ıvel c a a porque ela foi definida depois do pause.n).1. Escrever uma function para calcular a norma-∞ de um vetor.sci’. -->exec(’avalia. 5. A vari´vel raiz n˜o existe no espa¸o de trabalho por se tratar de uma vari´vel local.80 Cap´ ıtulo 5.-1) // carrega a funcao para o espaco de trabalho -->valor = avalia(100) // avalia a funcao valor = 22. .5 Exerc´ ıcios Se¸˜o 5. A = rand(n. Se for a a c a colocado o comando pause. -1->exists(’logdec’) // inexistencia da variavel logdec ans = 0. Linguagem de programa¸˜o ca e sua execu¸˜o. -1->return valor = 22. se for colocado depois de raiz = sqrt(a). 5.-1) // carrega a funcao modificada Warning :redefining function: avalia -->valor = avalia(100) // avalia a funcao entrando no modo de pausa -1->raiz // existencia da variavel local raiz no novo espaco de trabalho ans = 10. ca -->exec(’avalia. maior = max(A) menor = min(A) Executar o programa acima para n = 5.3.1 ca 5.

.        d1   d2    d = 3   .  . Qual o valor de LogDec no exemplo sobre a estrutura if-end mostrada na Se¸˜o 5.9.3 para a ca = -3+4*%i? 5. Achar o valor de b no exemplo de if-elseif-end da Se¸˜o 5. ca 5. . Encontrar o valor de fx no exemplo sobre if-else-end da Se¸˜o 5. .5. Dada a matriz triangular inferior L = {lij } e o vetor c. das colunas e da diagonal de uma matriz de Toeplitz de ordem 5. y1   y2   y  3  .11. escrever uma function para calcular y tal que Ly = c:        l11 l21 l31 . . Encontrar as posi¸˜es das poltronas 4.8.10. ca 5. . Qual o valor de b no exemplo sobre a estrutura if-elseif-end da Se¸˜o 5.2.2.7. yn   c1 c2 c3 . .2.4.3 ca 5.  l33 . cn  l22 l32 . . . Dada a matriz triangular superior U = {uij } e o vetor d. .2 ca 5. unn Se¸˜o 5. . Calcular a soma das linhas. Determinar o valor de Soma no exemplo sobre a estrutura for-end mostrada na Se¸˜o 5.2. .   .   .1 para n = 7.6.12.       . .5.2.3 para a = -3.2 para x = 10. ca Se¸˜o 5. ln1 ln2 ln3 · · · lnn       =        . Exerc´ ıcios 81 5. 25 e 40 usando o exemplo da estrutura co select-case-end da Se¸˜o 5. escrever uma function para calcular x tal que Ux = d:  u11 u12 u13 · · · u1n  u22 u23 · · · u2n   u33 · · · u3n   .   5. dn xn x1 x2 x3 .  . .1 ca para x = 2? 5.4. ca 5.3.5.

13.2.82 Cap´ ıtulo 5.15.14. Qual a altera¸˜o a ser feita para que a fun¸˜o calcule corretamente? ıcio ca ca 5.1. Explicar como ´ feita a determina¸˜o da precis˜o de um computador. e ca a 5. Linguagem de programa¸˜o ca 5. ca . utilizando a a function pegaso mostrada na Se¸˜o 5. Calcular a raiz de f (x) = sen(x)x + 4 = 0 que est´ no intervalo [1 5]. Calcular a norma-2 do vetor x = [1e200 2e200 3e200] usando a function escrita no Exerc´ 5.2.

<tipo de linha 1>.<x n>. // funcao co-seno Para gerar um gr´fico de sen(x) em fun¸˜o de x basta. Considere os vetores -->x = linspace(-8.y) 83 . 6.1. respectivamente e <tipo de linha i> ´ uma cadeia de 1 a 4 caracteres que especifica a cor. Neste cap´ ıtulo ser˜o vistos como gerar gr´ficos bi e tridimensionais e os a a modos de imprimi-los ou grav´-los em arquivos para que possam ser inclu´ a ıdos em textos.. o estilo da linha e o marcador dos pontos dados..<y n>. a a a co 6.1 Fun¸˜o plot ca plot(<x 1>.<y 1>.8.. Os tipos de linha s˜o mostrados na a Tabela 6.1 Gr´ficos bidimensionais a Para gerar gr´ficos bidimensionais s˜o usadas as vers´teis fun¸˜es plot e fplot2d.50).. a ca -->plot(x.1.Cap´ ıtulo 6 Gr´ficos a Uma das grandes virtudes do SCILAB ´ a facilidade que ele oferece para produzir gr´ficos e a de boa qualidade. // define as abscissas -->y = sin(x). // funcao seno -->z = cos(x).<tipo de linha n>) A sintaxe da fun¸˜o plot ´ ca e a onde <x i> e <y i> s˜o vetores contendo as abscissas e ordenadas dos pontos a serem exibie dos.

x.8 −1.4 0.0 0. baixo triang. Tamb´m pode ser gerado um gr´fico um a e e a pouco mais complexo.84 Cap´ ıtulo 6.2 −0. co ca a .1(a).2 0.z.’--o’) 1.6 −0.0 −0.2 0.8 0.4 −0. Estilo de linha linha s´lida o linha tracejada linha pontilhada linha de tra¸o e ponto c S´ ımbolo + o * .4 0.0 −8 −6 −4 −2 0 2 4 6 8 1.1(b) basta o comando -->plot(x.y.8 −1.6 −0.’-*’.8 0.2 −0.1: Gr´ficos produzidos pela fun¸˜o plot. x ’s’ ’d’ ^ v > < ’pentagram’ ’none’ Marcador mais c´ ırculo asterisco ponto cruz quadrado diamante triang.6 0. ca S´ ımbolo r g b c m y k w Cor vermelho verde azul turquesa lil´s a amarelo preto branco S´ ımbolo -: -. Gr´ficos a Tabela 6.1: Tipos de linha da fun¸˜o plot.4 −0. esquerda pentagrama sem marca O gr´fico produzido ´ mostrado na Figura 6.0 0.0 −0.6 0. Figura 6.0 −8 −6 −4 −2 0 2 4 6 8 (a) f (x) = sen(x). direita triang. a ca O SCILAB oferece algumas fun¸˜es para identifica¸˜o dos gr´ficos. sen(x) e cos(x) em fun¸˜o de x com os valores de sen(x) em linha ca s´lida e os pontos dados sendo destacados com (*) e os de cos(x) em linha tracejada e com o (o). cima triang. (b) f (x) = sen(x) e g(x) = cos(x). Para produzir o grafico da Figura 6.

O escalar inteiro <caixa> informa se ser´ dea a a senhada uma caixa em torno do <texto>.2 −0. a a a -->xtitle(’fun’+ascii(231)+ascii(245)+’es seno e co-seno’.0 −0.6 0. o Legendas e grade.8 −1.0 −8 −6 −4 −2 0 eixo x 2 4 6 8 eixo y 0. Assim os comandos.4 −0. ca a .’eixo y’) -->xstring(4. e a e o Texto A fun¸˜o ca xstring(x.2: Documenta¸˜o de gr´ficos. Os trˆs argumentos <r´tulo i> s˜o opcionais.1(b). Os argumentos <^ngulo> e <caixa> s˜o opcionais.<texto>. o a Note que a fun¸˜o ascii foi usada para gerar os caracteres da l´ ca ıngua portuguesa mostrados na Tabela 3.2 0.8 −1.2 −0.y com inclina¸˜o ca ca <^ngulo>.4 0.<r´tulo z>) ı o 85 escreve a cadeia de caracteres <t´tulo> no cabe¸alho e a cadeia de caracteres <r´tulo i> ı c o a no i-´simo eixo do gr´fico.6 −0.2 eixo y 0.<caixa>) a escreve a cadeia de caracteres <texto> na posi¸˜o de coordenadas x. Figura 6.1.6.6 sen(x) −0.8 cos(x) funções seno e co−seno (a) T´ ıtulos e r´tulos.0 0.<^ngulo>. a funções seno e co−seno 1.<r´tulo y>. como mostrado na Figura 6. no sentido hor´rio. Se ele for igual a 1 e <^ngulo> = 0 ent˜o a caixa a a ser´ desenhada.0 −0.<r´tulo x>.10 da p´gina 43.6 0.4 −0.0.y.’eixo x’.’cos(x)’) produzir˜o os t´ a ıtulos e r´tulos no gr´fico da Figura 6.0 0.8 cos(x) 0.1. Gr´ficos bidimensionais a T´ ıtulos e r´tulos o A fun¸˜o ca o o xtitle(<t´tulo>.0 −8 −6 −4 −2 0 eixo x 2 4 6 8 cos(x) 1.4 0.2(a).7. em graus.

<caixa>) ca adiciona legendas ao esbo¸o da figura. Ymin. <op¸~o n> = <valor n>. que define a forma e a cor da grade.1.5) -->xgrid(1) 6.86 Cap´ ıtulo 6.<fun¸~o>. O argumento <posi¸~o> especifica onde as legendas ser˜o colocadas.. usando as cadeias de caracteres <texto i> como c r´tulos. A vari´vel l´gica ca a a o <caixa> indica se uma caixa ser´ ou n˜o desenhada em torno das legendas. Xmax. Se style(i) for negativo ou nulo ent˜o a curva ´ esbo¸ada usando a a e c marcadores e abs(style(i)) define o tipo de marcador. ca a Grade A fun¸˜o xgrid(<estilo>) faz com que apare¸a uma grade no gr´fico produzido de acordo ca c a com a constante inteira <estilo>. rect Define os limites das abscissas e ordenadas com os valores definidos por um vetor de quatro elementos (rect = [Xmin.<posi¸~o>. 2: canto superior esquerdo. Ymax]). sendo sua sintaxe ca e c a ca onde <abscissas> ´ um vetor num´rico contendo as abscissas.. rect. 4: canto inferior direito e 5: a legenda ´ colocada usando o mouse. style Esta op¸˜o ´ utilizada para definir como as curvas ser˜o desenhadas. <fun¸~o> ´ o nome de uma e e ca e function externa e <argumentos> ´ um conjunto opcional que define o estilo do gr´fico na e a forma <op¸~o 1> = <valor 1>. sendo o valor a a default igual a %T. logflag.2(b) mostra o efeito dos comandos..2 Fun¸˜o fplot2d ca fplot2d(<abscissas>. A Figura 6. 1: canto o ca a superior direito (default). O argumento <op¸~o i> ca ca ca pode ser style. Os argumentos <posi¸~o> e <caixa> s˜o opcionais. -->legend([’sen(x)’. As abscissas estar˜o entre os limites Xmin a e Xmax e as ordenadas entre Ymin e Ymax... .. Gr´ficos a Legenda A fun¸˜o ca legend([<texto 1>..<texto n>]. axesflag.’cos(x)’].. nax e leg.<argumentos>) ca A fun¸˜o fplot2d ´ utilizada para esbo¸ar gr´fico de fun¸˜o no R2 . Se u style(i) for positivo a linha ent˜o ´ desenhada como uma linha plana e o ´ a e ındice define qual cor ser´ usada. 3: canto inferior esquerdo. A caixa de legendas move-se com e o mouse e assim que estiver na posi¸˜o desejada pressiona-se um bot˜o. frameflag. com seus valores sendo ca e a dados por um vetor com elementos inteiros de tamanho igual ao n´ mero de curvas.

frameflag Esta op¸˜o controla o c´lculo dos limites das coordenadas atuais a partir dos valores m´ ca a ınimos requeridos. mas aumentados para obter uma escala isom´trica. 2: gr´fico contornado por uma caixa sem marcadores. a a a a nax Atribui os r´tulos e define as marcas nos eixos quando a op¸ao axesflag = 1 for usada.6. <Nx>. ’ll’. 0: escala default (sem c´lculos). Gr´ficos bidimensionais a logflag 87 Especifica a escala (linear ou logar´ ıtmica) ao longo dos dois eixos de coordenadas com valores associados podendo ser ’nn’.. <ny>. ’ln’. a ca o leg Esta op¸˜o define as legendas referentes ` cada curva devendo ser uma cadeia de caracteres ca a na forma <legenda 1>@<legenda 2>@. por´m aumentados para obter ca e uma escala isom´trica. tal que. 7: igual a frameflag = 1. Se a op¸˜o axesflag n˜o co ca a for usada ent˜o a op¸˜o nax sup˜e que axesflag = 1. sendo que cada letra representa um eixo com n significando escala normal ou linear e l para escala logar´ ıtmica. <Ny> e <ny>: u fornecem informa¸˜es similares. e ca por´m aumentados para produzir melhores r´tulos dos eixos. Este argumento pode assumir um valor inteiro.1. mas aumentados para produzir melhores r´tulos dos eixos.@<legenda n>.. ’nl’. contudo os gr´ficos anteriores s˜o a a redesenhados para usar a nova escala. a e ca a e . 4: eixos desenhados centrados no meio do contorno a da caixa e 5: eixos desenhados de modo a cruzar o ponto (0. 1: eixos desenhados com o eixo de ordenadas mostrado ` e a a esquerda. todavia os gr´ficos anteriores s˜o redesenhados o a a para usar a nova escala e 8: igual a frameflag = 2. tal que. o c˜ Os valores s˜o definidos por um vetor de quatro elementos inteiros ([<nx>. a <Ny>]). 6: calculados pelos m´ximos e o a e m´ ınimos dos vetores de abscissas e ordenadas. mas para o eixo das ordenadas. sendo <legenda i> correspondente ` i-´sima curva. 1: limites dados pela op¸˜o rect. tal que. 4: calculados pelos m´ximos e m´ e a ınimos dos vetores de abscissas e ordenadas. Se essa op¸˜o n˜o for definida ´ assumido o valor ’ ’. 0: nada a ´ desenhado em torno do gr´fico. 3: dados pela op¸˜o rect. <Nx>: n´ mero de marcas principais a ser usado no eixo das abscissas.0) e caso este ponto n˜o esteja a dentro da ´rea exibida ent˜o os eixos n˜o aparecer˜o. axesflag Especifica como os eixos ser˜o desenhados podendo ter um valor inteiro. 5: dados pela op¸˜o rect. 2: calculados pelos m´ximos e m´ a ca a ınimos dos vetores de abscissas e ordenadas. 3: eixos desenhados com o a eixo de ordenadas mostrado ` direita. <nx>: u n´ mero de submarcas a serem desenhadas entre marcas no eixo das abscissas.

A lista de comandos a a ca -->x = -20:0. co Figura 6. Para mais informa¸˜es sobre essas co co fun¸˜es deve ser utilizado o comando help graphics.’f(x)’) // titulos e rotulos f(x) = sen(x) * x 20 10 8 6 10 4 5 f(x) f(x) 2 0 −2 −4 −10 −6 −15 −8 −10 −15 f(x) = sen(x) * x 15 0 −5 −20 −20 −15 −10 −5 0 x 5 10 15 20 −10 −5 0 x 5 10 15 (a) T´ ıtulo e r´tulos. -->fplot2d(x.88 Cap´ ıtulo 6.rect=[-15 -10 15 10]) // grafico com style e rect -->xtitle(’f(x) = sen(x) * x’.axesflag=5) // grafico com frameflag e axesflag As op¸˜es nax e leg podem ser vistas no comando abaixo.style=-10. Ser˜o descritas a seguir. o SCILAB possui v´rios comandos para a a que gr´ficos tridimensionais sejam tamb´m facilmente esbo¸ados.nax=[5 10 4 8].leg=’sen(x)*x’) // grafico com nax e leg Para mais informa¸˜es sobre os comandos para manipula¸ao de gr´ficos bidimensionais use co c˜ a help fplot2d.frameflag=4.4(b).f) // esboca grafico -->xtitle(’f(x) = sen(x) * x’. produzindo o gr´fico da co a Figura 6. a co -->fplot2d(x.3(a) apenas com o t´ a ıtulo e os r´tulos dos eixos.4(a). a e c a de modo sucinto.f.3: Esbo¸os de f (x) = sen(x)x pela fun¸˜o fplot2d.f. o (b) Op¸˜es style e rect.’y=sin(x)*x’) // define funcao -->fplot2d(x.2 Gr´ficos tridimensionais a De uma maneira similar aos gr´ficos bidimensionais. c ca O comando abaixo apresenta as op¸˜es frameflag e axesflag. // define valores de x -->deff(’[y]=f(x)’.’x’. co a -->fplot2d(x. 6. co .1:20. Gr´ficos a Exemplos A seguir ser˜o mostrados alguns gr´ficos gerados pela fun¸˜o fplot2d. com o uso das op¸˜es style e rect. algumas fun¸˜es com esta finalidade.’x’. o Os comandos abaixo geram o gr´fico da Figura 6.3(b).’f(x)’) // titulos e rotulos produzem o gr´fico apresentado na Figura 6.f. que gera o gr´fico da Figura 6.

.2.1 Fun¸˜o meshgrid ca A fun¸˜o [<matriz X>.5:2 // define vetor x x = . 0.5 1.0.1 sen(x)*x −6. .1.1.5 0.0.5 1. 1. 1.5 1.5:1 // define vetor y y = .5 0. 0.0. .3 15 13.5 0.0. . a o -->x = -1:0.y) // cria matrizes X Y = .0 −15. .0.1. Gr´ficos tridimensionais a 89 20 18.Y] = meshgrid(x.1.5 . 1.2 6. 1. 1. . 1. 0.2 10 8.5 e Y 1. -->[X.4: Esbo¸os de f (x) = sen(x)x pela fun¸˜o fplot2d com op¸˜es.5 0. co Figura 6. co (b) Op¸˜es nax e leg. 1.1 (a) Op¸˜es frameflag e axesflag.0.0.5 0.0.5 0. .5 0.<vetor y>) transforma o doca m´ ınio especificado por <vetor x> e <vetor y> em matrizes <matriz X> e <matriz Y> que possam ser usadas para avaliar fun¸˜es de duas vari´veis e fazer esbo¸os tridimensionais co a c a o de malhas e superf´ ıcies.1. -->y = -1:0. 0.1 −10 −12.1.0.1. .1.1.0.5 2.7 11. 1. c ca co 6. .5 1.6 20. 0. 0. .0.5 0.1.5 .1.0.5 1. . 0.6 −11.2. 1. 0. . 0.0.1 5 3. As linhas de <matriz X> s˜o c´pias de <vetor x> e as colunas de <matriz Y> s˜o c´pias de <vetor y>. . 0. .5 0. 0.2.5 1. .1.5 0.5 1. 0. -->Z = X + Y // operacao com X e Y Z = .7 −2.2 2.5 1.5 2.5 2. 1.2 −15 −17.1. X = .6. 0. 0.5 0. .5 0.<matriz Y>] = meshgrid(<vetor x>. 1.5 2.1.0.5 0.5 .0 0 −20 −10 −5 −7.3 −20 −20. 0.5 2.5 .5 2.5 0. 0.5 1.1 15. . 1. . . .5 .0 0 10 20 −2.5 .5 0.1.

Se positivo ent˜o a superf´ ´ desenhada a ıcie e com a cor <modo> e o contorno de cada faceta ´ desenhado com estilo de linha e cor definidos.5 2.5 ..2 Fun¸˜o plot3d ca Esta fun¸˜o ´ uma generaliza¸˜o da fun¸˜o plot vista na Se¸˜o 6.5 1.5 1. . tal que. em graus. leg. 1..1. O ca e e e elemento inteiro <modo> define a cor da superf´ ıcie.0. ıcie e a e O segundo elemento inteiro <tipo> define a escala. 1. <matriz Y> e <matriz Z> s˜o matrizes de mesmas dimens˜es contendo a o as coordenadas tridimensionais dos pontos a serem exibidos e <argumentos> ´ um conjunto e opcional que define o estilo do gr´fico na forma <op¸~o 1> = <valor 1>.<argumentos>) onde <matriz X>. a e leg Define os r´tulos referentes ` cada um dos trˆs eixos devendo ser uma cadeia de caracteres o a e na forma <legenda x>@<legenda y>@<legenda z>. que definem as coordenadas esf´ricas do ponto do observador.5 1. O a a e argumento theta descreve o ˆngulo no plano xy e alpha em torno do eixo z. 0: o gr´fico ´ feito usando a a e escala 3D atual.<caixa>].5 2. e Se ele for nulo ent˜o somente a malha da superf´ ´ desenhada e se ele for negativo ent˜o a ıcie e a a superf´ ´ desenhada com a cor -<modo> e o contorno da faceta n˜o ´ desenhado. 2..0. 0. O argumento <op¸~o i> pode ser alpha. e ca a a e flag Essa op¸˜o ´ um vetor num´rico com trˆs elementos flag = [<modo>.5 0. 6.5 0.0.5 0. Se essa op¸˜o n˜o for fornecida ent˜o ´ assumido o valor ’ ’. 0. flag e ebox.<matriz Z>. 3: 3D isom´trico com limites da caixa fornecido por ebox. alpha e theta S˜o ˆngulos. <op¸~o n> a ca ca ca = <valor n>. . 2: reescala automaticamente a a caixa 3D com raz˜o de aspecto extremo e os contornos s˜o computados usando os dados a a fornecidos. sendo <legenda i> correpondente ao i-´simo eixo. 1. 1: reescala automaticamente a caixa 3D com raz˜o de aspecto extremo e os a contornos s˜o definidos pelo valor do argumento opcional ebox.1.1 para esbo¸os tridimenca e ca ca ca c sionais. Sua sintaxe ´ e plot3d(<matriz X>.5 3. 1.2. 4: 3D isom´trico com e e limites derivados dos dados fornecidos.5 . theta.5 1.<matriz Y>. 0.5 2.5 0. . Gr´ficos a . 0.90 Cap´ ıtulo 6. 2. Se n˜o forem a a especificados s˜o assumidos os valores pr´-definidos alpha = 35 e theta = 45. 5: limites isom´tricos expandidos 3D com os limites e da caixa fornecidos por ebox e 6: limites isom´tricos expandidos 3D com limites derivados e dos dados fornecidos.1.<tipo>. ..

// cria matrizes X e Y a partir de dois vetores -->Z = sin(X).0 1.5 2. Ymax. a e . Este argumento ´ e usado junto com <tipo> da op¸˜o flag. 2: somente os eixos atr´s da superf´ s˜o desenhados. caso <tipo> tenha o valor 1.Y.alpha=30. Ymin.2.6. Se a op¸˜o ca ca flag n˜o for fornecida ent˜o ebox n˜o ´ considerado.0 −0. co (b) Op¸˜es alpha = 30 e theta = 60. co Figura 6. Zmin. 1: o mesmo que o anterior porque ainda n˜o est´ implee a a a mentado (!).-2:0. A e Figura 6.5 −1. 3: uma caixa em torno a ıcie a da superf´ ´ desenhada e os t´ ıcie e ıtulos s˜o adicionados e 4: uma caixa em torno da superf´ a ıcie ´ desenhada e t´ e ıtulos e eixos s˜o adicionados.5(a).2:2).^2. 0: nada a ´ desenhado em torno do gr´fico. o gr´fico ´ rotacionado do modo mostrado na Figura 6.5(b) apresenta o gr´fico com os valores alterados para alpha = 30 e theta = 60. utiliza-se os comandos -->[X.5: Esbo¸os de z = sen(x) cos(y)2 usando a fun¸˜o plot3d.*cos(Y).0 3 2 1 0 X −1 −2 −3 Z −1 (a) Op¸˜es alpha = 35 e theta = 45. pelo coe mando abaixo. a usando o comando -->plot3d(X. 3 ou 5.Z. Gr´ficos tridimensionais a 91 O terceiro elemento inteiro <caixa> define a moldura em torno do gr´fico.2:3.theta=60) 1 0 1 Z 0 −1 −2 −1 0 Y 1 2 3 2 1 X Y 0 −1 −2 −3 −2.5 0.6(a).5 1. Xmax.Z) // desenha grafico 3D Nesta figura foram utilizados os valores pr´-definidos alpha = 35 e theta = 45 graus.0 0.0 −1.Y. c ca mostrado na Figura 6.Y] = meshgrid(-3:0. Zmax]). a ebox Esta op¸˜o define os limites das trˆs coordenadas do gr´fico com os valores dados em um vetor ca e a de seis elementos (ebox = [Xmin. tal que. a a a e Exemplos Para produzir o esbo¸o da fun¸˜o z = sen(x) cos(y)2 no intervalo −3 ≤ x ≤ 3 e −2 ≤ y ≤ 2. c ca Quando os argumentos tˆm os valores alterados para alpha = 60 e theta = 30. // calcula pontos da funcao -->plot3d(X.

6 −0.2 Z −0.0 1.4 0. Gr´ficos a 1.7(b).6(b).6 0.alpha=60.8 (a) Op¸˜es alpha = 60 e theta = 30.4 −0.6 −1.Z.leg=legenda) Acrescentando a op¸˜o flag com os argumentos <modo> = 0.0 3 −2 −3 Z 0. -->plot3d(X. <tipo> = 2 e <caixa> = 3 ca pelo comando abaixo.alpha=80.Z.flag=[0 2 3]) . co (b) Op¸˜es alpha = 80 e theta = 230.0 0.0 Y 2 0.Y. sendo a ca e obtido pelo comando com alpha = 80 e theta = 230.0 −0.2 −0.theta=230) Um exemplo de uso da op¸˜o leg pode ser visto na Figura 6.92 Cap´ ıtulo 6.Y. tem-se a Figura 6.theta=30) Um gr´fico com a orienta¸˜o dos eixos mais natural ´ apresentado na Figura 6.Z.0 −2. -->plot3d(X.6 0.0 0.Y.7(a).leg=legenda.5 1 −1.0 −0.8 0.0 −1.Y.theta=230.alpha=80. obtida pelos comandos ca -->legenda = ’eixo x@eixo y@eixo z’ // define legenda legenda = eixo x@eixo y@eixo z -->plot3d(X.Z.theta=230. c ca -->plot3d(X.2 1.6: Esbo¸os de z = sen(x) cos(y)2 usando plot3d com varia¸˜o de alpha e theta.0 3 X 2 1 0 Y −1 −2 −3 −2 −1 0 X 2 1 0 −1.5 0.5 1.5 2.2 −1 −0.alpha=80. co Figura 6.

2:3.0 3 2 1 0 eixo y −1 −2 −3 −2 −1 0 eixo x eixo y eixo x 2 1 eixo z (a) Op¸˜o leg.8 0.<matriz Z>) produz o esbo¸o de uma malha na ca c superf´ especificada pelas matrizes <matriz X>.0 2 1 0 −1 eixo y −2 −3 −2 0 −1 eixo x 2 1 3 eixo z (a) Fun¸˜o mesh.4 −0.6 −0.-2:0. ca eixo z (b) Fun¸˜o surf.6 −0.8 −1.6 0. <matriz Y> e <matriz Z>.Z).’eixo x’.2 eixo z 0.2.8(a).6 −0.0 −0. c -->[X.4 −0.8 −1.0 −0. c co . co Figura 6.8 0.4 0.6 0.0 0. // define a matriz Z com a funcao -->mesh(X.2:2).’eixo y’. ca (b) Op¸˜es leg e flag.*cos(Y).8 −1.2 −0.0 2 1 0 −1 eixo y −2 −3 −2 0 −1 eixo x 2 1 3 1.2 0. // desenha a malha -->xgrid(1) // coloca a grade -->xtitle(’mesh’. ca Figura 6.Y] = meshgrid(-3:0.8: Esbo¸os de z = sen(x) cos(y)2 com diferentes fun¸˜es.’eixo z’) // titulos e rotulos mesh surf 1.2 −0.<matriz Y>.4 0.0 0.4 0.7: Esbo¸os de z = sen(x) cos(y)2 usando plot3d com as op¸˜es leg e flag. c co 6. Os comandos ıcie abaixo geram o esbo¸o mostrado na Figura 6.2 0.2 −0.0 −0.6.8 0.3 Fun¸˜o mesh ca A fun¸˜o mesh(<matriz X>.0 0.Y.4 −0. Gr´ficos tridimensionais a 93 1.2. // define as matrizes X e Y -->Z = sin(X).6 0.^2.

-2:0. . mostrada na Figura 6.94 Cap´ ıtulo 6. e Edit.3 Janela de figura As figuras geradas pelo SCILAB podem ser facilmente modificadas. Deste modo.1. <matriz Y> e <matriz Z>. os comandos abaixo produzem a Figura 6.2:2). 3D Rot.4 Exerc´ ıcios Se¸˜o 6. impressas ou gravadas em um arquivo para posterior impress˜o ou inclus˜o em um texto. a a Uma figura ´ gerada na janela Scilab Graphic(0) que apresenta cinco bot˜es: File. Zoom.1 ca 6.8(b).<matriz Y>. // define as matrizes X e Y -->Z = sin(X).^2.4 Fun¸˜o surf ca A fun¸˜o surf(<matriz X>.Y] = meshgrid(-3:0. Escolhendo File aparecem v´rias op¸˜es entre as quais Export.9: Janela para gerar arquivo com figura. e o UnZoom. 6. com a qual surge a janela a co Xscilab.’eixo z’) // titulos e rotulos -->xgrid(1) // coloca a grade 6.Y. a co a Figura 6.*cos(Y). -->[X.’eixo x’.<matriz Z>) produz uma superf´ ca ıcie sombreada tridimensional especificada pelas matrizes <matriz X>.2:3. com v´rias op¸˜es para produzir um arquivo com o gr´fico.2.’eixo y’. Seja a fun¸˜o ca y = e1+x/10 + cos(x)x.Z). Gr´ficos a 6.9. // define a matriz Z com a funcao -->surf(X. // desenha a superficie -->xtitle(’surf’.

ca 6.3.9.9 no arquivo figura. Repetir o Exerc´ 6. Exerc´ ıcios 95 Gerar uma tabela com 20 pontos para −5 ≤ x ≤ 5 e exibir o gr´fico da fun¸˜o usando o a ca comando plot colocando r´tulos e grade. ca ıcio Se¸˜es 6.7 variando os argumentos opcionais. Usar a fun¸˜o plot no Exerc´ 6. utilizando a janela Xscilab. ca ıcio 6.2 e 6. a o 6. Gerar uma tabela de 40 pontos para y = sen(x)x. Gerar um gr´fico usando a fun¸˜o plot3d. Utilizar a fun¸˜o fplot2d no Exerc´ 6.2.7.4.8. ca 6.1 variando os argumentos opcionais. Seja a fun¸˜o ca z = sen(x)y 2 . Gravar a figura do Exerc´ 6.6.eps.6. a ca 6.4. ıcio . −10 ≤ x ≤ 10 e exibir o seu gr´fico usando o comando fplot2d com r´tulos e grade. Usando o comando surf exibir a superf´ de ıcie z = x cos(x) sen(y) com −π ≤ x ≤ π e −π ≤ y ≤ π. Gerar uma malha com −5 ≤ x ≤ 5 e −3 ≤ y ≤ 3 usando a fun¸˜o meshgrid. o 6. ıcio 6.4.3 co 6. 6.5. Repetir a opera¸˜o acima usando 50 pontos e sem usar grade.10.

96 Cap´ ıtulo 6. Gr´ficos a .

1 Medidas de tempo O SCILAB provˆ duas maneiras de medir o tempo gasto para executar um conjunto de e comandos: o tempo de execu¸˜o e o tempo de CPU. e ıvel ca A sua sintaxe ´ e tic() <comandos> <vari´vel> = toc() a O tic inicia a contagem do tempo e o toc fornece para <vari´vel> o tempo. tempo_cpu = timer() . tic-toc pode n˜o ser uma a a medida muito confi´vel. Se o ´ ca a e computador estiver executando v´rias tarefas simultaneamente. maximo = max(abs(diag(C))).350). // inicia contagem do tempo de CPU C = A * B . Uma outra medida ´ obtida por timer que fornece o tempo de a e CPU (unidade central de processamento) que ´ o tempo gasto para execu¸˜o de opera¸˜es e ca co aritm´ticas e l´gicas.5. A atribui¸˜o do tempo gasto a <vari´vel> ´ opcional.600). // define duas matrizes aleatorias tic() // inicia contagem do tempo de execucao t0 = timer().Cap´ ıtulo 7 Computa¸˜o cient´ ca ıfica 7. B = rand(350. ca Usando o tic-toc ´ poss´ saber o tempo gasto para a execu¸˜o de um grupo de comandos. a passado desde o ultimo tic.<vari´vel 1> a a Por exemplo.t0 // tempo de CPU 97 .sci. ca A = rand(3000. considere a execu¸˜o do programa no arquivo medidas. em segundos.0. Pode ser usado na forma e o <vari´vel 1> = timer() a <comandos> <vari´vel 2> = timer() .

-->exec(’medidas.98 Cap´ ıtulo 7. -->x = [1 2 3 4 5]. posto e tra¸o. tais co co como.2. -->norm(x).1 Parˆmetros da matriz a O SCILAB disponibiliza diversas fun¸˜es para se obter informa¸˜es sobre matrizes.1) // norma de soma de magnitudes ans = 15. de acordo com a Tabela 7. u Exemplos de normas vetoriais.2) // norma Euclidiana ans = 7. Para um conhecimento mais amplo dos comandos a e do SCILAB com respeito a vetores e matrizes usar os comandos apropos vector e apropos matrix. Computa¸˜o cient´ ca ıfica tempo_exec = toc() // tempo de execucao Os resultados produzidos foram. 7. esses tempos e medidos depender˜o do computador utilizado.’inf’) // norma de maxima magnitude ans = 5. a 7.1.4161985 ans = 7. determinante.<tipo>) fornece a norma <tipo> de um vetor ou matriz contido ca a em <vari´vel>. No caso de um vetor. -->norm(x. <tipo> pode ser qualquer a n´ mero (inteiro ou real. positivo ou negativo).4161985 -->norm(x.2 ´ Algebra linear Nesta se¸˜o ser˜o mostrados alguns comandos do SCILAB relativos aos t´picos usualmente ca a o abordados em textos de C´lculo Num´rico. // define vetor x -->norm(x. Al´m disso.sci’.0) tempo_cpu = 2. n´ mero de condi¸˜o.739 A diferen¸a de tempo produzida por tic-toc e timer pode ser bem significativa se o comc putador estiver executando outros programas ao mesmo tempo. normas.71 tempo_exec = 2.-%pi) // norma -pi ans = 0.9527515 . u ca c Normas A fun¸˜o norm(<vari´vel>. norm(x.

.1) norm(M. 7 8 9]. m1p . .2).p) v Descri¸˜o ca m p Nome |vi |p |vi |2 norma-p = p i=1 m norm(v. vm ] e M = [ m11 m12 .’inf’) norm(M.2) ou norm(M) M F = i=1 j=1 norma de Frobenius norma espectral max σi (valores singulares) e normas matriciais.848103 . .´ 7.2. m21 m22 . m2p . . -->norm(A. mn1 mn2 . . .’fro’) // norma de Frobenius ans = 16. Sejam v = [ v1 v2 . . 4 5 6.848103 ans = 16.1) // norma de soma maxima de coluna ans = 18.’fro’) norm(M. .’inf’) // norma de soma maxima de linha ans = 24. -->norm(A.1: Normas vetoriais e matriciais.2) ou norm(v) norm(v. . -->A = [1 2 3. mnp ] <tipo> norm(v. // define matriz A -->norm(A. . . . Algebra linear 99 Tabela 7.881943 -->norm(A. norm(A) // norma espectral ans = 16.’inf’) M M v v 1 2 = i=1 norma Euclidiana norma de m´xima magnitude a norma de soma m´xima de coluna a norma de soma m´xima de linha a ∞ = max |vi | 1≤i≤m n 1≤j≤p i=1 p = max |mij | |mij | |mij |2 ∞ = max n 1≤i≤n j=1 p norm(M.

em nota¸˜o cient´ ca ıfica: <mantissa>×10 -->det(B) // determinante de B ans = 399. n) * norm(<matriz>) * %eps. Computa¸˜o cient´ ca ıfica N´mero de condi¸˜o u ca A fun¸˜o cond(<matriz>) calcula o n´ mero de condi¸˜o de <matriz> quadrada definido ca u ca em termos da norma-2. n). Se <matriz> for bem condicionada ent˜o rcond a ´ pr´ximo de 1 e se ela for mal-condicionada rcond ser´ pr´ximo de 0. Na ca forma [<mantissa>. -->cond(B) ans = 2. sendo posto(A) ≤ min(m. e a σmax cond(M) = κ2 (M) = M 2 M −1 2 = . ´ a raz˜o entre o maior e o menor valor singular. . -1 8 6.<toler^ncia>). -->[man.6641005 A fun¸˜o rcond(<matriz>) fornece uma estimativa do rec´ ca ıproco do n´ mero de condi¸ao de u c˜ <matriz> definido em termos da norma-1. 4 2 9].16. -->B = [5 3 0. sendo ela quadrada. Se <toler^ncia> n˜o for a a a dada ent˜o ´ assumido o valor <toler^ncia> = max(m. -->det(A) ans = 6.7744361 Determinante A fun¸˜o det(<matriz>) calcula o determinante de <matriz>. Para A e B definidas previamente. sendo igual ao n´ mero e a u de valores singulares de <matriz> maiores que <toler^ncia>.exp] = det(A) // determinante de A em notacao cientifica exp = 6. Para a matriz B e o a o acima.2094488 -->1/r ans = 4.661D-16 Posto O posto de uma matriz A (m × n) ´ o n´ mero m´ximo de vetores linhas ou de vetores e u a colunas de A que s˜o linearmente independentes. σmin Para a matrix. No SCILAB a o posto de <matriz> ´ obtido por rank(<matriz>.6613381 man = .100 Cap´ ıtulo 7. -->r = rcond(B) r = 0. ou seja.<expoente>] = det(<matriz>) o valor do determinante ´ apresentado e <expoente> . a e a Para as matrizes A e B.

´ 7.3. 0. 1. 1 8 6] // definicao da matriz M M = 2. a co Cholesky. 8.U. Tra¸o c A fun¸˜o trace(<matriz>) determina o tra¸o de <matriz>. e ca ca O uso do comando [<fatorL>.2.2. 0. 0. U = 4. 1. tal que <matrizP> * <matriz> = <fatorL> * <fatorU>. . de dimens˜o m × n. -->trace(A) ans = 15. Algebra linear 101 -->rank(A) // posto de A ans = 2. isto ´. QR e SVD. uma matriz triangular a a superior <fatorU> (dimens˜o min(m. 7. 0. 8. 6. -->[L. Por exemplo. 0. 0. a -->M = [2 -3 5.25 0. n)).1. Decomposi¸˜o LU ca A fun¸˜o lu(<matriz>) faz a decomposi¸˜o LU de <matriz>.P] = lu(M) // decomposicao LU de M P = 0.1. . 1.3225806 L = 1. 4. . n) × n) e uma matriz de permuta¸˜es <matrizP> a co (dimens˜o n × n). Para a matriz A definida anteriormente.1e-20) // posto de A com tolerancia 1e-20 ans = 3. 1. // traco de A 7. 4 1 -1. LU. 1.<matrizP>] = lu(<matriz>) gera uma matriz triangular inferior unit´ria <fatorL> (dimens˜o m × min(m. -->rank(A. 0. 1. usando ca ca a o m´todo de elimina¸˜o de Gauss com pivota¸˜o parcial. -->rank(B) // posto de B ans = 3.<fatorU>. 0. a soma dos elementos ca c e da sua diagonal principal.2 Decomposi¸˜es co O SCILAB disponibiliza v´rios tipos de decomposi¸˜es de matrizes entre as quais. 5. . 0.75 6.

0.25 1. 0. 0. 0. 0. 0. -->A = [4 -2 2. 0. 0.7.Tinf * Tsup // verificando que M = Tinf * Tsup ans = 0. 0. 0. 0. 2. 0. 0. -->M . Decomposi¸˜o de Cholesky ca A fun¸˜o <fator> = chol(<matriz>) fatora <matriz> sim´trica definida positiva pelo ca e m´todo de Cholesky produzindo uma matriz <fator> triangular superior tal que <fator>’ e * <fator> = <matriz>. -->P * Tinf . // verificando que P * M = L * U Contudo. 0. 0. 0. Computa¸˜o cient´ ca ıfica 0. Por exemplo. .0. -->[Tinf. 0. 30. 0. .<matrizSup>] = lu(<matriz>) a ıda gera uma matriz triangular superior <matrizSup> = <fatorU> e uma matriz triangular inferior <matrizInf> tal que <matrizP> * <matrizInf> = <fatorL> de modo que <matriz> = <matrizInf> * <matrizSup>.5 . 0. 2. 0.25 1. 1. 7. o uso de dois parˆmetros de sa´ [<matrizInf>.L // verificando que P * Tinf = L ans = 0. 0. 0. 0. 0.7.3225806 Tinf = 0. 0. 2 -7 30] // define a matriz A A = 4. 0. 0. 0. 8.L * U R = 0.U // verificando que Tsup = U ans = 0.102 Cap´ ıtulo 7. 0.2.Tsup] = lu(M) // decomposicao LU de M com dois parametros Tsup = 4.2. 1. . 0.4516129 1. 0. 10. 1.75 6. 0. . 0. 0. -->U = chol(A) // calcula o fator U . -->Tsup . . 0. 0.1. 0.25 0.4516129 -->R = P * M . 0.5 . -2 10 -7. 0. 0.0. Para as matrizes acima.

0.9.2. -->[Q.0. 5. 4 3 8] // define a matriz B B = 1. Q = .0. O uso na forma ca ca a [<matrizQ>. -->A . .0.5325844 . 0. 1. 0. -2 5 3. .m)) e uma matriz triangular superior <matrizR> com a mesma dimens˜o m×n de <matriz>.4. 0. 0. 0. 1.3211171 0.5. 0.1096497 . 0.9058216 . 1 -7.0. . 0. 8.5906262 0. a Sejam. 8.2. 3.0. 1. 3. 0.0. 3. .1926801 . 0. 5.1.0.7.2264554 0.R] = qr(A) // calcula fatores Q e R R = . . Algebra linear 103 = 2.5445505 . 0. 4.3793593 -->round(Q’*Q) // verificando que Q e’ ortonormal ans = 1.1534623 0. 1.7753803 0. 0.0. 0. de modo que <matriz>=<matrizQ>*<matrizR>.1132277 0.´ 7.6711366 . 0. -->A = [2 -4.2. . 0. . 5. 8 6] // define a matriz A A = 2. 0.2.U’ * U // verificando que A = U’*U ans = 0. -->B = [1 -2 4.8. 3.5753910 . -->F = chol(B) // calcula o fator F !--error 29 matrix is not positive definite U Houve um erro porque a matriz B n˜o ´ definida positiva.0. 0. 0. 6. 0. 4. 0.<matrizR>]=qr(<matriz>) produz uma matriz ortonormal <matrizQ> de ordem m (<matrizQ>’*<matrizQ>=eye(m.8317609 .4349298 0. 0.6070721 . 0. 3 5. 0.3396831 .8214835 0. . a e Decomposi¸˜o QR ca A fun¸˜o qr faz a decomposi¸˜o QR de uma matriz de dimens˜o m × n.

0.104 Cap´ ıtulo 7. 0.4349298 0.<matrizS>. 0.Qe * Re) // verificando que A = Qe * Re ans = 0.V] = svd(A) // calcula os fatores U. 5. Quando os quatro caracteres (.0.5325844 .Q * R ) // verificando que A = Q*R 0.8. 0.8506508 . m > n) o SCILAB produz uma decomposi¸˜o econˆmica.2264554 0. 8 6] // define a matriz A A = 2. .0.8506508 .0. O comando [<matrizU>.0. 0. ca co Decomposi¸˜o em valores singulares ca A fun¸˜o svd faz a decomposi¸˜o em valores singulares de uma matriz de dimens˜o m × ca ca a n.1132277 0. 0. uma matriz diagonal <matrizS> de dimens˜o m × n a contendo os valores singulares de <matriz> em ordem decrescente e uma matriz ortonormal <matrizV> de ordem n.0. de modo que <matriz> = <matrizU> * <matrizS> * <matrizV>’.S. 0. A . 0. 0.7753803 . . -->[U. a a a -->[Qe. de modo que <matrizQ> ca o ter´ dimens˜o (m × n) e <matrizR> ser´ (n × n). 1. .0.7.3211171 . 0.0. A fun¸˜o qr possui diversas formas de ser utilizada.9058216 .3396831 .8317609 . 6.4. S e V de A V = . 1 -7.’e’) forem colocados ap´s o nome de uma matriz de dimens˜o o a (m × n.5257311 0.8214835 Qe = .’e’) // calcula fatores Q e R na forma economica Re = . 0. para maiores informa¸˜es use help qr.9.5. -->A = [2 -4.Re] = qr(A. -->round( ans = 0.1096497 -->round(A .5257311 S = . 0. 0. 8. 1. 3. 0. 0.0.<matrizV>] = svd(<matriz>) produz uma matriz ortonormal <matrizU> de ordem m. Por exemplo. Para a matriz A acima. 3 5. Computa¸˜o cient´ ca ıfica 0.0.

´ 7.2. Algebra linear

105

12.476603 0. 0. 6.9522923 0. 0. 0. 0. U = 0.188444 0.5471902 - 0.5445505 - 0.4673105 - 0.0110328 0.5753910 0.4351204 0.6516942 0.5906262 - 0.7461769 0.5251246 - 0.1534623 -->round( U’*U ) // verificando que U e’ ans = 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. -->round( V’*V ) // verificando que V e’ ans = 1. 0. 0. 1. -->round( A - U * S * V’) // verificando ans = 0. 0. 0. 0. 0. 0. 0. 0.

0.6070721 0.6711366 0.1926801 0.3793593 ortonormal

ortonormal

que A = U*S*V’

Se os quatro caracteres (,’e’) forem colocados ap´s o nome de uma matriz de dimens˜o o a (m × n, m > n) ser´ computada uma decomposi¸˜o econˆmica, de modo que <matrizU> a ca o ter´ dimens˜o (m × n), <matrizS> e <matrizR> ser˜o (n × n). Utilizando a mesma matriz a a a A,
-->[Ue,Se,Ve] Ve = - 0.5257311 - 0.8506508 Se = 12.476603 0. Ue = 0.188444 - 0.4673105 0.4351204 - 0.7461769 -->round( A ans = 0. 0. 0. 0. 0. 0. 0. 0. = svd(A,’e’) 0.8506508 - 0.5257311 0. 6.9522923 0.5471902 - 0.0110328 0.6516942 0.5251246 Ue * Se * Ve’) // calcula os fatores U, S e V na forma economica

// verificando que A = Ue*Se*Ve’

Para se obter apenas os valores singulares de <matriz> em <vetor> basta <vetor> = svd(<matriz>),

106

Cap´ ıtulo 7. Computa¸˜o cient´ ca ıfica

-->s = svd(A) s = 12.476603 6.9522923

// calcula apenas os valores singulares de A

A fun¸˜o svd possui outras formas de ser utilizada; para maiores informa¸˜es use help svd. ca co

7.2.3

Solu¸˜o de sistemas ca

Dado um sistema Ax = b, a solu¸˜o x pode ser facilmente calculada pelo SCILAB pelo ca operador (\), por exemplo, para um sistema com matriz sim´trica, e
-->A = [4 -2 2; -2 10 -7; 2 -7 30] // matriz dos coeficientes A = 4. - 2. 2. - 2. 10. - 7. 2. - 7. 30. -->b = [8 11 -31]’ // vetor dos termos independentes b = 8. 11. - 31. -->x = A \ b // solucao de Ax = b x = 3. 1. - 1. -->r = ( b - A * x )’ // verificando a exatidao da solucao r = 0. 0. 0.

No caso de uma matriz n˜o sim´trica, a e
-->B = [1 -3 2; -2 8 -1; 4 -6 5] // matriz dos coeficientes B = 1. - 3. 2. - 2. 8. - 1. 4. - 6. 5. -->c = [11 -15 29]’ // vetor dos termos independentes c = 11. - 15. 29. -->y = B \ c // solucao de By = c y = 2. - 1. 3. -->r = ( c - B * y )’ // verificando a exatidao da solucao r = 0. 0. 0.

´ 7.2. Algebra linear

107

7.2.4

Inversa

A fun¸˜o inv(<matriz>) calcula a inversa de <matriz> de ordem n, tal que <matriz> * ca inv(<matriz>) = eye(n,n). Para a matriz M acima,
-->E = inv(B) // inversa de B E = - 0.2403101 - 0.2170543 0.2015504 - 0.2170543 0.0620155 0.0852713 0.2015504 0.0852713 - 0.0077519 -->round( B * E - eye(3,3) ) // verificando que B * E = I ans = 0. 0. 0. 0. 0. 0. 0. 0. 0.

7.2.5

Autovalores e autovetores

Os autovalores s˜o os zeros do polinˆmio caracter´ a o ıstico da matriz. A fun¸˜o poly constr´i ca o o polinˆmio caracter´ o ıstico de uma matriz. Por exemplo,
-->A = [4 -1 3; -1 5 2; 3 2 8] // define a matriz A A = 4. - 1. 3. - 1. 5. 2. 3. 2. 8. -->p = poly(A,’x’) // constroi o polinomio caracteristico de A p = 2 3 - 79 + 78x - 17x + x -->raizes = roots(p) // zeros do polinomio caracteristico raizes = 1.410402 5.6161546 9.9734434

A fun¸˜o spec permite o c´lculo do autosistema (autovalores e autovetores) de uma maca a triz de ordem n por um m´todo mais eficiente do que construindo o polinˆmio carace o ter´ ıstico. O uso de [<AutoVetor>,<AutoValor>]=spec(<matriz>) produz uma matriz diagonal <AutoValor> contendo os autovalores e uma matriz <AutoVetor> com os correspondentes autovetores. Se a matriz for sim´trica ent˜o os autovetores s˜o mutuamente e a a ortogonais (<AutoVetor>’ * <AutoVetor> = eye(n,n)). Para a matriz A acima,
-->[Vetor,Valor] = spec(A) Valor = 1.410402 0. 0. 5.6161546 0. 0. Vetor = 0.7387367 0.5462817 0.4732062 - 0.8374647 // calcula os autovalores e autovetores 0. 0. 9.9734434 0.3947713 0.2733656

108 Cap´ ıtulo 7. 0. 0. 3.3) ) // autovetores ortogonais de uma matriz simetrica ans = 0. respectivamente. 0. e -->lambda = spec(A) lambda = 1. 0.6161546 9.1 C´lculo das diferen¸as finitas ascendentes a c A fun¸˜o diff(<vari´vel>. 0. e a -->x = [1 2 4 4 7] // define o vetor x x = 1. 2. Para um vetor.9734434 // calcula apenas os autovalores de A A fun¸˜o spec possui diversas formas de ser utilizada. que a a pode assumir os valores ’r’ para linha.(1:5)^3] A = // define a matriz A .0.4799416 0. -->A = [1:5. 7. 0.(1:5)^2.2) // diferenca de ordem 2 de x xd2 = 1.3.3 Interpola¸˜o ca O SCILAB possui fun¸˜es para c´lculo das diferen¸as finitas ascendentes e interpola¸˜o co a c ca unidimensional.eye(3. 4.<ordem>.2. 7. 0. . .2. -->xd2 = diff(x. -->d1 = diff(x) // diferenca de ordem 1 de x d1 = 1.<dimens~o>) calcula a diferen¸a finita ascendente de ca a a c ordem dada por <ordem> entre dois elementos de <vari´vel> ao longo de <dimens~o>. para maiores informa¸˜es use help ca co spec. 3. ’c’ para coluna ou ’*’ para as colunas da matriz <vari´vel> colocadas em um vetor.0151370 0. 3. 4. Para obter apenas os autovalores em <vetor> basta <vetor> = spec(<matriz>). Computa¸˜o cient´ ca ıfica .8771698 -->round( Vetor’ * Vetor . No caso de matriz.410402 5. -->d2 = diff(d1) // diferenca de ordem 1 de d1 d2 = 1. 2. 7. 0. Os argumentos <ordem> e <dimens~o> s˜o opcionais e a a a seus valores pr´-definidos s˜o 1 e ’*’. Para a matriz sim´trica A definida acima. 0.

3.7. 4. yi) especificados nos vetores <abscissas> e <ordenadas>. 16. ca o Quando o m´todo n˜o for especificado ser´ assumida uma interpola¸˜o linear. column 12 to 15 64. Interpola¸˜o ca 109 1. ca u interpola¸˜o usando o vizinho mais pr´ximo. 4. 4.2 Interpola¸˜o unidimensional ca Dada uma tabela com pares (xi . 18. 7. 1. 27. 27. // abscissas dos pontos -->y = x. usando os trˆs m´todos. 48. 8. 8. 1. 100. 2. 125. e e ca sendo parˆmetro a ’linear’ ’spline’ ’nearest’ m´todo e interpola¸˜o linear. 20.1.1. e e . 100. 0.1. 16.<m´todo>) e onde a cadeia de caracteres <m´todo> especifica o m´todo a ser utilizado na interpola¸˜o. 5. 9. 1. -->L1 = diff(A.^4.<ordenadas>.6 e z = 0. 3. 9. // ordenadas Interpolando os valores z = −0.’*’)’ // diferenca de ordem 1 assumindo A em um vetor (transposto) V1 = column 1 to 11 0. respectivamente. 25. 3. column 12 to 14 . -->A(:)’ // colunas da matriz A em um vetor (transposto) ans = column 1 to 11 1. ent˜o os valores de z contidos no vetor <interpolar> podem ser interpoa lados usando a fun¸˜o interp1. 125.5). -->V1 = diff(A. 20. 1. ca -->x = linspace(-1.<interpolar>. . 37. 19. 9.3. 1. para −1 ≤ x ≤ 1 definidos por. 1. 61. 6. ca interpola¸˜o por splines c´ bicos. 64. 48. Por exemplo.3. -->C1 = diff(A.23. 1. 25. 6. cuja sintaxe ´ ca e <resultado> = interp1(<abscissas>. 2.’r’) // diferenca de ordem 1 ao longo das linhas L1 = 0.1. .5. 4. 2. 12. 7. 12. 2. e a a ca 4 sejam cinco pontos da fun¸˜o y = x .7. 4. 4.’c’) // diferenca de ordem 1 ao longo das colunas C1 = 1.59. 7. 5. 5. 0. 18. 1.

74 ≈ 0.y.6)4 ≈ 0. xgrid(1) -->xtitle(’M’+ascii(233)+’todos de interp1’.^4.’linear’.0625 Considerando que os valores exatos s˜o (−0. <vari´vel> ca e ca a ´ uma cadeia de caracteres que especifica a vari´vel de integra¸˜o.’splines’].’-. cujo esbo¸o ´ mostrado na Figura 7.7]. ca 7.<lim sup>.’o’.’spline’).’nearest’).y. ca A Figura 7.0625 0.spl.x1.y.4 Integra¸˜o num´rica ca e A fun¸˜o integrate calcula numericamente uma integral e sua sintaxe ´ ca e integrate(<fun¸~o>.y.6 0.[-0.1 mostra graficamente os resultados da fun¸˜o interp1. // interpolacao por splines -->plot(x.2695 -->interp1(x.x1. ca u As aproxima¸˜es da fun¸˜o y = x4 por trˆs fun¸˜es interpoladoras de interp1 podem ser co ca e co visualizadas pelos comandos. // ordenadas da curva real -->nea = interp1(x.5 .’y=x^4’. Usualmente os splines produzem uma aproxima¸˜o ca mais suave da fun¸˜o como pode ser observado neste caso.x1.50).y. Os cinco pontos iniciais ca est˜o representados por o.[-0.1296 e 0.x1. a aproxima¸˜o por polinˆmios com ’nearest’ por uma linha tracejada o ca o e os splines por uma linha pontilhada. <lim inf> e <lim sup> e a ca s˜o os limites inferior e superior de integra¸˜o.x1.y.’nearest’) // interpolacao com vizinho mais proximo ans = 0.<lim inf>. // interpolacao vizinho mais proximo -->spl = interp1(x.7].1. No caso de n˜o serem fornecidos. Computa¸˜o cient´ ca ıfica -->interp1(x.’x’. // gera graficos e grade -->legend([’pontos’.6 0.3) // coloca legenda A partir dos 50 pontos em x1 foram criados os vetores nea e spl que contˆm as ordenadas e obtidas por interpola¸˜o usando os argumentos ’nearest’ e ’splines’. ca c e .4375 -->interp1(x.nea.’-’.7].’spline’) // interpolacao com splines cubicos ans = 0.’--’.110 Cap´ ıtulo 7.<erro rel>) ca a onde <fun¸~o> ´ uma cadeia de caracteres que define a fun¸˜o a ser integrada. s˜o assumidos a a a −8 os valores 0 e 10 . respectivamente.144 0.’nearest’.’y’).’. o m´todo de a e interpola¸˜o com splines c´ bicos produziu os melhores resultados para este caso. Por exemplo. Uma interpola¸˜o linear ´ feita implicitamente desde que o a ca e comando plot interliga os pontos por retas. O gr´fico da fun¸˜o y = x4 est´ representado a ca a por uma linha s´lida. // abscissas para a interpolacao -->y1 = x1.[-0.6 0.25 0. -->x1 = linspace(-1.<erro abs>.’linear’) // interpolacao linear ans = 0.<vari´vel>.’:’).x.2401.y. Os argumentos <erro abs> e <erro rel> s˜o a ca a os erros absoluto e relativo e s˜o opcionais.2. seja a fun¸˜o f (x) = cos(3x+1)x2 +x1. respectivamente.y1.

5 100 80 60 40 y 20 0 −20 −40 −60 1 2 3 4 5 x 6 7 8 9 Figura 7.1.7.6 0.2: Integra¸˜o de f (x) = cos(3x + 1)x2 + x1.5 dx 1 faz-se -->Integral = integrate(’cos(3*x+1)*x^2+x^1.2 0.5 .4.0 0.8 0.5’.51064 // calcula a integral f(x) = cos(3x+1)x^2+x^1.0 Figura 7.4 0.1: Aproxima¸˜o de y = x4 pela fun¸˜o interp1.0 0.8 −0.0 −0. ca ca Para calcular 9 cos(3x + 1)x2 + x1.6 y 0.4 0.2 −1.6 −0.8 1. Integra¸˜o num´rica ca e 111 Métodos de interp1 1.9) Integral = 102. ca .0 x 0.4 −0.2 0.2 pontos linear y=x^4 nearest splines −0.’x’.

^2+x. Seja o arquivo ca e func. para calcular a integral acima usando a function g definida no arquivo func.51064 . -->exec(’func. u function y = g(x) y = cos(3*x+1).1.’x’.sci’.sci -->Integral = integrate(’g’.sci. endfunction Assim.^1.-1) // carrega a function g do arquivo func.*x.9) // calcula a integral Integral = 102.sci com o conte´ do. Computa¸˜o cient´ ca ıfica A fun¸˜o a ser integrada pode tamb´m estar definida em uma function.5.112 Cap´ ıtulo 7.

Sign up to vote on this title
UsefulNot useful