·
Engenharia Eletrônica ·
Sinais e Sistemas
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
3356
Manual Scilab: Índice e Comandos
Sinais e Sistemas
UNINTER
47
Scilab Manual for Digital Signal Processing
Sinais e Sistemas
UNINTER
1
Atividade Prática em Sinais e Sistemas - Exemplo 1
Sinais e Sistemas
UNINTER
30
Princípios de Telecomunicações: Aula 5 - Escala Logarítmica e Decibéis
Sinais e Sistemas
CEFET/RJ
3
Trabalho de Análise de Sinais e Sistemas: Instruções e Entrega
Sinais e Sistemas
UNA
3
Lista Final-2023-1
Sinais e Sistemas
UTFPR
1
Cálculo da Energia dos Sinais
Sinais e Sistemas
CEFET/RJ
592
Sinais e Sistemas - 2ª Edição
Sinais e Sistemas
CEFET/RJ
1
Atividade de Acompanhamento Filtros Digitais 2023 1
Sinais e Sistemas
UTFPR
55
Princípios de Telecomunicações - Aulas 2 e 3
Sinais e Sistemas
CEFET/RJ
Texto de pré-visualização
Universidade Federal de Minas Gerais Departamento de Ciˆencia da Computacao do ICEx Fundamentos de SCILAB edicao 201008 Frederico F Campos filho agosto de 2010 Prefacio O SCILAB e um software para computacao cientıfica e visualizacao gratuito com codigo fonte aberto e interface para as linguagens FORTRAN e C Ele permite a solucao de problemas numericos em uma fracao do tempo que seria necessario para escrever um programa em uma linguagem como FORTRAN Pascal ou C devido as suas centenas de funcoes matematicas O SCILAB e desenvolvido pelo INRIA Institut National de Recherche en Informatique et en Automatique e ENPC Ecole Nationale des Ponts et Chaussees da Franca Em wwwscilaborg estao disponıveis varias informacoes documentacao e instrucoes de como baixar o programa As versoes do SCILAB estao disponıveis na forma precompilada para diversas plataformas Linux Windows HPUX e Mac OSX Como o codigo fonte tambem esta disponıvel ele pode ser compilado para uso em um computador especıfico O objetivo deste texto e apresentar o SCILAB como uma linguagem de programacao do tada de funcoes nao disponıveis nas linguagens convencionais Por isto este material pode ser utilizado em disciplinas tais como Programacao de Computadores Calculo Numerico Analise Numerica Algebra Linear e quaisquer outras dos cursos de Engenharia e das areas de Ciˆencias Exatas Tambem sao exploradas algumas caracterısticas proprias que mostram por que o SCILAB e uma poderosa ferramenta de apoio ao aprendizado e utilizacao da Computacao Cientıfica O Capıtulo 1 Logica de programacao apresenta uma revisao de logica de programacao ex plicando as estruturas basicas sequencial condicional e de repeticao alem das estruturas de dados fundamentais No Capıtulo 2 Ambiente de programacao e descrito o ambiente de programacao do SCILAB mostrando a janela de comandos e como obter informacoes de co mandos durante a sessao O Capıtulo 3 Estruturas de dados apresenta as estruturas de dados suportadas pelo SCILAB como constantes vetores matrizes hipermatrizes polinˆomios e listas No Capıtulo 4 Expressoes sao mostradas as expressoes aritmeticas logicas e literais bem como o modo de executalas O Capıtulo 5 Graficos e dedicado a elaboracao de graficos bi e tridimensionais No Capıtulo 6 Linguagem de programacao o SCILAB e visto como uma linguagem de programacao sendo mostrado como escrever programas e funcoes estruturas condicionais e de repeticao e depuracao de programas O Capıtulo 7 Comandos de entrada e saıda apresenta os formatos de exibicao gravacao e leitura de variaveis do espaco de trabalho alem de leitura de gravacao de dados em arquivos Finalmente no Capıtulo 8 Computacao cientıfica sao apresentadas funcoes do SCILAB para resolver problemas de Computacao Ci entıfica Sugestoes para aprimorar o presente texto bem como para efetuar correcoes serao bem vindas pelo email ffcamposdccufmgbr Belo Horizonte agosto de 2010 Frederico F Campos filho DCCICExUFMG Sumario 1 Logica de programacao 1 11 Estrutura basica de um algoritmo 1 12 Comandos de entrada e saıda 2 13 Estrutura sequencial 3 14 Variaveis e comentarios 3 15 Expressoes 4 151 Comando de atribuicao 4 152 Expressoes aritmeticas 4 153 Expressoes logicas 7 154 Ordem geral de precedˆencia 8 155 Expressoes literais 9 16 Estruturas condicionais 10 161 Estrutura condicional simples 10 162 Estrutura condicional composta 11 17 Estruturas de repeticao 12 171 Numero indefinido de repeticoes 12 iii iv SUMARIO 172 Numero definido de repeticoes 14 18 Falha no algoritmo 17 19 Modularizacao 17 110 Estruturas de dados 18 1101 Vetores 18 1102 Matrizes 21 1103 Hipermatrizes 23 111 Exercıcios 24 2 Ambiente de programacao 27 21 Janela de comando 27 211 Espaco de trabalho 29 212 Diretorio corrente 30 213 Comando unix 31 22 Comandos de auxılio ao usuario 31 221 Comando help 31 222 Comando apropos 32 223 Menu de barras 33 23 Exercıcios 33 3 Estruturas de dados 35 31 Constantes 35 311 Numericas 35 SUMARIO v 312 Logicas 36 313 Literais 36 32 Variaveis 36 321 Regras para nomes de variaveis 36 322 Comando de atribuicao 37 323 Variaveis especiais 37 33 Vetores 38 34 Matrizes 42 341 Construcao e manipulacao de matrizes 42 342 Funcoes matriciais basicas 45 343 Funcoes para manipulacao de matrizes 48 344 Matrizes elementares 54 35 Hipermatrizes 57 36 Polinˆomios 59 361 Construcao 59 362 Avaliacao 60 363 Adicao e subtracao 60 364 Multiplicacao 60 365 Divisao 61 366 Derivacao 62 367 Calculo de raızes 62 37 Variaveis logicas 63 vi SUMARIO 38 Variaveis literais 64 39 Listas 64 310 Exercıcios 66 4 Expressoes 69 41 Expressoes aritmeticas 69 411 Ordem de precedˆencia 69 412 Expressoes vetoriais 70 413 Expressoes matriciais 72 42 Expressoes logicas 75 43 Expressoes literais 78 431 Conversao de caracteres 78 432 Manipulacao de caracteres 80 44 Execucao de expressoes 86 45 Exercıcios 87 5 Graficos 91 51 Graficos bidimensionais 91 511 Funcao plot 91 512 Funcao fplot2d 94 52 Graficos tridimensionais 97 521 Funcao meshgrid 97 522 Funcao plot3d 98 SUMARIO vii 523 Funcao mesh 101 524 Funcao surf 102 53 Janela de figura 102 54 Exercıcios 103 6 Linguagem de programacao 105 61 Programacao 105 611 Programa 105 612 Subprograma function 107 62 Estruturas condicionais 113 621 Estrutura ifend 113 622 Estrutura ifelseend 113 623 Estrutura ifelseifend 114 624 Estrutura selectcaseend 115 63 Estruturas de repeticao 116 631 Estrutura forend 117 632 Estrutura whileend 118 633 Estrutura com interrupcao no interior 119 64 Depuracao de programa 121 65 Exercıcios 122 7 Comandos de entrada e saıda 125 71 Formato de exibicao 125 viii SUMARIO 72 Espaco de trabalho 127 721 Gravar dados 128 722 Recuperar dados 129 723 Entrada de dados 129 724 Janela de mensagem 130 73 Diario 131 74 Leitura e gravacao de dados 132 741 Abertura de arquivo 132 742 Fechamento de arquivo 133 743 Gravacao em arquivo 133 744 Leitura em arquivo 134 75 Exercıcios 136 8 Computacao cientıfica 139 81 Medidas de tempo 139 82 Algebra linear 140 821 Parˆametros da matriz 140 822 Decomposicoes 143 823 Solucao de sistemas 148 824 Inversa 149 825 Autovalores e autovetores 150 83 Interpolacao 151 SUMARIO ix 831 Calculo das diferencas finitas ascendentes 151 832 Interpolacao unidimensional 152 84 Integracao numerica 153 85 Exercıcios 155 x SUMÁRIO Capıtulo 1 Logica de programacao Segundo Wirth 5 programas de computadores sao formulacoes concretas de algoritmos abstratos baseados em representacoes e estruturas especıficas de dados sendo um algoritmo1 a descricao de um conjunto de comandos que resultam em uma sucessao finita de acoes Para este mesmo autor a linguagem exerce uma grande influˆencia na expressao do pensa mento Portanto um modo mais adequado para a elaboracao de algoritmos deve considerar apenas a expressao do raciocınio logico Alem do mais ao expressar as varias etapas do raciocınio por meio de uma linguagem de programacao o programador e induzido a se pre ocupar com detalhes pouco importantes da linguagem O modelo logico resultante de uma notacao algorıtmica deve ser codificado com facilidade em qualquer linguagem de programacao Assim o uso de uma notacao algorıtmica leva o programador a expressar o seu raciocınio logico independente da linguagem de programacao Uma notacao algorıtmica deve conter um numero mınimo de estruturas de controle sequen cial condicional e de repeticao de modo a serem implementadas facilmente nas linguagens de programacao disponıveis Os algoritmos deste texto sao descritos na notacao utilizada em Algoritmos Numericos 2 a qual e baseada naquela proposta por Farrer e outros 3 4 11 Estrutura basica de um algoritmo Um algoritmo apresenta a seguinte estrutura basica 1Esta palavra deriva do nome do matematico arabe Mohammed ibuMusa alKhowarizmi 800 dC 1 2 Capıtulo 1 Logica de programacao Algoritmo nomedoalgoritmo Objetivo Mostrar a estrutura basica de um algoritmo declaracao das variaveis comandos 1 comandos 2 comandos n fimalgoritmo onde Algoritmo nomedoalgoritmo indica o inıcio do algoritmo denominado nomedoalgoritmo e o seu termino e definido por fimalgoritmo A finalidade do algoritmo e descrita na forma de comentario sendo Objetivo objetivodoalgoritmo As variaveis usadas no algoritmo bem como seus tipos e estruturas sao declaradas por meio da declaracao das variaveis e os comandos i especificam as n acoes a serem executadas pelo algoritmo 12 Comandos de entrada e saıda O comando leia listadevariaveis e usado para indicar que a listadevariaveis esta disponıvel para armazenar os dados lidos em algum dispositivo externo Nao se faz necessario descrever exatamente como os valores dessas variaveis serao fornecidos ao algoritmo Compete ao programador decidir durante a codificacao do programa se os dados serao fornecidos interativamente pelo teclado lidos de um arquivo passados como argumentos de um subprograma ou ate mesmo definidos como constantes dentro do proprio programa Por sua vez o comando 13 Estrutura sequencial 3 escreva listadevariaveis e utilizado para indicar as variaveis cujos valores devem ser escritos em algum dispositivo externo Exemplo 11 Apresenta um algoritmo basico o qual lˆe as variaveis a b e c necessarias a sua execucao e escreve as variaveis x e y em algum dispositivo externo Algoritmo Operacoes aritmeticas Objetivo Somar e subtrair dois numeros leia a b c x a b y b c escreva x y fimalgoritmo Exemplo 12 Exibe um algoritmo para ler uma temperatura em grau Fahrenheit e converter em grau Celsius Algoritmo Converte grau Objetivo Converter grau Fahrenheit em Celsius leia Fahrenheit Celsius Fahrenheit 32 59 escreva Fahrenheit Celsius fimalgoritmo 13 Estrutura sequencial A mais simples das estruturas de controle de um algoritmo e a estrutura sequencial Ela indica que os comandos devem ser executados na ordem em que aparecem No Exemplo 11 o comando x a b e executado seguido pelo comando y b c 14 Variaveis e comentarios Uma variavel corresponde a uma posicao de memoria do computador onde pode ser ar mazenado um valor As variaveis sao representadas por identificadores que sao cadeias de 4 Capıtulo 1 Logica de programacao caracteres alfanumericos Os elementos de vetores e matrizes podem ser referenciados ou por subscritos ou por ındices por exemplo vi ou vi e Mij ou Mi j Um comentario e um texto inserido em qualquer parte do algoritmo para documentalo e aumentar a sua clareza Esse texto e delimitado por chaves texto como por exemplo avaliacao do polinˆomio 15 Expressoes Expressoes sao combinacoes de variaveis constantes e operadores Existem trˆes tipos de ex pressoes aritmeticas logicas e literais dependendo dos tipos dos operadores e das variaveis envolvidas 151 Comando de atribuicao O resultado de uma expressao e armazenado em uma variavel por meio do sımbolo recebe variavel expressao como visto no Exemplo 11 152 Expressoes aritmeticas Expressao aritmetica e aquela cujos operadores sao aritmeticos e cujos operandos sao cons tantes eou variaveis aritmeticas elas visam avaliar alguma formula matematica Os ope radores aritmeticos sao mostrados na Tabela 11 e a Tabela 12 apresenta algumas funcoes matematicas elementares Tabela 11 Operadores aritmeticos Operacao Operador Uso adicao a b mais unario a subtracao a b menos unario a multiplicacao a b divisao a b potenciacao a b 15 Expressoes 5 Tabela 12 Funcoes matematicas Funcao Descricao Funcao Descricao Trigonometricas sen seno cos coseno tan tangente sec secante Exponenciais exp exponencial log10 logaritmo decimal loge logaritmo natural raiz2 raiz quadrada Numericas abs valor absoluto quociente divisao inteira arredonda arredonda em direcao ao in teiro mais proximo sinal sinalx 1 se x0 0 se x0 e 1 se x0 max maior valor resto resto de divisao min menor valor trunca arredonda em direcao a 0 Exemplo 13 A Tabela 13 mostra exemplos de uso das funcoes matematicas numericas E importante observar a diferenca entre as funcoes arredonda e trunca Tabela 13 Resultados de funcoes matematicas numericas Funcao x e y Valor x e y Valor absx 5 5 3 3 arredondax 04 0 05 1 quocientex y 5 e 3 1 3 e 5 0 restox y 5 e 3 2 3 e 5 3 sinalx 2 1 7 1 truncax 11 1 19 1 Ordem de precedˆencia Dada uma expressao matematica ela deve ser escrita em uma forma linear no algoritmo por exemplo t a b c deve ser escrita como t a bc enquanto que a notacao de u a b c e u a bc Ao converter a notacao matematica para a notacao algorıtmica tem que se respeitar a ordem de precedˆencia das operacoes aritmeticas a qual e apresentada na 6 Capıtulo 1 Logica de programacao Tabela 14 Quando duas operacoes tˆem a mesma prioridade efetuase primeiro a operacao mais a esquerda No calculo de u acima foi utilizado parˆenteses para que a adicao fosse efetuada primeiro que a divisao pois a divisao tem precedˆencia sobre a adicao Tabela 14 Ordem de precedˆencia das operacoes aritmeticas Prioridade Operacoes 1a resolver parˆenteses 2a avaliar funcao 3a potenciacao 4a menos e mais unario 5a multiplicacao e divisao 6a adicao e subtracao Exemplo 14 Escrever as expressoes aritmeticas na notacao algorıtmica t a b c d t a bc d x a b c d x a bc d y a b c d1 2 y a bc d 12 E importante verificar o balanceamento dos parˆenteses ou seja o numero de abre parˆenteses tem que ser igual ao numero de fecha parˆenteses Exemplo 15 Avaliar as expressoes aritmeticas do Exemplo 14 para a 1 b 2 c 3 e d 4 arredondando o resultado para cinco casas decimais t a bc d 1 23 4 t 566667 x a bc d 1 23 4 37 x 042857 y a bc d 12 1 23 4 12 1 23 52 1 255 y 136364 15 Expressoes 7 153 Expressoes logicas Expressao logica e aquela cujos operadores sao logicos e cujos operandos sao relacoes eou variaveis do tipo logico Uma relacao e uma comparacao realizada entre valores do mesmo tipo A natureza da comparacao e indicada por um operador relacional definido conforme a Tabela 15 O resultado de uma relacao ou de uma expressao logica e verdadeiro ou falso Tabela 15 Operadores relacionais Relacao Operador Uso igual a a b diferente de a b maior que a b maior ou igual a a b menor que a b menor ou igual a a b Exemplo 16 Avaliar as expressoes logicas para c 1 d 3 x 2 y 3 e z 10 c d 1 3 falso d c x 3 1 2 verdadeiro x y z c 2 3 10 1 verdadeiro Os operadores logicos mostrados na Tabela 16 permitem a combinacao ou negacao das relacoes logicas Tabela 16 Operadores logicos Operacao Operador Uso conjuncao e expressao 1 e expressao 2 disjuncao ou expressao 1 ou expressao 2 negacao nao naoexpressao A Tabela 17 mostra os resultados obtidos com os operadores logicos sendo que V significa verdadeiro e F significa falso Tabela 17 Resultados com operadores logicos a e b ab V F V V F F F F a ou b ab V F V V V F V F nao a a V F F V 8 Capıtulo 1 Logica de programacao Ordem de precedˆencia De modo similar as expressoes aritmeticas as expressoes logicas tambem possuem uma ordem de precedˆencia como mostrado na Tabela 18 Tabela 18 Ordem de precedˆencia das operacoes logicas Prioridade Operacao 1a relacional 2a negacao 3a conjuncao 4a disjuncao Exemplo 17 Avaliar as expressoes logicas abaixo para c 1 d 3 x 2 y 3 e z 10 d c e x y 5 z 3 1 e 2 3 5 10 3 1 e 10 10 V e V verdadeiro x d 2 ou c y z 2 3 2 ou 1 3 10 2 1 ou 4 10 F ou V verdadeiro d x z2 e naod y 3 2 102 e nao3 3 5 5 e naoV V e F falso 154 Ordem geral de precedˆencia Combinando as ordens de precedˆencia das operacoes aritmeticas e logicas temse uma ordem geral de precedˆencia das operacoes matematicas como apresentada na Tabela 19 15 Expressoes 9 Tabela 19 Ordem de precedˆencia das operacoes matematicas Prioridade Operacoes 1a 2a funcao 3a 4a e unario 5a e 6a e 7a e 8a nao 9a e 10a ou Exemplo 18 Avaliar as expressoes abaixo para a 1 b 2 e c 3 a 52 b 6 c e 4 c 15 1 52 2 6 3 e 4 3 15 62 20 e 12 15 36 20 e F F e F falso a bc bc a ou a b c 5 1 23 23 1 ou 1 2 3 5 1 7 ou 5 5 V ou V verdadeiro c a2 b a e b cb 1 b c4 3 12 2 1 e 2 32 1 2 34 35 1 e 29 125 V e F falso 155 Expressoes literais Uma expressao literal e formada por operadores literais e operandos os quais sao constantes eou variaveis do tipo literal Operacoes envolvendo literais tais como concatenacao in sercao busca etc geralmente sao realizadas por meio de funcoes disponıveis nas bibliotecas das linguagens de programacao O caso mais simples de uma expressao literal e uma constante literal a qual e constituıda por uma cadeia de caracteres delimitada por apostrofo por exemplo mensagem matriz singular 10 Capıtulo 1 Logica de programacao 16 Estruturas condicionais Os algoritmos apresentados nos Exemplos 11 e 12 utilizam apenas a estrutura sequencial Ela faz com que os comandos sejam executados na ordem em que aparecem Uma estrutura condicional possibilita a escolha dos comandos a serem executados quando certa condicao for ou nao satisfeita alterarando assim o fluxo natural de comandos A condicao e representada por uma expressao logica As estruturas condicionais podem ser simples ou compostas 161 Estrutura condicional simples Esta estrutura apresenta a forma se condicao entao comandos fimse Neste caso a lista de comandos sera executada se e somente se a expressao logica condicao tiver como resultado o valor verdadeiro Exemplo 19 Fazer um algoritmo para calcular o logaritmo decimal de um numero positivo Algoritmo Logaritmo decimal Objetivo Calcular logaritmo decimal de numero positivo leia x se x 0 entao Log log10x escreva x Log fimse fimalgoritmo Os comandos Log log10x e escreva x Log so serao executados se a variavel x contiver um valor maior que 0 Exemplo 110 Escrever um algoritmo para ler dois numeros e escrevˆelos em ordem decres cente 16 Estruturas condicionais 11 Algoritmo Ordem decrescente Objetivo Escrever dois numeros dados em ordem decrescente leia m n se m n entao aux m m n n aux fimse escreva m n fimalgoritmo Havera a troca entre as variaveis m e n por meio dos trˆes comandos aux m m n e n aux se e somente se a variavel m contiver um valor menor que n 162 Estrutura condicional composta No caso de haver duas alternativas possıveis deve ser usada uma estrutura da forma se condicao entao comandos 1 senao comandos 2 fimse Se a expressao logica condicao tiver como resultado o valor verdadeiro entao a sequˆen cia comandos 1 sera executada e a sequˆencia comandos 2 nao sera executada Por outro lado se o resultado de condicao for falso entao sera a lista comandos 2 a unica a ser executada Exemplo 111 Elaborar um algoritmo para verificar se um numero esta dentro de um dado intervalo por exemplo se 1 a 5 Algoritmo Intervalo Objetivo Verificar se um numero pertence ao intervalo 1 5 leia a se a 1 e a 5 entao escreva a pertence ao intervalo 1 5 senao escreva a nao pertence ao intervalo 1 5 fimse fimalgoritmo 12 Capıtulo 1 Logica de programacao O comando escreva a pertence ao intervalo sera executado se e somente se a variavel a contiver um valor maior ou igual a 1 e menor que 5 Caso contrario se a for menor que 1 ou maior ou igual a 5 entao escreva a nao pertence ao intervalo sera o unico comando executado Exemplo 112 Elaborar um algoritmo para avaliar as funcoes modulares fx 2x e gx 5x Algoritmo Funcoes modulares Objetivo Avaliar duas funcoes modulares leia x se x 0 entao fx 2 x gx 5 x senao fx 2 x gx 5 x fimse escreva x fx gx fimalgoritmo Se a variavel x contiver um valor positivo ou nulo entao os dois comandos fx 2 x e gx 5 x serao executados seguindose o comando escreva x fx gx No entanto se x contiver um valor negativo os comandos fx 2 x gx 5 x e escreva x fx gx serao os unicos a serem executados 17 Estruturas de repeticao Uma estrutura de repeticao faz com que uma sequˆencia de comandos seja executada repe tidamente ate que uma dada condicao de interrupcao seja satisfeita Existem basicamente dois tipos dessas estruturas dependendo se o numero de repeticoes for indefinido ou definido 171 Numero indefinido de repeticoes Este tipo de estrutura de repeticao apresenta a forma O comando interrrompa faz com que o fluxo de execução seja transferido para o comando imediatamente a seguir do fimrepita Assim as listas comandos1 e comandos2 serão repetidas até que a expressão lógica condição resulte no valor verdadeiro Quando isso ocorrer a repetição será interrompida comandos2 não será executada e a lista comandos3 após ao fimrepita será executada Exemplo 113 Elaborar um algoritmo para calcular a a 0 utilizando o processo banilônico baseado na fórmula de recorrência 2 xk1 xk axk 05 para x0 0 Algoritmo Raizquadrada Objetivo Calcular a raiz quadrada de um número positivo leia a z valor para calcular a raiz quadrada e valor inicial i 0 repita i i 1 x z az 05 se absx z 1010 ou i 20 então interrrompa fimse z x fimrepita teste de convergência se absx z 1010 então escreva x raiz quadrada de a senão escreva processo não convergiu com 20 iterações fimse fimalgoritmo 14 Capıtulo 1 Logica de programacao E gerada uma sequˆencia de valores em x que e interrompida quando a diferenca entre dois valores consecutivos for menor que a tolerˆancia 10 10 ou atingir 20 iteracoes O teste de convergˆencia verifica qual das duas condicoes foi satisfeita se for a primeira entao o processo convergiu Exemplo 114 Escrever um algoritmo para determinar o maior numero de ponto flutuante que somado a 1 seja igual a 1 Algoritmo Epsilon Objetivo Determinar a precisao da maquina Epsilon 1 repita Epsilon Epsilon2 se Epsilon 1 1 entao interrompa fimse fimrepita escreva Epsilon fimalgoritmo Esta sequˆencia faz com que seja calculada a chamada precisao da maquina ε Quando a variavel Epsilon assumir um valor que adicionado a 1 seja igual a 1 entao a estrutura repitafimrepita e abandonada e o comando escreva Epsilon sera executado A forma repitafimrepita e o caso geral de uma estrutura de repeticao Se a lista comandos 1 nao existir tersea uma estrutura de repeticao com interrupcao no inıcio estrutura while Similarmente se nao houver a lista comandos 2 entao sera uma estrutura com interrupcao no final estrutura repeatuntil 172 Numero definido de repeticoes Quando se souber com antecedˆencia quantas vezes a estrutura deve ser repetida pode ser usado um comando de forma mais simples para controle valorinicial ate valorfinal passo delta faca comandos fimpara Nesta estrutura inicialmente e atribuıdo a variavel controle o valor de valorinicial e verificado se ele e maior que o valorfinal Se for maior a estrutura parafaca nao sera executada Se for menor ou igual entao os comandos serao executados e a variavel controle será incrementada com o valor de delta Novamente é verificado se a variável controle é maior que o valorfinal se não for maior então os comandos serão executados e assim sucessivamente As repetições se processam até que a variável controle se torne maior que o valorfinal Quando o incremento delta tiver o valor 1 então o passo delta pode ser omitido da estrutura parafaça Exemplo 115 Escrever um algoritmo para mostrar que a soma dos n primeiros números ímpares é igual ao quadrado de n n i12i 1 1 3 5 2n 1 n2 11 Por exemplo para n 5 a variável i assume os valores i 1 2 3 4 e 5 Assim a expressão do somatório 2i 1 gera os n 5 primeiros ímpares 2i 1 1 3 5 7 e 9 cuja soma é 1 3 5 7 9 25 52 Para implementar um somatório se faz necessário o uso de uma variável auxiliar para acumular o resultado da soma de cada novo termo Inicialmente esse acumulador denominado Soma recebe o valor 0 que é o elemento neutro da adição Para cada valor de i é incrementado o valor de 2i 1 como mostrado na tabela i 2i 1 Soma 0 1 1 0 1 1 2 3 1 3 4 3 5 4 5 9 4 7 9 7 16 5 9 16 9 25 Ao final quando i n a variável Soma conterá o valor do somatório n2 52 25 A implementação da notação matemática 11 é mostrada no algoritmo abaixo Algoritmo Primeirosimpares Objetivo Verificar propriedade dos números ímpares leia n Soma 0 para i 1 até n faça Soma Soma 2 i 1 fimpara escreva Soma n² fimalgoritmo A sequência de números ímpares 2i 1 é gerada por uma estrutura parafaça na qual a variável de controle i começa com o valor 1 e é incrementada de 1 até assumir o valor n Essa mesma sequência de números ímpares pode ser gerada pela estrutura similar para j 1 até 2 n 1 passo 2 faça Soma Soma j fimpara Exemplo 116 Elaborar um algoritmo para calcular o fatorial de um número inteiro n sendo n n k1 k 1 2 3 n 12 Para n 4 por exemplo a variável k assume os valores k 1 2 3 e 4 A expressão do produtório resulta em 4 1 2 3 4 24 Como no caso do somatório para implementar um produtório é necessário uma variável auxiliar para acumular o resultado do produto de cada termo Esse acumulador recebe inicialmente o valor 1 que é o elemento neutro da multiplicação Para cada valor de k o acumulador denominado Fatorial é multiplicado por k conforme esquematizado na tabela k Fatorial 1 1 1 1 1 1 2 1 2 2 2 3 2 3 6 3 4 6 4 24 Quando k n a variável Fatorial conterá o valor do produtório que é igual a n A implementação da notação matemática 12 é apresentada no algoritmo abaixo Algoritmo Fatorial Objetivo Calcular o fatorial de um número inteiro leia n Fatorial 1 Fatorial Fatorial k fimpara escreva n Fatorial fimalgoritmo 18 Falha no algoritmo 17 Esse algoritmo utiliza a estrutura de repeticao para faca Inicialmente a variavel de controle k recebe o valor 2 para evitar a operacao desnecessaria 1 1 se k 1 Se n 1 entao a estrutura parafaca nao sera executada mas tersea o resultado correto 1 1 18 Falha no algoritmo O comando abandone e usado para indicar que havera uma falha evidente na execucao do algoritmo isto e uma condicao de erro Por exemplo uma divisao por zero uma singularidade da matriz ou mesmo o uso inapropriado de parˆametros Neste caso a execucao deve ser cancelada 19 Modularizacao A tecnica de modularizacao consiste em subdividir o algoritmo principal em modulos for mados por um subconjunto de comandos cada qual com um objetivo bem especıfico Uma grande vantagem da modularizacao e a utilizacao de um mesmo modulo por outros algorit mos que requeiram aquela funcionalidade A interacao entre as variaveis dos modulo e as variaveis do algoritmo principal e realizada pelos parˆametros de entrada e de saıda Os dados necessarios para a execucao de um algoritmo modulo sao declarados por meio do comando parˆametros de entrada listadevariaveis onde listadevariaveis sao os nomes das variaveis separadas por vırgulas contendo os valores fornecidos Por outro lado os valores de interesse calculados pelo algoritmo modulo sao definidos pelo comando parˆametros de saıda listadevariaveis E de responsabilidade do projetista do modulo definir a listadevariaveis em termos de identificadores ordem e numero Exemplo 117 Escrever um modulo baseado no algoritmo de Exemplo 116 que receba como parˆametro de entrada o numero inteiro n e retorne como parˆametro de saıda o fatorial desse numero na variavel Fatorial 18 Capıtulo 1 Logica de programacao Algoritmo Calcula fatorial Objetivo Calcular o fatorial de um numero inteiro parˆametro de entrada n numero inteiro parˆametro de saıda Fatorial fatorial do numero inteiro Fatorial 1 para k 2 ate n faca Fatorial Fatorial k fimpara fimalgoritmo A forma de chamada do modulo acima pelo modulo principal depende da linguagem de programacao escolhida Essa forma pode ser por exemplo Algoritmo Fatorial principal Objetivo Utilizar o modulo Calcula fatorial leia n numero inteiro Fatorial Calcula fatorialn chamada do modulo escreva Fatorial fatorial do numero inteiro fimalgoritmo 110 Estruturas de dados Conforme visto na Secao 14 Variaveis e comentarios uma variavel corresponde a uma posicao de memoria do computador onde esta armazenado um determinado valor Ela e representada por um identificador que e uma cadeia de caracteres alfanumericos Quando se faz referˆencia a um identificador na realidade esta tendo acesso ao conteudo de uma posicao de memoria Quando se tem varias variaveis com o conteudo do mesmo tipo elas podem ser agrupadas em uma unica variavel sendo cada conteudo individualizado por ındices Por isso elas sao denominadas variaveis compostas homogˆeneas e as mais comuns sao os vetores com um unico ındice e as matrizes com dois ou mais ındices 1101 Vetores Vetores ou arranjos sao variaveis homogˆeneas unidimensionais ou seja sao variaveis agrupa das em um unico nome cujos elementos sao individualizados por um so ındice Por exemplo sejam as notas de 45 alunos referentes a Prova 1 da disciplina Analise Numerica mostradas na tabela abaixo sendo nc o numero de chamada de cada aluno O vetor Notas contém 45 elementos cada um referenciando a nota da Prova 1 de cada aluno Desta forma Notas1 15 é a nota do aluno 1 da lista de chamada Notas2 19 é a nota do aluno 2 da lista e assim sucessivamente até que Notas45 17 é a nota do aluno 45 Por exemplo para obter a nota média da Prova 1 basta calcular Notamédia 145 i145 Notasi 145 15 19 12 17 A Figura 11 mostra um algoritmo para determinar o maior elemento de um vetor x de tamanho n 110 Estruturas de dados 21 1102 Matrizes Matrizes sao variaveis homogˆeneas bidimensionais isto e sao variaveis agrupadas em um unico nome com os elementos individualizados por meio de dois ındices Para exemplificar considere a tabela abaixo com as notas de 45 alunos referentes as Provas 1 2 3 e 4 da disciplina Analise Numerica onde nc e o numero de ordem na chamada de cada aluno Notas Analise Numerica nc Prova 1 Prova 2 Prova 3 Prova 4 1 15 12 17 10 2 19 20 18 20 3 12 19 17 18 4 20 20 20 20 5 18 13 20 19 6 20 19 19 20 7 13 17 14 18 8 19 20 20 17 45 17 12 10 16 Para referenciar a nota de cada aluno em cada prova sao necessarios doisındices O primeiro ındice indica qual aluno entre os quarenta e cinco e o segundo ındice especifica qual das quatro provas Por isso a matriz Notas contem 45 linhas referentes a cada aluno e 4 colunas indicando cada uma das provas Assim Notas1 1 15 e a nota do aluno 1 na Prova 1 Nota2 3 18 e a nota do aluno 2 na Prova 3 e Notas45 4 16 e a nota do aluno 45 na Prova 4 Exemplo 121 O algoritmo da Figura 14 calcula a soma das linhas da matriz A de dimensao m n Exemplo 122 A Figura 15 apresenta um algoritmo para determinar o maior elemento em cada linha de uma matriz A de dimensao m n Algoritmo Vetormaior Objetivo Determinar o maior elemento de um vetor parâmetros de entrada n x tamanho do vetor e o vetor parâmetro de saída Maior Maior elemento do vetor Maior x1 para i 2 até n faça se xi Maior então Maior xi fimse fimpara fimalgoritmo 22 Capıtulo 1 Logica de programacao Algoritmo Matriz soma linha Objetivo Calcular a soma de cada linha da matriz parˆametros de entrada m n A numero de linhas numero de colunas e elementos da matriz parˆametro de saıda SomaLinha vetor contendo a soma de cada linha para i 1 ate m faca SomaLinhai 0 para j 1 ate n faca SomaLinhai SomaLinhai Ai j fimpara fimpara fimalgoritmo Figura 14 Algoritmo para calcular a soma das linhas de uma matriz Algoritmo Matriz maior Objetivo Determinar maior elemento em cada linha da matriz parˆametros de entrada m n A numero de linhas numero de colunas e elementos da matriz parˆametro de saıda Maior vetor contendo o maior elemento de cada linha para i 1 ate m faca Maiori Ai 1 para j 2 ate n faca se Ai j Maiori entao Maiori Ai j fimse fimpara fimpara fimalgoritmo Figura 15 Algoritmo para determinar o maior elemento da linha de uma matriz Nesse caso para referenciar a nota de cada aluno em cada prova e em cada disciplina na mesma variável Nota são necessários agora três índices O primeiro índice indica qual aluno entre os quarenta e cinco o segundo índice especifica qual das quatro provas e o terceiro estabelece qual das duas disciplinas entre Análise Numérica e AEDS III Assim a hipermatriz tridimensional Notas contém duas páginas uma para cada disciplina terceiro índice com cada página contendo 45 linhas referentes a cada aluno primeiro índice e com 4 colunas indicando cada uma das provas segundo índice Por exemplo Notas3 2 1 19 é a nota do aluno 3 na Prova 2 em Análise Numérica enquanto que Nota8 4 2 20 é a nota do aluno 8 na Prova 4 de AEDS III 111 Exercıcios 25 Secao 17 Estruturas de repeticao Fazer um algoritmo para calcular uma expressao abaixo 111 S 1 2 3 4 5 6 9 10 112 T 30 29 1 28 27 2 26 25 3 2 1 15 113 N 1 1 2 4 3 9 4 16 12 144 114 F 1 2 3 4 5 6 n 115 P 13 1 33 2 53 3 193 10 Elaborar um algoritmo para ler um argumento e calcular uma funcao elementar abaixo apro ximada por serie de potˆencias 1 A serie deve ser truncada quando um termo for menor que 1010 ou atingir 1000 termos Essas expansoes em serie geralmente sao muito ineficientes para aproximar funcoes pois requerem um numero elevado de termos No entanto elas possibilitam otimos exemplos para uso das estruturas de repeticao 116 logex x 1 x 12 2 x 13 3 para 0 x 2 117 expx 1 x 1 x2 2 x3 3 118 senx x x3 3 x5 5 x7 7 119 cosx 1 x2 2 x4 4 x6 6 120 arcsenx x 1 2 x3 3 1 3 2 4 x5 5 1 3 5 2 4 6 x7 7 para x 1 Secao 19 Modularizacao Converter os algoritmos dos exemplos abaixo que utilizam os comandos leia e escreva em modulos com parˆametros de entrada e de saıda 121 Exemplo 113 122 Exemplo 118 123 Exemplo 120 124 Exemplo 121 125 Exemplo 123 Capıtulo 2 Ambiente de programacao O SCILAB e executado por meio do script scilab no diretorio SCIDIRbin sendo que SCIDIR denota o diretorio onde o programa foi instalado A interacao entre o SCILAB e o usuario e feita por intermedio de uma janela na qual um comando e fornecido interpretado e exibido o resultado Neste capıtulo sera descrita a janela de comando do SCILAB e seus comandos basicos bem como os meios que o programa tem de auxiliar o usuario durante a sessao no caso de duvida sobre a sintaxe ou mesmo a existˆencia de algum comando 21 Janela de comando Para executar o SCILAB em ambiente Windows ou Macintosh o cursor deve ser colocado sobre o seu ıcone e pressionado o botao da esquerda do mouse ou entao no caso de ambi ente Linux entrar com o comando scilab ou scilab nw no window em uma janela de comando Sem a opcao nw aparecera uma nova janela pela qual sera feita a interacao entre o SCILAB e o usuario ver Figura 21 Se for utilizada a opcao nw a janela do SCILAB aparecera na propria janela de comando ver Figura 22 O sinal de que o programa esta pronto para receber um comando e indicado pelo prompt formado pelos trˆes caracteres Um comando e finalizado acionandose a tecla Enter ou Return Se um comando for muito longo entao trˆes pontos seguidos do pressionamento da tecla Enter ou Return indica que o comando continuara na proxima linha Varios comandos podem ser colocados em uma mesma linha se eles forem separados por vırgulas ou pontosevırgulas Alem disto as vırgulas indicam ao SCILAB para mostrar os resultados e os pontosevırgulas para suprimir 27 28 Capıtulo 2 Ambiente de programacao Figura 21 Janela de comando da versao 511 do SCILAB sem nw Figura 22 Janela de comando da versao de 511 do SCILAB com nw a exibicao Um texto apos duas barras invertidas e ignorado ele pode ser utilizado como um comentario para a documentacao de um programa 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 modificacao O numero de linhas e colunas a serem exibidas de cada vez na janela de comando pode ser 21 Janela de comando 29 redefinida pelo comando lines Sua sintaxe e linesnumerodelinhasnumerodecolunas onde numerodelinhas e numerodecolunas definem o numero de linhas e colunas respectivamente a serem exibidas sendo o segundo argumento opcional O comando e desativado por lines0 O comando clc e usado para limpar a janela de comando1 e tohome posiciona o cursor no canto superior esquerdo da janela de comando O termino de execucao do SCILAB e feito pelos comandos quit ou exit Quando o SCILAB for ativado os comandos contidos no arquivo scilabini sao automati camente executados caso ele exista para que sejam atribuıdos valores a alguns parˆametros Deste modo o usuario pode criar um arquivo contendo por exemplo definicao de constantes matematicas e fısicas formatos de exibicao ou quaisquer comandos do SCILAB para perso nalizar a sua janela de comando Este arquivo deve ser criado em um diretorio especıfico dependendo do sistema operacional utilizado use help startup para mais informacoes A abrangˆencia e potencialidade do SCILAB esta muito alem do que sera mostrado neste texto por isso e aconselhavel executar a opcao Scilab Demonstrations dentro da opcao no canto superior a direita1 para visualizar uma demonstracao e se ter uma ideia dessa potencialidade 211 Espaco de trabalho As variaveis criadas durante uma sessao ficam armazenadas em uma memoria denominada espaco de trabalho O comando who lista o nome das variaveis que estao sendo usadas ou seja que estao presentes no espaco de trabalho Este comando lista as variaveis criadas pelo usuario e as definidas pelo proprio SCILAB Por exemplo no inıcio de uma sessao quando o usuario criou apenas uma variavel a 1 cria a variavel a com o valor 1 a 1 who Your variables are a home matiolib parameterslib simulatedannealinglib geneticalgorithmslib umfpacklib fft scicospal scicosmenu scicosshort scicoshelp scicosdisplaymode modelicalibs scicospallibs scicoslhblist CmenuTypeOneVector scicosgif scicoscontrib scicosmenuslib scicosutilslib scicosautolib spreadsheetlib demotoolslib developmenttoolslib scilab2fortranlib scipadinternalslib scipadlib soundlib texmacslib tclscilib m2scilib maple2scilablib metanetgraphtoolslib metaneteditorlib compatibilityfunctilib statisticslib timelib stringlib specialfunctionslib sparselib signalprocessinglib z s 1Quando o SCILAB for executado sem a opcao nw 30 Capıtulo 2 Ambiente de programacao polynomialslib overloadinglib optimizationlib linearalgebralib jvmlib iolib interpolationlib integerlib dynamiclinklib guilib datastructureslib cacsdlib graphicexportlib graphicslib fileiolib functionslib elementaryfunctionlib differentialequationlib helptoolslib corelib PWD F T nan inf COMPILER SCI SCIHOME TMPDIR MSDOS gui pvm tk fftw t f eps io i e pi using 33369 elements out of 5000000 and 86 variables out of 9231 Your global variables are modalWarning demolist helps helpsmodules driverName exportFileName LANGUAGE toolboxes toolboxesdir using 2681 elements out of 5000001 and 9 variables out of 767 212 Diretorio corrente Diretorio corrente e aquele considerado em uso sem ser necessario especificalo explicita mente durante uma acao Para saber qual o diretorio de trabalho corrente utilizase o comando pwd pwd mostra o diretorio de trabalho corrente ans ffcampos O resultado exibido depende do diretorio de onde o SCILAB foi executado O diretorio corrente pode ser alterado por meio do comando cd cd scilab muda o diretorio de trabalho corrente para scilab ans ffcamposscilab O SCILAB fornece diversos comandos para gerenciamento de arquivos os quais sao mostra dos na Tabela 21 Tabela 21 Comandos para gerenciamento de arquivos Comando Descricao dir ou ls lista os arquivos do diretorio corrente mdeletenome do arquivo remove o arquivo nome do arquivo cd dir ou chdir dir muda o diretorio para dir pwd mostra o diretorio corrente 22 Comandos de auxılio ao usuario 31 213 Comando unix O comando unixcomando do unix permite a execucao de um comando do sistema operacional Unix dentro do SCILAB Por exemplo caso o arquivo precisaosci exista no diretorio corrente o seu conteudo e exibido pelo comando unixmore precisaosci lista conteudo do arquivo programa precisao Objetivo determinar a precisao de um computador n 0 Epsilon 1 while 1 Epsilon 1 n n 1 Epsilon Epsilon 2 end n Epsilon eps 22 Comandos de auxılio ao usuario O SCILAB possui muito mais comandos do que aqueles apresentados neste texto o que torna mais difıcil lembralos Com o intuito de auxiliar o usuario na procura de comandos o programa provˆe assistˆencia por intermedio de suas extensivas capacidades de auxılio direto Estas capacidades estao disponıveis em trˆes formas o comando help o comando apropos e interativamente por meio de um menu de barras 221 Comando help O comando help e a maneira mais simples de obter auxılio no caso de conhecer o topico em que se quer assistˆencia Sua sintaxe e help topico onde topico e o nome da funcao ou de diretorio Por exemplo quando se usa help sqrt abrese uma janela como a mostrada na Figura 23 Assim sao dadas informacoes sobre a funcao sqrt para extrair raiz quadrada O comando help funciona a contento quando se conhece exatamente o topico sobre o qual quer as sistˆencia Considerando que muitas vezes este nao e o caso o help pode ser usado sem topico para apresentar uma pagina de hipertexto contendo a lista de ıtens disponıveis O comando help e mais conveniente se o usuario conhecer exatamente o topico em que deseja auxılio No caso de nao saber soletrar ou mesmo desconhecer um topico as outras duas formas de assistˆencia sao muitas vezes mais proveitosas 32 Capıtulo 2 Ambiente de programacao Figura 23 Janela do comando help 222 Comando apropos O comando apropos provˆe assistˆencia pela procura em todas as primeiras linhas dos topicos de auxılio e retornando aquelas que contenham a palavrachave especificada O mais impor tante e que a palavrachave nao precisa ser um comando do SCILAB Sua sintaxe e apropos palavrachave onde palavrachave e a cadeia de caracteres que sera procurada nos comandos do SCI LAB Por exemplo para informacoes sobre fatorizacao teclase apropos factorization resultando em uma tela com pagina dupla A pagina da esquerda apresenta as classes de funcoes do SCILAB que contem pelo menos uma funcao com a descricao de factorization A segunda pagina mostra dentro de uma classe quais as funcoes que apresentam a palavra factorization em sua descricao A escolha da classe Linear Algebra por exemplo re sulta em uma tela como mostrada na Figura 24 Apesar de a palavra factorization nao ser um comando do SCILAB ela foi encontrada na descricao de varias funcoes Um clique sobre uma das linhas da pagina a esquerda escolhe a classe de funcoes e um clique sobre uma funcao da pagina a direita descreve aquela funcao especıfica como um comando help Por exemplo a escolha de chfact sparse Cholesky factorization e equivalente ao comando help chfact 23 Exercıcios 33 Figura 24 Janela do comando apropos 223 Menu de barras Quando o SCILAB for executado sem a opcao nw um auxılio por intermedio de menu dirigido e disponıvel selecionando a opcao Help Browser indicada por um dentro de um cırculo ultimo ıcone a direita no menu de barras como visto na Figura 21 Como o uso desta forma de assistˆencia e bem intuitivo o melhor a fazer e experimentar 23 Exercıcios Secao 21 Janela de comando 21 Executar o programa SCILAB 22 Verificar a diferenca entre e nos comandos pi1 pi10 e pi1 pi10 23 Testar o funcionamento das teclas e 24 Ver o funcionamento das teclas e 25 Verificar a diferenca entre lines20 lines e lines0 Secao 22 Comandos de auxılio ao usuario 26 Quantos parˆametros tem a funcao erro erf 27 Quais sao os comandos utilizados para interpolacao interpolation 34 Capıtulo 2 Ambiente de programacao 28 Qual o comando usado para calcular o determinante determinant de uma matriz 29 Qual o comando para achar raızes roots de uma equacao polinomial 210 Comparar a soma dos autovalores eigenvalues com o traco trace de uma matriz de ordem qualquer Fazer a mesma comparacao usando uma matriz com elementos aleatorios Capıtulo 3 Estruturas de dados Neste capıtulo serao apresentados alguns ıtens basicos tais como constantes variaveis vetores matrizes hipermatrizes polinˆomios e listas o que tornara possıvel o uso imediato do SCILAB no modo interativo Alem disto o conhecimento sobre as estruturas de dados e fundamental para um uso eficiente do programa 31 Constantes O SCILAB suporta trˆes tipos de constantes numericas logicas e literais 311 Numericas Uma constante numerica e formada por uma sequˆencia de dıgitos que pode estar ou nao precedida de um sinal positivo ou um negativo e pode conter um ponto decimal Esta sequˆencia pode terminar ou nao por uma das letras e E d ou D seguida de outra sequˆencia de dıgitos precedida ou nao de um sinal positivo ou um negativo Esta segunda sequˆencia e a potˆencia de 10 pela qual a primeira sequˆencia e multiplicada Por exemplo 123e1 significa 123101 0123 e 4567d2 e 4567102 4567 123e1 ans 0123 4567d2 ans 4567 Algumas linguagens de programacao requerem um tratamento especial para numeros com plexos o que nao e o caso do SCILAB Operacoes matematicas com numeros complexos sao escritas do mesmo modo como para numeros reais Para indicar a parte imaginaria basta 35 36 Capıtulo 3 Estruturas de dados acrescentar os trˆes caracteres i ou seja multiplicar por 1 i representado por i 32i ans 3 2i As variaveis reais e complexas em SCILAB ocupam 24 e 32 bytes de memoria respectiva mente 312 Logicas Uma constante logica pode assumir apenas dois valores t ou T true para verdadeiro e f ou F false para falso t valor verdadeiro ans T f valor falso ans F 313 Literais Uma constante literal e composta por uma cadeia de caracteres em vez de numeros ou verdadeiro e falso A cadeia de caracteres deve estar delimitada por aspas ou apostrofos abcde um valor literal ans abcde 32 Variaveis Uma variavel e uma posicao da memoria do computador utilizada para armazenar uma informacao sendo representada por um identificador 321 Regras para nomes de variaveis Como qualquer outra linguagem de programacao o SCILAB tem regras a respeito do nome de variaveis conforme mostrado na Tabela 31 32 Variaveis 37 Tabela 31 Regras para nomes de variaveis Regra Comentario conter ate 24 caracteres caracteres alem do 24o sao ignorados comecar com uma letra seguida de letras numeros ou dos carac teres e alguns caracteres de pontuacao sao permitidos tamanho da letra e diferenciador raiz Raiz e RAIZ sao trˆes variaveis distintas 322 Comando de atribuicao O SCILAB e um interpretador de expressoes A expressao fornecida e analisada sintatica mente e se estiver correta entao sera avaliada O resultado e atribuıdo a uma variavel por intermedio do comando de atribuicao variavel expressao Por exemplo a10251 a 153 Quando o comando de atribuicao for finalizado pelo caracter entao o resultado e atribuıdo a variavel porem o seu conteudo nao e exibido b52 atribuicao sem exibir o resultado b conteudo da variavel b ans 3 Se o nome da variavel e o sinal de atribuicao forem omitidos entao o resultado sera dado a variavel default ans answer 85 ans 16 323 Variaveis especiais O SCILAB tem diversas variaveis especiais as quais sao consideradas como predefinidas nao podendo ser alteradas ou removidas com excessao de ans Elas estao listadas na Tabela 32 Para obter os valores destas variaveis especiais fazse e eps i inf nan pi s 38 Capıtulo 3 Estruturas de dados Tabela 32 Variaveis especiais do SCILAB Variavel Valor ans nome de variavel default usada para resultados e base do logaritmo natural e 271828 eps menor numero de ponto flutuante que adicionado a 1 resulta um numero maior que 1 Seu valor e ǫ 252 222041016 em computadores com aritmetica de ponto flutuante IEEE i i 1 inf infinito por exemplo 10 nan nao e um numero NotANumber por exemplo 00 pi π 3 14159 s usada como variavel de polinˆomio e 27182818 eps 2220D16 i i inf Inf nan Nan pi 31415927 s s 33 Vetores Vetor ou arranjo e um conjunto de variaveis homogˆeneas conteudo de mesmo tipo iden tificadas por um mesmo nome e individualizadas por meio de um ındice No SCILAB um vetor e definido de varias formas por exemplo elemento por elemento separados por espaco em branco ou vırgula e delimitados pelos caracteres e vetor e1 e2 en sendo vetor o nome da variavel e ei o seu iesimo elemento a 5 1503 elementos separados por espaco em branco ou vırgula a 5 15 03 33 Vetores 39 O vetor a possui os elementos a15 a215 e a303 Se os valores do vetor forem igualmente espacados ele pode ser definido por intermedio da expressao vetor valor inicialincrementovalor final Para gerar um vetor com o primeiro elemento igual a 10 o segundo igual a 15 o terceiro igual a 20 e assim sucessivamente ate o ultimo igual a 40 basta o comando b 10540 valor inicial 10 incremento 5 e valor final 40 b 10 15 20 25 30 35 40 Se o incremento desejado for igual a 1 entao ele podera ser omitido u 59 valor inicial 5 incremento 1 e valor final 9 u 5 6 7 8 9 Em vez de usar incremento um arranjo pode tambem ser construıdo definindo o numero desejado de elementos na funcao linspace cuja sintaxe e vetor linspacevalor inicialvalor finalnumero de elementos Assim para criar um arranjo com o primeiro elemento igual a 10 o ultimo igual a 40 e possuindo 7 elementos valor inicial 10 valor final 40 e elementos 7 c linspace10407 c 10 15 20 25 30 35 40 Isto produz um vetor idˆentico a b10540 definido acima Se no comando linspace o parˆametro numero de elementos for omitido entao serao gerados 100 pontos No caso de numeros complexos os incrementos sao feitos separadamente para a parte real e para a parte imaginaria valor inicial 1i valor final 24i e elementos 5 d linspace1i24i5 d 1 i 125 175i 15 25i 175 325i 2 4i Os elementos podem ser acessados individualmente por exemplo para o vetor c definido acima c2 segundo elemento de c ans 15 ou em blocos usando os comandos de definicao de arranjos 40 Capıtulo 3 Estruturas de dados c35 terceiro ao quinto elementos ans 20 25 30 Lembrando que 521 gera a sequˆencia 5 3 1 entao c521 quinto terceiro e primeiro elementos ans 30 20 10 O enderecamento indireto e tambem possıvel permitindo referenciar os elementos de um vetor na ordem definida pelos elementos de um outro vetor Por exemplo sejam os vetores c definido acima e ind ind 127 valor inicial 1 incremento 2 e valor final 7 ind 1 3 5 7 Assim ind4 2 produz um vetor contendo os elementos 4 e 2 do vetor ind ou seja 7 3 Por sua vez cind4 2 vetor c indexado pelo vetor ind ans 40 20 e equivalente a c7 3 ou seja o vetor gerado contem os elementos 7 e 3 do vetor c Nos exemplos acima os vetores possuem uma linha e varias colunas por isto sao tambem chamados vetores linha Do mesmo modo podem existir vetores coluna ou seja vetores com varias linhas e uma unica coluna Para criar um vetor coluna elemento por elemento estes devem estar separados por vetor e1 e2 en Deste modo para gerar um vetor coluna com os elementos 15 32 e 89 v 153289 elementos separados por pontoevırgula v 15 32 89 Por isto separando os elementos de um vetor por brancos ou vırgulas sao especificados os elementos em diferentes colunas vetor linha Por outro lado separando os elementos por pontoevırgula especificase os elementos em diferentes linhas vetor coluna Para trans formar um vetor linha em vetor coluna e viceversa usase o operador de transposicao 33 Vetores 41 x v vetor linha obtido pela transposicao de vetor coluna x 15 32 89 y 13 vetor coluna obtido pelo operador de transposicao y 1 2 3 No caso do vetor ser complexo a transposicao e obtida pelo operador pois o uso do operador resultara em um complexo conjugado transposto Por exemplo seja o vetor complexo valor inicial 101i incremento 101i e valor final 303i z 13010103i z 1 01i 2 02i 3 03i o transposto e t z vetor transposto t 1 01i 2 02i 3 03i e o complexo conjugado transposto cc z vetor complexo conjugado transposto cc 1 01i 2 02i 3 03i No caso do vetor nao ser complexo a transposicao pode ser feita usando ou A funcao length e utilizada para saber o comprimento de um vetor ou seja quantos elementos ele possui l lengthz l 3 Por fim devese notar a importˆancia da posicao do caracter branco na definicao de um vetor p12 p 3 p1 2 42 Capıtulo 3 Estruturas de dados p 1 2 p1 2 p 3 p1 2 p 3 34 Matrizes As matrizes sao arranjos bidimensionais homogˆeneos e constituem as estruturas fundamen tais do SCILAB e por isto existem varias maneiras de manipulalas Uma vez definidas elas podem ser modificadas de varias formas como por insercao extracao e rearranjo Similarmente aos vetores para construir uma matriz os elementos de uma mesma linha devem estar separados por branco ou vırgula e as linhas separadas por pontoevırgula ou Enter ou Return matriz e11 e12 e1n e21 e22 e2n em1 em2 emn 341 Construcao e manipulacao de matrizes Para criar uma matriz A com 2 linhas e 3 colunas A 3 2 5 4 7 9 atribui os elementos da matriz A A 3 2 5 4 7 9 Para modificar um elemento basta atribuirlhe um novo valor A128 altera o elemento da linha 1 e coluna 2 A 3 8 5 4 7 9 Cuidado se for atribuıdo um valor a um elemento nao existente ou seja alem dos elementos da matriz entao o SCILAB aumenta esta matriz automaticamente preenchendoa com valores nulos de forma a matriz permanecer retangular A361 atribui valor ao elemento da linha 3 e coluna 6 A 3 8 5 0 0 0 4 7 9 0 0 0 0 0 0 0 0 1 34 Matrizes 43 Seja agora a matriz quadrada B de ordem 3 B 1 2 3 4 5 6 7 8 9 atribui os elementos da matriz B B 1 2 3 4 5 6 7 8 9 De modo similar aos vetores os elementos de uma matriz podem ser referenciados individu almente tal como B23 elemento da linha 2 e coluna 3 ans 6 ou em conjuntos neste caso usando a notacao de vetor Por exemplo os elementos das linhas 1 e 3 e coluna 2 B1 32 elementos das linhas 1 e 3 da coluna 2 ans 2 8 A notacao de vetor valor inicialincrementovalor final tambem pode ser usada ou ate mesmo linspace Lembrando que 311 gera a sequˆencia 3 2 e 1 e 13 produz 1 2 e 3 entao o comando C B31113 obtem a matriz C a partir da inversao das linhas de B C 7 8 9 4 5 6 1 2 3 cria uma matriz C a partir das linhas 3 2 e 1 e colunas 1 2 e 3 de B ou seja cria uma matriz C a partir das linhas de B em ordem contraria Considerando que sao referenciadas todas as 3 colunas de B a notacao simplificada pode ser igualmente usada em vez de 13 C B311 notacao simplificada C 7 8 9 4 5 6 1 2 3 Para criar uma matriz D a partir das linhas 1 e 2 e colunas 1 e 3 de B fazse D B121 3 D 1 3 4 6 44 Capıtulo 3 Estruturas de dados 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 E B C2 3 3 3 E 1 2 3 8 3 4 5 6 5 3 7 8 9 2 3 Para remover uma linha ou coluna de uma matriz usase a matriz vazia Para remover a coluna 3 de E E3 remocao da coluna 3 da matriz E E 1 2 8 3 4 5 5 3 7 8 2 3 E posteriormente para remover a linha 1 E1 remocao da linha 1 da matriz E E 4 5 5 3 7 8 2 3 Quando o sımbolo for usado sozinho para referenciar os doisındices de uma matriz entao e gerado um vetor constituıdo pelas colunas da matriz Seja o vetor vet obtido das colunas da matriz E acima vet E vetor formado pelas colunas da matriz E vet 4 7 5 8 5 2 3 3 O sımbolo e utilizado para indicar o ındice da ultima linha ou coluna da matriz E11 elemento da primeira linha e penultima coluna da matriz E ans 5 34 Matrizes 45 342 Funcoes matriciais basicas O SCILAB tem funcoes que se aplicam aos vetores e as matrizes Algumas destas funcoes basicas sao mostradas na Tabela 33 Tabela 33 Exemplos de funcoes basicas do SCILAB Funcao Descricao size dimensao da matriz length numero de elementos sum soma dos elementos prod produto dos elementos max maior elemento min menor elemento mean media aritmetica stdev desvio padrao Funcao size A funcao size e usada para fornecer o numero de linhas e colunas de uma matriz Ela pode ser usada de duas formas t sizeE t 2 4 onde a variavel t e um vetor linha com duas posicoes contendo o numero de linhas e colunas de E respectivamente A outra forma e lincol sizeE col 4 lin 2 onde as variaveis simples col e lin contem o numero de colunas e linhas de E respectiva mente Funcao length Se a funcao length for usada em uma matriz ela fornecera o numero de elementos da matriz e lengthE e 8 46 Capıtulo 3 Estruturas de dados Se for acrescentado o argumento r row entao a funcao produz um vetor linha obtido dos elementos das colunas da matriz Se o argumento for c column entao sera gerado um vetor coluna a partir dos elementos das linhas da matriz Se nao for usado o argumento extra entao a funcao produz um escalar utilizando todos elementos da matriz Para a matriz A A 1 2 34 5 67 8 9 define os elementos da matriz A A 1 2 3 4 5 6 7 8 9 Funcao sum vetor linha com iesimo elemento soma dos elementos da coluna i da matriz A sumAr ans 12 15 18 vetor coluna com iesimo elemento soma dos elementos da linha i da matriz A sumAc ans 6 15 24 sumA escalar igual a soma dos elementos da matriz A ans 45 Funcao prod vetor linha com iesimo elemento produto dos elementos da coluna i de A prodAr ans 28 80 162 vetor coluna com iesimo elemento produto dos elementos da linha i de A prodAc ans 6 120 504 prodA escalar igual ao produto dos elementos da matriz A ans 362880 Funcao max vetor linha com iesimo elemento maior elemento da coluna i da matriz A maxAr 34 Matrizes 47 ans 7 8 9 vetor coluna com iesimo elemento maior elemento da linha i da matriz A maxAc ans 3 6 9 maxA escalar igual ao maior elemento da matriz A ans 9 Funcao min vetor linha com iesimo elemento menor elemento da coluna i da matriz A minAr ans 1 2 3 vetor coluna com iesimo elemento menor elemento da linha i da matriz A minAc ans 1 4 7 minA escalar igual ao menor elemento da matriz A ans 1 Funcao mean vetor linha com iesimo elemento media dos elementos da coluna i da matriz A meanAr ans 4 5 6 vetor coluna com iesimo elemento media dos elementos da linha i da matriz A meanAc ans 2 5 8 meanA escalar igual a media dos elementos da matriz A ans 5 Funcao stdev vetor linha com iesimo elemento desvio padrao dos elementos da coluna i de A stdevAr 48 Capıtulo 3 Estruturas de dados ans 3 3 3 vetor coluna com iesimo elemento desvio padrao dos elementos da linha i de A stdevAc ans 1 1 1 stdevA escalar igual ao desvio padrao dos elementos da matriz A ans 27386128 343 Funcoes para manipulacao de matrizes O SCILAB possui varias funcoes para manipulacao de matrizes dentre as quais destacamse aquelas mostradas na Tabela 34 Tabela 34 Algumas funcoes para manipulacao de matrizes Funcao Descricao diag inclui ou obtem a diagonal de uma matriz tril obtem a parte triangular inferior de uma matriz triu obtem a parte triangular superior de uma matriz matrix altera a forma de uma matriz sparse cria uma matriz esparsa full cria uma matriz densa gsort ordena os elementos de uma matriz Funcao diag Inclui ou obtem a diagonal de uma matriz sendo sua sintaxe saıda diagargumento k de modo que se argumento for um vetor de dimensao n entao saıda sera uma matriz diagonal contendo os elementos de argumento na diagonal principal o parˆametro inteiro opcional k faz com que saıda seja uma matriz de ordem n absk com os ele mentos de argumento ao longo de sua kesima diagonal para k 0 default e a diagonal principal k 0 e a kesima diagonal superior superdiagonal e k 0 e a kesima diagonal inferior subdiagonal Por exemplo d 1 2 3 define um vetor com 3 elementos d 1 2 3 D diagd cria matriz diagonal de ordem 3 com elementos do vetor d D 34 Matrizes 49 1 0 0 0 2 0 0 0 3 D5 diagd2 cria matriz de ordem 5 com elementos de d na superdiagonal 2 D5 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 Por outro lado se o argumento for uma matriz entao diag cria um vetor coluna com os elementos da kesima diagonal da matriz A 1 2 3 4 5 6 7 8 9 define a matriz A A 1 2 3 4 5 6 7 8 9 d1 diagA1 cria vetor com elementos da subdiagonal 1 de A d1 4 8 d0 diagA cria vetor com elementos da diagonal principal de A d0 1 5 9 cria matriz diagonal com elementos da superdiagonal 1 de A D diagdiagA1 D 2 0 0 6 Funcao tril Obtem a parte triangular inferior de uma matriz cuja sintaxe e saıda trilargumento k sendo argumento uma matriz e o parˆametro inteiro opcional k faz com que saıda seja uma matriz de mesma dimensao de argumento de obtida a partir da kesima diagonal de argumento e os elementos abaixo dela para k 0 default diagonal principal k 0 kesima diagonal superior e k 0 kesima diagonal inferior Por exemplo M 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 define matriz M M 50 Capıtulo 3 Estruturas de dados 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cria matriz triangular inferior a partir da superdiagonal 1 de M L1 trilM1 L1 1 2 0 0 5 6 7 0 9 10 11 12 13 14 15 16 cria matriz triangular inferior a partir da subdiagonal 2 de M L2 trilM2 L2 0 0 0 0 0 0 0 0 9 0 0 0 13 14 0 0 Funcao triu Obtem a parte triangular superior de uma matriz sendo sua sintaxe saıda triuargumento k sendo argumento uma matriz e o parˆametro inteiro opcional k faz com que saıda seja uma matriz de mesma dimensao de argumento obtida a partir da kesima diagonal de argumento e os elementos acima dela para k 0 default diagonal principal k 0 kesima diagonal superior e k 0 kesima diagonal inferior Para a matriz M acima cria matriz triangular superior a partir da subdiagonal 1 de M U1 triuM1 U1 1 2 3 4 5 6 7 8 0 10 11 12 0 0 15 16 cria matriz triangular superior a partir da superdiagonal2 de M U2 triuM2 U2 0 0 3 4 0 0 0 8 0 0 0 0 0 0 0 0 34 Matrizes 51 Funcao matrix Altera a forma de uma matriz cuja sintaxe e saıda matrixmatriz linhas colunas Esta funcao cria uma matriz saıda com numero de linhas dados por linhas e numero de colunas igual a colunas a partir de matriz com linhas colunas elementos selecionados no sentido das colunas Por exemplo para a matriz B de dimensao 2 3 B 1 2 34 5 6 define matriz B de dimensao 2 x 3 B 1 2 3 4 5 6 c matrixB16 cria matriz vetor linha de dimensao 1 x 6 c 1 4 2 5 3 6 D matrixB32 cria matriz de dimensao 3 x 2 D 1 5 4 3 2 6 Funcao sparse Constroi uma matriz esparsa de dois modos distintos No primeiro saıda sparsematriz cria uma matriz esparsa saıda armazenando somente os elementos nao nulos de matriz na forma densa Para a matriz E E 2 0 1 0 5 6 7 0 9 define matriz com alguns elementos nulos E 2 0 1 0 5 6 7 0 9 S sparseE cria matriz esparsa a partir da matriz densa E S 3 3 sparse matrix 1 1 2 1 3 1 2 2 5 2 3 6 3 1 7 3 3 9 52 Capıtulo 3 Estruturas de dados Os tripletos acima indicam linha coluna valor ou seja linha 1 coluna 1 valor 2 linha 1 coluna 3 valor 1 e assim sucessivamente No segundo modo saıda sparselinha coluna valor constroi uma matriz esparsa saıda a partir de uma matriz linha coluna com duas colunas contendo os ındices dos elementos nao nulos e do vetor valor com os valores desses elementos Por exemplo define matriz de dimensao 7 x 2 lincol 1 1 1 3 2 2 2 4 3 3 4 1 5 5 lincol 1 1 1 3 2 2 2 4 3 3 4 1 5 5 vet 2 1 5 4 3 8 9 define vetor com 7 elementos vet 2 1 5 4 3 8 9 F sparselincolvet cria matriz esparsa a partir de lincol e vet 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 Funcao full O comando matriz fullesparsa converte a matriz esparsa para a sua repre sentacao densa matriz Para a matriz F acima FF fullF cria matriz densa a partir de esparsa FF 2 0 1 0 0 0 5 0 4 0 0 0 3 0 0 8 0 0 0 0 0 0 0 0 9 34 Matrizes 53 Funcao gsort Uma funcao particularmente util e a gsort que permite a ordenacao dos elementos de um vetor ou de uma matriz Sua sintaxe e matriz saıdaındice gsortmatriz entradaopcaodirecao sendo matriz entrada um vetor ou uma matriz contendo elementos numericos ou literais opcao opcional e uma cadeia de caracteres que especifica qual o tipo de ordenacao a ser realizada r por linha c por coluna g default todos os elementos da matriz sao ordenados direcao opcional indica a direcao de ordenacao i ordem crescente e d default ordem decrescente Os parˆametros de saıda sao matriz saıda com o mesmo tipo e dimensao de matriz entrada contem o resultado da ordenacao e o vetor opcional ındice contem os ındices originais tal que matriz saıda matriz entradaındice Para o vetor v e a matriz M v 3 9 5 6 2 v 3 9 5 6 2 M 2 5 1 3 8 9 7 6 4 M 2 5 1 3 8 9 7 6 4 temse os resultados gsortvgi ordena os elementos do vetor v em ordem crescente ans 2 3 5 6 9 ordena os elementos do vetor v em ordem decrescente wind gsortvgd ind 2 4 3 1 5 w 9 6 5 3 2 Para a ordenacao decrescente requerida w vind isto e w1 vind1 w2 vind2 w5 vind5 B gsortMri ordena as linhas da matriz M em ordem crescente B 2 5 1 3 6 4 7 8 9 54 Capıtulo 3 Estruturas de dados D gsortMcd ordena as colunas da matriz M em ordem decrescente D 5 2 1 9 8 3 7 6 4 344 Matrizes elementares O SCILAB fornece varias matrizes elementares de grande utilidade como as mostradas na Tabela 35 O numero de parˆametros providos fornecem as dimensoes da matriz Se o parˆametro for uma matriz entao sera criada uma matriz de igual dimensao Tabela 35 Algumas matrizes elementares do SCILAB Funcao Descricao da matriz zeros nula ones elementos iguais a 1 eye identidade ou parte dela grand elementos aleatorios com dada distribuicao Seja a matriz P 1 2 3 4 5 6 define uma matriz de dimensao 2 x 3 P 1 2 3 4 5 6 Funcao zeros O comando matriz zeroslinhas colunas gera uma matriz de dimensao linhas colunas com elementos nulos e matriz zerosargumento cria uma matriz com elementos nulos de mesma dimensao da matriz argumento z zeros14 cria matriz nula de dimensao 1 x 4 z 0 0 0 0 Funcao ones O comando matriz oneslinhas colunas cria uma matriz de dimensao linhas colunas com elementos iguais a 1 e matriz onesargumento gera uma matriz com elementos iguais a 1 com a mesma dimensao da matriz argumento 34 Matrizes 55 U onesP cria matriz de 1s com mesma dimensao da matriz P U 1 1 1 1 1 1 Funcao eye O comando matriz eyelinhas colunas gera uma matriz identidade com 1 na diagonal principal e 0 fora da diagonal de dimensao linhas colunas Por sua vez matriz eyeargumento cria uma matriz identidade de mesma dimensao da matriz argumento I eyePP cria matriz identidade com a mesma dimensao de PP I 1 0 0 0 1 0 0 0 1 Funcao grand O comando alea grandlinhas colunas tipo dist param 1param n gera a matriz alea com elementos aleatorios de dimensao linhas colunas com o tipo de distribuicao dado pela cadeia de caracteres tipo dist sendo param i um conjunto de parˆametros opcionais necessarios para definir uma distribuicao especıfica Por exemplo Distribuicao uniforme no intervalo 01 cria matriz de dimensao 3 x 5 com elementos aleatorios com distribuicao uniforme no intervalo 01 U grand35def U 08147237 08350086 09133759 03081671 02784982 0135477 01269868 02210340 00975404 01883820 09057919 09688678 06323592 05472206 05468815 Distribuicao uniforme no intervalo InfSup cria matriz de dimensao 3 x 4 com elementos aleatorios com distribuicao uniforme no intervalo 1012 R grand34unf1012 R 11985763 11929777 11451678 11914334 11915014 1193539 11941186 10219724 11992923 10315226 11962219 10970751 56 Capıtulo 3 Estruturas de dados Distribuicao normal com media Med e desvio padrao Despad cria matriz de dimensao 2 x 4 com elementos aleatorios com distribuicao normal com media 15 e desvio padrao 26 N grand24nor1526 N 2761686 02303274 35420607 14501598 27455511 11118334 10909685 194921 Distribuicao normal multivariada com media Med e covariˆancia Cov sendo Med uma matriz m x 1 e Cov uma matriz m x m simetrica positiva definida M grand5mn0 01 0505 1 M 10745727 09669574 07460049 08510105 02161951 22602797 07828132 02634706 11711612 04133844 Distribuicao de Poisson com media Med cria matriz de dimensao 3 x 5 com elementos aleatorios com distribuicao de Poisson com media 35 P grand35poi35 P 5 3 2 4 2 5 3 2 5 2 3 4 2 1 6 Gera n permutacoes aleatorias de um vetor coluna de tamanho m cria matriz de dimensao lengthvet x 8 com 8 permutacoes no vetor vet de tamanho 5 vet 1 2 3 4 5 define vetor coluna de tamanho 5 vet 1 2 3 4 5 V grand8prmvet V 3 1 2 4 5 3 5 3 2 4 4 2 2 5 2 2 1 3 5 5 1 1 4 4 5 5 1 3 3 2 1 5 4 2 3 1 4 4 3 1 35 Hipermatrizes 57 A funcao grand produz numeros pseudoaleatorios e a sequˆencia gerada de qualquer distri buicao e determinada pelo estado do gerador Quando o SCILAB for ativado e atribuıdo um valor inicial ao estado o qual e alterado a cada chamada da funcao grand Para atri buir um valor ao estado do gerador quando esta funcao ja tiver sido executada usase o comando grandsetsdsemente sendo semente o valor inicial desejado do estado Por exemplo grandsetsd1 atribui 1 ao estado a grand15def gera uma sequencia aleatoria uniforme a 0417022 09971848 07203245 09325574 00001144 b grand15def gera outra sequencia aleatoria uniforme b 01281244 03023326 09990405 01467559 02360890 grandsetsd1 atribui 1 novamente ao estado c grand15def gera outra sequencia aleatoria uniforme c 0417022 09971848 07203245 09325574 00001144 c a mostra que as sequencias c e a sao identicas ans 0 0 0 0 0 A funcao grand permite a geracao de vinte diferentes tipos de distribuicao de numeros pseudoaleatorios utilizando seis diferentes geradores Para maiores informacoes use o co mando de auxılio help grand 35 Hipermatrizes Hipermatrizes sao variaveis homogˆeneas com mais de duas dimensoes Elas podem ser criadas pela funcao hypermatdimensao valores onde o vetor dimensao define as dimensoes da hipermatriz e a matriz valores define os elementos Por exemplo para criar a hipermatriz H com dimensoes 2 3 4 ou seja composta por 4 submatrizes de dimensoes 2 3 fazse mat1 11 12 13 14 15 16 define submatriz 1 mat1 11 12 13 14 15 16 mat2 21 22 23 24 25 26 define submatriz 2 mat2 21 22 23 24 25 26 mat3 31 32 33 34 35 36 define submatriz 3 mat3 58 Capıtulo 3 Estruturas de dados 31 32 33 34 35 36 mat4 41 42 43 44 45 46 define submatriz 4 mat4 41 42 43 44 45 46 cria hipermatriz H de dimensao 2 x 3 x 4 a partir de 4 submatrizes H hypermat2 3 4mat1 mat2 mat3 mat4 H 1 11 12 13 14 15 16 2 21 22 23 24 25 26 3 31 32 33 34 35 36 4 41 42 43 44 45 46 As hipermatrizes podem ser manipuladas como as matrizes bidimensionais Assim para alterar para 123 os elementos da posicao 21 das submatrizes 1 e 4 da hipermatriz H acima H211 4 123 atribui o valor 123 aos elementos H211 e H214 H 1 11 12 13 123 15 16 2 21 22 23 24 25 26 3 31 32 33 34 35 36 4 41 42 43 123 45 46 Outros comandos sizeH dimensoes da hipermatriz ans 2 3 4 36 Polinˆomios 59 vetor linha contendo a soma dos elementos das colunas da submatriz 3 sumH3r ans 65 67 69 vetor coluna contendo os menores elementos das linhas da submatriz 2 minH2c ans 21 24 36 Polinˆomios O SCILAB fornece varias funcoes que permitem que as operacoes envolvendo polinˆomios sejam feitas de um modo bem simples 361 Construcao Os polinˆomios podem ser construıdos ou a partir de seus coeficientes ou de seus zeros Construcao a partir dos coeficientes Um polinˆomio na forma Px c1 c2xc3x2 cn1xn2 cnxn1 pode ser construıdo a partir dos coeficientes ci usando a funcao polyparametros variavel modo onde o vetor parametros contem os coeficientes ci variavel e uma cadeia de caracteres que determina a variavel do polinˆomio e a outra cadeia de caracteres modo especifica como o polinˆomio sera construıdo Se modo coeff entao ele sera construıdo a partir de seus coeficientes Por exemplo para construir o polinˆomio Px 2414x13x2 2x3 x4 basta P poly24 14 13 2 1xcoeff Px a partir dos coeficientes P 2 3 4 24 14x 13x 2x x Construcao a partir das raızes Utilizando a mesma funcao poly mas com parametros contendo os zeros do polinˆomio e sendo modo roots ou nao sendo especificado entao ele sera construıdo a partir de seus zeros Para construir um polinˆomio com zeros ξ1 1 ξ2 3 ξ3 2 e ξ4 4 fazse R poly1 3 2 4sroots Rs a partir dos zeros R 2 3 4 24 14s 13s 2s s 60 Capıtulo 3 Estruturas de dados 362 Avaliacao Um polinˆomio e avaliado por meio da funcao hornerpolinomio abscissas onde polinomio contem o polinˆomio e abscissas contem os pontos nos quais ele deve ser avaliado Por exemplo para avaliar Tx 1 3x 7x2 5x3 2x4 3x5 nos pontos x 1 0 1 2 e 3 T poly1 3 7 5 2 3xcoeff Tx a partir dos coeficientes T 2 3 4 5 1 3x 7x 5x 2x 3x y hornerT13 avalia Tx em x 1 0 1 2 e 3 y 1 1 11 127 757 363 Adicao e subtracao Para somar e subtrair polinˆomios mesmo de graus diferentes basta usar os operadores de adicao e subtracao Assim para somar os polinˆomios ax 1 4x2 5x3 8x4 e bx 4 x 5x2 2x3 a poly1 0 4 5 8xcoeff constroi ax a 2 3 4 1 4x 5x 8x b poly4 1 5 2xcoeff constroi bx b 2 3 4 x 5x 2x c a b soma polinomios c 2 3 4 3 x x 7x 8x resultando cx 3 x x2 7x3 8x4 e para subtrair d a b subtrai polinomios d 2 3 4 5 x 9x 3x 8x 364 Multiplicacao A multiplicacao de dois polinˆomios e feita utilizando o operador de multiplicacao Sejam os polinˆomios ev 4 5v 3v2 e fv 1 2v a multiplicacao resulta em e poly4 5 3vcoeff constroi ev 36 Polinˆomios 61 e 2 4 5v 3v f poly1 2vcoeff constroi fv f 1 2v g e f multiplica ev por fv g 2 3 4 13v 13v 6v resultando no polinˆomio gv 4 13v 13v2 6v3 365 Divisao O comando resto quociente pdivpolinomio 1 polinomio 2 faz a di visao entre o polinomio 1 e o polinomio 2 retornando o polinˆomio quociente em quociente e o polinˆomio do resto da divisao em resto ou seja polinomio 1 polinomio 2 quociente resto Por exemplo a divisao de hx 6 5x 4x2 3x3 2x4 por ix 1 3x x2 e efetuada por h poly6 5 4 3 2xcoeff constroi hx h 2 3 4 6 5x 4x 3x 2x i poly1 3 1xcoeff constroi ix i 2 1 3x x rq pdivhi divide hx por ix q 2 11 3x 2x r 5 25x resultado no quociente qx 11 3x 2x2 com resto rx 5 25x No caso do uso do operador de divisao em vez da funcao pdiv e criado um polinˆomio racional Para os polinˆomios hx e ix definidos acima j h i polinomio racional obtido da divisao de hx por ix j 2 3 4 6 5x 4x 3x 2x 2 1 3x x 62 Capıtulo 3 Estruturas de dados 366 Derivacao A funcao derivat efetua a derivacao polinomial Deste modo para obter a primeira e segunda derivada de Px 5 14x 12x2 2x3 x4 p poly5 14 12 2 1xcoeff constroi px p 2 3 4 5 14x 12x 2x x p1 derivatp derivada primeira de px p1 2 3 14 24x 6x 4x p2 derivatp1 derivada segunda de px p2 2 24 12x 12x resultando P x 14 24x 6x2 4x3 e P x 24 12x 12x2 367 Calculo de raızes A funcao rootspolinomio calcula os zeros de polinomio Por exemplo para calcular as quatro raızes de Tx 24 14x 13x2 2x3 x4 0 T poly24 14 13 2 1xcoeff constroi Tx T 2 3 4 24 14x 13x 2x x raizes rootsT calcula as raizes de Tx 0 raizes 1 2 3 4 Para calcular as raızes de um polinˆomio dado em termos de seus coeficientes sem construir previamente o polinˆomio os coeficientes devem ser fornecidos do maior para o menor grau Por exemplo para calcular as quatro raızes de Tx 24 14x 13x2 2x3 x4 0 a roots1 2 13 14 24 calcula raizes a partir dos coeficientes a 1 2 3 4 37 Variaveis logicas 63 Quando o polinˆomio for real e possuir grau menor ou igual a 100 a funcao roots calcula os zeros por um algoritmo rapido caso contrario os zeros sao calculados por meio dos autovalores da matriz companheira Se for acrescentado o segundo argumento da funcao roots dado por e entao os zeros serao calculados utilizando os autovalores independente do grau do polinˆomio Pode ser mostrado que as raızes de Px c1 c2x c3x2 cn1xn2 cnxn1 0 sao os autovalores da matriz companheira C cn1cn cn2cn c2cn c1cn 1 0 0 0 0 1 0 0 0 0 1 0 Deste modo r rootsTe e equivalente a A companionT matriz companheira do polinomio Tx A 2 13 14 24 1 0 0 0 0 1 0 0 0 0 1 0 r specA autovalores da matriz companheira A r 4 3 2 1 37 Variaveis logicas Conforme visto uma constante logica tem os valores t ou T para verdadeiro e f ou F para falso os quais podem ser atribuıdos a uma variavel logica com estrutura de vetor ou matriz Por exemplo a t variavel logica simples a T b f F t T vetor logico b F F T T C T f tf T F matriz logica C T F T F T F 64 Capıtulo 3 Estruturas de dados As variaveis logicas podem ser utilizadas para acessar os elementos de uma matriz ou vetor Quando o valor for verdadeiro o ındice e acessado e no caso de ser falso o ındice nao sera acessado Por exemplo v 11 12 13 14 15 16 17 18 define o vetor v com 8 elementos v 11 12 13 14 15 16 17 18 ind t t f t f define vetor logico ind com 5 elementos ind T T F T F vind elementos 1 2 e 4 do vetor ans 11 12 14 O numero de elementos do vetor logico deve ser menor ou igual ao numero de elementos do vetor que ele referencia O uso de variaveis logicas e fundamental nas expressoes logicas que serao vistas na Secao 42 Expressoes logicas 38 Variaveis literais Uma variavel literal contem uma constante literal formada por uma cadeia de caracteres delimitada por aspas ou apostrofos Por exemplo a SCILAB b cadeia de caracteres a SCILAB b cadeia de caracteres Os caracteres podem ser concatenados usando o operador ou a notacao vetorial d a manipula b d SCILAB manipula cadeia de caracteres e a utiliza b e SCILAB utiliza cadeia de caracteres A utilizacao de variaveis literais sera abordada com mais detalhes na Secao 43 Expressoes literais 39 Listas Uma lista e um conjunto de dados nao necessariamente do mesmo tipo podendo conter matrizes ou mesmo outras listas As listas sao uteis para definirem dados estruturados Uma lista e construıda a partir do comando list 39 Listas 65 Rol listtipof1 2 3 4 5 6 gera a lista Rol com 3 objetos Rol Rol1 tipo Rol2 F Rol3 1 2 3 4 5 6 Rol2 objeto 2 de Rol ans F Rol321 elemento 21 do objeto 3 de Rol ans 4 Uma lista pode ser um objeto de outra lista Rol1 listtamanho10 20 30 objeto 1 de Rol tornase uma lista Rol Rol1 Rol11 tamanho Rol12 10 20 30 Rol2 F Rol3 1 2 3 4 5 6 Para obter e atribuir valor a objeto da lista fazse Rol1213 elemento 13 do objeto 2 de Rol1 ans 30 Rol321 558 atribuindo novo valor ao elemento 21 de Rol3 Rol Rol1 Rol11 tamanho Rol12 10 20 30 Rol2 F Rol3 1 2 3 558 5 6 66 Capıtulo 3 Estruturas de dados 310 Exercıcios Secao 31 Constantes Observar atentamente e anotar o resultado dos comandos do SCILAB Apesar de os coman dos estarem separados por vırgula entrar com um de cada vez 31 Atribuir o valor 123103 a variavel a e 417102 a variavel b 32 33 Criar um vetor logico com cinco elementos sendo o primeiro segundo e quarto com o valor verdadeiro e os outros com o valor falso 34 Criar uma matriz de dimensao 2 3 com elementos logicos com a terceira coluna com elementos com o valor falso e as demais com o valor verdadeiro 35 Secao 32 Variaveis 36 Conferir os nomes permitidos de variaveis arcoseno0 limitesup3 Area3 e area1 37 Atribuir a cadeia de caracteres abc a variavel literal letras e 01234 a variavel literal numeros 38 39 310 Secao 33 Vetores Construir os vetores e analisar as operacoes 311 al 1 35 42 75 ac 2311 312 b 10530 c 526 d 510 313 e linspace0105 e3 e24 310 Exercıcios 67 314 f linspace10206 f311 f6 5 1 3 315 g linspace2114 linspace02114i h g i g Secao 34 Matrizes Construir as matrizes e verificar o resultado das operacoes e funcoes 316 A 6 1 4 0 2 3 5 7 8 A21 1 sumAr sumAc prodAr prodAc 317 B A232 3 1 minBr maxBc 318 C A B C2 4 C2 sizeC 319 zeros35 ones24 eye53 320 D grand33def diagdiagD triuD trilD Secao 35 Hipermatrizes 321 322 323 324 325 Secao 36 Polinˆomios 326 327 328 329 330 68 Capıtulo 3 Estruturas de dados Secao 37 Variaveis logicas 331 332 333 334 335 Secao 38 Variaveis literais 336 337 338 339 340 Secao 39 Listas 341 342 343 344 345 Capıtulo 4 Expressoes Uma expressao e uma combinacao de constantes variaveis e operadores cuja avaliacao resulta em um valor unico Neste capıtulo serao mostrados os trˆes tipos de expressoes do SCILAB aritmeticas logicas e literais 41 Expressoes aritmeticas E disponıvel no SCILAB as operacoes aritmeticas basicas mostradas na Tabela 41 Tabela 41 Operacoes aritmeticas basicas do SCILAB Operacao Expressao Operador Exemplo adicao a b 12 subtracao a b 5147 multiplicacao a b 6998 divisao a b ou 67 53 potenciacao ab 210 411 Ordem de precedˆencia O SCILAB obedece a ordem de precedˆencia das operacoes aritmeticas apresentadas na Secao 15 Expressoes Para o Exemplo 15 na pagina 6 a 1 b 2 c 3 d 4 t a b c d t 56666667 69 70 Capıtulo 4 Expressoes x a b c d x 04285714 y a b c d 1 2 y 13636364 w abca1b4c5c2bd1 w 00670732 z ab3cd3abcsqrt1dab z 99489931 412 Expressoes vetoriais As operacoes basicas entre vetores so sao definidas quando estes tiverem o mesmo tamanho e orientacao linha ou coluna Estas operacoes basicas sao apresentadas na Tabela 42 As operacoes de multiplicacao divisao e potenciacao envolvendo vetores quando antecedi das pelo caracter significa que estas operacoes sao efetuadas entre os correspondentes elementos dos vetores Tabela 42 Operacoes vetoriais basicas Sejam a a1 a2 an b b1 b2 bn e c um escalar Operacao Expressao Resultado adicao escalar ac a1c a2c anc adicao vetorial ab a1b1 a2b2 anbn multiplicacao escalar ac a1c a2c anc multiplicacao vetorial ab a1b1 a2b2 anbn divisao a direita ab a1b1 a2b2 anbn divisao a esquerda ab b1a1 b2a2 bnan potenciacao ac a1c a2c anc ca ca1 ca2 can ab a1b1 a2b2 anbn Considere as variaveis a 15 b 101050 c 2 a 1 2 3 4 5 b 10 20 30 40 50 41 Expressoes aritmeticas 71 c 2 Adicao escalar a c ans 3 4 5 6 7 Adicao vetorial a b ans 11 22 33 44 55 Multiplicacao escalar a c ans 2 4 6 8 10 Multiplicacao vetorial entre elementos correspondentes a b ans 10 40 90 160 250 Divisao vetorial a direita entre elementos correspondentes a b ans 01 01 01 01 01 Divisao vetorial a esquerda entre elementos correspondentes a b ans 10 10 10 10 10 Potenciacao a c ans 1 4 9 16 25 c a ans 2 4 8 16 32 a b ans 1 1048576 2059D14 1209D24 8882D34 72 Capıtulo 4 Expressoes 413 Expressoes matriciais De modo similar as operacoes vetorias existem as operacoes matriciais basicas as quais estao compiladas na Tabela 43 O operador envolvendo matrizes e vetores esta relacionado com solucao de sistemas lineares conforme sera visto na Secao 823 Solucao de sistemas Tabela 43 Operacoes matriciais basicas Sejam c um escalar e A a11 a12 a1p a21 a22 a2p am1 am2 amp B b11 b12 b1n b21 b22 b2n bp1 bp2 bpn Operacao Expressao Resultado adicao escalar Ac aij c adicao matricial AB aij bij multiplicacao escalar Ac aij c multiplicacao matricial AB AB multiplicacao entre elementos correspondentes AB aij bij divisao a direita entre elementos correspondentes AB aijbij divisao a esquerda entre elementos correspondentes AB bijaij potenciacao Ac Ac Ac ac ij cA caij AB a bij ij Sejam as matrizes A e B de ordem 3 e o escalar c A 1 2 3 4 5 6 7 8 9 B 10 20 30 40 50 60 70 80 90 c 3 A 1 2 3 4 5 6 7 8 9 B 10 20 30 40 50 60 70 80 90 c 3 Adicao escalar A c 41 Expressoes aritmeticas 73 ans 4 5 6 7 8 9 10 11 12 Adicao matricial A B ans 11 22 33 44 55 66 77 88 99 Multiplicacao escalar A c ans 3 6 9 12 15 18 21 24 27 A diferenca no resultado das expressoes quando os operadores contem o caracter deve ser observada Na multiplicacao matricial A B ans 300 360 420 660 810 960 1020 1260 1500 Multiplicacao entre elementos correspondentes A B ans 10 40 90 160 250 360 490 640 810 Divisao a direita entre elementos correspondentes A B ans 01 01 01 01 01 01 01 01 01 Divisao a esquerda entre elementos correspondentes 74 Capıtulo 4 Expressoes A B ans 10 10 10 10 10 10 10 10 10 E nos diferentes tipos de potenciacao A c elemento da matriz elevado a uma constante ans 1 8 27 64 125 216 343 512 729 A c matriz elevada a uma constante ans 468 576 684 1062 1305 1548 1656 2034 2412 c A constante elevada a elemento da matriz ans 3 9 27 81 243 729 2187 6561 19683 A B elemento de matriz elevado a elemento de matriz ans 1 1048576 2059D14 1209D24 8882D34 4887D46 1435D59 1767D72 7618D85 E importante observar que no SCILAB as operacoes cA e cA sao equivalentes Como pode ser esperado de uma linguagem para aplicacoes nas areas tecnicas e cientıficas o SCILAB oferece varias funcoes importantes A Tabela 44 apresenta algumas funcoes matematicas elementares do SCILAB Se a variavel for um vetor ou uma matriz a avaliacao de uma funcao se da para cada elemento da variavel a 15 a 1 2 3 4 5 b sqrta raiz quadrada b 1 14142136 17320508 2 2236068 Os resultados acima podem ser apresentados na forma de uma tabela por intermedio do comando 42 Expressoes logicas 75 Tabela 44 Funcoes matematicas elementares do SCILAB Funcao Descricao Funcao Descricao trigonometricas acos arco coseno cotg cotangente asin arco seno sin seno atan arco tangente tan tangente cos coseno exponenciais acosh arco coseno hiperbolico log logaritmo natural asinh arco seno hiperbolico log10 logaritmo decimal atanh arco tangente hiperbolica sinh seno hiperbolico cosh coseno hiperbolico sqrt raiz quadrada coth cotangente hiperbolica tanh tangente hiperbolica exp exponencial complexas abs valor absoluto imag parte imaginaria do complexo conj complexo conjugado real parte real do complexo numericas ceil arredonda em direcao a lcm mınimo multiplo comum fix arredonda em direcao a 0 modulo resto de divisao floor arredonda em direcao a round arredonda em direcao ao in teiro mais proximo gcd maximo divisor comum sign sinal ab ans 1 1 2 14142136 3 17320508 4 2 5 2236068 42 Expressoes logicas Uma expressao se diz logica quando os operadores forem logicos e os operandos forem relacoes eou variaveis do tipo logico Uma relacao e uma comparacao realizada entre valores do mesmo tipo A natureza da comparacao e indicada por um operador relacional conforme a Tabela 45 O resultado de uma relacao ou de uma expressao logica e verdadeiro ou falso No SCILAB o resultado e literal sendo que T significa verdadeiro e F significa falso Note que o caracter e usado para atribuicao de um valor a uma variavel enquanto que os caracteres sao usados para comparacao de igualdade Os operadores relacionais sao usados para comparar 76 Capıtulo 4 Expressoes Tabela 45 Operadores relacionais do SCILAB Operador relacional Descricao igual a maior que maior ou igual a menor que menor ou igual a ou diferente de vetores ou matrizes do mesmo tamanho ou comparar um escalar com os elementos de um vetor ou de matriz Sejam os vetores a e b e o escalar c a 110 b 910 c 5 a 1 2 3 4 5 6 7 8 9 10 b 9 8 7 6 5 4 3 2 1 0 c 5 Assim d a c d F F F F T T T T T T produz um vetor que contem o valor T verdadeiro quando o elemento correspondente do vetor a for maior ou igual a 5 caso contrario contem o valor F falso Apesar de o resultado da relacao logica ser um valor literal ele pode fazer parte de uma expressao aritmetica sendo que F vale 0 e T tem o valor 1 e a b 3 e 1 2 3 4 5 6 8 9 10 11 Quando um elemento de b for menor ou igual a 3 o valor 1 resultado da relacao logica e adicionado ao correspondente valor de a Os operadores logicos permitem a combinacao ou negacao das relacoes logicas Os operadores logicos do SCILAB sao listados na Tabela 46 Para os vetores a e b definidos anteriormente f a3 a8 f F F F T T T T T F F 42 Expressoes logicas 77 Tabela 46 Operadores logicos do SCILAB Operador logico Descricao Uso e conjuncao ou disjuncao nao negacao Os elementos de f sao iguais a T quando os correspondentes elementos de a forem maiores do que 3 e menores ou iguais a 8 caso contrario sao iguais a F Para fazer a negacao ou seja onde for T sera F e viceversa basta g f g T T T F F F F F T T A Tabela 47 apresenta a tabela verdade para os operadores logicos do SCILAB Tabela 47 Tabela verdade a b a b a b a T T T T F T F F T F F T F T T F F F F T A ordem de precedˆencia no SCILAB para expressoes envolvendo operadores aritmeticos e logicos sao indicados na Tabela 48 Tabela 48 Ordem de precedˆencia das operacoes aritmeticas e logicas Ordem de precedˆencia Operadores 1a 2a funcao 3a 4a unario e unario 5a 6a e 7a 8a 9a 10a Os parˆenteses podem ser usados para alterar a ordem de precedˆencia Para os vetores a e b definidos acima a avaliacao da expressao 78 Capıtulo 4 Expressoes h a52 9 3b 15 h F F F F T T T F F F e equivalente as varias etapas h1 a5 parenteses h1 4 3 2 1 0 1 2 3 4 5 h2 h12 potenciacao h2 16 9 4 1 0 1 4 9 16 25 h3 h2 unario h3 16 9 4 1 0 1 4 9 16 25 h4 3b multiplicacao h4 27 24 21 18 15 12 9 6 3 0 h5 h3 9 operador relacional primeiro a esquerda h5 F F T T T T T F F F h6 h4 15 operador relacional segundo a esquerda h6 F F F F T T T T T T h h5 h6 operador logico h F F F F T T T F F F 43 Expressoes literais O SCILAB dispoe de varias funcoes para manipulacao de cadeia de caracteres sendo algumas delas mostradas a seguir 431 Conversao de caracteres Serao apresentadas funcoes para alterar o tamanho da caixa das letras e fazer a conversao de caracteres para numero e viceversa Caixas altas e baixas A funcao convstrtextotipo converte a cadeia de caracteres texto de acordo com o tipo Se ele for u upper entao converte para caixa alta maiusculo e se for l lower ou omitido converte para caixa baixa minusculo texto Caixas Altas e Baixas define o texto texto 43 Expressoes literais 79 Caixas Altas e Baixas convstrtextou converte para caixa alta ans CAIXAS ALTAS E BAIXAS convstrtexto converte para caixa baixa ans caixas altas e baixas Codigo ASCII Os comandos numero asciitexto e texto asciinumero fazem a con versao dos caracteres ASCII American Standard Code for Information Interchange conti dos no vetor de caracteres texto para valores numericos e atribuem ao vetor numero e viceversa de acordo com a Tabela 49 Tabela 49 Caracteres em codigo ASCII Representacao decimal dos caracteres 33 45 57 9 69 E 81 Q 93 105 i 117 u 34 46 58 70 F 82 R 94 106 j 118 v 35 47 59 71 G 83 S 95 107 k 119 w 36 48 0 60 72 H 84 T 96 108 l 120 x 37 49 1 61 73 I 85 U 97 a 109 m 121 y 38 50 2 62 74 J 86 V 98 b 110 n 122 z 39 51 3 63 75 K 87 W 99 c 111 o 123 40 52 4 64 76 L 88 X 100 d 112 p 124 41 53 5 65 A 77 M 89 Y 101 e 113 q 125 42 54 6 66 B 78 N 90 Z 102 f 114 r 126 43 55 7 67 C 79 O 91 103 g 115 s 44 56 8 68 D 80 P 92 104 h 116 t Por exemplo para o vetor s de tamanho 5 s 53i vetor de caracteres s 53i n asciis converte caracteres para numeros n 53 43 51 42 105 t asciin converte numeros para caracteres t 53i 80 Capıtulo 4 Expressoes Codigo do SCILAB Os comandos texto code2strnumero e numero str2codetexto fazem a conversao de um vetor de numeros inteiros numero para a cadeia de caracteres texto e viceversa segundo o codigo do SCILAB texto Caracteres define o texto texto Caracteres numero str2codetexto converte texto para numero vetor transposto numero 12 10 27 10 12 29 14 27 14 28 palavra code2strnumero converte numero para texto palavra Caracteres E importante observar que os codigos de conversao produzidos pelas funcoes code2str e str2code sao diferentes daqueles produzidos pela funcao ascii car 01AZaz define caracteres car 01AZaz cod str2codecar converte para codigo do SCILAB vetor transposto cod 0 1 10 35 10 35 asc asciicar converte para codigo ASCII asc 48 49 65 90 97 122 Numeros O comando texto stringnumero converte a constante numerica numero para a sua representacao em caracteres e atribui o resultado a texto Este comando e de grande utilidade quando da escrita de rotulos e tıtulos em graficos conforme sera visto no Capıtulo 5 v 425 v 425 titulo velocidade stringv ms titulo velocidade 425 ms 432 Manipulacao de caracteres Serao descritas a seguir funcoes para obter o tamanho criar operar e procurar caracteres 43 Expressoes literais 81 Tamanho A funcao lengthvariavel fornece o numero de caracteres presentes na cadeia de ca racteres variavel se ela for uma matriz entao e informado o numero de caracteres de cada elemento lengthabcde numero de caracteres ans 5 lengthab 123 abcd numero de caracteres de matriz ans 2 3 1 4 Criacao O comando variavel emptystrlinhascolunas gera uma matriz de caracte res variavel vazia de dimensao linhas colunas Por sua vez variavel emptystrmatriz cria a matriz de caracteres variavel vazia com as mesmas di mensoes de matriz mat emptystr23 matriz vazia de dimensao 2 x 3 mat lengthmat numero de caracteres de mat ans 0 0 0 0 0 0 matnum 1 2 3 4 define matriz numerica matnum 1 2 3 4 S emptystrmatnum matriz vazia com mesma dimensao de matnum S lengthS numero de caracteres de S ans 0 0 0 0 A funcao strcatvetorcaracteres insere a cadeia caracteres entre cada ele mento da cadeia de caracteres vetor 82 Capıtulo 4 Expressoes vet a b c d e define vetor de caracteres vet a b c d e vv strcatvet insere entre cada elemento vv abcde ve strcatvet insere entre cada elemento ve a b c d e Operacao O comando matriz pos justifymatrizposicao cria matriz pos uma ma triz de caracteres alterando a posicao das colunas da matriz de caracteres matriz de acordo com posicao Se for igual a l left as colunas serao movidas para a esquerda se for c center elas serao centradas e se posicao r right as colunas serao mo vidas para a direita M abcdefg h ijklmnopq 1 1234567 7890 abc 01 def M abcdefg h ijklmnopq 1 1234567 7890 abc 01 def C justifyMc cria matriz C a partir de M com colunas centradas C abcdefg h ijklmnopq 1 1234567 7890 abc 01 def A funcao stripblankstexto elimina os caracteres brancos do inıcio e do final da cadeia de caracteres texto v a b c vetor v com 3 caracteres brancos no inicio e no final v a b c lengthv numero de caracteres de v ans 11 s stripblanksv remove caracteres brancos do inicio e do final de v s a b c lengths numero de caracteres de s ans 5 43 Expressoes literais 83 A funcao strsplittextoındice quebra a cadeia de caracteres texto nas posicoes dadas no vetor numerico ındice com valores estritamente crescentes gerando um vetor de caracteres s 1234567890abcdefgh define vetor de caracteres s 1234567890abcdefgh v strsplits3 8 12 quebra o vetor s nas posicoes 3 8 e 12 v 123 45678 90ab cdefgh A funcao strsubstmatriztexto origtexto subs substitui todas as ocorrˆencias da cadeia de caracteres texto orig na matriz de caracteres matriz pelos caracteres contidos em texto subs frase determinante produto dos autovalores define o texto frase determinante produto dos autovalores strsubstfraseeE substitui as letras e por E ans dEtErminantE produto dos autovalorEs strsubstfrase e igual ao substitui simbolo por texto ans determinante e igual ao produto dos autovalores strsubstfrase remove todos os caracteres brancos ans determinanteprodutodosautovalores Procura Seja o comando linhasqual grepmatriztexto Para cada entrada da matriz de caracteres a funcao grep pesquisa se pelo menos uma cadeia de caracteres no vetor texto e igual a uma subcadeia de matriz O vetor numerico linhas informa os ındices das entradas de matriz onde pelo menos uma igualdade foi encontrada O argumento opcional qual fornece ındices informando qual das cadeias de caracteres de texto foi encontrada Por exemplo matriz o scilab e um software livre para aplicacoes cientificas 84 Capıtulo 4 Expressoes ver wwwscilaborg define a matriz de caracteres matriz o scilab e um software livre para aplicacoes cientificas ver wwwscilaborg linhaqual grepmatrizverscilab procura por ver e scilab qual 2 1 2 linha 1 3 3 As cadeias de caracteres ver posicao 1 e scilab posicao 2 foram encontradas nas linhas 1 3 e 3 sendo que na linha 1 foi encontrada a cadeia de ındice 2 scilab e na linha 3 foram as de ındice 1 ver e 2 scilab Considere o comando ındicesqual strindextextovetor i A funcao strindex procura osındices de onde o iesimo elemento do vetor de caracteres vetor i foi encontrado na cadeia de caracteres texto Estes ındices sao retornados no vetor numerico ındices O argumento opcional qual fornece ındices informando qual das cadeias de caracteres de vetor i foram encontradas Por exemplo ind strindexabcd dabca procura os indices de ocorrencia de a ind 1 7 ind strindexbaad daaaaa indices de ocorrencia de aa ind 2 7 8 indqual strindexbaad daaa bdacaa da qual 1 2 1 1 2 ind 2 6 7 8 12 Os caracteres aa e da foram encontrados nas posicoes 2 6 7 8 e 12 e os elementos que apareceram foram respectivamente 1 aa 2 da 1 aa 1 aa e 2 da O comando elementos tokenstextodelimitador cria um vetor coluna de ca racteres elementos particionando a cadeia de caracteres texto onde ocorrer a presenca de um dos componentes do vetor delimitador Cada componente do segundo argumento e formado por um unico caracter Se este argumento for omitido entao e assumido o vetor Tab caracteres branco e ascii9 Por exemplo tokensExemplo de cadeia de caracteres particiona com delimitador 43 Expressoes literais 85 ans Exemplo de cadeia de caracteres tokensExemplo de cadeia de caracteresc delimitador c ans Exemplo de adeia de ara teres tokensExemplo de cadeia de caracteresd t delimitadores d e t ans Exemplo e ca eia e carac eres Seja o comando matriz tokenpostextodelimitador A funcao tokenpos particiona a cadeia de caracteres texto onde ocorrer a presenca de um dos componentes do vetor delimitador Os ındices inicial e final de cada elemento resultante da particao sao atribuıdos a matriz numerica de duas colunas matriz Cada componente do segundo argumento e formado por um unico caracter Se este argumento for omitido entao e assumido o vetor Tab caracteres branco e ascii9 Por exemplo tokenposExemplo de cadeia de caracteres particiona com delimitador ans 1 7 9 10 12 17 19 20 22 31 86 Capıtulo 4 Expressoes tokenposExemplo de cadeia de caracteresd t delimitadores d t ans 1 8 10 13 15 18 20 26 28 31 Seja o comando elementos parttextoındices onde elementos e texto sao matrizes de caracteres e ındices e um vetor numerico deındices A funcao part obtem elementos a partir dos elementos de texto nas posicoes especificadas em ındice Por exemplo c part123456789013 obtendo com indices 1 e 3 c 13 46 80 Observar que cada valor de elementos e separado por dois caracteres branco Se um elemento de ındice for maior que o comprimento de um componente de texto entao elementos recebera um caractere branco vet partabcdefghi1241 obtendo com indices 1 2 4 e 1 vet a a bc b efhe O comprimento do primeiro componente a e 1 que e menor que 2 e 4 portanto o primeiro componente de vet recebe dois caracteres brancos nas posicoes 2 e 3 O segundo componente bcd tem comprimento 3 que e menor que 4 por isso recebe um branco na posicao 3 44 Execucao de expressoes O SCILAB possui comandos com o proposito de executar expressoes um dos quais e o eval cuja sintaxe e resultado evalexpressao A cadeia de caracteres expressao contem a expressao matematica que deve ser interpre tada e atribuıda a variavel resultado Por exemplo r evalsinpi2 r 1 x 1 y 2 eval2xexpy2 ans 3 Note que para avaliar uma expressao que possui as variaveis x e y estas tˆem que ser previ amente definidas A funcao eval e tambem capaz de executar tarefas mais complexas Tabela sqrtx expx1x5x2 define matriz com 3 expressoes Tabela sqrtx expx 1x5x2 x 16 evalTabela1 avalia a expressao da linha 1 com x 16 ans 4 x 2 evalTabela3 avalia a expressao da linha 3 com x 2 ans 205 88 Capítulo 4 Expressões z log10 bde² exp baba c²1b³1b² Avaliar as expressões vetoriais para u 26 v linspace10145 k 5 43 uk uv uk uv uv uv 44 uk ku vu 45 w sqrtuv cosukv Avaliar as expressões matriciais para M 2 3 1 4 6 1 5 2 1 N 1 1 2 3 1 1 3 2 1 x 13 z 2 46 Mz MN MN 47 MN MN MN MN 48 Mz M2 zM zM MN 49 Verificar a diferença entre as funções usando a π e a 56 ceila fixa floora rounda signa 410 Para c 3 4i e c 5 3i observar os resultados das funções complexas absc conjc realc imagc Seção 42 Expressões lógicas 411 Com relação às variáveis lógicas dados a t b f c sqrt2 1 d exp0 0 completar a tabela a b c d ab ac bd ab ac bd a b Avaliar as expressões lógicas para x 22 e v 15 412 x 1 413 absx 1 414 x 1 v 1 45 Exercıcios 89 415 x 1 absv3 1 Secao 43 Expressoes literais 416 Definir os comandos para gerar as cadeias de caracteres Tıtulo variavel e equacoes 417 Dada a cadeia de caracteres 1 2 3 4 inserir menor que entre eles 418 Quebrar a cadeia de caracteres 123456789012345 nas posicoes 5 e 10 419 Dado abcde edabc eacdb substituir toda ocorrˆencia do caracter d pelo caracter X 420 Dada a sequˆencia de caracteres abcdeedabceacdbdbcae determinar os ındices de onde ocorre bc Secao 44 Execucao de expressoes 421 Avaliar o resultado da expressao dada pela cadeia de caracteres sqrt4cospi Para x 15 e y 3 avaliar as expressoes abaixo 422 expxy 423 moduloxy sinhxy10 424 Converter para numero as cadeias de caracteres 123d1 e 00456789e2 425 Qual a diferenca entre as funcoes evstr e string 90 Capítulo 4 Expressões Capıtulo 5 Graficos Uma das grandes virtudes do SCILAB e a facilidade que ele oferece para produzir graficos de boa qualidade Neste capıtulo serao vistos como gerar graficos bi e tridimensionais e os modos de imprimilos ou gravalos em arquivos para que possam ser incluıdos em textos 51 Graficos bidimensionais Para gerar graficos bidimensionais sao usadas as versateis funcoes plot e fplot2d 511 Funcao plot A sintaxe da funcao plot e plotx 1y 1tipo de linha 1x ny ntipo de linha n onde x i e y i sao vetores contendo as abscissas e ordenadas dos pontos a serem exibi dos respectivamente e tipo de linha i e uma cadeia de 1 a 4 caracteres que especifica a cor o estilo da linha e o marcador dos pontos dados Os tipos de linha sao mostrados na Tabela 51 Use o comando help plot para mais detalhes Considere os vetores x linspace8850 define as abscissas y sinx vetor com elementos da funcao seno z cosx vetor com elementos da funcao coseno Para gerar um grafico de senx em funcao de x basta plotxy 91 92 Capıtulo 5 Graficos Tabela 51 Tipos de linha da funcao plot Sımbolo Cor Sımbolo Estilo de linha Sımbolo Marcador r vermelho linha solida default mais g verde linha tracejada o cırculo b azul linha pontilhada asterisco c turquesa linha de traco e ponto ponto m lilas x cruz y amarelo s quadrado k preto d diamante w branco triang cima v triang baixo triang direita triang esquerda pentagram pentagrama none sem marca default O grafico produzido e mostrado na Figura 51a Tambem pode ser gerado um grafico um pouco mais complexo senx e cosx em funcao de x com os valores de senx em linha solida e os pontos dados sendo destacados com e os de cosx em linha tracejada e com o Para produzir o grafico da Figura 51b basta o comando plotxyxzo O SCILAB oferece algumas funcoes para identificacao dos graficos Tıtulos e rotulos A funcao xtitletıtulorotulo xrotulo yrotulo z escreve a cadeia de caracteres tıtulo no cabecalho e a cadeia de caracteres rotulo i no iesimo eixo do grafico Os trˆes argumentos rotulo i sao opcionais Texto A funcao xstringxytextoangulocaixa escreve a cadeia de caracteres texto na posicao de coordenadas xy com inclinacao angulo em graus no sentido horario O escalar inteiro caixa informa se sera dese nhada uma caixa em torno do texto Se angulo 0 e caixa 1 entao uma caixa sera desenhada em torno do texto Os argumentos angulo e caixa sao opcionais Assim os comandos 51 Graficos bidimensionais 93 a fx senx b fx senx e gx cosx Figura 51 Graficos produzidos pela funcao plot xtitlefuncoes seno e cosenoeixo xeixo y xstring4107cosx xstring6106senx01 produzirao os tıtulos e rotulos no grafico da Figura 51b como mostrado na Figura 52a Legenda A funcao legendtexto 1texto nposicaocaixa adiciona legendas ao esboco da figura usando as cadeias de caracteres texto i como rotulos O argumento posicao especifica onde as legendas serao colocadas 1 canto superior direito default 2 canto superior esquerdo 3 canto inferior esquerdo 4 canto inferior direito e 5 a legenda e colocada usando o mouse A caixa de legendas movese com o mouse e assim que estiver na posicao desejada pressionase um botao Valores negativos de posicao permitem colocar as legendas fora do quadro do grafico usar help legend para mais detalhes A variavel logica caixa indica se uma caixa sera ou nao desenhada em torno das legendas sendo o valor default igual a T Os argumentos posicao e caixa sao opcionais Grade A funcao xgridestilo faz com que apareca uma grade no grafico produzido de acordo com a constante inteira estilo que define a forma e a cor da grade A Figura 52b mostra o efeito dos comandos 94 Capıtulo 5 Graficos a Tıtulos e rotulos Legendas e grade Figura 52 Documentacao de graficos legendsenxcosx5 xgrid1 512 Funcao fplot2d A funcao fplot2d e utilizada para esbocar grafico de funcao no R2 sendo sua sintaxe fplot2dabscissasfuncaoargumentos onde abscissas e um vetor numerico contendo as abscissas funcao e o nome de uma function externa e argumentos e um conjunto opcional que define o estilo do grafico na forma opcao 1 valor 1 opcao n valor n O argumento opcao i pode ser style rect logflag frameflag axesflag nax e leg style Esta opcao e utilizada para definir como as curvas serao desenhadas com seus valores sendo dados por um vetor com elementos inteiros de tamanho igual ao numero de curvas Se stylei for positivo a linha entao e desenhada como uma linha plana e o ındice define qual cor sera usada Se stylei for negativo ou nulo entao a curva e esbocada usando marcadores e absstylei define o tipo de marcador rect Define os limites das abscissas e ordenadas com os valores definidos por um vetor de quatro elementos rect Xmin Ymin Xmax Ymax As abscissas estarao entre os limites Xmin e Xmax e as ordenadas entre Ymin e Ymax 51 Graficos bidimensionais 95 logflag Especifica a escala linear ou logarıtmica ao longo dos dois eixos de coordenadas com valores associados podendo ser nn nl ln ll sendo que cada letra representa um eixo com n significando escala normal ou linear e l para escala logarıtmica frameflag Esta opcao controla o calculo dos limites das coordenadas atuais a partir dos valores mınimos requeridos Este argumento pode assumir um valor inteiro tal que 0 escala default sem calculos 1 limites dados pela opcao rect 2 calculados pelos maximos e mınimos dos vetores de abscissas e ordenadas 3 dados pela opcao rect porem aumentados para obter uma escala isometrica 4 calculados pelos maximos e mınimos dos vetores de abscissas e ordenadas mas aumentados para obter uma escala isometrica 5 dados pela opcao rect porem aumentados para produzir melhores rotulos dos eixos 6 calculados pelos maximos e mınimos dos vetores de abscissas e ordenadas mas aumentados para produzir melhores rotulos dos eixos 7 como frameflag 1 todavia os graficos anteriores sao redesenhados para usar a nova escala 8 como frameflag 2 contudo os graficos anteriores sao redese nhados para usar a nova escala e 9 como frameflag 8 porem aumentados para produzir melhores rotulos dos eixos default axesflag Especifica como os eixos serao desenhados podendo ter um valor inteiro tal que 0 nada e desenhado em torno do grafico 1 eixos desenhados com o eixo de ordenadas mostrado a esquerda 2 grafico contornado por uma caixa sem marcadores 3 eixos desenhados com o eixo de ordenadas mostrado a direita 4 eixos desenhados centrados no meio do contorno da caixa e 5 eixos desenhados de modo a cruzar o ponto 00 e caso este ponto nao esteja dentro da area exibida entao os eixos nao aparecerao nax Atribui os rotulos e define as marcas nos eixos quando a opcao axesflag 1 for usada Os valores sao definidos por um vetor de quatro elementos inteiros nx Nx ny Ny tal que Nx numero de marcas principais a ser usado no eixo das abscissas nx numero de submarcas a serem desenhadas entre marcas no eixo das abscissas Ny e ny fornecem informacoes similares mas para o eixo das ordenadas Se a opcao axesflag nao for usada entao a opcao nax supoe que axesflag 1 leg Esta opcao define as legendas referentes a cada curva devendo ser uma cadeia de carac teres na forma legenda 1legenda 2legenda n sendo legenda i o tıtulo correspondente a iesima curva Se essa opcao nao for definida e assumido o valor 96 Capıtulo 5 Graficos Exemplos A seguir serao mostrados alguns graficos gerados pela funcao fplot2d A lista de comandos x 200120 define valores de x deffyfxysinxx define funcao fplot2dxf esboca grafico xtitlefx senx xxfx titulos e rotulos produzem o grafico apresentado na Figura 53a apenas com o tıtulo e os rotulos dos eixos Os comandos abaixo geram o grafico da Figura 53b com o uso das opcoes style e rect fplot2dxfstyle10rect15 10 15 10 grafico com style e rect xtitlefx senx xxfx titulos e rotulos a Tıtulo e rotulos b Opcoes style e rect Figura 53 Esbocos de fx senxx pela funcao fplot2d O comando abaixo apresenta as opcoes frameflag e axesflag produzindo o grafico da Figura 54a fplot2dxfframeflag4axesflag5 grafico com frameflag e axesflag As opcoes nax e leg podem ser vistas no comando abaixo que gera o grafico da Figura 54b fplot2dxfnax5 10 4 8legsenxx grafico com nax e leg Para mais informacoes sobre os comandos para manipulacao de graficos bidimensionais use help fplot2d 52 Graficos tridimensionais 97 a Opcoes frameflag e axesflag b Opcoes nax e leg Figura 54 Esbocos de fx senxx pela funcao fplot2d com opcoes 52 Graficos tridimensionais De uma maneira similar aos graficos bidimensionais o SCILAB possui varios comandos para que graficos tridimensionais sejam tambem facilmente esbocados Serao descritas a seguir de modo sucinto algumas funcoes com esta finalidade Para mais informacoes sobre essas funcoes deve ser utilizado o comando help graphics 521 Funcao meshgrid A funcao matriz Xmatriz Y meshgridvetor xvetor y transforma o do mınio especificado por vetor x e vetor y em matrizes matriz X e matriz Y que possam ser usadas para avaliar funcoes de duas variaveis e fazer esbocos tridimensionais de malhas e superfıcies As linhas de matriz X sao copias de vetor x e as colunas de matriz Y sao copias de vetor y x 1052 define vetor x x 1 05 0 05 1 15 2 y 1051 define vetor y y 1 05 0 05 1 XY meshgridxy cria matrizes X e Y Y 1 1 1 1 1 1 1 05 05 05 05 05 05 05 0 0 0 0 0 0 0 05 05 05 05 05 05 05 98 Capıtulo 5 Graficos 1 1 1 1 1 1 1 X 1 05 0 05 1 15 2 1 05 0 05 1 15 2 1 05 0 05 1 15 2 1 05 0 05 1 15 2 1 05 0 05 1 15 2 Z X Y operacao com X e Y Z 2 15 1 05 0 05 1 15 1 05 0 05 1 15 1 05 0 05 1 15 2 05 0 05 1 15 2 25 0 05 1 15 2 25 3 522 Funcao plot3d Esta funcao e uma generalizacao da funcao plot vista na Secao 51 para esbocos tridimen sionais Sua sintaxe e plot3dmatriz Xmatriz Ymatriz Zargumentos onde matriz X matriz Y e matriz Z sao matrizes de mesmas dimensoes contendo as coordenadas tridimensionais dos pontos a serem exibidos e argumentos e um conjunto opcional que define o estilo do grafico na forma opcao 1 valor 1 opcao n valor n O argumento opcao i pode ser alpha theta leg flag e ebox alpha e theta Sao ˆangulos em graus que definem as coordenadas esfericas do ponto do observador O argumento theta descreve o ˆangulo no plano xy e alpha em torno do eixo z Se nao forem especificados sao assumidos os valores predefinidos alpha 35 e theta 45 leg Define os rotulos referentes a cada um dos trˆes eixos devendo ser uma cadeia de caracteres na forma legenda xlegenda ylegenda z sendo legenda i correpondente ao iesimo eixo Se essa opcao nao for fornecida entao e assumido o valor flag Essa opcao e um vetor numerico com trˆes elementos flag modotipocaixa O elemento inteiro modo define a cor da superfıcie Se positivo entao a superfıcie e desenhada com a cor modo e o contorno de cada faceta e desenhado com estilo de linha e cor definidos 52 Graficos tridimensionais 99 Se ele for nulo entao somente a malha da superfıcie e desenhada e se ele for negativo entao a superfıcie e desenhada com a cor modo e o contorno da faceta nao e desenhado O segundo elemento inteiro tipo define a escala tal que 0 o grafico e feito usando a escala 3D atual 1 reescala automaticamente a caixa 3D com razao de aspecto extremo e os contornos sao definidos pelo valor do argumento opcional ebox 2 reescala automaticamente a caixa 3D com razao de aspecto extremo e os contornos sao computados usando os dados fornecidos 3 3D isometrico com limites da caixa fornecido por ebox 4 3D isometrico com limites derivados dos dados fornecidos 5 limites isometricos expandidos 3D com os limites da caixa fornecidos por ebox e 6 limites isometricos expandidos 3D com limites derivados dos dados fornecidos O terceiro elemento inteiro caixa define a moldura em torno do grafico tal que 0 nada e desenhado em torno do grafico 1 o mesmo que o anterior porque ainda nao esta imple mentado 2 somente os eixos atras da superfıcie sao desenhados 3 uma caixa em torno da superfıcie e desenhada e os tıtulos sao adicionados e 4 uma caixa em torno da superfıcie e desenhada e tıtulos e eixos sao adicionados ebox Esta opcao define os limites das trˆes coordenadas do grafico com os valores dados em um vetor de seis elementos ebox Xmin Xmax Ymin Ymax Zmin Zmax Este argumento e usado junto com tipo da opcao flag caso tipo tenha o valor 1 3 ou 5 Se a opcao flag nao for fornecida entao ebox nao e considerado Exemplos Para produzir o esboco da funcao z senx cosy2 no intervalo 3 x 3 e 2 y 2 mostrado na Figura 55a utilizase os comandos XY meshgrid30232022 cria matrizes X e Y a partir de vetores Z sinXcosY2 calcula pontos da funcao plot3dXYZ desenha grafico 3D Nesta figura foram utilizados os valores predefinidos alpha 35 e theta 45 graus A Figura 55b apresenta o grafico com os valores alterados para alpha 30 e theta 60 usando o comando plot3dXYZalpha30theta60 Quando os argumentos tˆem os valores alterados para alpha 60 e theta 30 pelo co mando abaixo o grafico e rotacionado do modo mostrado na Figura 56a plot3dXYZalpha60theta30 100 Capıtulo 5 Graficos a Opcoes alpha 35 e theta 45 b Opcoes alpha 30 e theta 60 Figura 55 Esbocos de z senx cosy2 usando a funcao plot3d a Opcoes alpha 60 e theta 30 b Opcoes alpha 80 e theta 230 Figura 56 Esbocos de z senx cosy2 usando plot3d com variacao de alpha e theta 52 Graficos tridimensionais 101 Um grafico com a orientacao dos eixos mais natural e apresentado na Figura 56b sendo obtido pelo comando com alpha 80 e theta 230 plot3dXYZalpha80theta230 Um exemplo de uso da opcao leg pode ser visto na Figura 57a obtida pelos comandos legenda eixo xeixo yeixo z define legenda legenda eixo xeixo yeixo z plot3dXYZalpha80theta230leglegenda Acrescentando a opcao flag com os argumentos modo 0 tipo 2 e caixa 3 pelo comando abaixo temse a Figura 57b plot3dXYZalpha80theta230leglegendaflag0 2 3 a Opcao leg b Opcoes leg e flag Figura 57 Esbocos de z senx cosy2 usando plot3d com as opcoes leg e flag 523 Funcao mesh A funcao meshmatriz Xmatriz Ymatriz Z produz o esboco de uma malha na superfıcie especificada pelas matrizes matriz X matriz Y e matriz Z Os comandos abaixo geram o esboco mostrado na Figura 58a XY meshgrid30232022 define as matrizes X e Y Z sinXcosY2 define a matriz Z com a funcao meshXYZ desenha a malha xgrid1 coloca a grade xtitlemesheixo xeixo yeixo z titulos e rotulos 102 Capıtulo 5 Graficos a Funcao mesh b Funcao surf Figura 58 Esbocos de z senx cosy2 com diferentes funcoes 524 Funcao surf A funcao surfmatriz Xmatriz Ymatriz Z produz uma superfıcie sombreada tridimensional especificada pelas matrizes matriz X matriz Y e matriz Z Deste modo os comandos abaixo produzem a Figura 58b XY meshgrid30232022 define as matrizes X e Y Z sinXcosY2 define a matriz Z com a funcao surfXYZ desenha a superficie xtitlesurfeixo xeixo yeixo z titulos e rotulos xgrid1 coloca a grade 53 Janela de figura As figuras geradas pelo SCILAB podem ser facilmente modificadas impressas ou gravadas em um arquivo para posterior impressao ou inclusao em um texto Uma figura e gerada na janela Scilab Graphic0 que apresenta cinco botoes File Zoom UnZoom 3D Rot e Edit Escolhendo File aparecem varias opcoes entre as quais Export com a qual surge a janela Xscilab mostrada na Figura 59 com varias opcoes para produzir um arquivo com o grafico 54 Exercıcios 103 Figura 59 Janela para gerar arquivo com figura 54 Exercıcios Secao 51 Graficos bidimensionais 51 Seja a funcao y e1x10 cosxx Gerar uma tabela com 20 pontos para 5 x 5 e exibir o grafico da funcao usando o comando plot colocando rotulos e grade 52 Repetir a operacao acima usando 50 pontos e sem usar grade 53 Utilizar a funcao fplot2d no Exercıcio 51 variando os argumentos opcionais 54 Gerar uma tabela de 40 pontos para y senxx 10 x 10 e exibir o seu grafico usando o comando fplot2d com rotulos e grade 55 Usar a funcao plot no Exercıcio 54 Secao 52 Graficos tridimensionais 56 Seja a funcao z senxy2 Gerar uma malha com 5 x 5 e 3 y 3 usando a funcao meshgrid 104 Capıtulo 5 Graficos 57 Gerar um grafico usando a funcao plot3d 58 Repetir o Exercıcio 57 variando os argumentos opcionais 59 Usando o comando surf exibir a superfıcie de z x cosx seny com π x π e π y π 510 Secao 53 Janela de figura 511 Gravar a figura do Exercıcio 59 no arquivo figuraeps utilizando a janela Xscilab 512 513 514 515 Capıtulo 6 Linguagem de programacao Nos capıtulos anteriores foram descritos os elementos fundamentais do SCILAB os quais possibilitam sua utilizacao em um modo interativo Neste capıtulo serao abordadas algumas estruturas de programacao que tornarao possıvel desenvolver programas e funcoes escritos em SCILAB tais como estruturas condicionais e estruturas de repeticao 61 Programacao Alem de poder entrar com cada comando de uma vez o SCILAB permite como qualquer outra linguagem de programacao que seja executada uma sequˆencia de comandos escrita em um arquivo Por esta razao este tipo de arquivo e chamado de roteiro script Serao apresentados dois tipos de roteiros programa e funcao 611 Programa Um arquivo contendo um programa e criado usando um editor de texto qualquer e para executar esse programa utilizase o comando exec cuja sintaxe e execarquivomodo 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 sera a execucao de acordo com a Tabela 61 Seja o programa escrito no arquivo decsomatsci para gerar uma matriz com elementos aleatorios entre 100 e 100 e decompˆola na soma de trˆes matrizes uma triangular inferior uma diagonal e outra triangular superior 105 106 Capıtulo 6 Linguagem de programacao Tabela 61 Modos de execucao do comando exec modo Descricao 0 exibe resultados nao ecoa linha de comando e nao exibe o prompt valor default 1 nada e exibido 1 ecoa cada linha de comando 2 o prompt e exibido 3 ecoa cada linha de comando e exibe o prompt 4 para antes de cada prompt e continua apos um Enter 7 modos 3 e 4 juntos editado no arquivo decsomatsci programa decomposicaomatriz Objetivo decompor uma matriz aleatoria na soma de tres matrizes uma triangular inferior uma diagonal e outra triangular superior n inputOrdem da matriz gera matriz n x n com elementos aleatorios com distribuicao uniforme no intervalo 01 A fix200grandnndef05onesnn D diagdiagA obtem matriz diagonal L trilA D matriz triangular inferior com diagonal nula U triuA D matriz triangular superior com diagonal nula A L D U Executando com modo 1 para ecoar cada linha de comando execdecsomatsci1 produz os resultados editado no arquivo decsomatsci programa decomposicaomatriz Objetivo decompor uma matriz aleatoria na soma de tres matrizes uma triangular inferior uma diagonal e outra triangular superior n inputOrdem da matriz Ordem da matriz 3 gera matriz n x n com elementos aleatorios com distribuicao uniforme no intervalo 01 A fix200grandnndef05onesnn D diagdiagA obtem matriz diagonal L trilA D matriz triangular inferior com diagonal nula U triuA D matriz triangular superior com diagonal nula A L D U 61 Programacao 107 A 62 67 82 72 74 55 81 93 26 L 0 0 0 72 0 0 81 93 0 D 62 0 0 0 74 0 0 0 26 U 0 67 82 0 0 55 0 0 0 Um programa tem acesso as variaveis no espaco de trabalho e as variaveis criadas por ele farao parte do espaco de trabalho No exemplo acima as matrizes A D L e U foram criadas no espaco de trabalho O comando halt interrompe a execucao do SCILAB ate que se tecle Enter Qualquer comando digitado entre o prompt e o Enter sera ignorado a 1 comando qualquer a 1 halt causa a interrupcao no SCILAB haltb 2 atribui o valor 2 a variavel b b a atribuicao acima nao foi efetuada error 4 Undefined variable b 612 Subprograma function Um outro tipo de arquivo de roteiro e usado para o proprio usuario criar novas funcoes para o SCILAB Sua sintaxe e function parametros saıda nome funcao parametros entrada comandos endfunction sendo function uma palavrachave que determina o inıcio da funcao parametros saıda e um conjunto de variaveis contendo os argumentos gerados pela funcao separados por vırgula e delimitados por e nome funcao e uma cadeia de caracteres que especifica o nome da funcao e parametros entrada e um conjunto de variaveis com os argumentos fornecidos 108 Capıtulo 6 Linguagem de programacao a funcao separados por vırgula e delimitados por e Os parametros entrada sao opcionais e mesmo no caso de sua omissao os parˆenteses devem ser mantidos Os comandos especificam o conteudo da funcao e a palavrachave endfunction o seu final Por exemplo seja o arquivo parabolasci contendo uma funcao para calcular as duas raızes de uma parabola editado no arquivo parabolasci function raiz1raiz2 parabolaabc Objetivo calcular as duas raizes de uma parabola parabolaabc calcula as duas raizes da parabola PX ax2 bx c 0 retornandoas em raiz1 e raiz2 delta sqrtb24ac raiz1 b delta 2a raiz2 b delta 2a endfunction Os argumentos que devem ser fornecidos a funcao parˆametros de entrada sao a b e c e os valores gerados pela funcao parˆametros de saıda sao raiz1 e raiz2 O comando exec apresentado na Secao 611 Programa tambem e utilizado para que as functions editadas em um dado arquivo passem a fazer parte da biblioteca do SCILAB para uso posterior Por exemplo existsparabola verifica que a funcao parabola nao existe ans 0 execparabolasci1 funcao carregada para o espaco de trabalho existsparabola verifica que parabola agora existe ans 1 Para calcular as raızes de px 16x2 8x 5 fazse r1r2 parabola1685 executa a funcao parabola r2 025 05i r1 025 05i Caso o arquivo contendo uma function seja reeditado e salvo o comando exec deve ser novamente executado para atualizala no espaco de trabalho fato que gera uma mensagem de aviso Ao contrario do programa no qual as variaveis sao globais em uma function a lista dos parametros entrada e as variaveis internas sao locais ou seja elas nao tem acesso as 61 Programacao 109 variaveis do espaco de trabalho Por sua vez os parametros saıda sao criados no espaco de trabalho No caso da function parabola acima a variavel raizes e criada no espaco de trabalho do SCILAB E possivel chamar uma function com numeros diferentes de parˆametros de entrada ou de saıda do que aqueles definidos no arquivo que a contem Isto e feito pela funcao argn cuja sintaxe e numero parametros saıdanumero parametros entrada argn Ao evocar argn dentro da function sao fornecidos o numero parametros saıda e o numero parametros entrada O segundo argumento e opcional A function pegaso escrita no arquivo pegasosci calcula o zero pertence ao intervalo a b da funcao definida na cadeia de caracteres funcao utilizando o robusto e eficiente metodo pegaso 2 Nesta function e utilizado o comando eval para avaliacao de expressao o qual sera descrito na Secao 44 Execucao de expressoes editado no arquivo pegasosci function RaizCondErroIter pegasofuncaoabTolerIterMaxExibe Objetivo Calcular raiz de equacao pelo metodo pegaso PEGASOFUNCAOABTOLERITERMAXEXIBE calcula a raiz de uma equacao FX0 contida no intervalo A B com tolerancia TOLER e com no maximo ITERMAX iteracoes usando o metodo pegaso sendo a funcao FX dada na cadeia de caracteres FUNCAO EXIBE especifica se os resultados intermediarios serao mostrados O nao exibe e 1 exibe FUNCAO A e B sao necessarios enquanto que TOLER ITERMAX e EXIBE terao valores predefinidos caso nao sejam fornecidos nargsainargent argn numero de argumentos de saida e de entrada if nargent 3 errorNumero de argumentos insuficientes end if nargent 4 Toler 1e10 end if nargent 5 IterMax 100 end if nargent 6 Exibe 0 end x a Fa evalfuncao x b Fb evalfuncao if Exibe 0 disp Calculo de raiz de equacao pelo metodo pegaso dispiter a b x Fx deltax end k 0 x b Fx Fb while 1 k k 1 DeltaX Fx Fb Fa b a x x DeltaX Fx evalfuncao 110 Capıtulo 6 Linguagem de programacao if Exibe 0 mprintf3i115f115f115f145e145e kabxFxDeltaX end if absDeltaX Toler absFx Toler k IterMax break end if FxFb 0 a b Fa Fb else Fa Fa Fb Fb Fx end b x Fb Fx end Raiz x if nargsai 1 CondErro absDeltaX Toler absFx Toler end if nargsai 2 Iter k end endfunction O comando errormensagem exibe a cadeia de caracteres mensagem e interrompe a execucao de um programa ou funcao Os argumentos funcao a e b devem ser fornecidos senao uma mensagem de erro sera exibida e a execucao da function interrompida No entanto os argumentos Toler tolerˆancia da raiz IterMax numero maximo de iteracoes e Exibe exibe resultados intermediarios sao opcionais caso nao sejam incluıdos na lista de argumentos de entrada serao atribuıdos valores predefinidos Se forem especificados mais de seis argumentos de saıda havera a exibicao de uma mensagem de erro e a interrupcao da function Se nenhum ou apenas um argumento de saıda for especificado entao sera retornado a raiz da equacao na variavel Raiz Se forem dois argumentos entao alem da Raiz sera retornado a condicao de erro na variavel CondErro Se forem trˆes argumentos de saıda entao serao retornados Raiz CondErro e o numero de iteracoes Iter Mais de trˆes argumentos de saıda causam a exibicao de uma mensagem de erro e a nao execucao da function pegaso Para calcular a raiz de fx cosx2 1x 1 0 pertencente ao intervalo 0 2 com tolerˆancia ǫ 102 com no maximo 10 iteracoes listando os resultados intermediarios e retornado a raiz a condicao de erro e o numero de iteracoes execpegasosci0 carrega a funcao pegaso no espaco de trabalho rei pegasocosx21sqrtx1021e2101 executa pegaso Calculo de raiz de equacao pelo metodo pegaso iter a b x Fx deltax 1 000000 200000 047920 872828e01 152080e00 2 200000 047920 099219 141128e00 512995e01 3 200000 099219 168045 409987e01 688254e01 4 099219 168045 152552 383307e01 154933e01 5 168045 152552 160038 154647e02 748614e02 6 168045 160038 160340 155627e04 302353e03 i 6 61 Programacao 111 e F r 16034004 Por sua vez calculando a mesma raiz com os argumentos de entrada opcionais previamente atribuıdos ou seja tolerˆancia ǫ 1010 maximo de 100 iteracoes nao listando os resultados intermediarios e alem disto retornado somente a raiz e a condicao de erro fazse executa pegaso com tres argumentos re pegasocosx21sqrtx102 e F r 16033703 Conforme ja mencionado as variaveis de uma function sao locais ou seja so podem ser refe renciadas internamente nao sendo reconhecidas pelo espaco de trabalho e outras functions No entanto alem do uso de argumentos um outro modo de trocar informacoes entre o espaco de trabalho e as functionss e pelo uso de variaveis globais A declaracao global lista de variaveis faz com que as variaveis especificadas na lista de variaveis separadas por branco tornemse globais e portanto esta declaracao deve aparecer no programa e nas functions de interesse Por exemplo seja a funcao no arquivo soma diagonalsci para calcular a soma da diagonal da matriz resultante do produto das matrizes A e B definidas no espaco de trabalho editado no arquivo somadiagonalsci function somadiag somadiagonal Objetivo calcular a soma da diagonal do produto das matrizes AB do espaco de trabalho global A B somadiag sumdiagAB endfunction A sua execucao fornece execsomadiagonalsci0 carrega somadiagonal no espaco de trabalho A 1 2 3 4 B 5 6 7 8 define as matrizes A e B somdg somadiagonal executa a funcao somadiagonal somdg 69 O uso de variaveis globais dificulta o entedimento e a modificacao das functions alem de tornar os modulos do programa menos independentes Por estas razoes a utilizacao de variaveis globais deve ser evitada 112 Capıtulo 6 Linguagem de programacao O comando return colocado dentro de uma function causa um retorno normal para o comando seguinte aquele que chamou a function Ja o comando varesp 1varesp n return varloc 1varloc n faz com que as variaveis locais varloc i sejam copiadas no espaco de trabalho com os correspondentes nomes varesp i Seja a funcao descrita no arquivo consistenciasci editado no arquivo consistenciasci function y consisteab Objetivo exemplo de consistencia de dados if a 0 b 1 y i ef returnab end y log10a sqrt1b endfunction O seu uso resulta em execconsistenciasci0 carrega a function do arquivo x consiste1003 uso da function com argumentos validos x 4 x consiste1003 uso com argumentos invalidos x i ef verifica que as variaveis estao no espaco de trabalho e 100 f 3 Uma funcao pode tambem ser definida na janela de comando pela funcao deff deffparam saıda nome funcao param entrada comandos onde param saıda e uma lista contendo os argumentos gerados pela funcao separados por vırgula e delimitados por e nome funcao e uma cadeia de caracteres que especifica o nome da funcao e param entrada e uma lista com os argumentos fornecidos a funcao separados por vırgula e delimitados por e A matriz de caracteres comandos especifica o corpo da funcao Por exemplo seja a funcao para multiplicar e dividir dois numeros deffmuldiv operacaoabmul a bdiv a bdefine funcao multiplica divide operacao32 uso da funcao operacao divide 15 multiplica 6 62 Estruturas condicionais 113 62 Estruturas condicionais Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condicao for satisfeita ou nao possibilitando desta forma alterar o fluxo natural de comandos Esta condicao e representada por uma expressao logica 621 Estrutura ifend A estrutura condicional mais simples do SCILAB e if condicao comandos end Se o resultado da expressao logica condicao for T verdadeiro entao a lista comandos sera executada Se o resultado for F falso entao comandos nao serao executados Con sidere o programa logaritmo decimalsci programa logaritmodecimal Objetivo calcular logaritmo decimal x inputEntre com x if x 0 LogDec log10x dispx LogDec end e a execucao para x 0001 execlogaritmodecimalsci1 Entre com x 0001 0001 3 Neste exemplo o logaritmo decimal de x sera atribuıdo a LogDec se e somente se o valor de x for maior que 0 622 Estrutura ifelseend No caso de haver duas alternativas uma outra estrutura condicional deve ser usada if condicao comandos 1 else comandos 2 end Se o resultado da expressao logica condicao for T verdadeiro entao somente a lista contendo comandos 1 sera executada Se condicao for F falso entao sera a lista 114 Capıtulo 6 Linguagem de programacao comando 2 a unica a ser executada O programa funcao modularsci utiliza a funcao modular fx 2x Se x for positivo ou nulo entao sera atribuıdo a variavel fx o resultado de 2x todavia se x for negativo entao fx sera igual a 2x programa funcaomodular Objetivo avaliar uma funcao modular x inputEntre com x if x 0 fx 2 x else fx 2 x end dispx fx Executando com x 3 produz execfuncaomodularsci1 Entre com x 3 3 6 623 Estrutura ifelseifend Quando houver mais de duas alternativas a estrutura ifelseend do SCILAB tornase if condicao 1 comandos 1 elseif condicao 2 comandos 2 elseif condicao 3 comandos 3 else comandos n end A lista comandos 1 sera executada se condicao 1 for igual a T verdadeiro ja a lista comandos 2 sera executada se condicao 2 for T e assim para as outras condicoes Se nenhuma das condicoes for T entao comandos n sera executada Quando a condicao i for satisfeita e os comandos i executados a estrutura ifelseifend sera abandonada ou seja o controle do processamento sera transferido para o comando imediatamente apos o end Seja o programa modulosci para calcular o valor absoluto de um numero real ou complexo programa modulo Objetivo calcular o valor absoluto de um numero real ou complexo 62 Estruturas condicionais 115 a inputEntre com a if imaga 0 b sqrtreala2imaga2 elseif a 0 b a else b a end dispa b Para a 3 4i execmodulosci1 Entre com a 3 4 i 3 4i 5 Deste modo foi executado o primeiro comando para o qual a condicao imaga 0 foi satisfeita Assim na estrutura ifelseifend uma unica lista de comandos e executada 624 Estrutura selectcaseend Esta estrutura e similar a ifelseifend e sua sixtaxe e select expressao case expressao 1 then comandos 1 case expressao 2 then comandos 2 case expressao 3 then comandos 3 case expressao n then comandos n else comandos e end A lista comandos 1 sera executada se expressao for igual a expressao 1 A lista comandos 2 sera executada se expressao for igual a expressao 2 e assim para as outras expressoes Se expressao nao for igual a nenhuma das expressoes anteriores entao comandos e sera executada Cabe ressaltar que somente uma lista de comandos sera executada Considere o programa posicao poltronasci para determinar a posicao de uma poltrona para quem entra em um ˆonibus programa posicaopoltrona Objetivo determinar a posicao de uma poltrona em onibus poltrona inputEntre com o numero da poltrona fila fixpoltrona4 1 select modulopoltrona4 116 Capıtulo 6 Linguagem de programacao case 0 then if poltrona 0 fila fila 1 posicao esquerda corredor mprintfpoltrona3i na fila3i a s poltronafilaposicao else posicao nao existe mprintfpoltrona3i s poltronaposicao end case 1 then posicao direita janela mprintfpoltrona3i na fila3i a s poltronafilaposicao case 2 then posicao direita corredor mprintfpoltrona3i na fila3i a s poltronafilaposicao case 3 then posicao esquerda janela mprintfpoltrona3i na fila3i a s poltronafilaposicao else posicao nao existe mprintfpoltrona3i s poltronaposicao end Por exemplo as posicoes das poltronas de numeros 15 42 e 5 sao execposicaopoltronasci1 Entre com o numero da poltrona 15 poltrona 15 na fila 4 a esquerda janela execposicaopoltronasci1 Entre com o numero da poltrona 42 poltrona 42 na fila 11 a direita corredor execposicaopoltronasci1 Entre com o numero da poltrona 5 poltrona 5 nao existe 63 Estruturas de repeticao As estruturas de repeticao fazem com que uma sequˆencia de comandos seja executada re petidamente ate que uma dada condicao de interrupcao seja satisfeita O SCILAB possui duas estruturas de repeticao as estruturas forend e a whileend com as quais e possıvel construir uma terceira estrutura com interrupcao no interior 63 Estruturas de repeticao 117 631 Estrutura forend A estrutura forend permite que um grupo de comandos seja repetido um numero deter minado de vezes Sua sintaxe e for variavelarranjo comandos end onde variavel e a variaveldecontrole que assume todos os valores contidos no vetor linha arranjo Assim o numero de repeticoes da lista comandos e igual ao numero de elementos no vetor arranjo A variaveldecontrole nao pode ser redefinida dentro da estrutura forend O programa primeiros imparessci mostra que a soma dos n primeiros numeros ımpares e igual ao quadrado de n programa primeirosimpares Objetivo verificar propriedade dos numeros impares n inputEntre com n Soma 0 for i 122n1 Soma Soma i end dispSoma n2 Quando executado para n 5 execprimeirosimparessci1 Entre com n 5 25 25 Para n 5 a variaveldecontrole i assume os valores 1 3 5 7 9 cuja soma e igual a 25 Para mostrar que as estruturas forend podem estar encadeadas considere o programa soma matrizsci para calcular a soma dos elementos das linhas colunas e diagonal de uma matriz programa somamatriz Objetivo calcular a soma dos elmentos das linhas colunas e diagonal de matriz A inputEntre com a matriz nlinncol sizeA SomaLinhas zerosnlin1 SomaColunas zeros1ncol SomaDiagonal 0 for i 1nlin SomaDiagonal SomaDiagonal Aii 118 Capıtulo 6 Linguagem de programacao for j 1ncol SomaLinhasi SomaLinhasi Aij SomaColunasj SomaColunasj Aij end end A SomaLinhas SomaColunas SomaDiagonal Um quadrado magico de ordem n e uma matriz com elementos nao repetidos e com valores entre 1 e n2 tal que a soma dos elementos das linhas das colunas e da diagonal sejam iguais Para o quadrado magico de ordem 4 execsomamatrizsci0 Entre com a matriz 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 A 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 SomaLinhas 34 34 34 34 SomaColunas 34 34 34 34 SomaDiagonal 34 Cumpre observar que o SCILAB possui comandos para determinar estes somatorios de um modo bem simples pelo uso da funcao sum que fornece a soma dos elementos de uma matriz ver Tabela 33 na pagina 45 632 Estrutura whileend A estrutura whileend ao contrario da forend repete um grupo de comandos um numero indeterminado de vezes Sua sintaxe e while condicao comandos 1 else comandos 2 end Enquanto a expressao logica condicao for T verdadeiro a lista comandos 1 sera repe tida Quando ela for F falsa entao a lista comandos 2 sera executada O comando else e opcional Por exemplo seja o programa precisaosci para determinar a precisao de um computador 63 Estruturas de repeticao 119 programa precisao Objetivo determinar a precisao de um computador n 0 Epsilon 1 while 1 Epsilon 1 n n 1 Epsilon Epsilon 2 end n Epsilon eps Quando executado fornece execprecisaosci0 n 53 Epsilon 1110D16 eps 2220D16 Epsilon e a chamada precisao da maquina ǫ ou seja o maior numero que somado a 1 e igual a 1 Para computadores com aritmetica IEEE ǫ 253 Comparada com a variavel especial eps 252 do SCILAB 1 eps 1 ans 2220D16 1 Epsilon 1 ans 0 Note que quando eps for somado a 1 resulta um numero maior que 1 O mesmo nao ocorre com Epsilon porque qualquer valor igual ou menor do que ele somado a 1 sera simplesmente 1 ou seja o computador ja nao consegue mais representar 1 ǫ 633 Estrutura com interrupcao no interior A estrutura whileend permite que um grupo de comandos seja repetido um numero inde terminado de vezes no entanto a condicao de interrupcao e testada no inıcio da estrutura Em varias situacoes em programacao se faz necessario interromper a execucao da repeticao verificando a condicao no interior ou final da estrutura e nao somente no seu inıcio O comando break interrompe a execucao de uma estrutura whileend ou forend e trans fere a execucao para o comando imediatamente seguinte ao end Em repeticoes aninhadas o break interrompe a execucao apenas da estrutura mais interna Assim uma repeticao com 120 Capıtulo 6 Linguagem de programacao condicao de interrupcao no interior pode ter a forma while T comandos 1 if condicao break end comandos 2 end A estrutura whileend e executada indefinidamente a princıpio pois a condicao do while e sempre T verdadeiro Contudo quando a condicao do if for satisfeita o comando break sera executado causando a interrupcao da repeticao whileend Seja o programa racionalsci para fornecer a aproximacao racional de um numero positivo com uma dada tolerˆancia programa racional Objetivo fornecer a aproximacao racional de numero positivo com dada precisao while T numero inputEntre com um numero 0 if numero 0 break end tol inputEntre com tolerancia numden ratnumerotol dispnumero num den numeronumden end Por exemplo para 2 e π execracionalsci0 Entre com um numero 0 sqrt2 Entre com tolerancia 1e5 14142136 239 169 00000124 Entre com um numero 0 pi Entre com tolerancia 1e10 31415927 208341 66317 1224D10 Entre com um numero 0 0 Ele lista continuamente a representacao racional de um numero fornecido enquanto este for positivo 64 Depuracao de programa 121 64 Depuracao de programa O comando pause interrompe a execucao de um programa e transfere o controle para o teclado quando em uma funcao ele interrompe a sua execucao No modo de pausa aparece o sımbolo do prompt indicando o nıvel da pausa por exemplo 1 E disponibilizado entao um novo espaco de trabalho no qual todas as variaveis de nıvel mais baixo estao acessıveis mesmo as variaveis de uma funcao Para voltar ao espaco de trabalho que evocou a pausa usase o comando return Conforme mencionado na Secao 612 Subprograma function o comando varesp 1varesp n return varloc 1varloc n faz com que as variaveis locais varloc i sejam copiadas no espaco de trabalho que evocou a pausa com os correspondentes nomes varesp i Se o comando nao for usado entao as variaveis de nıvel mais baixo estao protegidas e nao podem ser modificadas Seja a funcao no arquivo avaliasci editado no arquivo avaliasci function expressao avaliaa divide a10 raiz sqrta logdec log10a expressao divide raiz logdec endfunction e sua execucao execavaliasci1 carrega a funcao para o espaco de trabalho valor avalia100 avalia a funcao valor 22 existsraiz verifica a inexistencia da variavel local raiz ans 0 A variavel raiz nao existe no espaco de trabalho por se tratar de uma variavel local Se for colocado o comando pause todas as variaveis definidas antes dele estarao disponıveis Por exemplo se for colocado depois de raiz sqrta execavaliasci1 carrega a funcao modificada Warning redefining function avalia Use funcprot0 to avoid this message valor avalia100 avalia a funcao entrando no modo de pausa 1raiz existencia da variavel local raiz no novo espaco de trabalho ans 10 122 Capıtulo 6 Linguagem de programacao 1existslogdec inexistencia da variavel logdec ans 0 1return valor 22 Neste caso a variavel local raiz esta disponıvel no espaco de trabalho e logdec nao esta porque ela foi definida depois do pause 65 Exercıcios Secao 61 Programacao 61 Criar o arquivo almaxminsci n inputOrdem da matriz A randnn maior maxA menor minA Executar o programa acima para n 5 10 e 30 62 Escrever uma function para calcular a norma2 de um vetor 63 Escrever uma function para calcular a norma de um vetor 64 Dada a matriz triangular inferior L lij e o vetor c escrever uma function para calcular y tal que Ly c l11 l21 l22 l31 l32 l33 ln1 ln2 ln3 lnn y1 y2 y3 yn c1 c2 c3 cn 65 Dada a matriz triangular superior U uij e o vetor d escrever uma function para calcular x tal que Ux d u11 u12 u13 u1n u22 u23 u2n u33 u3n unn x1 x2 x3 xn d1 d2 d3 dn 65 Exercıcios 123 Secao 62 Estruturas condicionais 66 Qual o valor de LogDec no exemplo sobre a estrutura ifend mostrada na Secao 621 para x 2 67 Encontrar o valor de fx no exemplo sobre ifelseend da Secao 622 para x 10 68 Achar o valor de b no exemplo de ifelseifend da Secao 623 para a 3 69 Qual o valor de b no exemplo sobre a estrutura ifelseifend da Secao 623 para a 34i 610 Encontrar as posicoes das poltronas numeros 4 25 e 40 usando o exemplo da estrutura selectcaseend da Secao 624 Secao 63 Estruturas de repeticao 611 Determinar o valor de Soma no exemplo sobre a estrutura forend mostrada na Secao 631 para n 7 612 Calcular a soma das linhas das colunas e da diagonal de uma matriz de Toeplitz de ordem 5 613 Explicar como e feita a determinacao da precisao de um computador 614 Calcular a norma2 do vetor x 1e200 2e200 3e200 usando a function escrita no Exercıcio 62 Qual a alteracao a ser feita para que a funcao calcule corretamente 615 Calcular a raiz de fx senxx 4 0 que esta no intervalo 1 5 utilizando a function pegaso mostrada na Secao 612 Secao 64 Depuracao de programa 616 617 618 619 620 124 Capıtulo 6 Linguagem de programacao Capıtulo 7 Comandos de entrada e saıda O SCILAB fornece algumas facilidades para especificar o formato de saıda dos resultados gravacao e leitura das variaveis de uma sessao de trabalho e de arquivos 71 Formato de exibicao Para saber o valor de uma variavel basta entrar com o seu nome O resultado e exibido usando um formato predefinido pi pi 31415927 O comando dispvariavel e usado para exibir o conteudo de variavel sem mostrar o seu nome ou para exibir uma cadeia de caracteres contida na variavel dispnumeros aleatorios entre 0 e 1 dispgrand26def numeros aleatorios entre 0 e 1 08147237 09057919 01269868 09133759 06323592 00975404 0135477 08350086 09688678 02210340 03081671 05472206 Ao exibir um resultado numerico o SCILAB segue diversas regras Se o resultado for um numero real ponto flutuante ele e mostrado com dez caracteres incluindo o ponto decimal e o sinal Quando o sinal for positivo e exibido um caracter branco em seu lugar Se os dıgitos significativos do resultado estiverem fora desta faixa entao o resultado sera exibido em notacao cientıfica dispe1e5 e1e5 e1e10 e1e10 00000272 27182818 2718D10 2718D10 125 126 Capıtulo 7 Comandos de entrada e saıda A funcao formattipodıgitos e usada para alterar o formato numerico de exibicao onde tipo e um dos caracteres v ou e para indicar formato variavel ou em notacao cientıfica respectivamente O parˆametro dıgitos indica o numero maximo de caracteres a serem exibidos incluindo sinal ponto decimal e no caso de formato e os quatro caracteres referentes a potˆencia de 10 Caso esse parˆametro nao seja fornecido e assumido o valor 10 Uma vez definido o formato de exibicao ele e mantido ate que seja modificado por um outro comando format formatv8 pi pi com formato variavel com 8 caracteres ans 314159 formatv12 pi pi com formato variavel com 12 caracteres ans 3141592654 formate8 eps eps em notacao cientifica com 8 caracteres ans 22D16 formate12 eps eps em notacao cientifica com 12 caracteres ans 222045D16 sqrteps verificar que o ultimo formato e mantido ans 149012D08 A funcao mprintf exibe dados formatados pertencentes ao espaco de trabalho na tela prin cipal do SCILAB Sua sintaxe e mprintfformatovariaveis onde a cadeia de caracteres formato contem caracteres alfanumericos eou especificacoes de conversao para exibir na tela a lista variaveis Estas especificacoes de conversao sao delimitadas pelo caracter e uma das letras i e f g ou s de acordo com a Tabela 71 Tabela 71 Formatos de exibicao Formato Especificacao ni usado para valores inteiros sendo n o tamanho do campo de exibicao ndf notacao na forma 888888 sendo n o tamanho do campo numero total de caracteres exibidos e d o numero de dıgitos decimais nde notacao na forma 8888 88 sendo n o tamanho do campo numero total de caracteres exibidos e d o numero de dıgitos decimais ndg equivalente a nde ou ndf dependendo de qual formato for mais curto alem disso os zeros insignificantes nao sao exibidos ns exibe caracteres em um campo de tamanho n 72 Espaco de trabalho 127 Deste modo mprintfa precisao deste computador 125e eps2 a precisao deste computador 111022e16 onde e usado para comecar uma nova linha Quando for necessario ter o caracter exibido basta usalo duas vezes mprintfo valor de pi e aproximadamente1310f pi o valor de pi e aproximadamente 31415926536 Assim a exibicao pode ser feita pelos comandos disp e mprintf x 1053 M xsqrtx formatv10 dispM 1 1 15 12247449 2 14142136 25 15811388 3 17320508 mprintf53f105f M 1000 100000 1500 122474 2000 141421 2500 158114 3000 173205 72 Espaco de trabalho Durante uma sessao as variaveis utilizadas residem no espaco de trabalho do SCILAB e podem ser armazenadas em um arquivo quando desejado Conforme visto o comando who lista o nome das variaveis que estao sendo usadas ou seja que estao presentes no espaco de trabalho Por sua vez o comando whos fornece informacoes mais detalhadas sobre essas variaveis Estes dois comandos listam as variaveis criadas pelo usuario e as definidas pelo proprio SCILAB Por exemplo no inıcio de uma sessao quando o usuario criou apenas as variaveis a b C e d temse a 25 b 12 32 54 C 21 34 61 93 d caracteres a 25 b 12 32 54 C 21 34 128 Capıtulo 7 Comandos de entrada e saıda 61 93 d caracteres whos Name Type Size Bytes whos function 9000 d string 1 by 1 64 C constant 2 by 2 48 b constant 1 by 3 40 a constant 1 by 1 24 M constant 5 by 2 96 algumas variaveis foram removidas da lista t boolean 1 by 1 24 f boolean 1 by 1 24 eps constant 1 by 1 24 io constant 1 by 2 32 i constant 1 by 1 32 e constant 1 by 1 24 pi constant 1 by 1 24 As variaveis no espaco de trabalho criadas pelo usuario podem ser removidas incondicio nalmente usando o comando clear clear tempo raiz remove as variaveis tempo e raiz clear remove todas as variaveis do espaco de trabalho Atencao nao sera solicitada a confirmacao Todas as variaveis estarao irremediavelmente removidas 721 Gravar dados O comando save e usado para gravar as variaveis do espaco de trabalho em um arquivo Sua sintaxe e savenome do arquivovariaveis onde nome do arquivo e uma cadeia de caracteres que especifica o nome do arquivo binario onde variaveis do espaco de trabalho serao gravadas e variaveis e uma lista de nomes que define quais as variaveis do espaco de trabalho criadas pelo usuario serao gravadas no arquivo nome do arquivo As variaveis devem estar separadas por vırgula Se os nomes variaveis nao forem especificados entao todas as variaveis do espacco de trabalho criadas pelo usuario serao salvas Por exemplo considerando as variaveis a b C e d criadas acima savequatrodat salva as quatro variaveis no arquivo quatrodat saveduasdatbd salva as variaveis b e d no arquivo duasdat 72 Espaco de trabalho 129 722 Recuperar dados O comando load e usado para recuperar os dados gravados em um arquivo pelo comando save e colocalos de volta no espaco de trabalho Sua sintaxe e loadnome do arquivovariaveis onde nome do arquivo e variaveis sao os mesmos definidos para o comando save Se o arquivo contiver uma variavel com o mesmo nome de uma ja existente no espaco de trabalho entao o comando load faz com que a variavel do espaco de trabalho seja substituıda pela variavel existente no arquivo clear remove todas as variaveis do espaco de trabalho d novos atribui novo valor a variavel d d novos loadduasdatbd recupera as variaveis b e d do arquivo duasdat d verifica o valor de d ans caracteres 723 Entrada de dados A leitura de dados pelo teclado e feita pelo comando input cuja sintaxe e variavel inputmensagemstring O comando acima exibe a cadeia de caracteres mensagem e espera ate que o usuario forneca o valor de variavel pelo teclado O segundo argumento string ou simplesmente s e opcional e informa que variavel e uma cadeia de caracteres Indice inputentre com o indice entre com o indice 13 Indice 13 cadeia de caracteres com parametro s texto inputfornecer o texto s fornecer o texto programa SCILAB texto programa SCILAB caracteres sem parametro s mas com texto inputfornecer o texto fornecer o texto programa SCILAB texto programa SCILAB 130 Capıtulo 7 Comandos de entrada e saıda 724 Janela de mensagem A interacao SCILAB usuario pode tambem ser feita por meio de janelas de mensagens utilizando comandos tais como x mdialog e x message O comando resultado x mdialogtıtulorotulos ivalores i exibe uma janela contendo a cadeia de caracteres tıtulo com uma mensagem varios vetores de caracteres rotulos i com o nome do iesimo valor requerido e os vetores de caracteres valores i com os valores iniciais sugeridos correspondentes a rotulos i Se for acionado o botao Ok entao resultado recebera os valores sugeridos ou os outros valores digitados caso seja acionado o botao Cancel entao resultado Por exemplo nomes ComprimentoLarguraAltura define os nomes das variaveis nomes Comprimento Largura Altura valorini define os valores iniciais nenhum no caso valorini dimensao xmdialogEntre com as dimensoes nomes valorini abre janela apresenta a janela mostrada na Figura 71 Digitase os valores desejados e pressionase Ok O vetor de caracteres dimensao e apresentado Em seguida converte os caracteres para numeros utilizando a funcao eval ver Secao 44 Execucao de expressoes dimensao 123 456 789 com evaldimensao1 valor numerico do comprimento com 123 lar evaldimensao2 valor numerico da largura lar 456 alt evaldimensao3 valor numerico da altura alt 789 73 Diario 131 Figura 71 Janela do comando x mdialog Por sua vez resultado x messagetıtulobotoes i exibe uma janela contendo a cadeia de caracteres tıtulo com uma mensagem e varios vetores de caracteres botoes i com as opcoes Se for acionado o iesimo botao entao resultado i Se botoes i nao for especificado assumese o valor Ok Por exemplo o comando resp xmessageA matriz e simetrica Usar CholeskySim Nao apresenta a janela mostrada na Figura 72 Se for escolhida a opcao Sim entao a variavel resp recebera o valor 1 resp 1 Figura 72 Janela do comando x message 73 Diario Todos os comandos solicitados pelo usuario e as respostas fornecidas pelo SCILAB com ex cessao de graficos podem ser gravados em um arquivo ASCII para que possam ser impressos ou mesmo incluıdos em algum relatorio como foi feito neste texto 132 Capıtulo 7 Comandos de entrada e saıda Para esta gravacao basta usar o comando diarynome do arquivo a partir do qual a interacao SCILAB usuario sera registrada no arquivo cujo nome e dado pela cadeia de caracteres nome do arquivo A finalizacao do registro e feita por diary0 Por exemplo diarydiario cria o arquivo diario a 1 b sqrteps a 1 b 1490D08 diary0 fecha o arquivo diario O conteudo do arquivo diario e unixmore diario executa o comando more do Linux a 1 b sqrteps a 1 b 1490D08 diary0 fecha o arquivo diario 74 Leitura e gravacao de dados A transferˆencia de dados entre o espaco de trabalho e algum dispositivo de entrada e saıda arquivo em disco impressora etc aumenta a utilizacao do SCILAB visto tornar possıvel por exemplo ate a troca de informacoes com um outro programa 741 Abertura de arquivo A funcao mopen abre um arquivo sendo sua sintaxe idenarqerro mopennome do arquivopermissao Deste modo a funcao mopen associa o nome externo do arquivo dado pela cadeia de carac teres nome do arquivo a unidade idenarq que sera utilizada nos comandos de entrada e saıda no modo especificado pela permissao O escalar erro indica a ocorrˆencia de algum erro Os caracteres permitidos para permissao estao listados na Tabela 72 O caractere b indica que o arquivo e binario Se permissao for omitida entao sera assumido o valor r Caso o comando mopen tenha sucesso ao abrir o arquivo ele retornara o identificador de arquivo idenarq contendo um numero inteiro positivo e o valor de erro sera 0 Em caso de algum erro o valor de erro sera negativo O idenarq e usado com outras rotinas de entrada e saıda para identificar o arquivo no qual as operacoes serao realizadas Por exemplo 74 Leitura e gravacao de dados 133 Tabela 72 Atributos de arquivo permissao Especificacao r ou rb Abre o arquivo para leitura r ou rb Abre o arquivo para atualizacao leitura e escrita mas nao cria o arquivo w ou wb Abre o arquivo para escrita e caso necessario cria o arquivo Porem remove o conteudo do arquivo existente w ou wb Abre o arquivo para atualizacao leitura e escrita e se necessario cria o arquivo Todavia remove o conteudo do arquivo existente a ou ab Cria e abre um arquivo novo ou abre um arquivo ja existente para escrita anexando ao final do arquivo a ou ab Cria e abre um arquivo novo ou abre um arquivo ja existente para atualizacao leitura e escrita anexando ao final do arquivo fiderro mopendadosdatw abre o arquivo dadosdat para escrita erro 0 fid 1 742 Fechamento de arquivo A funcao mcloseidenarq fecha o arquivo previamente aberto pela funcao mopen cujo identificador associado a este arquivo seja idenarq Quando um arquivo e fechado a associacao entre o identificador idenarq e o arquivo fısico nome do arquivo e desfeita mclose1 fecha o arquivo dadosdat ans 0 743 Gravacao em arquivo A funcao mfprintf grava dados formatados em um arquivo e sua sintaxe e mfprintfidenarqformatovariaveis onde a cadeia de caracteres formato contem caracteres alfanumericos eou especificacoes de conversao para gravar no arquivo com identificador associado idenarq a lista contendo variaveis Estas especificacoes de conversao sao delimitadas pelo caracter e uma das letras i e f g ou s de acordo com a Tabela 71 No exemplo abaixo uma tabela contendo x x e ex para 1 x 2 e gerada e gravada no arquivo sqrtexpdat 134 Capıtulo 7 Comandos de entrada e saıda x 1022 define o vetor x tab x sqrtx expx gera a tabela tab tab 1 1 03678794 12 10954451 03011942 14 1183216 02465970 16 12649111 02018965 18 13416408 01652989 2 14142136 01353353 fiderro mopensqrtexpdatw abre arquivo sqrtexpdat para escrita erro 0 fid 1 mfprintffid52f1510f1510f tab escreve tabela no arquivo mclosefid fecha o arquivo ans 0 O conteudo do arquivo sqrtexpdat e unixmore sqrtexpdat executa o comando more do Linux 100 10000000000 03678794412 120 10954451150 03011942119 140 11832159566 02465969639 160 12649110641 02018965180 180 13416407865 01652988882 200 14142135624 01353352832 744 Leitura em arquivo A funcao mfscanf efetua a leitura de dados formatados em um arquivo sendo sua sintaxe tamanhovariaveis mfscanfnumidenarqformato onde idenarq e o identificador associado ao arquivo no qual esta sendo feita a leitura dos dados escritos no formato especificado na cadeia de caracteres formato e o parˆametro opcional num especifica o numero de vezes que o formato e usado Os dados sao con vertidos segundo a cadeia de caracteres formato e atribuıdos a lista variaveis As especificacoes de conversao sao mostradas na Tabela 71 A variavel tamanho retorna o numero de elementos que foram lidos do arquivo com sucesso fid mopensqrtexpdatr abre arquivo para leitura fid 1 nabc mfscanf1fid5f15f15f leitura de 1 linha em 3 variaveis c 74 Leitura e gravacao de dados 135 03678795 b 1 a 1 n 3 vetor mfscanf1fid5f15f15f leitura de 1 linha em 1 vetor vetor 12 10954452 03011942 matriz mfscanf2fid5f15f15f leitura de 2 linhas em 1 matriz matriz 14 1183216 02465970 16 12649111 02018965 A funcao mseeknumeroidenarqposicao e usada para posicionar o acesso a um registro do arquivo cujo identificador seja idenarq A nova posicao e especificada a partir da distˆancia dada pelo numero de bytes do inıcio se posicao set ou da posicao atual se posicao cur ou do fim de arquivo se posicao end Se o parˆametro posicao nao for especificado e assumido o valor set mseek0fid posiciona leitura para o inicio do arquivo matriz mfscanf6fid5f15f15f leitura das 6 linhas em 1 matriz matriz 1 1 03678795 12 10954452 03011942 14 1183216 02465970 16 12649111 02018965 18 13416408 01652989 2 14142135 01353353 Durante o processo de leitura e importante verificar se o ultimo registro do arquivo ja foi lido A funcao meofidenarq faz esta verificacao no arquivo de identificador idenarq Se o ultimo registro ja foi lido entao sera retornado o valor 1 caso contrario 0 sera retornado Continuando o exemplo acima meoffid verifica se fim de arquivo ans 0 nm mfscanf1fid5f15f15f leitura de 1 linha em 1 variavel m n 1 meoffid verifica se fim de arquivo ans 136 Capıtulo 7 Comandos de entrada e saıda 1 mclosefid fecha o arquivo ans 0 75 Exercıcios Secao 71 Formato de exibicao Verificar as diferencas entre os formatos de exibicao para as variaveis a sqrt2 e exp10 x 110 y x e M rand33 71 a M dispa dispM 72 format15e a e x 73 mprintf105f 123e ae 74 mprintf51f x e mprintf51f y 75 Explicar a diferenca de dıgitos entre a variavel tab e o conteudo do arquivo sqrtexpdat na mostrado Secao 743 Secao 72 Espaco de trabalho Observar os resultados dos comandos para controle do espaco de trabalho utilizando as variaveis dos Exercıcios 7175 76 who whos 77 save dados clear who 78 load dados who 79 save esptrabxy clear who 710 load esptrab who x y Secao 73 Diario Entre com os comandos abaixo 75 Exercıcios 137 711 diarymeudiario 712 a 4 713 b log10a 714 diary0 715 Verificar o conteudo do arquivo meudiario Secao 74 Leitura e gravacao de dados 716 Gerar uma tabela com 10 linhas de x senx 0 x π2 e gravala no arquivo senodat 717 Fechar o arquivo senodat gravado no Exercıcio 716 e verificar o seu conteudo 718 Acrescentar o valor π 1 senπ 1 na ultima linha do arquivo senodat e verificar o seu conteudo 719 Abrir o arquivo senodat para leitura e ler a primeira linha 720 Gravar os valores 1 e 2 na ultima linha de senodat e observar o resultado 138 Capıtulo 7 Comandos de entrada e saıda Capıtulo 8 Computacao cientıfica 81 Medidas de tempo O SCILAB provˆe duas maneiras de medir o tempo gasto para executar um conjunto de comandos o tempo de execucao e o tempo de CPU Usando o tictoc e possıvel saber o tempo gasto para a execucao de um grupo de comandos A sua sintaxe e tic comandos variavel toc O tic inicia a contagem do tempo e o toc fornece para variavel o tempo em segundos passado desde o ultimo tic A atribuicao do tempo gasto a variavel e opcional Se o computador estiver executando varias tarefas simultaneamente tictoc pode nao ser uma medida muito confiavel Uma outra medida e obtida por timer que fornece o tempo de CPU unidade central de processamento que e o tempo gasto para execucao de operacoes aritmeticas e logicas Pode ser usado na forma variavel 1 timer comandos variavel 2 timer variavel 1 Por exemplo considere a execucao do programa no arquivo medidassci define duas matrizes aleatorias A grand2500300unf010 B grand3001000unf0100 tic inicia contagem do tempo de execucao t0 timer inicia contagem do tempo de CPU C A B 5 139 140 Capıtulo 8 Computacao cientıfica maximo maxabsdiagC tempocpu timer t0 tempo de CPU tempoexec toc tempo de execucao Os resultados produzidos foram execmedidassci0 tempocpu 763 tempoexec 7815 A diferenca de tempo produzida por tictoc e timer pode ser bem significativa se o com putador estiver executando outros programas ao mesmo tempo Alem disso esses tempos medidos dependerao do computador utilizado 82 Algebra linear Nesta secao serao mostrados alguns comandos do SCILAB relativos aos topicos usualmente abordados em textos de Calculo Numerico Para um conhecimento mais amplo dos comandos do SCILAB com respeito a vetores e matrizes usar os comandos apropos vector e apropos matrix 821 Parˆametros da matriz O SCILAB disponibiliza diversas funcoes para se obter informacoes sobre matrizes tais como normas numero de condicao determinante posto e traco Normas A funcao normvariaveltipo fornece a norma tipo de um vetor ou matriz contido em variavel de acordo com a Tabela 81 No caso de um vetor tipo pode ser qualquer numero inteiro ou real positivo ou negativo Exemplos de normas vetoriais x 1 2 3 4 5 define vetor x normx1 norma de soma de magnitudes ans 15 normx normx2 norma Euclidiana ans 74161985 ans 74161985 Tabela 81 Normas vetoriais e matriciais Sejam v v₁ v₂ vₘ e M m₁₁ m₁₂ m₁ₚ m₂₁ m₂₂ m₂ₚ mₙ₁ mₙ₂ mₘₚ tipo Descrição Nome normvp vₚ p Σᵢ1m vᵢᵖ normaₚ normv2 ou normv v₂ Σᵢ1m vᵢ² norma Euclidiana normvinf v max₁im vᵢ norma de máxima magnitude normM1 M₁ max₁jp Σᵢ1n mᵢⱼ norma de soma máxima de coluna normMinf M max₁in Σⱼ1p mᵢⱼ norma de soma máxima de linha normMfro Mₒ Σᵢ1n Σⱼ1p mᵢⱼ² norma de Frobenius normM2 ou normM max σᵢ valores singulares norma espectral normxinf norma de maxima magnitude ans 5 normxpi norma pi ans 09527515 e normas matriciais A 1 2 3 4 6 1 5 2 1 N 1 1 2 3 1 1 3 2 1 x 13 z 2 normM1 norma de soma maxima de coluna ans 18 normMinf norma de soma maxima de linha ans 24 normAfro norma de Frobenius ans 142 Capıtulo 8 Computacao cientıfica 16881943 normA2 normA norma espectral ans 16848103 ans 16848103 Numero de condicao A funcao condmatriz calcula o numero de condicao de matriz quadrada definido em termos da norma2 ou seja e a razao entre o maior e o menor valor singular condM κ2M M2M12 σmax σmin Para a matrix B 5 3 0 1 8 6 4 2 9 condB numero de condicao ans 26641005 A funcao rcondmatriz fornece uma estimativa do recıproco do numero de condicao de matriz definido em termos da norma1 Se matriz for bemcondicionada entao rcond e proximo de 1 e se ela for malcondicionada rcond sera proximo de 0 Para a matriz B acima r rcondB r 02094488 1r ans 47744361 Determinante A funcao detmatriz calcula o determinante de matriz sendo ela quadrada Na forma mantissaexpoente detmatriz o valor do determinante e apresentado em notacao cientıfica mantissa10expoente Para A e B definidas previamente detB determinante de B ans 399 mantissaexpoente detA determinante de A em notacao cientifica expoente 66613381 mantissa 16 detA ans 6661D16 82 Algebra linear 143 Posto O posto de uma matriz A m n e o numero maximo de vetores linhas ou de vetores colunas de A que sao linearmente independentes sendo postoA minm n No SCILAB o posto de matriz e obtido por rankmatriztolerancia sendo igual ao numero de valores singulares de matriz maiores que tolerancia Se tolerancia nao for dada entao e assumido o valor tolerancia maxm n normmatriz eps Para as matrizes A e B rankA posto de A ans 2 rankA1e20 posto de A com tolerancia 1e20 ans 3 rankB posto de B ans 3 Traco A funcao tracematriz determina o traco de matriz isto e a soma dos elementos da sua diagonal principal Para a matriz A definida anteriormente traceA traco de A ans 15 822 Decomposicoes O SCILAB disponibiliza varios tipos de decomposicoes de matrizes entre as quais LU Cholesky QR e SVD Decomposicao LU A funcao lumatriz faz a decomposicao LU de matriz de dimensao m n usando o metodo de eliminacao de Gauss com pivotacao parcial O uso do comando fatorLfatorUmatrizP lumatriz gera uma matriz triangular inferior unitaria fatorL dimensao m minm n uma matriz triangular superior fatorU dimensao minm n n e uma matriz de permutacoes matrizP dimensao n n tal que matrizP matriz fatorL fatorU Por exemplo M 2 3 5 4 1 1 1 8 6 define a matriz M M 2 3 5 4 1 1 144 Capıtulo 8 Computacao cientıfica 1 8 6 LUP luM decomposicao LU de M P 0 1 0 0 0 1 1 0 0 U 4 1 1 0 775 625 0 0 83225806 L 1 0 0 025 1 0 05 04516129 1 R P M L U verificando que P M L U R 0 0 0 0 0 0 0 0 0 Contudo o uso de dois parˆametros de saıda matrizInfmatrizSup lumatriz gera uma matriz triangular superior matrizSup fatorU e uma matriz triangular in ferior matrizInf tal que matrizP matrizInf fatorL de modo que matriz matrizInf matrizSup Para as matrizes acima TinfTsup luM decomposicao LU de M com dois parametros Tsup 4 1 1 0 775 625 0 0 83225806 Tinf 05 04516129 1 1 0 0 025 1 0 M Tinf Tsup verificando que M Tinf Tsup ans 0 0 0 0 0 0 0 0 0 Tsup U verificando que Tsup U ans 0 0 0 0 0 0 0 0 0 P Tinf L verificando que P Tinf L 82 Algebra linear 145 ans 0 0 0 0 0 0 0 0 0 Decomposicao de Cholesky A funcao fator cholmatriz fatora matriz simetrica definida positiva pelo metodo de Cholesky produzindo uma matriz fator triangular superior tal que fator fator matriz Por exemplo A 4 2 2 2 10 7 2 7 30 define a matriz A A 4 2 2 2 10 7 2 7 30 U cholA calcula o fator U U 2 1 1 0 3 2 0 0 5 A U U verificando que A UU ans 0 0 0 0 0 0 0 0 0 B 1 2 4 2 5 3 4 3 8 define a matriz B B 1 2 4 2 5 3 4 3 8 F cholB calcula o fator F error 29 Matrix is not positive definite Houve um erro porque a matriz B nao e definida positiva Decomposicao QR A funcao qr faz a decomposicao QR de uma matriz de dimensao m n O uso na forma matrizQmatrizRqrmatriz produz uma matriz ortonormal matrizQ de or dem m matrizQmatrizQeyemm e uma matriz triangular superior matrizR com a mesma dimensao mn de matriz de modo que matrizmatrizQmatrizR Sejam A 2 4 3 5 1 7 8 6 define a matriz A 146 Capıtulo 8 Computacao cientıfica A 2 4 3 5 1 7 8 6 QR qrA calcula fatores Q e R R 88317609 54349298 0 98214835 0 0 0 0 Q 02264554 05325844 05445505 06070721 03396831 03211171 05753910 06711366 01132277 07753803 05906262 01926801 09058216 01096497 01534623 03793593 roundQQ verificando que Q e ortonormal ans 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 round A Q R verificando que A QR ans 0 0 0 0 0 0 0 0 Quando os quatro caracteres e forem colocados apos o nome de uma matriz de dimensao m n m n o SCILAB produz uma decomposicao econˆomica de modo que matrizQ tera dimensao m n e matrizR sera n n Para a matriz A acima QeRe qrAe calcula fatores Q e R na forma economica Re 88317609 54349298 0 98214835 Qe 02264554 05325844 03396831 03211171 01132277 07753803 09058216 01096497 roundA Qe Re verificando que A Qe Re ans 0 0 0 0 82 Algebra linear 147 0 0 0 0 A funcao qr possui diversas formas de ser utilizada para maiores informacoes use help qr Decomposicao em valores singulares A funcao svd faz a decomposicao em valores singulares de uma matriz de dimensao m n O comando matrizUmatrizSmatrizV svdmatriz produz uma matriz ortonormal matrizU de ordem m uma matriz diagonal matrizS de dimensao m n contendo os valores singulares de matriz em ordem decrescente e uma matriz ortonormal matrizV de ordem n de modo que matriz matrizU matrizS matrizV Por exemplo A 2 4 3 5 1 7 8 6 define a matriz A A 2 4 3 5 1 7 8 6 USV svdA calcula os fatores U S e V de A V 05257311 08506508 08506508 05257311 S 12476603 0 0 69522923 0 0 0 0 U 0188444 05471902 05445505 06070721 04673105 00110328 05753910 06711366 04351204 06516942 05906262 01926801 07461769 05251246 01534623 03793593 round UU verificando que U e ortonormal ans 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 round VV verificando que V e ortonormal ans 1 0 0 1 round A U S V verificando que A USV 148 Capıtulo 8 Computacao cientıfica ans 0 0 0 0 0 0 0 0 Se os quatro caracteres e forem colocados apos o nome de uma matriz de dimensao m n m n sera computada uma decomposicao econˆomica de modo que matrizU tera dimensao m n matrizS e matrizR serao n n Utilizando a mesma matriz A UeSeVe svdAe calcula os fatores U S e V na forma economica Ve 05257311 08506508 08506508 05257311 Se 12476603 0 0 69522923 Ue 0188444 05471902 04673105 00110328 04351204 06516942 07461769 05251246 round A Ue Se Ve verificando que A UeSeVe ans 0 0 0 0 0 0 0 0 Para se obter apenas os valores singulares de matriz em vetor basta vetor svdmatriz s svdA calcula apenas os valores singulares de A s 12476603 69522923 A funcao svd possui outras formas de ser utilizada para maiores informacoes use help svd 823 Solucao de sistemas Dado um sistema Ax b a solucao x pode ser facilmente calculada pelo SCILAB pelo operador por exemplo para um sistema com matriz simetrica A 4 2 2 2 10 7 2 7 30 matriz dos coeficientes 82 Algebra linear 149 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 nao simetrica 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 824 Inversa A funcao invmatriz calcula a inversa de matriz de ordem n tal que matriz invmatriz eyenn Para a matriz M acima E invB inversa de B E 150 Capıtulo 8 Computacao cientıfica 14166667 0125 05416667 025 0125 0125 08333333 025 00833333 round B E eye33 verificando que B E I ans 0 0 0 0 0 0 0 0 0 825 Autovalores e autovetores Os autovalores sao os zeros do polinˆomio caracterıstico da matriz A funcao poly constroi o polinˆomio caracterı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 polyAx constroi o polinomio caracteristico de A p 2 3 79 78x 17x x raizes rootsp zeros do polinomio caracteristico raizes 1410402 56161546 99734434 A funcao spec permite o calculo do autosistema autovalores e autovetores de uma ma triz de ordem n por um metodo mais eficiente do que construindo o polinˆomio carac terıstico O uso de AutoVetorAutoValorspecmatriz produz uma matriz diagonal AutoValor contendo os autovalores e uma matriz AutoVetor com os cor respondentes autovetores Se a matriz for simetrica entao os autovetores sao mutuamente ortogonais AutoVetor AutoVetor eyenn Para a matriz A acima VetorValor specA calcula os autovalores e autovetores Valor 1410402 0 0 0 56161546 0 0 0 99734434 Vetor 07387367 05462817 03947713 04732062 08374647 02733656 04799416 00151370 08771698 roundVetorVetoreye33 autovetores ortogonais de uma matriz simetrica 83 Interpolacao 151 ans 0 0 0 0 0 0 0 0 0 Para obter apenas os autovalores em vetor basta vetor specmatriz Para a matriz simetrica A definida acima lambda specA calcula apenas os autovalores de A lambda 1410402 56161546 99734434 A funcao spec possui diversas formas de ser utilizada para maiores informacoes use help spec 83 Interpolacao O SCILAB possui funcoes para calculo das diferencas finitas ascendentes e interpolacao unidimensional 831 Calculo das diferencas finitas ascendentes A funcao diffvariavelordemdimensao calcula a diferenca finita ascendente de ordem dada por ordem entre dois elementos de variavel ao longo de dimensao que pode assumir os valores r para linha c para coluna ou para as colunas da matriz variavel colocadas em um vetor Os argumentos ordem e dimensao sao opcionais e seus valores predefinidos sao 1 e respectivamente Para um vetor x 1 2 4 4 7 define o vetor x x 1 2 4 4 7 d1 diffx diferenca de ordem 1 de x d1 1 2 0 3 d2 diffd1 diferenca de ordem 1 de d1 d2 1 2 3 xd2 diffx2 diferenca de ordem 2 de x xd2 1 2 3 No caso de matriz 152 Capıtulo 8 Computacao cientıfica A 15152153 define a matriz A A 1 2 3 4 5 1 4 9 16 25 1 8 27 64 125 L1 diffA1r diferenca de ordem 1 ao longo das linhas L1 0 2 6 12 20 0 4 18 48 100 C1 diffA1c diferenca de ordem 1 ao longo das colunas C1 1 1 1 1 3 5 7 9 7 19 37 61 A colunas da matriz A em um vetor transposto ans column 1 to 12 1 1 1 2 4 8 3 9 27 4 16 64 column 13 to 15 5 25 125 V1 diffA1diferenca de ordem 1 assumindo A em um vetor transposto V1 column 1 to 12 0 0 1 2 4 5 6 18 23 12 48 59 column 13 to 14 20 100 832 Interpolacao unidimensional Dada uma tabela com pares xi yi especificados nos vetores abscissas e ordenadas respectivamente entao os valores de z contidos no vetor interpolar podem ser interpo lados usando a funcao interp1 cuja sintaxe e resultado interp1abscissasordenadasinterpolarmetodo onde a cadeia de caracteres metodo especifica o metodo a ser utilizado na interpolacao sendo parˆametro metodo linear interpolacao linear spline interpolacao por splines cubicos nearest interpolacao usando o vizinho mais proximo Quando o metodo nao for especificado sera assumida uma interpolacao linear Por exemplo sejam cinco pontos da funcao y x4 para 1 x 1 definidos por 84 Integracao numerica 153 x linspace115 abscissas dos pontos y x4 ordenadas Interpolando os valores z 06 e z 07 usando os trˆes metodos interp1xy06 07linear interpolacao linear ans 025 04375 interp1xy06 07spline interpolacao com splines cubicos ans 0144 02695 interp1xy06 07nearest interpolacao com vizinho mais proximo ans 00625 00625 Considerando que os valores exatos sao 064 01296 e 074 02401 o metodo de interpolacao com splines cubicos produziu os melhores resultados para este caso As aproximacoes da funcao y x4 por trˆes funcoes interpoladoras de interp1 podem ser visualizadas pelos comandos x1 linspace1150 abscissas para a interpolacao y1 x14 ordenadas da curva real nea interp1xyx1nearest interpolacao vizinho mais proximo spl interp1xyx1spline interpolacao por splines plotxyoxyx1y1x1neax1spl xgrid1 xtitleMascii233todos de interp1xy gera graficos e grade legendpontoslinearyx4nearestsplines3 coloca legenda A partir dos 50 pontos em x1 foram criados os vetores nea e spl que contˆem as ordenadas obtidas por interpolacao usando os argumentos nearest e splines respectivamente A Figura 81 mostra graficamente os resultados da funcao interp1 Os cinco pontos iniciais estao representados por o Uma interpolacao linear e feita implicitamente desde que o comando plot interliga os pontos por retas O grafico da funcao y x4 esta representado por uma linha solida a aproximacao por polinˆomios com nearest por uma linha tracejada e os splines por uma linha pontilhada Usualmente os splines produzem uma aproximacao mais suave da funcao como pode ser observado neste caso 84 Integracao numerica A funcao integrate calcula numericamente uma integral e sua sintaxe e integratefuncaovariavellim inflim superro abserro rel onde funcao e uma cadeia de caracteres que define a funcao a ser integrada variavel e uma cadeia de caracteres que especifica a variavel de integracao lim inf e lim sup Aproximação de y x4 pela função interp1 85 Exercıcios 155 Integral integratecos3x1x2x15x19 calcula a integral Integral 10251064 A funcao a ser integrada pode tambem estar definida em uma function Seja o arquivo funcsci com o conteudo function y gx y cos3x1x2x15 endfunction Assim para calcular a integral acima usando a function g definida no arquivo funcsci execfuncsci1 carrega a function g do arquivo funcsci Integral integrategx19 calcula a integral Integral 10251064 85 Exercıcios Secao 81 Medidas de tempo 81 82 83 84 85 Secao 82 Algebra linear 86 87 88 89 810 Secao 83 Interpolacao 156 Capıtulo 8 Computacao cientıfica 811 812 813 814 815 Secao 84 Integracao numerica 816 817 818 819 820 Referˆencias Bibliograficas 1 M Abramowitz e I A Stegun Handbook of Mathematical Functions Dover Nova Iorque 1972 2 F F Campos filho Algoritmos Numericos LTC Editora Rio de Janeiro 2a edicao 2007 3 H Farrer C G Becker E C Faria F F Campos filho H F de Matos M A dos Santos e M L Maia Pascal Estruturado LTC Editora Rio de Janeiro 3a edicao 1999 4 H Farrer C G Becker E C Faria H F de Matos M A dos Santos e M L Maia Algoritmos Estruturados LTC Editora Rio de Janeiro 3a edicao 1999 5 N Wirth Algorithms Data Structures Programs PrenticeHall 1976 157 REFERÊNCIAS BIBLIOGRÁFICAS
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
3356
Manual Scilab: Índice e Comandos
Sinais e Sistemas
UNINTER
47
Scilab Manual for Digital Signal Processing
Sinais e Sistemas
UNINTER
1
Atividade Prática em Sinais e Sistemas - Exemplo 1
Sinais e Sistemas
UNINTER
30
Princípios de Telecomunicações: Aula 5 - Escala Logarítmica e Decibéis
Sinais e Sistemas
CEFET/RJ
3
Trabalho de Análise de Sinais e Sistemas: Instruções e Entrega
Sinais e Sistemas
UNA
3
Lista Final-2023-1
Sinais e Sistemas
UTFPR
1
Cálculo da Energia dos Sinais
Sinais e Sistemas
CEFET/RJ
592
Sinais e Sistemas - 2ª Edição
Sinais e Sistemas
CEFET/RJ
1
Atividade de Acompanhamento Filtros Digitais 2023 1
Sinais e Sistemas
UTFPR
55
Princípios de Telecomunicações - Aulas 2 e 3
Sinais e Sistemas
CEFET/RJ
Texto de pré-visualização
Universidade Federal de Minas Gerais Departamento de Ciˆencia da Computacao do ICEx Fundamentos de SCILAB edicao 201008 Frederico F Campos filho agosto de 2010 Prefacio O SCILAB e um software para computacao cientıfica e visualizacao gratuito com codigo fonte aberto e interface para as linguagens FORTRAN e C Ele permite a solucao de problemas numericos em uma fracao do tempo que seria necessario para escrever um programa em uma linguagem como FORTRAN Pascal ou C devido as suas centenas de funcoes matematicas O SCILAB e desenvolvido pelo INRIA Institut National de Recherche en Informatique et en Automatique e ENPC Ecole Nationale des Ponts et Chaussees da Franca Em wwwscilaborg estao disponıveis varias informacoes documentacao e instrucoes de como baixar o programa As versoes do SCILAB estao disponıveis na forma precompilada para diversas plataformas Linux Windows HPUX e Mac OSX Como o codigo fonte tambem esta disponıvel ele pode ser compilado para uso em um computador especıfico O objetivo deste texto e apresentar o SCILAB como uma linguagem de programacao do tada de funcoes nao disponıveis nas linguagens convencionais Por isto este material pode ser utilizado em disciplinas tais como Programacao de Computadores Calculo Numerico Analise Numerica Algebra Linear e quaisquer outras dos cursos de Engenharia e das areas de Ciˆencias Exatas Tambem sao exploradas algumas caracterısticas proprias que mostram por que o SCILAB e uma poderosa ferramenta de apoio ao aprendizado e utilizacao da Computacao Cientıfica O Capıtulo 1 Logica de programacao apresenta uma revisao de logica de programacao ex plicando as estruturas basicas sequencial condicional e de repeticao alem das estruturas de dados fundamentais No Capıtulo 2 Ambiente de programacao e descrito o ambiente de programacao do SCILAB mostrando a janela de comandos e como obter informacoes de co mandos durante a sessao O Capıtulo 3 Estruturas de dados apresenta as estruturas de dados suportadas pelo SCILAB como constantes vetores matrizes hipermatrizes polinˆomios e listas No Capıtulo 4 Expressoes sao mostradas as expressoes aritmeticas logicas e literais bem como o modo de executalas O Capıtulo 5 Graficos e dedicado a elaboracao de graficos bi e tridimensionais No Capıtulo 6 Linguagem de programacao o SCILAB e visto como uma linguagem de programacao sendo mostrado como escrever programas e funcoes estruturas condicionais e de repeticao e depuracao de programas O Capıtulo 7 Comandos de entrada e saıda apresenta os formatos de exibicao gravacao e leitura de variaveis do espaco de trabalho alem de leitura de gravacao de dados em arquivos Finalmente no Capıtulo 8 Computacao cientıfica sao apresentadas funcoes do SCILAB para resolver problemas de Computacao Ci entıfica Sugestoes para aprimorar o presente texto bem como para efetuar correcoes serao bem vindas pelo email ffcamposdccufmgbr Belo Horizonte agosto de 2010 Frederico F Campos filho DCCICExUFMG Sumario 1 Logica de programacao 1 11 Estrutura basica de um algoritmo 1 12 Comandos de entrada e saıda 2 13 Estrutura sequencial 3 14 Variaveis e comentarios 3 15 Expressoes 4 151 Comando de atribuicao 4 152 Expressoes aritmeticas 4 153 Expressoes logicas 7 154 Ordem geral de precedˆencia 8 155 Expressoes literais 9 16 Estruturas condicionais 10 161 Estrutura condicional simples 10 162 Estrutura condicional composta 11 17 Estruturas de repeticao 12 171 Numero indefinido de repeticoes 12 iii iv SUMARIO 172 Numero definido de repeticoes 14 18 Falha no algoritmo 17 19 Modularizacao 17 110 Estruturas de dados 18 1101 Vetores 18 1102 Matrizes 21 1103 Hipermatrizes 23 111 Exercıcios 24 2 Ambiente de programacao 27 21 Janela de comando 27 211 Espaco de trabalho 29 212 Diretorio corrente 30 213 Comando unix 31 22 Comandos de auxılio ao usuario 31 221 Comando help 31 222 Comando apropos 32 223 Menu de barras 33 23 Exercıcios 33 3 Estruturas de dados 35 31 Constantes 35 311 Numericas 35 SUMARIO v 312 Logicas 36 313 Literais 36 32 Variaveis 36 321 Regras para nomes de variaveis 36 322 Comando de atribuicao 37 323 Variaveis especiais 37 33 Vetores 38 34 Matrizes 42 341 Construcao e manipulacao de matrizes 42 342 Funcoes matriciais basicas 45 343 Funcoes para manipulacao de matrizes 48 344 Matrizes elementares 54 35 Hipermatrizes 57 36 Polinˆomios 59 361 Construcao 59 362 Avaliacao 60 363 Adicao e subtracao 60 364 Multiplicacao 60 365 Divisao 61 366 Derivacao 62 367 Calculo de raızes 62 37 Variaveis logicas 63 vi SUMARIO 38 Variaveis literais 64 39 Listas 64 310 Exercıcios 66 4 Expressoes 69 41 Expressoes aritmeticas 69 411 Ordem de precedˆencia 69 412 Expressoes vetoriais 70 413 Expressoes matriciais 72 42 Expressoes logicas 75 43 Expressoes literais 78 431 Conversao de caracteres 78 432 Manipulacao de caracteres 80 44 Execucao de expressoes 86 45 Exercıcios 87 5 Graficos 91 51 Graficos bidimensionais 91 511 Funcao plot 91 512 Funcao fplot2d 94 52 Graficos tridimensionais 97 521 Funcao meshgrid 97 522 Funcao plot3d 98 SUMARIO vii 523 Funcao mesh 101 524 Funcao surf 102 53 Janela de figura 102 54 Exercıcios 103 6 Linguagem de programacao 105 61 Programacao 105 611 Programa 105 612 Subprograma function 107 62 Estruturas condicionais 113 621 Estrutura ifend 113 622 Estrutura ifelseend 113 623 Estrutura ifelseifend 114 624 Estrutura selectcaseend 115 63 Estruturas de repeticao 116 631 Estrutura forend 117 632 Estrutura whileend 118 633 Estrutura com interrupcao no interior 119 64 Depuracao de programa 121 65 Exercıcios 122 7 Comandos de entrada e saıda 125 71 Formato de exibicao 125 viii SUMARIO 72 Espaco de trabalho 127 721 Gravar dados 128 722 Recuperar dados 129 723 Entrada de dados 129 724 Janela de mensagem 130 73 Diario 131 74 Leitura e gravacao de dados 132 741 Abertura de arquivo 132 742 Fechamento de arquivo 133 743 Gravacao em arquivo 133 744 Leitura em arquivo 134 75 Exercıcios 136 8 Computacao cientıfica 139 81 Medidas de tempo 139 82 Algebra linear 140 821 Parˆametros da matriz 140 822 Decomposicoes 143 823 Solucao de sistemas 148 824 Inversa 149 825 Autovalores e autovetores 150 83 Interpolacao 151 SUMARIO ix 831 Calculo das diferencas finitas ascendentes 151 832 Interpolacao unidimensional 152 84 Integracao numerica 153 85 Exercıcios 155 x SUMÁRIO Capıtulo 1 Logica de programacao Segundo Wirth 5 programas de computadores sao formulacoes concretas de algoritmos abstratos baseados em representacoes e estruturas especıficas de dados sendo um algoritmo1 a descricao de um conjunto de comandos que resultam em uma sucessao finita de acoes Para este mesmo autor a linguagem exerce uma grande influˆencia na expressao do pensa mento Portanto um modo mais adequado para a elaboracao de algoritmos deve considerar apenas a expressao do raciocınio logico Alem do mais ao expressar as varias etapas do raciocınio por meio de uma linguagem de programacao o programador e induzido a se pre ocupar com detalhes pouco importantes da linguagem O modelo logico resultante de uma notacao algorıtmica deve ser codificado com facilidade em qualquer linguagem de programacao Assim o uso de uma notacao algorıtmica leva o programador a expressar o seu raciocınio logico independente da linguagem de programacao Uma notacao algorıtmica deve conter um numero mınimo de estruturas de controle sequen cial condicional e de repeticao de modo a serem implementadas facilmente nas linguagens de programacao disponıveis Os algoritmos deste texto sao descritos na notacao utilizada em Algoritmos Numericos 2 a qual e baseada naquela proposta por Farrer e outros 3 4 11 Estrutura basica de um algoritmo Um algoritmo apresenta a seguinte estrutura basica 1Esta palavra deriva do nome do matematico arabe Mohammed ibuMusa alKhowarizmi 800 dC 1 2 Capıtulo 1 Logica de programacao Algoritmo nomedoalgoritmo Objetivo Mostrar a estrutura basica de um algoritmo declaracao das variaveis comandos 1 comandos 2 comandos n fimalgoritmo onde Algoritmo nomedoalgoritmo indica o inıcio do algoritmo denominado nomedoalgoritmo e o seu termino e definido por fimalgoritmo A finalidade do algoritmo e descrita na forma de comentario sendo Objetivo objetivodoalgoritmo As variaveis usadas no algoritmo bem como seus tipos e estruturas sao declaradas por meio da declaracao das variaveis e os comandos i especificam as n acoes a serem executadas pelo algoritmo 12 Comandos de entrada e saıda O comando leia listadevariaveis e usado para indicar que a listadevariaveis esta disponıvel para armazenar os dados lidos em algum dispositivo externo Nao se faz necessario descrever exatamente como os valores dessas variaveis serao fornecidos ao algoritmo Compete ao programador decidir durante a codificacao do programa se os dados serao fornecidos interativamente pelo teclado lidos de um arquivo passados como argumentos de um subprograma ou ate mesmo definidos como constantes dentro do proprio programa Por sua vez o comando 13 Estrutura sequencial 3 escreva listadevariaveis e utilizado para indicar as variaveis cujos valores devem ser escritos em algum dispositivo externo Exemplo 11 Apresenta um algoritmo basico o qual lˆe as variaveis a b e c necessarias a sua execucao e escreve as variaveis x e y em algum dispositivo externo Algoritmo Operacoes aritmeticas Objetivo Somar e subtrair dois numeros leia a b c x a b y b c escreva x y fimalgoritmo Exemplo 12 Exibe um algoritmo para ler uma temperatura em grau Fahrenheit e converter em grau Celsius Algoritmo Converte grau Objetivo Converter grau Fahrenheit em Celsius leia Fahrenheit Celsius Fahrenheit 32 59 escreva Fahrenheit Celsius fimalgoritmo 13 Estrutura sequencial A mais simples das estruturas de controle de um algoritmo e a estrutura sequencial Ela indica que os comandos devem ser executados na ordem em que aparecem No Exemplo 11 o comando x a b e executado seguido pelo comando y b c 14 Variaveis e comentarios Uma variavel corresponde a uma posicao de memoria do computador onde pode ser ar mazenado um valor As variaveis sao representadas por identificadores que sao cadeias de 4 Capıtulo 1 Logica de programacao caracteres alfanumericos Os elementos de vetores e matrizes podem ser referenciados ou por subscritos ou por ındices por exemplo vi ou vi e Mij ou Mi j Um comentario e um texto inserido em qualquer parte do algoritmo para documentalo e aumentar a sua clareza Esse texto e delimitado por chaves texto como por exemplo avaliacao do polinˆomio 15 Expressoes Expressoes sao combinacoes de variaveis constantes e operadores Existem trˆes tipos de ex pressoes aritmeticas logicas e literais dependendo dos tipos dos operadores e das variaveis envolvidas 151 Comando de atribuicao O resultado de uma expressao e armazenado em uma variavel por meio do sımbolo recebe variavel expressao como visto no Exemplo 11 152 Expressoes aritmeticas Expressao aritmetica e aquela cujos operadores sao aritmeticos e cujos operandos sao cons tantes eou variaveis aritmeticas elas visam avaliar alguma formula matematica Os ope radores aritmeticos sao mostrados na Tabela 11 e a Tabela 12 apresenta algumas funcoes matematicas elementares Tabela 11 Operadores aritmeticos Operacao Operador Uso adicao a b mais unario a subtracao a b menos unario a multiplicacao a b divisao a b potenciacao a b 15 Expressoes 5 Tabela 12 Funcoes matematicas Funcao Descricao Funcao Descricao Trigonometricas sen seno cos coseno tan tangente sec secante Exponenciais exp exponencial log10 logaritmo decimal loge logaritmo natural raiz2 raiz quadrada Numericas abs valor absoluto quociente divisao inteira arredonda arredonda em direcao ao in teiro mais proximo sinal sinalx 1 se x0 0 se x0 e 1 se x0 max maior valor resto resto de divisao min menor valor trunca arredonda em direcao a 0 Exemplo 13 A Tabela 13 mostra exemplos de uso das funcoes matematicas numericas E importante observar a diferenca entre as funcoes arredonda e trunca Tabela 13 Resultados de funcoes matematicas numericas Funcao x e y Valor x e y Valor absx 5 5 3 3 arredondax 04 0 05 1 quocientex y 5 e 3 1 3 e 5 0 restox y 5 e 3 2 3 e 5 3 sinalx 2 1 7 1 truncax 11 1 19 1 Ordem de precedˆencia Dada uma expressao matematica ela deve ser escrita em uma forma linear no algoritmo por exemplo t a b c deve ser escrita como t a bc enquanto que a notacao de u a b c e u a bc Ao converter a notacao matematica para a notacao algorıtmica tem que se respeitar a ordem de precedˆencia das operacoes aritmeticas a qual e apresentada na 6 Capıtulo 1 Logica de programacao Tabela 14 Quando duas operacoes tˆem a mesma prioridade efetuase primeiro a operacao mais a esquerda No calculo de u acima foi utilizado parˆenteses para que a adicao fosse efetuada primeiro que a divisao pois a divisao tem precedˆencia sobre a adicao Tabela 14 Ordem de precedˆencia das operacoes aritmeticas Prioridade Operacoes 1a resolver parˆenteses 2a avaliar funcao 3a potenciacao 4a menos e mais unario 5a multiplicacao e divisao 6a adicao e subtracao Exemplo 14 Escrever as expressoes aritmeticas na notacao algorıtmica t a b c d t a bc d x a b c d x a bc d y a b c d1 2 y a bc d 12 E importante verificar o balanceamento dos parˆenteses ou seja o numero de abre parˆenteses tem que ser igual ao numero de fecha parˆenteses Exemplo 15 Avaliar as expressoes aritmeticas do Exemplo 14 para a 1 b 2 c 3 e d 4 arredondando o resultado para cinco casas decimais t a bc d 1 23 4 t 566667 x a bc d 1 23 4 37 x 042857 y a bc d 12 1 23 4 12 1 23 52 1 255 y 136364 15 Expressoes 7 153 Expressoes logicas Expressao logica e aquela cujos operadores sao logicos e cujos operandos sao relacoes eou variaveis do tipo logico Uma relacao e uma comparacao realizada entre valores do mesmo tipo A natureza da comparacao e indicada por um operador relacional definido conforme a Tabela 15 O resultado de uma relacao ou de uma expressao logica e verdadeiro ou falso Tabela 15 Operadores relacionais Relacao Operador Uso igual a a b diferente de a b maior que a b maior ou igual a a b menor que a b menor ou igual a a b Exemplo 16 Avaliar as expressoes logicas para c 1 d 3 x 2 y 3 e z 10 c d 1 3 falso d c x 3 1 2 verdadeiro x y z c 2 3 10 1 verdadeiro Os operadores logicos mostrados na Tabela 16 permitem a combinacao ou negacao das relacoes logicas Tabela 16 Operadores logicos Operacao Operador Uso conjuncao e expressao 1 e expressao 2 disjuncao ou expressao 1 ou expressao 2 negacao nao naoexpressao A Tabela 17 mostra os resultados obtidos com os operadores logicos sendo que V significa verdadeiro e F significa falso Tabela 17 Resultados com operadores logicos a e b ab V F V V F F F F a ou b ab V F V V V F V F nao a a V F F V 8 Capıtulo 1 Logica de programacao Ordem de precedˆencia De modo similar as expressoes aritmeticas as expressoes logicas tambem possuem uma ordem de precedˆencia como mostrado na Tabela 18 Tabela 18 Ordem de precedˆencia das operacoes logicas Prioridade Operacao 1a relacional 2a negacao 3a conjuncao 4a disjuncao Exemplo 17 Avaliar as expressoes logicas abaixo para c 1 d 3 x 2 y 3 e z 10 d c e x y 5 z 3 1 e 2 3 5 10 3 1 e 10 10 V e V verdadeiro x d 2 ou c y z 2 3 2 ou 1 3 10 2 1 ou 4 10 F ou V verdadeiro d x z2 e naod y 3 2 102 e nao3 3 5 5 e naoV V e F falso 154 Ordem geral de precedˆencia Combinando as ordens de precedˆencia das operacoes aritmeticas e logicas temse uma ordem geral de precedˆencia das operacoes matematicas como apresentada na Tabela 19 15 Expressoes 9 Tabela 19 Ordem de precedˆencia das operacoes matematicas Prioridade Operacoes 1a 2a funcao 3a 4a e unario 5a e 6a e 7a e 8a nao 9a e 10a ou Exemplo 18 Avaliar as expressoes abaixo para a 1 b 2 e c 3 a 52 b 6 c e 4 c 15 1 52 2 6 3 e 4 3 15 62 20 e 12 15 36 20 e F F e F falso a bc bc a ou a b c 5 1 23 23 1 ou 1 2 3 5 1 7 ou 5 5 V ou V verdadeiro c a2 b a e b cb 1 b c4 3 12 2 1 e 2 32 1 2 34 35 1 e 29 125 V e F falso 155 Expressoes literais Uma expressao literal e formada por operadores literais e operandos os quais sao constantes eou variaveis do tipo literal Operacoes envolvendo literais tais como concatenacao in sercao busca etc geralmente sao realizadas por meio de funcoes disponıveis nas bibliotecas das linguagens de programacao O caso mais simples de uma expressao literal e uma constante literal a qual e constituıda por uma cadeia de caracteres delimitada por apostrofo por exemplo mensagem matriz singular 10 Capıtulo 1 Logica de programacao 16 Estruturas condicionais Os algoritmos apresentados nos Exemplos 11 e 12 utilizam apenas a estrutura sequencial Ela faz com que os comandos sejam executados na ordem em que aparecem Uma estrutura condicional possibilita a escolha dos comandos a serem executados quando certa condicao for ou nao satisfeita alterarando assim o fluxo natural de comandos A condicao e representada por uma expressao logica As estruturas condicionais podem ser simples ou compostas 161 Estrutura condicional simples Esta estrutura apresenta a forma se condicao entao comandos fimse Neste caso a lista de comandos sera executada se e somente se a expressao logica condicao tiver como resultado o valor verdadeiro Exemplo 19 Fazer um algoritmo para calcular o logaritmo decimal de um numero positivo Algoritmo Logaritmo decimal Objetivo Calcular logaritmo decimal de numero positivo leia x se x 0 entao Log log10x escreva x Log fimse fimalgoritmo Os comandos Log log10x e escreva x Log so serao executados se a variavel x contiver um valor maior que 0 Exemplo 110 Escrever um algoritmo para ler dois numeros e escrevˆelos em ordem decres cente 16 Estruturas condicionais 11 Algoritmo Ordem decrescente Objetivo Escrever dois numeros dados em ordem decrescente leia m n se m n entao aux m m n n aux fimse escreva m n fimalgoritmo Havera a troca entre as variaveis m e n por meio dos trˆes comandos aux m m n e n aux se e somente se a variavel m contiver um valor menor que n 162 Estrutura condicional composta No caso de haver duas alternativas possıveis deve ser usada uma estrutura da forma se condicao entao comandos 1 senao comandos 2 fimse Se a expressao logica condicao tiver como resultado o valor verdadeiro entao a sequˆen cia comandos 1 sera executada e a sequˆencia comandos 2 nao sera executada Por outro lado se o resultado de condicao for falso entao sera a lista comandos 2 a unica a ser executada Exemplo 111 Elaborar um algoritmo para verificar se um numero esta dentro de um dado intervalo por exemplo se 1 a 5 Algoritmo Intervalo Objetivo Verificar se um numero pertence ao intervalo 1 5 leia a se a 1 e a 5 entao escreva a pertence ao intervalo 1 5 senao escreva a nao pertence ao intervalo 1 5 fimse fimalgoritmo 12 Capıtulo 1 Logica de programacao O comando escreva a pertence ao intervalo sera executado se e somente se a variavel a contiver um valor maior ou igual a 1 e menor que 5 Caso contrario se a for menor que 1 ou maior ou igual a 5 entao escreva a nao pertence ao intervalo sera o unico comando executado Exemplo 112 Elaborar um algoritmo para avaliar as funcoes modulares fx 2x e gx 5x Algoritmo Funcoes modulares Objetivo Avaliar duas funcoes modulares leia x se x 0 entao fx 2 x gx 5 x senao fx 2 x gx 5 x fimse escreva x fx gx fimalgoritmo Se a variavel x contiver um valor positivo ou nulo entao os dois comandos fx 2 x e gx 5 x serao executados seguindose o comando escreva x fx gx No entanto se x contiver um valor negativo os comandos fx 2 x gx 5 x e escreva x fx gx serao os unicos a serem executados 17 Estruturas de repeticao Uma estrutura de repeticao faz com que uma sequˆencia de comandos seja executada repe tidamente ate que uma dada condicao de interrupcao seja satisfeita Existem basicamente dois tipos dessas estruturas dependendo se o numero de repeticoes for indefinido ou definido 171 Numero indefinido de repeticoes Este tipo de estrutura de repeticao apresenta a forma O comando interrrompa faz com que o fluxo de execução seja transferido para o comando imediatamente a seguir do fimrepita Assim as listas comandos1 e comandos2 serão repetidas até que a expressão lógica condição resulte no valor verdadeiro Quando isso ocorrer a repetição será interrompida comandos2 não será executada e a lista comandos3 após ao fimrepita será executada Exemplo 113 Elaborar um algoritmo para calcular a a 0 utilizando o processo banilônico baseado na fórmula de recorrência 2 xk1 xk axk 05 para x0 0 Algoritmo Raizquadrada Objetivo Calcular a raiz quadrada de um número positivo leia a z valor para calcular a raiz quadrada e valor inicial i 0 repita i i 1 x z az 05 se absx z 1010 ou i 20 então interrrompa fimse z x fimrepita teste de convergência se absx z 1010 então escreva x raiz quadrada de a senão escreva processo não convergiu com 20 iterações fimse fimalgoritmo 14 Capıtulo 1 Logica de programacao E gerada uma sequˆencia de valores em x que e interrompida quando a diferenca entre dois valores consecutivos for menor que a tolerˆancia 10 10 ou atingir 20 iteracoes O teste de convergˆencia verifica qual das duas condicoes foi satisfeita se for a primeira entao o processo convergiu Exemplo 114 Escrever um algoritmo para determinar o maior numero de ponto flutuante que somado a 1 seja igual a 1 Algoritmo Epsilon Objetivo Determinar a precisao da maquina Epsilon 1 repita Epsilon Epsilon2 se Epsilon 1 1 entao interrompa fimse fimrepita escreva Epsilon fimalgoritmo Esta sequˆencia faz com que seja calculada a chamada precisao da maquina ε Quando a variavel Epsilon assumir um valor que adicionado a 1 seja igual a 1 entao a estrutura repitafimrepita e abandonada e o comando escreva Epsilon sera executado A forma repitafimrepita e o caso geral de uma estrutura de repeticao Se a lista comandos 1 nao existir tersea uma estrutura de repeticao com interrupcao no inıcio estrutura while Similarmente se nao houver a lista comandos 2 entao sera uma estrutura com interrupcao no final estrutura repeatuntil 172 Numero definido de repeticoes Quando se souber com antecedˆencia quantas vezes a estrutura deve ser repetida pode ser usado um comando de forma mais simples para controle valorinicial ate valorfinal passo delta faca comandos fimpara Nesta estrutura inicialmente e atribuıdo a variavel controle o valor de valorinicial e verificado se ele e maior que o valorfinal Se for maior a estrutura parafaca nao sera executada Se for menor ou igual entao os comandos serao executados e a variavel controle será incrementada com o valor de delta Novamente é verificado se a variável controle é maior que o valorfinal se não for maior então os comandos serão executados e assim sucessivamente As repetições se processam até que a variável controle se torne maior que o valorfinal Quando o incremento delta tiver o valor 1 então o passo delta pode ser omitido da estrutura parafaça Exemplo 115 Escrever um algoritmo para mostrar que a soma dos n primeiros números ímpares é igual ao quadrado de n n i12i 1 1 3 5 2n 1 n2 11 Por exemplo para n 5 a variável i assume os valores i 1 2 3 4 e 5 Assim a expressão do somatório 2i 1 gera os n 5 primeiros ímpares 2i 1 1 3 5 7 e 9 cuja soma é 1 3 5 7 9 25 52 Para implementar um somatório se faz necessário o uso de uma variável auxiliar para acumular o resultado da soma de cada novo termo Inicialmente esse acumulador denominado Soma recebe o valor 0 que é o elemento neutro da adição Para cada valor de i é incrementado o valor de 2i 1 como mostrado na tabela i 2i 1 Soma 0 1 1 0 1 1 2 3 1 3 4 3 5 4 5 9 4 7 9 7 16 5 9 16 9 25 Ao final quando i n a variável Soma conterá o valor do somatório n2 52 25 A implementação da notação matemática 11 é mostrada no algoritmo abaixo Algoritmo Primeirosimpares Objetivo Verificar propriedade dos números ímpares leia n Soma 0 para i 1 até n faça Soma Soma 2 i 1 fimpara escreva Soma n² fimalgoritmo A sequência de números ímpares 2i 1 é gerada por uma estrutura parafaça na qual a variável de controle i começa com o valor 1 e é incrementada de 1 até assumir o valor n Essa mesma sequência de números ímpares pode ser gerada pela estrutura similar para j 1 até 2 n 1 passo 2 faça Soma Soma j fimpara Exemplo 116 Elaborar um algoritmo para calcular o fatorial de um número inteiro n sendo n n k1 k 1 2 3 n 12 Para n 4 por exemplo a variável k assume os valores k 1 2 3 e 4 A expressão do produtório resulta em 4 1 2 3 4 24 Como no caso do somatório para implementar um produtório é necessário uma variável auxiliar para acumular o resultado do produto de cada termo Esse acumulador recebe inicialmente o valor 1 que é o elemento neutro da multiplicação Para cada valor de k o acumulador denominado Fatorial é multiplicado por k conforme esquematizado na tabela k Fatorial 1 1 1 1 1 1 2 1 2 2 2 3 2 3 6 3 4 6 4 24 Quando k n a variável Fatorial conterá o valor do produtório que é igual a n A implementação da notação matemática 12 é apresentada no algoritmo abaixo Algoritmo Fatorial Objetivo Calcular o fatorial de um número inteiro leia n Fatorial 1 Fatorial Fatorial k fimpara escreva n Fatorial fimalgoritmo 18 Falha no algoritmo 17 Esse algoritmo utiliza a estrutura de repeticao para faca Inicialmente a variavel de controle k recebe o valor 2 para evitar a operacao desnecessaria 1 1 se k 1 Se n 1 entao a estrutura parafaca nao sera executada mas tersea o resultado correto 1 1 18 Falha no algoritmo O comando abandone e usado para indicar que havera uma falha evidente na execucao do algoritmo isto e uma condicao de erro Por exemplo uma divisao por zero uma singularidade da matriz ou mesmo o uso inapropriado de parˆametros Neste caso a execucao deve ser cancelada 19 Modularizacao A tecnica de modularizacao consiste em subdividir o algoritmo principal em modulos for mados por um subconjunto de comandos cada qual com um objetivo bem especıfico Uma grande vantagem da modularizacao e a utilizacao de um mesmo modulo por outros algorit mos que requeiram aquela funcionalidade A interacao entre as variaveis dos modulo e as variaveis do algoritmo principal e realizada pelos parˆametros de entrada e de saıda Os dados necessarios para a execucao de um algoritmo modulo sao declarados por meio do comando parˆametros de entrada listadevariaveis onde listadevariaveis sao os nomes das variaveis separadas por vırgulas contendo os valores fornecidos Por outro lado os valores de interesse calculados pelo algoritmo modulo sao definidos pelo comando parˆametros de saıda listadevariaveis E de responsabilidade do projetista do modulo definir a listadevariaveis em termos de identificadores ordem e numero Exemplo 117 Escrever um modulo baseado no algoritmo de Exemplo 116 que receba como parˆametro de entrada o numero inteiro n e retorne como parˆametro de saıda o fatorial desse numero na variavel Fatorial 18 Capıtulo 1 Logica de programacao Algoritmo Calcula fatorial Objetivo Calcular o fatorial de um numero inteiro parˆametro de entrada n numero inteiro parˆametro de saıda Fatorial fatorial do numero inteiro Fatorial 1 para k 2 ate n faca Fatorial Fatorial k fimpara fimalgoritmo A forma de chamada do modulo acima pelo modulo principal depende da linguagem de programacao escolhida Essa forma pode ser por exemplo Algoritmo Fatorial principal Objetivo Utilizar o modulo Calcula fatorial leia n numero inteiro Fatorial Calcula fatorialn chamada do modulo escreva Fatorial fatorial do numero inteiro fimalgoritmo 110 Estruturas de dados Conforme visto na Secao 14 Variaveis e comentarios uma variavel corresponde a uma posicao de memoria do computador onde esta armazenado um determinado valor Ela e representada por um identificador que e uma cadeia de caracteres alfanumericos Quando se faz referˆencia a um identificador na realidade esta tendo acesso ao conteudo de uma posicao de memoria Quando se tem varias variaveis com o conteudo do mesmo tipo elas podem ser agrupadas em uma unica variavel sendo cada conteudo individualizado por ındices Por isso elas sao denominadas variaveis compostas homogˆeneas e as mais comuns sao os vetores com um unico ındice e as matrizes com dois ou mais ındices 1101 Vetores Vetores ou arranjos sao variaveis homogˆeneas unidimensionais ou seja sao variaveis agrupa das em um unico nome cujos elementos sao individualizados por um so ındice Por exemplo sejam as notas de 45 alunos referentes a Prova 1 da disciplina Analise Numerica mostradas na tabela abaixo sendo nc o numero de chamada de cada aluno O vetor Notas contém 45 elementos cada um referenciando a nota da Prova 1 de cada aluno Desta forma Notas1 15 é a nota do aluno 1 da lista de chamada Notas2 19 é a nota do aluno 2 da lista e assim sucessivamente até que Notas45 17 é a nota do aluno 45 Por exemplo para obter a nota média da Prova 1 basta calcular Notamédia 145 i145 Notasi 145 15 19 12 17 A Figura 11 mostra um algoritmo para determinar o maior elemento de um vetor x de tamanho n 110 Estruturas de dados 21 1102 Matrizes Matrizes sao variaveis homogˆeneas bidimensionais isto e sao variaveis agrupadas em um unico nome com os elementos individualizados por meio de dois ındices Para exemplificar considere a tabela abaixo com as notas de 45 alunos referentes as Provas 1 2 3 e 4 da disciplina Analise Numerica onde nc e o numero de ordem na chamada de cada aluno Notas Analise Numerica nc Prova 1 Prova 2 Prova 3 Prova 4 1 15 12 17 10 2 19 20 18 20 3 12 19 17 18 4 20 20 20 20 5 18 13 20 19 6 20 19 19 20 7 13 17 14 18 8 19 20 20 17 45 17 12 10 16 Para referenciar a nota de cada aluno em cada prova sao necessarios doisındices O primeiro ındice indica qual aluno entre os quarenta e cinco e o segundo ındice especifica qual das quatro provas Por isso a matriz Notas contem 45 linhas referentes a cada aluno e 4 colunas indicando cada uma das provas Assim Notas1 1 15 e a nota do aluno 1 na Prova 1 Nota2 3 18 e a nota do aluno 2 na Prova 3 e Notas45 4 16 e a nota do aluno 45 na Prova 4 Exemplo 121 O algoritmo da Figura 14 calcula a soma das linhas da matriz A de dimensao m n Exemplo 122 A Figura 15 apresenta um algoritmo para determinar o maior elemento em cada linha de uma matriz A de dimensao m n Algoritmo Vetormaior Objetivo Determinar o maior elemento de um vetor parâmetros de entrada n x tamanho do vetor e o vetor parâmetro de saída Maior Maior elemento do vetor Maior x1 para i 2 até n faça se xi Maior então Maior xi fimse fimpara fimalgoritmo 22 Capıtulo 1 Logica de programacao Algoritmo Matriz soma linha Objetivo Calcular a soma de cada linha da matriz parˆametros de entrada m n A numero de linhas numero de colunas e elementos da matriz parˆametro de saıda SomaLinha vetor contendo a soma de cada linha para i 1 ate m faca SomaLinhai 0 para j 1 ate n faca SomaLinhai SomaLinhai Ai j fimpara fimpara fimalgoritmo Figura 14 Algoritmo para calcular a soma das linhas de uma matriz Algoritmo Matriz maior Objetivo Determinar maior elemento em cada linha da matriz parˆametros de entrada m n A numero de linhas numero de colunas e elementos da matriz parˆametro de saıda Maior vetor contendo o maior elemento de cada linha para i 1 ate m faca Maiori Ai 1 para j 2 ate n faca se Ai j Maiori entao Maiori Ai j fimse fimpara fimpara fimalgoritmo Figura 15 Algoritmo para determinar o maior elemento da linha de uma matriz Nesse caso para referenciar a nota de cada aluno em cada prova e em cada disciplina na mesma variável Nota são necessários agora três índices O primeiro índice indica qual aluno entre os quarenta e cinco o segundo índice especifica qual das quatro provas e o terceiro estabelece qual das duas disciplinas entre Análise Numérica e AEDS III Assim a hipermatriz tridimensional Notas contém duas páginas uma para cada disciplina terceiro índice com cada página contendo 45 linhas referentes a cada aluno primeiro índice e com 4 colunas indicando cada uma das provas segundo índice Por exemplo Notas3 2 1 19 é a nota do aluno 3 na Prova 2 em Análise Numérica enquanto que Nota8 4 2 20 é a nota do aluno 8 na Prova 4 de AEDS III 111 Exercıcios 25 Secao 17 Estruturas de repeticao Fazer um algoritmo para calcular uma expressao abaixo 111 S 1 2 3 4 5 6 9 10 112 T 30 29 1 28 27 2 26 25 3 2 1 15 113 N 1 1 2 4 3 9 4 16 12 144 114 F 1 2 3 4 5 6 n 115 P 13 1 33 2 53 3 193 10 Elaborar um algoritmo para ler um argumento e calcular uma funcao elementar abaixo apro ximada por serie de potˆencias 1 A serie deve ser truncada quando um termo for menor que 1010 ou atingir 1000 termos Essas expansoes em serie geralmente sao muito ineficientes para aproximar funcoes pois requerem um numero elevado de termos No entanto elas possibilitam otimos exemplos para uso das estruturas de repeticao 116 logex x 1 x 12 2 x 13 3 para 0 x 2 117 expx 1 x 1 x2 2 x3 3 118 senx x x3 3 x5 5 x7 7 119 cosx 1 x2 2 x4 4 x6 6 120 arcsenx x 1 2 x3 3 1 3 2 4 x5 5 1 3 5 2 4 6 x7 7 para x 1 Secao 19 Modularizacao Converter os algoritmos dos exemplos abaixo que utilizam os comandos leia e escreva em modulos com parˆametros de entrada e de saıda 121 Exemplo 113 122 Exemplo 118 123 Exemplo 120 124 Exemplo 121 125 Exemplo 123 Capıtulo 2 Ambiente de programacao O SCILAB e executado por meio do script scilab no diretorio SCIDIRbin sendo que SCIDIR denota o diretorio onde o programa foi instalado A interacao entre o SCILAB e o usuario e feita por intermedio de uma janela na qual um comando e fornecido interpretado e exibido o resultado Neste capıtulo sera descrita a janela de comando do SCILAB e seus comandos basicos bem como os meios que o programa tem de auxiliar o usuario durante a sessao no caso de duvida sobre a sintaxe ou mesmo a existˆencia de algum comando 21 Janela de comando Para executar o SCILAB em ambiente Windows ou Macintosh o cursor deve ser colocado sobre o seu ıcone e pressionado o botao da esquerda do mouse ou entao no caso de ambi ente Linux entrar com o comando scilab ou scilab nw no window em uma janela de comando Sem a opcao nw aparecera uma nova janela pela qual sera feita a interacao entre o SCILAB e o usuario ver Figura 21 Se for utilizada a opcao nw a janela do SCILAB aparecera na propria janela de comando ver Figura 22 O sinal de que o programa esta pronto para receber um comando e indicado pelo prompt formado pelos trˆes caracteres Um comando e finalizado acionandose a tecla Enter ou Return Se um comando for muito longo entao trˆes pontos seguidos do pressionamento da tecla Enter ou Return indica que o comando continuara na proxima linha Varios comandos podem ser colocados em uma mesma linha se eles forem separados por vırgulas ou pontosevırgulas Alem disto as vırgulas indicam ao SCILAB para mostrar os resultados e os pontosevırgulas para suprimir 27 28 Capıtulo 2 Ambiente de programacao Figura 21 Janela de comando da versao 511 do SCILAB sem nw Figura 22 Janela de comando da versao de 511 do SCILAB com nw a exibicao Um texto apos duas barras invertidas e ignorado ele pode ser utilizado como um comentario para a documentacao de um programa 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 modificacao O numero de linhas e colunas a serem exibidas de cada vez na janela de comando pode ser 21 Janela de comando 29 redefinida pelo comando lines Sua sintaxe e linesnumerodelinhasnumerodecolunas onde numerodelinhas e numerodecolunas definem o numero de linhas e colunas respectivamente a serem exibidas sendo o segundo argumento opcional O comando e desativado por lines0 O comando clc e usado para limpar a janela de comando1 e tohome posiciona o cursor no canto superior esquerdo da janela de comando O termino de execucao do SCILAB e feito pelos comandos quit ou exit Quando o SCILAB for ativado os comandos contidos no arquivo scilabini sao automati camente executados caso ele exista para que sejam atribuıdos valores a alguns parˆametros Deste modo o usuario pode criar um arquivo contendo por exemplo definicao de constantes matematicas e fısicas formatos de exibicao ou quaisquer comandos do SCILAB para perso nalizar a sua janela de comando Este arquivo deve ser criado em um diretorio especıfico dependendo do sistema operacional utilizado use help startup para mais informacoes A abrangˆencia e potencialidade do SCILAB esta muito alem do que sera mostrado neste texto por isso e aconselhavel executar a opcao Scilab Demonstrations dentro da opcao no canto superior a direita1 para visualizar uma demonstracao e se ter uma ideia dessa potencialidade 211 Espaco de trabalho As variaveis criadas durante uma sessao ficam armazenadas em uma memoria denominada espaco de trabalho O comando who lista o nome das variaveis que estao sendo usadas ou seja que estao presentes no espaco de trabalho Este comando lista as variaveis criadas pelo usuario e as definidas pelo proprio SCILAB Por exemplo no inıcio de uma sessao quando o usuario criou apenas uma variavel a 1 cria a variavel a com o valor 1 a 1 who Your variables are a home matiolib parameterslib simulatedannealinglib geneticalgorithmslib umfpacklib fft scicospal scicosmenu scicosshort scicoshelp scicosdisplaymode modelicalibs scicospallibs scicoslhblist CmenuTypeOneVector scicosgif scicoscontrib scicosmenuslib scicosutilslib scicosautolib spreadsheetlib demotoolslib developmenttoolslib scilab2fortranlib scipadinternalslib scipadlib soundlib texmacslib tclscilib m2scilib maple2scilablib metanetgraphtoolslib metaneteditorlib compatibilityfunctilib statisticslib timelib stringlib specialfunctionslib sparselib signalprocessinglib z s 1Quando o SCILAB for executado sem a opcao nw 30 Capıtulo 2 Ambiente de programacao polynomialslib overloadinglib optimizationlib linearalgebralib jvmlib iolib interpolationlib integerlib dynamiclinklib guilib datastructureslib cacsdlib graphicexportlib graphicslib fileiolib functionslib elementaryfunctionlib differentialequationlib helptoolslib corelib PWD F T nan inf COMPILER SCI SCIHOME TMPDIR MSDOS gui pvm tk fftw t f eps io i e pi using 33369 elements out of 5000000 and 86 variables out of 9231 Your global variables are modalWarning demolist helps helpsmodules driverName exportFileName LANGUAGE toolboxes toolboxesdir using 2681 elements out of 5000001 and 9 variables out of 767 212 Diretorio corrente Diretorio corrente e aquele considerado em uso sem ser necessario especificalo explicita mente durante uma acao Para saber qual o diretorio de trabalho corrente utilizase o comando pwd pwd mostra o diretorio de trabalho corrente ans ffcampos O resultado exibido depende do diretorio de onde o SCILAB foi executado O diretorio corrente pode ser alterado por meio do comando cd cd scilab muda o diretorio de trabalho corrente para scilab ans ffcamposscilab O SCILAB fornece diversos comandos para gerenciamento de arquivos os quais sao mostra dos na Tabela 21 Tabela 21 Comandos para gerenciamento de arquivos Comando Descricao dir ou ls lista os arquivos do diretorio corrente mdeletenome do arquivo remove o arquivo nome do arquivo cd dir ou chdir dir muda o diretorio para dir pwd mostra o diretorio corrente 22 Comandos de auxılio ao usuario 31 213 Comando unix O comando unixcomando do unix permite a execucao de um comando do sistema operacional Unix dentro do SCILAB Por exemplo caso o arquivo precisaosci exista no diretorio corrente o seu conteudo e exibido pelo comando unixmore precisaosci lista conteudo do arquivo programa precisao Objetivo determinar a precisao de um computador n 0 Epsilon 1 while 1 Epsilon 1 n n 1 Epsilon Epsilon 2 end n Epsilon eps 22 Comandos de auxılio ao usuario O SCILAB possui muito mais comandos do que aqueles apresentados neste texto o que torna mais difıcil lembralos Com o intuito de auxiliar o usuario na procura de comandos o programa provˆe assistˆencia por intermedio de suas extensivas capacidades de auxılio direto Estas capacidades estao disponıveis em trˆes formas o comando help o comando apropos e interativamente por meio de um menu de barras 221 Comando help O comando help e a maneira mais simples de obter auxılio no caso de conhecer o topico em que se quer assistˆencia Sua sintaxe e help topico onde topico e o nome da funcao ou de diretorio Por exemplo quando se usa help sqrt abrese uma janela como a mostrada na Figura 23 Assim sao dadas informacoes sobre a funcao sqrt para extrair raiz quadrada O comando help funciona a contento quando se conhece exatamente o topico sobre o qual quer as sistˆencia Considerando que muitas vezes este nao e o caso o help pode ser usado sem topico para apresentar uma pagina de hipertexto contendo a lista de ıtens disponıveis O comando help e mais conveniente se o usuario conhecer exatamente o topico em que deseja auxılio No caso de nao saber soletrar ou mesmo desconhecer um topico as outras duas formas de assistˆencia sao muitas vezes mais proveitosas 32 Capıtulo 2 Ambiente de programacao Figura 23 Janela do comando help 222 Comando apropos O comando apropos provˆe assistˆencia pela procura em todas as primeiras linhas dos topicos de auxılio e retornando aquelas que contenham a palavrachave especificada O mais impor tante e que a palavrachave nao precisa ser um comando do SCILAB Sua sintaxe e apropos palavrachave onde palavrachave e a cadeia de caracteres que sera procurada nos comandos do SCI LAB Por exemplo para informacoes sobre fatorizacao teclase apropos factorization resultando em uma tela com pagina dupla A pagina da esquerda apresenta as classes de funcoes do SCILAB que contem pelo menos uma funcao com a descricao de factorization A segunda pagina mostra dentro de uma classe quais as funcoes que apresentam a palavra factorization em sua descricao A escolha da classe Linear Algebra por exemplo re sulta em uma tela como mostrada na Figura 24 Apesar de a palavra factorization nao ser um comando do SCILAB ela foi encontrada na descricao de varias funcoes Um clique sobre uma das linhas da pagina a esquerda escolhe a classe de funcoes e um clique sobre uma funcao da pagina a direita descreve aquela funcao especıfica como um comando help Por exemplo a escolha de chfact sparse Cholesky factorization e equivalente ao comando help chfact 23 Exercıcios 33 Figura 24 Janela do comando apropos 223 Menu de barras Quando o SCILAB for executado sem a opcao nw um auxılio por intermedio de menu dirigido e disponıvel selecionando a opcao Help Browser indicada por um dentro de um cırculo ultimo ıcone a direita no menu de barras como visto na Figura 21 Como o uso desta forma de assistˆencia e bem intuitivo o melhor a fazer e experimentar 23 Exercıcios Secao 21 Janela de comando 21 Executar o programa SCILAB 22 Verificar a diferenca entre e nos comandos pi1 pi10 e pi1 pi10 23 Testar o funcionamento das teclas e 24 Ver o funcionamento das teclas e 25 Verificar a diferenca entre lines20 lines e lines0 Secao 22 Comandos de auxılio ao usuario 26 Quantos parˆametros tem a funcao erro erf 27 Quais sao os comandos utilizados para interpolacao interpolation 34 Capıtulo 2 Ambiente de programacao 28 Qual o comando usado para calcular o determinante determinant de uma matriz 29 Qual o comando para achar raızes roots de uma equacao polinomial 210 Comparar a soma dos autovalores eigenvalues com o traco trace de uma matriz de ordem qualquer Fazer a mesma comparacao usando uma matriz com elementos aleatorios Capıtulo 3 Estruturas de dados Neste capıtulo serao apresentados alguns ıtens basicos tais como constantes variaveis vetores matrizes hipermatrizes polinˆomios e listas o que tornara possıvel o uso imediato do SCILAB no modo interativo Alem disto o conhecimento sobre as estruturas de dados e fundamental para um uso eficiente do programa 31 Constantes O SCILAB suporta trˆes tipos de constantes numericas logicas e literais 311 Numericas Uma constante numerica e formada por uma sequˆencia de dıgitos que pode estar ou nao precedida de um sinal positivo ou um negativo e pode conter um ponto decimal Esta sequˆencia pode terminar ou nao por uma das letras e E d ou D seguida de outra sequˆencia de dıgitos precedida ou nao de um sinal positivo ou um negativo Esta segunda sequˆencia e a potˆencia de 10 pela qual a primeira sequˆencia e multiplicada Por exemplo 123e1 significa 123101 0123 e 4567d2 e 4567102 4567 123e1 ans 0123 4567d2 ans 4567 Algumas linguagens de programacao requerem um tratamento especial para numeros com plexos o que nao e o caso do SCILAB Operacoes matematicas com numeros complexos sao escritas do mesmo modo como para numeros reais Para indicar a parte imaginaria basta 35 36 Capıtulo 3 Estruturas de dados acrescentar os trˆes caracteres i ou seja multiplicar por 1 i representado por i 32i ans 3 2i As variaveis reais e complexas em SCILAB ocupam 24 e 32 bytes de memoria respectiva mente 312 Logicas Uma constante logica pode assumir apenas dois valores t ou T true para verdadeiro e f ou F false para falso t valor verdadeiro ans T f valor falso ans F 313 Literais Uma constante literal e composta por uma cadeia de caracteres em vez de numeros ou verdadeiro e falso A cadeia de caracteres deve estar delimitada por aspas ou apostrofos abcde um valor literal ans abcde 32 Variaveis Uma variavel e uma posicao da memoria do computador utilizada para armazenar uma informacao sendo representada por um identificador 321 Regras para nomes de variaveis Como qualquer outra linguagem de programacao o SCILAB tem regras a respeito do nome de variaveis conforme mostrado na Tabela 31 32 Variaveis 37 Tabela 31 Regras para nomes de variaveis Regra Comentario conter ate 24 caracteres caracteres alem do 24o sao ignorados comecar com uma letra seguida de letras numeros ou dos carac teres e alguns caracteres de pontuacao sao permitidos tamanho da letra e diferenciador raiz Raiz e RAIZ sao trˆes variaveis distintas 322 Comando de atribuicao O SCILAB e um interpretador de expressoes A expressao fornecida e analisada sintatica mente e se estiver correta entao sera avaliada O resultado e atribuıdo a uma variavel por intermedio do comando de atribuicao variavel expressao Por exemplo a10251 a 153 Quando o comando de atribuicao for finalizado pelo caracter entao o resultado e atribuıdo a variavel porem o seu conteudo nao e exibido b52 atribuicao sem exibir o resultado b conteudo da variavel b ans 3 Se o nome da variavel e o sinal de atribuicao forem omitidos entao o resultado sera dado a variavel default ans answer 85 ans 16 323 Variaveis especiais O SCILAB tem diversas variaveis especiais as quais sao consideradas como predefinidas nao podendo ser alteradas ou removidas com excessao de ans Elas estao listadas na Tabela 32 Para obter os valores destas variaveis especiais fazse e eps i inf nan pi s 38 Capıtulo 3 Estruturas de dados Tabela 32 Variaveis especiais do SCILAB Variavel Valor ans nome de variavel default usada para resultados e base do logaritmo natural e 271828 eps menor numero de ponto flutuante que adicionado a 1 resulta um numero maior que 1 Seu valor e ǫ 252 222041016 em computadores com aritmetica de ponto flutuante IEEE i i 1 inf infinito por exemplo 10 nan nao e um numero NotANumber por exemplo 00 pi π 3 14159 s usada como variavel de polinˆomio e 27182818 eps 2220D16 i i inf Inf nan Nan pi 31415927 s s 33 Vetores Vetor ou arranjo e um conjunto de variaveis homogˆeneas conteudo de mesmo tipo iden tificadas por um mesmo nome e individualizadas por meio de um ındice No SCILAB um vetor e definido de varias formas por exemplo elemento por elemento separados por espaco em branco ou vırgula e delimitados pelos caracteres e vetor e1 e2 en sendo vetor o nome da variavel e ei o seu iesimo elemento a 5 1503 elementos separados por espaco em branco ou vırgula a 5 15 03 33 Vetores 39 O vetor a possui os elementos a15 a215 e a303 Se os valores do vetor forem igualmente espacados ele pode ser definido por intermedio da expressao vetor valor inicialincrementovalor final Para gerar um vetor com o primeiro elemento igual a 10 o segundo igual a 15 o terceiro igual a 20 e assim sucessivamente ate o ultimo igual a 40 basta o comando b 10540 valor inicial 10 incremento 5 e valor final 40 b 10 15 20 25 30 35 40 Se o incremento desejado for igual a 1 entao ele podera ser omitido u 59 valor inicial 5 incremento 1 e valor final 9 u 5 6 7 8 9 Em vez de usar incremento um arranjo pode tambem ser construıdo definindo o numero desejado de elementos na funcao linspace cuja sintaxe e vetor linspacevalor inicialvalor finalnumero de elementos Assim para criar um arranjo com o primeiro elemento igual a 10 o ultimo igual a 40 e possuindo 7 elementos valor inicial 10 valor final 40 e elementos 7 c linspace10407 c 10 15 20 25 30 35 40 Isto produz um vetor idˆentico a b10540 definido acima Se no comando linspace o parˆametro numero de elementos for omitido entao serao gerados 100 pontos No caso de numeros complexos os incrementos sao feitos separadamente para a parte real e para a parte imaginaria valor inicial 1i valor final 24i e elementos 5 d linspace1i24i5 d 1 i 125 175i 15 25i 175 325i 2 4i Os elementos podem ser acessados individualmente por exemplo para o vetor c definido acima c2 segundo elemento de c ans 15 ou em blocos usando os comandos de definicao de arranjos 40 Capıtulo 3 Estruturas de dados c35 terceiro ao quinto elementos ans 20 25 30 Lembrando que 521 gera a sequˆencia 5 3 1 entao c521 quinto terceiro e primeiro elementos ans 30 20 10 O enderecamento indireto e tambem possıvel permitindo referenciar os elementos de um vetor na ordem definida pelos elementos de um outro vetor Por exemplo sejam os vetores c definido acima e ind ind 127 valor inicial 1 incremento 2 e valor final 7 ind 1 3 5 7 Assim ind4 2 produz um vetor contendo os elementos 4 e 2 do vetor ind ou seja 7 3 Por sua vez cind4 2 vetor c indexado pelo vetor ind ans 40 20 e equivalente a c7 3 ou seja o vetor gerado contem os elementos 7 e 3 do vetor c Nos exemplos acima os vetores possuem uma linha e varias colunas por isto sao tambem chamados vetores linha Do mesmo modo podem existir vetores coluna ou seja vetores com varias linhas e uma unica coluna Para criar um vetor coluna elemento por elemento estes devem estar separados por vetor e1 e2 en Deste modo para gerar um vetor coluna com os elementos 15 32 e 89 v 153289 elementos separados por pontoevırgula v 15 32 89 Por isto separando os elementos de um vetor por brancos ou vırgulas sao especificados os elementos em diferentes colunas vetor linha Por outro lado separando os elementos por pontoevırgula especificase os elementos em diferentes linhas vetor coluna Para trans formar um vetor linha em vetor coluna e viceversa usase o operador de transposicao 33 Vetores 41 x v vetor linha obtido pela transposicao de vetor coluna x 15 32 89 y 13 vetor coluna obtido pelo operador de transposicao y 1 2 3 No caso do vetor ser complexo a transposicao e obtida pelo operador pois o uso do operador resultara em um complexo conjugado transposto Por exemplo seja o vetor complexo valor inicial 101i incremento 101i e valor final 303i z 13010103i z 1 01i 2 02i 3 03i o transposto e t z vetor transposto t 1 01i 2 02i 3 03i e o complexo conjugado transposto cc z vetor complexo conjugado transposto cc 1 01i 2 02i 3 03i No caso do vetor nao ser complexo a transposicao pode ser feita usando ou A funcao length e utilizada para saber o comprimento de um vetor ou seja quantos elementos ele possui l lengthz l 3 Por fim devese notar a importˆancia da posicao do caracter branco na definicao de um vetor p12 p 3 p1 2 42 Capıtulo 3 Estruturas de dados p 1 2 p1 2 p 3 p1 2 p 3 34 Matrizes As matrizes sao arranjos bidimensionais homogˆeneos e constituem as estruturas fundamen tais do SCILAB e por isto existem varias maneiras de manipulalas Uma vez definidas elas podem ser modificadas de varias formas como por insercao extracao e rearranjo Similarmente aos vetores para construir uma matriz os elementos de uma mesma linha devem estar separados por branco ou vırgula e as linhas separadas por pontoevırgula ou Enter ou Return matriz e11 e12 e1n e21 e22 e2n em1 em2 emn 341 Construcao e manipulacao de matrizes Para criar uma matriz A com 2 linhas e 3 colunas A 3 2 5 4 7 9 atribui os elementos da matriz A A 3 2 5 4 7 9 Para modificar um elemento basta atribuirlhe um novo valor A128 altera o elemento da linha 1 e coluna 2 A 3 8 5 4 7 9 Cuidado se for atribuıdo um valor a um elemento nao existente ou seja alem dos elementos da matriz entao o SCILAB aumenta esta matriz automaticamente preenchendoa com valores nulos de forma a matriz permanecer retangular A361 atribui valor ao elemento da linha 3 e coluna 6 A 3 8 5 0 0 0 4 7 9 0 0 0 0 0 0 0 0 1 34 Matrizes 43 Seja agora a matriz quadrada B de ordem 3 B 1 2 3 4 5 6 7 8 9 atribui os elementos da matriz B B 1 2 3 4 5 6 7 8 9 De modo similar aos vetores os elementos de uma matriz podem ser referenciados individu almente tal como B23 elemento da linha 2 e coluna 3 ans 6 ou em conjuntos neste caso usando a notacao de vetor Por exemplo os elementos das linhas 1 e 3 e coluna 2 B1 32 elementos das linhas 1 e 3 da coluna 2 ans 2 8 A notacao de vetor valor inicialincrementovalor final tambem pode ser usada ou ate mesmo linspace Lembrando que 311 gera a sequˆencia 3 2 e 1 e 13 produz 1 2 e 3 entao o comando C B31113 obtem a matriz C a partir da inversao das linhas de B C 7 8 9 4 5 6 1 2 3 cria uma matriz C a partir das linhas 3 2 e 1 e colunas 1 2 e 3 de B ou seja cria uma matriz C a partir das linhas de B em ordem contraria Considerando que sao referenciadas todas as 3 colunas de B a notacao simplificada pode ser igualmente usada em vez de 13 C B311 notacao simplificada C 7 8 9 4 5 6 1 2 3 Para criar uma matriz D a partir das linhas 1 e 2 e colunas 1 e 3 de B fazse D B121 3 D 1 3 4 6 44 Capıtulo 3 Estruturas de dados 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 E B C2 3 3 3 E 1 2 3 8 3 4 5 6 5 3 7 8 9 2 3 Para remover uma linha ou coluna de uma matriz usase a matriz vazia Para remover a coluna 3 de E E3 remocao da coluna 3 da matriz E E 1 2 8 3 4 5 5 3 7 8 2 3 E posteriormente para remover a linha 1 E1 remocao da linha 1 da matriz E E 4 5 5 3 7 8 2 3 Quando o sımbolo for usado sozinho para referenciar os doisındices de uma matriz entao e gerado um vetor constituıdo pelas colunas da matriz Seja o vetor vet obtido das colunas da matriz E acima vet E vetor formado pelas colunas da matriz E vet 4 7 5 8 5 2 3 3 O sımbolo e utilizado para indicar o ındice da ultima linha ou coluna da matriz E11 elemento da primeira linha e penultima coluna da matriz E ans 5 34 Matrizes 45 342 Funcoes matriciais basicas O SCILAB tem funcoes que se aplicam aos vetores e as matrizes Algumas destas funcoes basicas sao mostradas na Tabela 33 Tabela 33 Exemplos de funcoes basicas do SCILAB Funcao Descricao size dimensao da matriz length numero de elementos sum soma dos elementos prod produto dos elementos max maior elemento min menor elemento mean media aritmetica stdev desvio padrao Funcao size A funcao size e usada para fornecer o numero de linhas e colunas de uma matriz Ela pode ser usada de duas formas t sizeE t 2 4 onde a variavel t e um vetor linha com duas posicoes contendo o numero de linhas e colunas de E respectivamente A outra forma e lincol sizeE col 4 lin 2 onde as variaveis simples col e lin contem o numero de colunas e linhas de E respectiva mente Funcao length Se a funcao length for usada em uma matriz ela fornecera o numero de elementos da matriz e lengthE e 8 46 Capıtulo 3 Estruturas de dados Se for acrescentado o argumento r row entao a funcao produz um vetor linha obtido dos elementos das colunas da matriz Se o argumento for c column entao sera gerado um vetor coluna a partir dos elementos das linhas da matriz Se nao for usado o argumento extra entao a funcao produz um escalar utilizando todos elementos da matriz Para a matriz A A 1 2 34 5 67 8 9 define os elementos da matriz A A 1 2 3 4 5 6 7 8 9 Funcao sum vetor linha com iesimo elemento soma dos elementos da coluna i da matriz A sumAr ans 12 15 18 vetor coluna com iesimo elemento soma dos elementos da linha i da matriz A sumAc ans 6 15 24 sumA escalar igual a soma dos elementos da matriz A ans 45 Funcao prod vetor linha com iesimo elemento produto dos elementos da coluna i de A prodAr ans 28 80 162 vetor coluna com iesimo elemento produto dos elementos da linha i de A prodAc ans 6 120 504 prodA escalar igual ao produto dos elementos da matriz A ans 362880 Funcao max vetor linha com iesimo elemento maior elemento da coluna i da matriz A maxAr 34 Matrizes 47 ans 7 8 9 vetor coluna com iesimo elemento maior elemento da linha i da matriz A maxAc ans 3 6 9 maxA escalar igual ao maior elemento da matriz A ans 9 Funcao min vetor linha com iesimo elemento menor elemento da coluna i da matriz A minAr ans 1 2 3 vetor coluna com iesimo elemento menor elemento da linha i da matriz A minAc ans 1 4 7 minA escalar igual ao menor elemento da matriz A ans 1 Funcao mean vetor linha com iesimo elemento media dos elementos da coluna i da matriz A meanAr ans 4 5 6 vetor coluna com iesimo elemento media dos elementos da linha i da matriz A meanAc ans 2 5 8 meanA escalar igual a media dos elementos da matriz A ans 5 Funcao stdev vetor linha com iesimo elemento desvio padrao dos elementos da coluna i de A stdevAr 48 Capıtulo 3 Estruturas de dados ans 3 3 3 vetor coluna com iesimo elemento desvio padrao dos elementos da linha i de A stdevAc ans 1 1 1 stdevA escalar igual ao desvio padrao dos elementos da matriz A ans 27386128 343 Funcoes para manipulacao de matrizes O SCILAB possui varias funcoes para manipulacao de matrizes dentre as quais destacamse aquelas mostradas na Tabela 34 Tabela 34 Algumas funcoes para manipulacao de matrizes Funcao Descricao diag inclui ou obtem a diagonal de uma matriz tril obtem a parte triangular inferior de uma matriz triu obtem a parte triangular superior de uma matriz matrix altera a forma de uma matriz sparse cria uma matriz esparsa full cria uma matriz densa gsort ordena os elementos de uma matriz Funcao diag Inclui ou obtem a diagonal de uma matriz sendo sua sintaxe saıda diagargumento k de modo que se argumento for um vetor de dimensao n entao saıda sera uma matriz diagonal contendo os elementos de argumento na diagonal principal o parˆametro inteiro opcional k faz com que saıda seja uma matriz de ordem n absk com os ele mentos de argumento ao longo de sua kesima diagonal para k 0 default e a diagonal principal k 0 e a kesima diagonal superior superdiagonal e k 0 e a kesima diagonal inferior subdiagonal Por exemplo d 1 2 3 define um vetor com 3 elementos d 1 2 3 D diagd cria matriz diagonal de ordem 3 com elementos do vetor d D 34 Matrizes 49 1 0 0 0 2 0 0 0 3 D5 diagd2 cria matriz de ordem 5 com elementos de d na superdiagonal 2 D5 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 Por outro lado se o argumento for uma matriz entao diag cria um vetor coluna com os elementos da kesima diagonal da matriz A 1 2 3 4 5 6 7 8 9 define a matriz A A 1 2 3 4 5 6 7 8 9 d1 diagA1 cria vetor com elementos da subdiagonal 1 de A d1 4 8 d0 diagA cria vetor com elementos da diagonal principal de A d0 1 5 9 cria matriz diagonal com elementos da superdiagonal 1 de A D diagdiagA1 D 2 0 0 6 Funcao tril Obtem a parte triangular inferior de uma matriz cuja sintaxe e saıda trilargumento k sendo argumento uma matriz e o parˆametro inteiro opcional k faz com que saıda seja uma matriz de mesma dimensao de argumento de obtida a partir da kesima diagonal de argumento e os elementos abaixo dela para k 0 default diagonal principal k 0 kesima diagonal superior e k 0 kesima diagonal inferior Por exemplo M 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 define matriz M M 50 Capıtulo 3 Estruturas de dados 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cria matriz triangular inferior a partir da superdiagonal 1 de M L1 trilM1 L1 1 2 0 0 5 6 7 0 9 10 11 12 13 14 15 16 cria matriz triangular inferior a partir da subdiagonal 2 de M L2 trilM2 L2 0 0 0 0 0 0 0 0 9 0 0 0 13 14 0 0 Funcao triu Obtem a parte triangular superior de uma matriz sendo sua sintaxe saıda triuargumento k sendo argumento uma matriz e o parˆametro inteiro opcional k faz com que saıda seja uma matriz de mesma dimensao de argumento obtida a partir da kesima diagonal de argumento e os elementos acima dela para k 0 default diagonal principal k 0 kesima diagonal superior e k 0 kesima diagonal inferior Para a matriz M acima cria matriz triangular superior a partir da subdiagonal 1 de M U1 triuM1 U1 1 2 3 4 5 6 7 8 0 10 11 12 0 0 15 16 cria matriz triangular superior a partir da superdiagonal2 de M U2 triuM2 U2 0 0 3 4 0 0 0 8 0 0 0 0 0 0 0 0 34 Matrizes 51 Funcao matrix Altera a forma de uma matriz cuja sintaxe e saıda matrixmatriz linhas colunas Esta funcao cria uma matriz saıda com numero de linhas dados por linhas e numero de colunas igual a colunas a partir de matriz com linhas colunas elementos selecionados no sentido das colunas Por exemplo para a matriz B de dimensao 2 3 B 1 2 34 5 6 define matriz B de dimensao 2 x 3 B 1 2 3 4 5 6 c matrixB16 cria matriz vetor linha de dimensao 1 x 6 c 1 4 2 5 3 6 D matrixB32 cria matriz de dimensao 3 x 2 D 1 5 4 3 2 6 Funcao sparse Constroi uma matriz esparsa de dois modos distintos No primeiro saıda sparsematriz cria uma matriz esparsa saıda armazenando somente os elementos nao nulos de matriz na forma densa Para a matriz E E 2 0 1 0 5 6 7 0 9 define matriz com alguns elementos nulos E 2 0 1 0 5 6 7 0 9 S sparseE cria matriz esparsa a partir da matriz densa E S 3 3 sparse matrix 1 1 2 1 3 1 2 2 5 2 3 6 3 1 7 3 3 9 52 Capıtulo 3 Estruturas de dados Os tripletos acima indicam linha coluna valor ou seja linha 1 coluna 1 valor 2 linha 1 coluna 3 valor 1 e assim sucessivamente No segundo modo saıda sparselinha coluna valor constroi uma matriz esparsa saıda a partir de uma matriz linha coluna com duas colunas contendo os ındices dos elementos nao nulos e do vetor valor com os valores desses elementos Por exemplo define matriz de dimensao 7 x 2 lincol 1 1 1 3 2 2 2 4 3 3 4 1 5 5 lincol 1 1 1 3 2 2 2 4 3 3 4 1 5 5 vet 2 1 5 4 3 8 9 define vetor com 7 elementos vet 2 1 5 4 3 8 9 F sparselincolvet cria matriz esparsa a partir de lincol e vet 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 Funcao full O comando matriz fullesparsa converte a matriz esparsa para a sua repre sentacao densa matriz Para a matriz F acima FF fullF cria matriz densa a partir de esparsa FF 2 0 1 0 0 0 5 0 4 0 0 0 3 0 0 8 0 0 0 0 0 0 0 0 9 34 Matrizes 53 Funcao gsort Uma funcao particularmente util e a gsort que permite a ordenacao dos elementos de um vetor ou de uma matriz Sua sintaxe e matriz saıdaındice gsortmatriz entradaopcaodirecao sendo matriz entrada um vetor ou uma matriz contendo elementos numericos ou literais opcao opcional e uma cadeia de caracteres que especifica qual o tipo de ordenacao a ser realizada r por linha c por coluna g default todos os elementos da matriz sao ordenados direcao opcional indica a direcao de ordenacao i ordem crescente e d default ordem decrescente Os parˆametros de saıda sao matriz saıda com o mesmo tipo e dimensao de matriz entrada contem o resultado da ordenacao e o vetor opcional ındice contem os ındices originais tal que matriz saıda matriz entradaındice Para o vetor v e a matriz M v 3 9 5 6 2 v 3 9 5 6 2 M 2 5 1 3 8 9 7 6 4 M 2 5 1 3 8 9 7 6 4 temse os resultados gsortvgi ordena os elementos do vetor v em ordem crescente ans 2 3 5 6 9 ordena os elementos do vetor v em ordem decrescente wind gsortvgd ind 2 4 3 1 5 w 9 6 5 3 2 Para a ordenacao decrescente requerida w vind isto e w1 vind1 w2 vind2 w5 vind5 B gsortMri ordena as linhas da matriz M em ordem crescente B 2 5 1 3 6 4 7 8 9 54 Capıtulo 3 Estruturas de dados D gsortMcd ordena as colunas da matriz M em ordem decrescente D 5 2 1 9 8 3 7 6 4 344 Matrizes elementares O SCILAB fornece varias matrizes elementares de grande utilidade como as mostradas na Tabela 35 O numero de parˆametros providos fornecem as dimensoes da matriz Se o parˆametro for uma matriz entao sera criada uma matriz de igual dimensao Tabela 35 Algumas matrizes elementares do SCILAB Funcao Descricao da matriz zeros nula ones elementos iguais a 1 eye identidade ou parte dela grand elementos aleatorios com dada distribuicao Seja a matriz P 1 2 3 4 5 6 define uma matriz de dimensao 2 x 3 P 1 2 3 4 5 6 Funcao zeros O comando matriz zeroslinhas colunas gera uma matriz de dimensao linhas colunas com elementos nulos e matriz zerosargumento cria uma matriz com elementos nulos de mesma dimensao da matriz argumento z zeros14 cria matriz nula de dimensao 1 x 4 z 0 0 0 0 Funcao ones O comando matriz oneslinhas colunas cria uma matriz de dimensao linhas colunas com elementos iguais a 1 e matriz onesargumento gera uma matriz com elementos iguais a 1 com a mesma dimensao da matriz argumento 34 Matrizes 55 U onesP cria matriz de 1s com mesma dimensao da matriz P U 1 1 1 1 1 1 Funcao eye O comando matriz eyelinhas colunas gera uma matriz identidade com 1 na diagonal principal e 0 fora da diagonal de dimensao linhas colunas Por sua vez matriz eyeargumento cria uma matriz identidade de mesma dimensao da matriz argumento I eyePP cria matriz identidade com a mesma dimensao de PP I 1 0 0 0 1 0 0 0 1 Funcao grand O comando alea grandlinhas colunas tipo dist param 1param n gera a matriz alea com elementos aleatorios de dimensao linhas colunas com o tipo de distribuicao dado pela cadeia de caracteres tipo dist sendo param i um conjunto de parˆametros opcionais necessarios para definir uma distribuicao especıfica Por exemplo Distribuicao uniforme no intervalo 01 cria matriz de dimensao 3 x 5 com elementos aleatorios com distribuicao uniforme no intervalo 01 U grand35def U 08147237 08350086 09133759 03081671 02784982 0135477 01269868 02210340 00975404 01883820 09057919 09688678 06323592 05472206 05468815 Distribuicao uniforme no intervalo InfSup cria matriz de dimensao 3 x 4 com elementos aleatorios com distribuicao uniforme no intervalo 1012 R grand34unf1012 R 11985763 11929777 11451678 11914334 11915014 1193539 11941186 10219724 11992923 10315226 11962219 10970751 56 Capıtulo 3 Estruturas de dados Distribuicao normal com media Med e desvio padrao Despad cria matriz de dimensao 2 x 4 com elementos aleatorios com distribuicao normal com media 15 e desvio padrao 26 N grand24nor1526 N 2761686 02303274 35420607 14501598 27455511 11118334 10909685 194921 Distribuicao normal multivariada com media Med e covariˆancia Cov sendo Med uma matriz m x 1 e Cov uma matriz m x m simetrica positiva definida M grand5mn0 01 0505 1 M 10745727 09669574 07460049 08510105 02161951 22602797 07828132 02634706 11711612 04133844 Distribuicao de Poisson com media Med cria matriz de dimensao 3 x 5 com elementos aleatorios com distribuicao de Poisson com media 35 P grand35poi35 P 5 3 2 4 2 5 3 2 5 2 3 4 2 1 6 Gera n permutacoes aleatorias de um vetor coluna de tamanho m cria matriz de dimensao lengthvet x 8 com 8 permutacoes no vetor vet de tamanho 5 vet 1 2 3 4 5 define vetor coluna de tamanho 5 vet 1 2 3 4 5 V grand8prmvet V 3 1 2 4 5 3 5 3 2 4 4 2 2 5 2 2 1 3 5 5 1 1 4 4 5 5 1 3 3 2 1 5 4 2 3 1 4 4 3 1 35 Hipermatrizes 57 A funcao grand produz numeros pseudoaleatorios e a sequˆencia gerada de qualquer distri buicao e determinada pelo estado do gerador Quando o SCILAB for ativado e atribuıdo um valor inicial ao estado o qual e alterado a cada chamada da funcao grand Para atri buir um valor ao estado do gerador quando esta funcao ja tiver sido executada usase o comando grandsetsdsemente sendo semente o valor inicial desejado do estado Por exemplo grandsetsd1 atribui 1 ao estado a grand15def gera uma sequencia aleatoria uniforme a 0417022 09971848 07203245 09325574 00001144 b grand15def gera outra sequencia aleatoria uniforme b 01281244 03023326 09990405 01467559 02360890 grandsetsd1 atribui 1 novamente ao estado c grand15def gera outra sequencia aleatoria uniforme c 0417022 09971848 07203245 09325574 00001144 c a mostra que as sequencias c e a sao identicas ans 0 0 0 0 0 A funcao grand permite a geracao de vinte diferentes tipos de distribuicao de numeros pseudoaleatorios utilizando seis diferentes geradores Para maiores informacoes use o co mando de auxılio help grand 35 Hipermatrizes Hipermatrizes sao variaveis homogˆeneas com mais de duas dimensoes Elas podem ser criadas pela funcao hypermatdimensao valores onde o vetor dimensao define as dimensoes da hipermatriz e a matriz valores define os elementos Por exemplo para criar a hipermatriz H com dimensoes 2 3 4 ou seja composta por 4 submatrizes de dimensoes 2 3 fazse mat1 11 12 13 14 15 16 define submatriz 1 mat1 11 12 13 14 15 16 mat2 21 22 23 24 25 26 define submatriz 2 mat2 21 22 23 24 25 26 mat3 31 32 33 34 35 36 define submatriz 3 mat3 58 Capıtulo 3 Estruturas de dados 31 32 33 34 35 36 mat4 41 42 43 44 45 46 define submatriz 4 mat4 41 42 43 44 45 46 cria hipermatriz H de dimensao 2 x 3 x 4 a partir de 4 submatrizes H hypermat2 3 4mat1 mat2 mat3 mat4 H 1 11 12 13 14 15 16 2 21 22 23 24 25 26 3 31 32 33 34 35 36 4 41 42 43 44 45 46 As hipermatrizes podem ser manipuladas como as matrizes bidimensionais Assim para alterar para 123 os elementos da posicao 21 das submatrizes 1 e 4 da hipermatriz H acima H211 4 123 atribui o valor 123 aos elementos H211 e H214 H 1 11 12 13 123 15 16 2 21 22 23 24 25 26 3 31 32 33 34 35 36 4 41 42 43 123 45 46 Outros comandos sizeH dimensoes da hipermatriz ans 2 3 4 36 Polinˆomios 59 vetor linha contendo a soma dos elementos das colunas da submatriz 3 sumH3r ans 65 67 69 vetor coluna contendo os menores elementos das linhas da submatriz 2 minH2c ans 21 24 36 Polinˆomios O SCILAB fornece varias funcoes que permitem que as operacoes envolvendo polinˆomios sejam feitas de um modo bem simples 361 Construcao Os polinˆomios podem ser construıdos ou a partir de seus coeficientes ou de seus zeros Construcao a partir dos coeficientes Um polinˆomio na forma Px c1 c2xc3x2 cn1xn2 cnxn1 pode ser construıdo a partir dos coeficientes ci usando a funcao polyparametros variavel modo onde o vetor parametros contem os coeficientes ci variavel e uma cadeia de caracteres que determina a variavel do polinˆomio e a outra cadeia de caracteres modo especifica como o polinˆomio sera construıdo Se modo coeff entao ele sera construıdo a partir de seus coeficientes Por exemplo para construir o polinˆomio Px 2414x13x2 2x3 x4 basta P poly24 14 13 2 1xcoeff Px a partir dos coeficientes P 2 3 4 24 14x 13x 2x x Construcao a partir das raızes Utilizando a mesma funcao poly mas com parametros contendo os zeros do polinˆomio e sendo modo roots ou nao sendo especificado entao ele sera construıdo a partir de seus zeros Para construir um polinˆomio com zeros ξ1 1 ξ2 3 ξ3 2 e ξ4 4 fazse R poly1 3 2 4sroots Rs a partir dos zeros R 2 3 4 24 14s 13s 2s s 60 Capıtulo 3 Estruturas de dados 362 Avaliacao Um polinˆomio e avaliado por meio da funcao hornerpolinomio abscissas onde polinomio contem o polinˆomio e abscissas contem os pontos nos quais ele deve ser avaliado Por exemplo para avaliar Tx 1 3x 7x2 5x3 2x4 3x5 nos pontos x 1 0 1 2 e 3 T poly1 3 7 5 2 3xcoeff Tx a partir dos coeficientes T 2 3 4 5 1 3x 7x 5x 2x 3x y hornerT13 avalia Tx em x 1 0 1 2 e 3 y 1 1 11 127 757 363 Adicao e subtracao Para somar e subtrair polinˆomios mesmo de graus diferentes basta usar os operadores de adicao e subtracao Assim para somar os polinˆomios ax 1 4x2 5x3 8x4 e bx 4 x 5x2 2x3 a poly1 0 4 5 8xcoeff constroi ax a 2 3 4 1 4x 5x 8x b poly4 1 5 2xcoeff constroi bx b 2 3 4 x 5x 2x c a b soma polinomios c 2 3 4 3 x x 7x 8x resultando cx 3 x x2 7x3 8x4 e para subtrair d a b subtrai polinomios d 2 3 4 5 x 9x 3x 8x 364 Multiplicacao A multiplicacao de dois polinˆomios e feita utilizando o operador de multiplicacao Sejam os polinˆomios ev 4 5v 3v2 e fv 1 2v a multiplicacao resulta em e poly4 5 3vcoeff constroi ev 36 Polinˆomios 61 e 2 4 5v 3v f poly1 2vcoeff constroi fv f 1 2v g e f multiplica ev por fv g 2 3 4 13v 13v 6v resultando no polinˆomio gv 4 13v 13v2 6v3 365 Divisao O comando resto quociente pdivpolinomio 1 polinomio 2 faz a di visao entre o polinomio 1 e o polinomio 2 retornando o polinˆomio quociente em quociente e o polinˆomio do resto da divisao em resto ou seja polinomio 1 polinomio 2 quociente resto Por exemplo a divisao de hx 6 5x 4x2 3x3 2x4 por ix 1 3x x2 e efetuada por h poly6 5 4 3 2xcoeff constroi hx h 2 3 4 6 5x 4x 3x 2x i poly1 3 1xcoeff constroi ix i 2 1 3x x rq pdivhi divide hx por ix q 2 11 3x 2x r 5 25x resultado no quociente qx 11 3x 2x2 com resto rx 5 25x No caso do uso do operador de divisao em vez da funcao pdiv e criado um polinˆomio racional Para os polinˆomios hx e ix definidos acima j h i polinomio racional obtido da divisao de hx por ix j 2 3 4 6 5x 4x 3x 2x 2 1 3x x 62 Capıtulo 3 Estruturas de dados 366 Derivacao A funcao derivat efetua a derivacao polinomial Deste modo para obter a primeira e segunda derivada de Px 5 14x 12x2 2x3 x4 p poly5 14 12 2 1xcoeff constroi px p 2 3 4 5 14x 12x 2x x p1 derivatp derivada primeira de px p1 2 3 14 24x 6x 4x p2 derivatp1 derivada segunda de px p2 2 24 12x 12x resultando P x 14 24x 6x2 4x3 e P x 24 12x 12x2 367 Calculo de raızes A funcao rootspolinomio calcula os zeros de polinomio Por exemplo para calcular as quatro raızes de Tx 24 14x 13x2 2x3 x4 0 T poly24 14 13 2 1xcoeff constroi Tx T 2 3 4 24 14x 13x 2x x raizes rootsT calcula as raizes de Tx 0 raizes 1 2 3 4 Para calcular as raızes de um polinˆomio dado em termos de seus coeficientes sem construir previamente o polinˆomio os coeficientes devem ser fornecidos do maior para o menor grau Por exemplo para calcular as quatro raızes de Tx 24 14x 13x2 2x3 x4 0 a roots1 2 13 14 24 calcula raizes a partir dos coeficientes a 1 2 3 4 37 Variaveis logicas 63 Quando o polinˆomio for real e possuir grau menor ou igual a 100 a funcao roots calcula os zeros por um algoritmo rapido caso contrario os zeros sao calculados por meio dos autovalores da matriz companheira Se for acrescentado o segundo argumento da funcao roots dado por e entao os zeros serao calculados utilizando os autovalores independente do grau do polinˆomio Pode ser mostrado que as raızes de Px c1 c2x c3x2 cn1xn2 cnxn1 0 sao os autovalores da matriz companheira C cn1cn cn2cn c2cn c1cn 1 0 0 0 0 1 0 0 0 0 1 0 Deste modo r rootsTe e equivalente a A companionT matriz companheira do polinomio Tx A 2 13 14 24 1 0 0 0 0 1 0 0 0 0 1 0 r specA autovalores da matriz companheira A r 4 3 2 1 37 Variaveis logicas Conforme visto uma constante logica tem os valores t ou T para verdadeiro e f ou F para falso os quais podem ser atribuıdos a uma variavel logica com estrutura de vetor ou matriz Por exemplo a t variavel logica simples a T b f F t T vetor logico b F F T T C T f tf T F matriz logica C T F T F T F 64 Capıtulo 3 Estruturas de dados As variaveis logicas podem ser utilizadas para acessar os elementos de uma matriz ou vetor Quando o valor for verdadeiro o ındice e acessado e no caso de ser falso o ındice nao sera acessado Por exemplo v 11 12 13 14 15 16 17 18 define o vetor v com 8 elementos v 11 12 13 14 15 16 17 18 ind t t f t f define vetor logico ind com 5 elementos ind T T F T F vind elementos 1 2 e 4 do vetor ans 11 12 14 O numero de elementos do vetor logico deve ser menor ou igual ao numero de elementos do vetor que ele referencia O uso de variaveis logicas e fundamental nas expressoes logicas que serao vistas na Secao 42 Expressoes logicas 38 Variaveis literais Uma variavel literal contem uma constante literal formada por uma cadeia de caracteres delimitada por aspas ou apostrofos Por exemplo a SCILAB b cadeia de caracteres a SCILAB b cadeia de caracteres Os caracteres podem ser concatenados usando o operador ou a notacao vetorial d a manipula b d SCILAB manipula cadeia de caracteres e a utiliza b e SCILAB utiliza cadeia de caracteres A utilizacao de variaveis literais sera abordada com mais detalhes na Secao 43 Expressoes literais 39 Listas Uma lista e um conjunto de dados nao necessariamente do mesmo tipo podendo conter matrizes ou mesmo outras listas As listas sao uteis para definirem dados estruturados Uma lista e construıda a partir do comando list 39 Listas 65 Rol listtipof1 2 3 4 5 6 gera a lista Rol com 3 objetos Rol Rol1 tipo Rol2 F Rol3 1 2 3 4 5 6 Rol2 objeto 2 de Rol ans F Rol321 elemento 21 do objeto 3 de Rol ans 4 Uma lista pode ser um objeto de outra lista Rol1 listtamanho10 20 30 objeto 1 de Rol tornase uma lista Rol Rol1 Rol11 tamanho Rol12 10 20 30 Rol2 F Rol3 1 2 3 4 5 6 Para obter e atribuir valor a objeto da lista fazse Rol1213 elemento 13 do objeto 2 de Rol1 ans 30 Rol321 558 atribuindo novo valor ao elemento 21 de Rol3 Rol Rol1 Rol11 tamanho Rol12 10 20 30 Rol2 F Rol3 1 2 3 558 5 6 66 Capıtulo 3 Estruturas de dados 310 Exercıcios Secao 31 Constantes Observar atentamente e anotar o resultado dos comandos do SCILAB Apesar de os coman dos estarem separados por vırgula entrar com um de cada vez 31 Atribuir o valor 123103 a variavel a e 417102 a variavel b 32 33 Criar um vetor logico com cinco elementos sendo o primeiro segundo e quarto com o valor verdadeiro e os outros com o valor falso 34 Criar uma matriz de dimensao 2 3 com elementos logicos com a terceira coluna com elementos com o valor falso e as demais com o valor verdadeiro 35 Secao 32 Variaveis 36 Conferir os nomes permitidos de variaveis arcoseno0 limitesup3 Area3 e area1 37 Atribuir a cadeia de caracteres abc a variavel literal letras e 01234 a variavel literal numeros 38 39 310 Secao 33 Vetores Construir os vetores e analisar as operacoes 311 al 1 35 42 75 ac 2311 312 b 10530 c 526 d 510 313 e linspace0105 e3 e24 310 Exercıcios 67 314 f linspace10206 f311 f6 5 1 3 315 g linspace2114 linspace02114i h g i g Secao 34 Matrizes Construir as matrizes e verificar o resultado das operacoes e funcoes 316 A 6 1 4 0 2 3 5 7 8 A21 1 sumAr sumAc prodAr prodAc 317 B A232 3 1 minBr maxBc 318 C A B C2 4 C2 sizeC 319 zeros35 ones24 eye53 320 D grand33def diagdiagD triuD trilD Secao 35 Hipermatrizes 321 322 323 324 325 Secao 36 Polinˆomios 326 327 328 329 330 68 Capıtulo 3 Estruturas de dados Secao 37 Variaveis logicas 331 332 333 334 335 Secao 38 Variaveis literais 336 337 338 339 340 Secao 39 Listas 341 342 343 344 345 Capıtulo 4 Expressoes Uma expressao e uma combinacao de constantes variaveis e operadores cuja avaliacao resulta em um valor unico Neste capıtulo serao mostrados os trˆes tipos de expressoes do SCILAB aritmeticas logicas e literais 41 Expressoes aritmeticas E disponıvel no SCILAB as operacoes aritmeticas basicas mostradas na Tabela 41 Tabela 41 Operacoes aritmeticas basicas do SCILAB Operacao Expressao Operador Exemplo adicao a b 12 subtracao a b 5147 multiplicacao a b 6998 divisao a b ou 67 53 potenciacao ab 210 411 Ordem de precedˆencia O SCILAB obedece a ordem de precedˆencia das operacoes aritmeticas apresentadas na Secao 15 Expressoes Para o Exemplo 15 na pagina 6 a 1 b 2 c 3 d 4 t a b c d t 56666667 69 70 Capıtulo 4 Expressoes x a b c d x 04285714 y a b c d 1 2 y 13636364 w abca1b4c5c2bd1 w 00670732 z ab3cd3abcsqrt1dab z 99489931 412 Expressoes vetoriais As operacoes basicas entre vetores so sao definidas quando estes tiverem o mesmo tamanho e orientacao linha ou coluna Estas operacoes basicas sao apresentadas na Tabela 42 As operacoes de multiplicacao divisao e potenciacao envolvendo vetores quando antecedi das pelo caracter significa que estas operacoes sao efetuadas entre os correspondentes elementos dos vetores Tabela 42 Operacoes vetoriais basicas Sejam a a1 a2 an b b1 b2 bn e c um escalar Operacao Expressao Resultado adicao escalar ac a1c a2c anc adicao vetorial ab a1b1 a2b2 anbn multiplicacao escalar ac a1c a2c anc multiplicacao vetorial ab a1b1 a2b2 anbn divisao a direita ab a1b1 a2b2 anbn divisao a esquerda ab b1a1 b2a2 bnan potenciacao ac a1c a2c anc ca ca1 ca2 can ab a1b1 a2b2 anbn Considere as variaveis a 15 b 101050 c 2 a 1 2 3 4 5 b 10 20 30 40 50 41 Expressoes aritmeticas 71 c 2 Adicao escalar a c ans 3 4 5 6 7 Adicao vetorial a b ans 11 22 33 44 55 Multiplicacao escalar a c ans 2 4 6 8 10 Multiplicacao vetorial entre elementos correspondentes a b ans 10 40 90 160 250 Divisao vetorial a direita entre elementos correspondentes a b ans 01 01 01 01 01 Divisao vetorial a esquerda entre elementos correspondentes a b ans 10 10 10 10 10 Potenciacao a c ans 1 4 9 16 25 c a ans 2 4 8 16 32 a b ans 1 1048576 2059D14 1209D24 8882D34 72 Capıtulo 4 Expressoes 413 Expressoes matriciais De modo similar as operacoes vetorias existem as operacoes matriciais basicas as quais estao compiladas na Tabela 43 O operador envolvendo matrizes e vetores esta relacionado com solucao de sistemas lineares conforme sera visto na Secao 823 Solucao de sistemas Tabela 43 Operacoes matriciais basicas Sejam c um escalar e A a11 a12 a1p a21 a22 a2p am1 am2 amp B b11 b12 b1n b21 b22 b2n bp1 bp2 bpn Operacao Expressao Resultado adicao escalar Ac aij c adicao matricial AB aij bij multiplicacao escalar Ac aij c multiplicacao matricial AB AB multiplicacao entre elementos correspondentes AB aij bij divisao a direita entre elementos correspondentes AB aijbij divisao a esquerda entre elementos correspondentes AB bijaij potenciacao Ac Ac Ac ac ij cA caij AB a bij ij Sejam as matrizes A e B de ordem 3 e o escalar c A 1 2 3 4 5 6 7 8 9 B 10 20 30 40 50 60 70 80 90 c 3 A 1 2 3 4 5 6 7 8 9 B 10 20 30 40 50 60 70 80 90 c 3 Adicao escalar A c 41 Expressoes aritmeticas 73 ans 4 5 6 7 8 9 10 11 12 Adicao matricial A B ans 11 22 33 44 55 66 77 88 99 Multiplicacao escalar A c ans 3 6 9 12 15 18 21 24 27 A diferenca no resultado das expressoes quando os operadores contem o caracter deve ser observada Na multiplicacao matricial A B ans 300 360 420 660 810 960 1020 1260 1500 Multiplicacao entre elementos correspondentes A B ans 10 40 90 160 250 360 490 640 810 Divisao a direita entre elementos correspondentes A B ans 01 01 01 01 01 01 01 01 01 Divisao a esquerda entre elementos correspondentes 74 Capıtulo 4 Expressoes A B ans 10 10 10 10 10 10 10 10 10 E nos diferentes tipos de potenciacao A c elemento da matriz elevado a uma constante ans 1 8 27 64 125 216 343 512 729 A c matriz elevada a uma constante ans 468 576 684 1062 1305 1548 1656 2034 2412 c A constante elevada a elemento da matriz ans 3 9 27 81 243 729 2187 6561 19683 A B elemento de matriz elevado a elemento de matriz ans 1 1048576 2059D14 1209D24 8882D34 4887D46 1435D59 1767D72 7618D85 E importante observar que no SCILAB as operacoes cA e cA sao equivalentes Como pode ser esperado de uma linguagem para aplicacoes nas areas tecnicas e cientıficas o SCILAB oferece varias funcoes importantes A Tabela 44 apresenta algumas funcoes matematicas elementares do SCILAB Se a variavel for um vetor ou uma matriz a avaliacao de uma funcao se da para cada elemento da variavel a 15 a 1 2 3 4 5 b sqrta raiz quadrada b 1 14142136 17320508 2 2236068 Os resultados acima podem ser apresentados na forma de uma tabela por intermedio do comando 42 Expressoes logicas 75 Tabela 44 Funcoes matematicas elementares do SCILAB Funcao Descricao Funcao Descricao trigonometricas acos arco coseno cotg cotangente asin arco seno sin seno atan arco tangente tan tangente cos coseno exponenciais acosh arco coseno hiperbolico log logaritmo natural asinh arco seno hiperbolico log10 logaritmo decimal atanh arco tangente hiperbolica sinh seno hiperbolico cosh coseno hiperbolico sqrt raiz quadrada coth cotangente hiperbolica tanh tangente hiperbolica exp exponencial complexas abs valor absoluto imag parte imaginaria do complexo conj complexo conjugado real parte real do complexo numericas ceil arredonda em direcao a lcm mınimo multiplo comum fix arredonda em direcao a 0 modulo resto de divisao floor arredonda em direcao a round arredonda em direcao ao in teiro mais proximo gcd maximo divisor comum sign sinal ab ans 1 1 2 14142136 3 17320508 4 2 5 2236068 42 Expressoes logicas Uma expressao se diz logica quando os operadores forem logicos e os operandos forem relacoes eou variaveis do tipo logico Uma relacao e uma comparacao realizada entre valores do mesmo tipo A natureza da comparacao e indicada por um operador relacional conforme a Tabela 45 O resultado de uma relacao ou de uma expressao logica e verdadeiro ou falso No SCILAB o resultado e literal sendo que T significa verdadeiro e F significa falso Note que o caracter e usado para atribuicao de um valor a uma variavel enquanto que os caracteres sao usados para comparacao de igualdade Os operadores relacionais sao usados para comparar 76 Capıtulo 4 Expressoes Tabela 45 Operadores relacionais do SCILAB Operador relacional Descricao igual a maior que maior ou igual a menor que menor ou igual a ou diferente de vetores ou matrizes do mesmo tamanho ou comparar um escalar com os elementos de um vetor ou de matriz Sejam os vetores a e b e o escalar c a 110 b 910 c 5 a 1 2 3 4 5 6 7 8 9 10 b 9 8 7 6 5 4 3 2 1 0 c 5 Assim d a c d F F F F T T T T T T produz um vetor que contem o valor T verdadeiro quando o elemento correspondente do vetor a for maior ou igual a 5 caso contrario contem o valor F falso Apesar de o resultado da relacao logica ser um valor literal ele pode fazer parte de uma expressao aritmetica sendo que F vale 0 e T tem o valor 1 e a b 3 e 1 2 3 4 5 6 8 9 10 11 Quando um elemento de b for menor ou igual a 3 o valor 1 resultado da relacao logica e adicionado ao correspondente valor de a Os operadores logicos permitem a combinacao ou negacao das relacoes logicas Os operadores logicos do SCILAB sao listados na Tabela 46 Para os vetores a e b definidos anteriormente f a3 a8 f F F F T T T T T F F 42 Expressoes logicas 77 Tabela 46 Operadores logicos do SCILAB Operador logico Descricao Uso e conjuncao ou disjuncao nao negacao Os elementos de f sao iguais a T quando os correspondentes elementos de a forem maiores do que 3 e menores ou iguais a 8 caso contrario sao iguais a F Para fazer a negacao ou seja onde for T sera F e viceversa basta g f g T T T F F F F F T T A Tabela 47 apresenta a tabela verdade para os operadores logicos do SCILAB Tabela 47 Tabela verdade a b a b a b a T T T T F T F F T F F T F T T F F F F T A ordem de precedˆencia no SCILAB para expressoes envolvendo operadores aritmeticos e logicos sao indicados na Tabela 48 Tabela 48 Ordem de precedˆencia das operacoes aritmeticas e logicas Ordem de precedˆencia Operadores 1a 2a funcao 3a 4a unario e unario 5a 6a e 7a 8a 9a 10a Os parˆenteses podem ser usados para alterar a ordem de precedˆencia Para os vetores a e b definidos acima a avaliacao da expressao 78 Capıtulo 4 Expressoes h a52 9 3b 15 h F F F F T T T F F F e equivalente as varias etapas h1 a5 parenteses h1 4 3 2 1 0 1 2 3 4 5 h2 h12 potenciacao h2 16 9 4 1 0 1 4 9 16 25 h3 h2 unario h3 16 9 4 1 0 1 4 9 16 25 h4 3b multiplicacao h4 27 24 21 18 15 12 9 6 3 0 h5 h3 9 operador relacional primeiro a esquerda h5 F F T T T T T F F F h6 h4 15 operador relacional segundo a esquerda h6 F F F F T T T T T T h h5 h6 operador logico h F F F F T T T F F F 43 Expressoes literais O SCILAB dispoe de varias funcoes para manipulacao de cadeia de caracteres sendo algumas delas mostradas a seguir 431 Conversao de caracteres Serao apresentadas funcoes para alterar o tamanho da caixa das letras e fazer a conversao de caracteres para numero e viceversa Caixas altas e baixas A funcao convstrtextotipo converte a cadeia de caracteres texto de acordo com o tipo Se ele for u upper entao converte para caixa alta maiusculo e se for l lower ou omitido converte para caixa baixa minusculo texto Caixas Altas e Baixas define o texto texto 43 Expressoes literais 79 Caixas Altas e Baixas convstrtextou converte para caixa alta ans CAIXAS ALTAS E BAIXAS convstrtexto converte para caixa baixa ans caixas altas e baixas Codigo ASCII Os comandos numero asciitexto e texto asciinumero fazem a con versao dos caracteres ASCII American Standard Code for Information Interchange conti dos no vetor de caracteres texto para valores numericos e atribuem ao vetor numero e viceversa de acordo com a Tabela 49 Tabela 49 Caracteres em codigo ASCII Representacao decimal dos caracteres 33 45 57 9 69 E 81 Q 93 105 i 117 u 34 46 58 70 F 82 R 94 106 j 118 v 35 47 59 71 G 83 S 95 107 k 119 w 36 48 0 60 72 H 84 T 96 108 l 120 x 37 49 1 61 73 I 85 U 97 a 109 m 121 y 38 50 2 62 74 J 86 V 98 b 110 n 122 z 39 51 3 63 75 K 87 W 99 c 111 o 123 40 52 4 64 76 L 88 X 100 d 112 p 124 41 53 5 65 A 77 M 89 Y 101 e 113 q 125 42 54 6 66 B 78 N 90 Z 102 f 114 r 126 43 55 7 67 C 79 O 91 103 g 115 s 44 56 8 68 D 80 P 92 104 h 116 t Por exemplo para o vetor s de tamanho 5 s 53i vetor de caracteres s 53i n asciis converte caracteres para numeros n 53 43 51 42 105 t asciin converte numeros para caracteres t 53i 80 Capıtulo 4 Expressoes Codigo do SCILAB Os comandos texto code2strnumero e numero str2codetexto fazem a conversao de um vetor de numeros inteiros numero para a cadeia de caracteres texto e viceversa segundo o codigo do SCILAB texto Caracteres define o texto texto Caracteres numero str2codetexto converte texto para numero vetor transposto numero 12 10 27 10 12 29 14 27 14 28 palavra code2strnumero converte numero para texto palavra Caracteres E importante observar que os codigos de conversao produzidos pelas funcoes code2str e str2code sao diferentes daqueles produzidos pela funcao ascii car 01AZaz define caracteres car 01AZaz cod str2codecar converte para codigo do SCILAB vetor transposto cod 0 1 10 35 10 35 asc asciicar converte para codigo ASCII asc 48 49 65 90 97 122 Numeros O comando texto stringnumero converte a constante numerica numero para a sua representacao em caracteres e atribui o resultado a texto Este comando e de grande utilidade quando da escrita de rotulos e tıtulos em graficos conforme sera visto no Capıtulo 5 v 425 v 425 titulo velocidade stringv ms titulo velocidade 425 ms 432 Manipulacao de caracteres Serao descritas a seguir funcoes para obter o tamanho criar operar e procurar caracteres 43 Expressoes literais 81 Tamanho A funcao lengthvariavel fornece o numero de caracteres presentes na cadeia de ca racteres variavel se ela for uma matriz entao e informado o numero de caracteres de cada elemento lengthabcde numero de caracteres ans 5 lengthab 123 abcd numero de caracteres de matriz ans 2 3 1 4 Criacao O comando variavel emptystrlinhascolunas gera uma matriz de caracte res variavel vazia de dimensao linhas colunas Por sua vez variavel emptystrmatriz cria a matriz de caracteres variavel vazia com as mesmas di mensoes de matriz mat emptystr23 matriz vazia de dimensao 2 x 3 mat lengthmat numero de caracteres de mat ans 0 0 0 0 0 0 matnum 1 2 3 4 define matriz numerica matnum 1 2 3 4 S emptystrmatnum matriz vazia com mesma dimensao de matnum S lengthS numero de caracteres de S ans 0 0 0 0 A funcao strcatvetorcaracteres insere a cadeia caracteres entre cada ele mento da cadeia de caracteres vetor 82 Capıtulo 4 Expressoes vet a b c d e define vetor de caracteres vet a b c d e vv strcatvet insere entre cada elemento vv abcde ve strcatvet insere entre cada elemento ve a b c d e Operacao O comando matriz pos justifymatrizposicao cria matriz pos uma ma triz de caracteres alterando a posicao das colunas da matriz de caracteres matriz de acordo com posicao Se for igual a l left as colunas serao movidas para a esquerda se for c center elas serao centradas e se posicao r right as colunas serao mo vidas para a direita M abcdefg h ijklmnopq 1 1234567 7890 abc 01 def M abcdefg h ijklmnopq 1 1234567 7890 abc 01 def C justifyMc cria matriz C a partir de M com colunas centradas C abcdefg h ijklmnopq 1 1234567 7890 abc 01 def A funcao stripblankstexto elimina os caracteres brancos do inıcio e do final da cadeia de caracteres texto v a b c vetor v com 3 caracteres brancos no inicio e no final v a b c lengthv numero de caracteres de v ans 11 s stripblanksv remove caracteres brancos do inicio e do final de v s a b c lengths numero de caracteres de s ans 5 43 Expressoes literais 83 A funcao strsplittextoındice quebra a cadeia de caracteres texto nas posicoes dadas no vetor numerico ındice com valores estritamente crescentes gerando um vetor de caracteres s 1234567890abcdefgh define vetor de caracteres s 1234567890abcdefgh v strsplits3 8 12 quebra o vetor s nas posicoes 3 8 e 12 v 123 45678 90ab cdefgh A funcao strsubstmatriztexto origtexto subs substitui todas as ocorrˆencias da cadeia de caracteres texto orig na matriz de caracteres matriz pelos caracteres contidos em texto subs frase determinante produto dos autovalores define o texto frase determinante produto dos autovalores strsubstfraseeE substitui as letras e por E ans dEtErminantE produto dos autovalorEs strsubstfrase e igual ao substitui simbolo por texto ans determinante e igual ao produto dos autovalores strsubstfrase remove todos os caracteres brancos ans determinanteprodutodosautovalores Procura Seja o comando linhasqual grepmatriztexto Para cada entrada da matriz de caracteres a funcao grep pesquisa se pelo menos uma cadeia de caracteres no vetor texto e igual a uma subcadeia de matriz O vetor numerico linhas informa os ındices das entradas de matriz onde pelo menos uma igualdade foi encontrada O argumento opcional qual fornece ındices informando qual das cadeias de caracteres de texto foi encontrada Por exemplo matriz o scilab e um software livre para aplicacoes cientificas 84 Capıtulo 4 Expressoes ver wwwscilaborg define a matriz de caracteres matriz o scilab e um software livre para aplicacoes cientificas ver wwwscilaborg linhaqual grepmatrizverscilab procura por ver e scilab qual 2 1 2 linha 1 3 3 As cadeias de caracteres ver posicao 1 e scilab posicao 2 foram encontradas nas linhas 1 3 e 3 sendo que na linha 1 foi encontrada a cadeia de ındice 2 scilab e na linha 3 foram as de ındice 1 ver e 2 scilab Considere o comando ındicesqual strindextextovetor i A funcao strindex procura osındices de onde o iesimo elemento do vetor de caracteres vetor i foi encontrado na cadeia de caracteres texto Estes ındices sao retornados no vetor numerico ındices O argumento opcional qual fornece ındices informando qual das cadeias de caracteres de vetor i foram encontradas Por exemplo ind strindexabcd dabca procura os indices de ocorrencia de a ind 1 7 ind strindexbaad daaaaa indices de ocorrencia de aa ind 2 7 8 indqual strindexbaad daaa bdacaa da qual 1 2 1 1 2 ind 2 6 7 8 12 Os caracteres aa e da foram encontrados nas posicoes 2 6 7 8 e 12 e os elementos que apareceram foram respectivamente 1 aa 2 da 1 aa 1 aa e 2 da O comando elementos tokenstextodelimitador cria um vetor coluna de ca racteres elementos particionando a cadeia de caracteres texto onde ocorrer a presenca de um dos componentes do vetor delimitador Cada componente do segundo argumento e formado por um unico caracter Se este argumento for omitido entao e assumido o vetor Tab caracteres branco e ascii9 Por exemplo tokensExemplo de cadeia de caracteres particiona com delimitador 43 Expressoes literais 85 ans Exemplo de cadeia de caracteres tokensExemplo de cadeia de caracteresc delimitador c ans Exemplo de adeia de ara teres tokensExemplo de cadeia de caracteresd t delimitadores d e t ans Exemplo e ca eia e carac eres Seja o comando matriz tokenpostextodelimitador A funcao tokenpos particiona a cadeia de caracteres texto onde ocorrer a presenca de um dos componentes do vetor delimitador Os ındices inicial e final de cada elemento resultante da particao sao atribuıdos a matriz numerica de duas colunas matriz Cada componente do segundo argumento e formado por um unico caracter Se este argumento for omitido entao e assumido o vetor Tab caracteres branco e ascii9 Por exemplo tokenposExemplo de cadeia de caracteres particiona com delimitador ans 1 7 9 10 12 17 19 20 22 31 86 Capıtulo 4 Expressoes tokenposExemplo de cadeia de caracteresd t delimitadores d t ans 1 8 10 13 15 18 20 26 28 31 Seja o comando elementos parttextoındices onde elementos e texto sao matrizes de caracteres e ındices e um vetor numerico deındices A funcao part obtem elementos a partir dos elementos de texto nas posicoes especificadas em ındice Por exemplo c part123456789013 obtendo com indices 1 e 3 c 13 46 80 Observar que cada valor de elementos e separado por dois caracteres branco Se um elemento de ındice for maior que o comprimento de um componente de texto entao elementos recebera um caractere branco vet partabcdefghi1241 obtendo com indices 1 2 4 e 1 vet a a bc b efhe O comprimento do primeiro componente a e 1 que e menor que 2 e 4 portanto o primeiro componente de vet recebe dois caracteres brancos nas posicoes 2 e 3 O segundo componente bcd tem comprimento 3 que e menor que 4 por isso recebe um branco na posicao 3 44 Execucao de expressoes O SCILAB possui comandos com o proposito de executar expressoes um dos quais e o eval cuja sintaxe e resultado evalexpressao A cadeia de caracteres expressao contem a expressao matematica que deve ser interpre tada e atribuıda a variavel resultado Por exemplo r evalsinpi2 r 1 x 1 y 2 eval2xexpy2 ans 3 Note que para avaliar uma expressao que possui as variaveis x e y estas tˆem que ser previ amente definidas A funcao eval e tambem capaz de executar tarefas mais complexas Tabela sqrtx expx1x5x2 define matriz com 3 expressoes Tabela sqrtx expx 1x5x2 x 16 evalTabela1 avalia a expressao da linha 1 com x 16 ans 4 x 2 evalTabela3 avalia a expressao da linha 3 com x 2 ans 205 88 Capítulo 4 Expressões z log10 bde² exp baba c²1b³1b² Avaliar as expressões vetoriais para u 26 v linspace10145 k 5 43 uk uv uk uv uv uv 44 uk ku vu 45 w sqrtuv cosukv Avaliar as expressões matriciais para M 2 3 1 4 6 1 5 2 1 N 1 1 2 3 1 1 3 2 1 x 13 z 2 46 Mz MN MN 47 MN MN MN MN 48 Mz M2 zM zM MN 49 Verificar a diferença entre as funções usando a π e a 56 ceila fixa floora rounda signa 410 Para c 3 4i e c 5 3i observar os resultados das funções complexas absc conjc realc imagc Seção 42 Expressões lógicas 411 Com relação às variáveis lógicas dados a t b f c sqrt2 1 d exp0 0 completar a tabela a b c d ab ac bd ab ac bd a b Avaliar as expressões lógicas para x 22 e v 15 412 x 1 413 absx 1 414 x 1 v 1 45 Exercıcios 89 415 x 1 absv3 1 Secao 43 Expressoes literais 416 Definir os comandos para gerar as cadeias de caracteres Tıtulo variavel e equacoes 417 Dada a cadeia de caracteres 1 2 3 4 inserir menor que entre eles 418 Quebrar a cadeia de caracteres 123456789012345 nas posicoes 5 e 10 419 Dado abcde edabc eacdb substituir toda ocorrˆencia do caracter d pelo caracter X 420 Dada a sequˆencia de caracteres abcdeedabceacdbdbcae determinar os ındices de onde ocorre bc Secao 44 Execucao de expressoes 421 Avaliar o resultado da expressao dada pela cadeia de caracteres sqrt4cospi Para x 15 e y 3 avaliar as expressoes abaixo 422 expxy 423 moduloxy sinhxy10 424 Converter para numero as cadeias de caracteres 123d1 e 00456789e2 425 Qual a diferenca entre as funcoes evstr e string 90 Capítulo 4 Expressões Capıtulo 5 Graficos Uma das grandes virtudes do SCILAB e a facilidade que ele oferece para produzir graficos de boa qualidade Neste capıtulo serao vistos como gerar graficos bi e tridimensionais e os modos de imprimilos ou gravalos em arquivos para que possam ser incluıdos em textos 51 Graficos bidimensionais Para gerar graficos bidimensionais sao usadas as versateis funcoes plot e fplot2d 511 Funcao plot A sintaxe da funcao plot e plotx 1y 1tipo de linha 1x ny ntipo de linha n onde x i e y i sao vetores contendo as abscissas e ordenadas dos pontos a serem exibi dos respectivamente e tipo de linha i e uma cadeia de 1 a 4 caracteres que especifica a cor o estilo da linha e o marcador dos pontos dados Os tipos de linha sao mostrados na Tabela 51 Use o comando help plot para mais detalhes Considere os vetores x linspace8850 define as abscissas y sinx vetor com elementos da funcao seno z cosx vetor com elementos da funcao coseno Para gerar um grafico de senx em funcao de x basta plotxy 91 92 Capıtulo 5 Graficos Tabela 51 Tipos de linha da funcao plot Sımbolo Cor Sımbolo Estilo de linha Sımbolo Marcador r vermelho linha solida default mais g verde linha tracejada o cırculo b azul linha pontilhada asterisco c turquesa linha de traco e ponto ponto m lilas x cruz y amarelo s quadrado k preto d diamante w branco triang cima v triang baixo triang direita triang esquerda pentagram pentagrama none sem marca default O grafico produzido e mostrado na Figura 51a Tambem pode ser gerado um grafico um pouco mais complexo senx e cosx em funcao de x com os valores de senx em linha solida e os pontos dados sendo destacados com e os de cosx em linha tracejada e com o Para produzir o grafico da Figura 51b basta o comando plotxyxzo O SCILAB oferece algumas funcoes para identificacao dos graficos Tıtulos e rotulos A funcao xtitletıtulorotulo xrotulo yrotulo z escreve a cadeia de caracteres tıtulo no cabecalho e a cadeia de caracteres rotulo i no iesimo eixo do grafico Os trˆes argumentos rotulo i sao opcionais Texto A funcao xstringxytextoangulocaixa escreve a cadeia de caracteres texto na posicao de coordenadas xy com inclinacao angulo em graus no sentido horario O escalar inteiro caixa informa se sera dese nhada uma caixa em torno do texto Se angulo 0 e caixa 1 entao uma caixa sera desenhada em torno do texto Os argumentos angulo e caixa sao opcionais Assim os comandos 51 Graficos bidimensionais 93 a fx senx b fx senx e gx cosx Figura 51 Graficos produzidos pela funcao plot xtitlefuncoes seno e cosenoeixo xeixo y xstring4107cosx xstring6106senx01 produzirao os tıtulos e rotulos no grafico da Figura 51b como mostrado na Figura 52a Legenda A funcao legendtexto 1texto nposicaocaixa adiciona legendas ao esboco da figura usando as cadeias de caracteres texto i como rotulos O argumento posicao especifica onde as legendas serao colocadas 1 canto superior direito default 2 canto superior esquerdo 3 canto inferior esquerdo 4 canto inferior direito e 5 a legenda e colocada usando o mouse A caixa de legendas movese com o mouse e assim que estiver na posicao desejada pressionase um botao Valores negativos de posicao permitem colocar as legendas fora do quadro do grafico usar help legend para mais detalhes A variavel logica caixa indica se uma caixa sera ou nao desenhada em torno das legendas sendo o valor default igual a T Os argumentos posicao e caixa sao opcionais Grade A funcao xgridestilo faz com que apareca uma grade no grafico produzido de acordo com a constante inteira estilo que define a forma e a cor da grade A Figura 52b mostra o efeito dos comandos 94 Capıtulo 5 Graficos a Tıtulos e rotulos Legendas e grade Figura 52 Documentacao de graficos legendsenxcosx5 xgrid1 512 Funcao fplot2d A funcao fplot2d e utilizada para esbocar grafico de funcao no R2 sendo sua sintaxe fplot2dabscissasfuncaoargumentos onde abscissas e um vetor numerico contendo as abscissas funcao e o nome de uma function externa e argumentos e um conjunto opcional que define o estilo do grafico na forma opcao 1 valor 1 opcao n valor n O argumento opcao i pode ser style rect logflag frameflag axesflag nax e leg style Esta opcao e utilizada para definir como as curvas serao desenhadas com seus valores sendo dados por um vetor com elementos inteiros de tamanho igual ao numero de curvas Se stylei for positivo a linha entao e desenhada como uma linha plana e o ındice define qual cor sera usada Se stylei for negativo ou nulo entao a curva e esbocada usando marcadores e absstylei define o tipo de marcador rect Define os limites das abscissas e ordenadas com os valores definidos por um vetor de quatro elementos rect Xmin Ymin Xmax Ymax As abscissas estarao entre os limites Xmin e Xmax e as ordenadas entre Ymin e Ymax 51 Graficos bidimensionais 95 logflag Especifica a escala linear ou logarıtmica ao longo dos dois eixos de coordenadas com valores associados podendo ser nn nl ln ll sendo que cada letra representa um eixo com n significando escala normal ou linear e l para escala logarıtmica frameflag Esta opcao controla o calculo dos limites das coordenadas atuais a partir dos valores mınimos requeridos Este argumento pode assumir um valor inteiro tal que 0 escala default sem calculos 1 limites dados pela opcao rect 2 calculados pelos maximos e mınimos dos vetores de abscissas e ordenadas 3 dados pela opcao rect porem aumentados para obter uma escala isometrica 4 calculados pelos maximos e mınimos dos vetores de abscissas e ordenadas mas aumentados para obter uma escala isometrica 5 dados pela opcao rect porem aumentados para produzir melhores rotulos dos eixos 6 calculados pelos maximos e mınimos dos vetores de abscissas e ordenadas mas aumentados para produzir melhores rotulos dos eixos 7 como frameflag 1 todavia os graficos anteriores sao redesenhados para usar a nova escala 8 como frameflag 2 contudo os graficos anteriores sao redese nhados para usar a nova escala e 9 como frameflag 8 porem aumentados para produzir melhores rotulos dos eixos default axesflag Especifica como os eixos serao desenhados podendo ter um valor inteiro tal que 0 nada e desenhado em torno do grafico 1 eixos desenhados com o eixo de ordenadas mostrado a esquerda 2 grafico contornado por uma caixa sem marcadores 3 eixos desenhados com o eixo de ordenadas mostrado a direita 4 eixos desenhados centrados no meio do contorno da caixa e 5 eixos desenhados de modo a cruzar o ponto 00 e caso este ponto nao esteja dentro da area exibida entao os eixos nao aparecerao nax Atribui os rotulos e define as marcas nos eixos quando a opcao axesflag 1 for usada Os valores sao definidos por um vetor de quatro elementos inteiros nx Nx ny Ny tal que Nx numero de marcas principais a ser usado no eixo das abscissas nx numero de submarcas a serem desenhadas entre marcas no eixo das abscissas Ny e ny fornecem informacoes similares mas para o eixo das ordenadas Se a opcao axesflag nao for usada entao a opcao nax supoe que axesflag 1 leg Esta opcao define as legendas referentes a cada curva devendo ser uma cadeia de carac teres na forma legenda 1legenda 2legenda n sendo legenda i o tıtulo correspondente a iesima curva Se essa opcao nao for definida e assumido o valor 96 Capıtulo 5 Graficos Exemplos A seguir serao mostrados alguns graficos gerados pela funcao fplot2d A lista de comandos x 200120 define valores de x deffyfxysinxx define funcao fplot2dxf esboca grafico xtitlefx senx xxfx titulos e rotulos produzem o grafico apresentado na Figura 53a apenas com o tıtulo e os rotulos dos eixos Os comandos abaixo geram o grafico da Figura 53b com o uso das opcoes style e rect fplot2dxfstyle10rect15 10 15 10 grafico com style e rect xtitlefx senx xxfx titulos e rotulos a Tıtulo e rotulos b Opcoes style e rect Figura 53 Esbocos de fx senxx pela funcao fplot2d O comando abaixo apresenta as opcoes frameflag e axesflag produzindo o grafico da Figura 54a fplot2dxfframeflag4axesflag5 grafico com frameflag e axesflag As opcoes nax e leg podem ser vistas no comando abaixo que gera o grafico da Figura 54b fplot2dxfnax5 10 4 8legsenxx grafico com nax e leg Para mais informacoes sobre os comandos para manipulacao de graficos bidimensionais use help fplot2d 52 Graficos tridimensionais 97 a Opcoes frameflag e axesflag b Opcoes nax e leg Figura 54 Esbocos de fx senxx pela funcao fplot2d com opcoes 52 Graficos tridimensionais De uma maneira similar aos graficos bidimensionais o SCILAB possui varios comandos para que graficos tridimensionais sejam tambem facilmente esbocados Serao descritas a seguir de modo sucinto algumas funcoes com esta finalidade Para mais informacoes sobre essas funcoes deve ser utilizado o comando help graphics 521 Funcao meshgrid A funcao matriz Xmatriz Y meshgridvetor xvetor y transforma o do mınio especificado por vetor x e vetor y em matrizes matriz X e matriz Y que possam ser usadas para avaliar funcoes de duas variaveis e fazer esbocos tridimensionais de malhas e superfıcies As linhas de matriz X sao copias de vetor x e as colunas de matriz Y sao copias de vetor y x 1052 define vetor x x 1 05 0 05 1 15 2 y 1051 define vetor y y 1 05 0 05 1 XY meshgridxy cria matrizes X e Y Y 1 1 1 1 1 1 1 05 05 05 05 05 05 05 0 0 0 0 0 0 0 05 05 05 05 05 05 05 98 Capıtulo 5 Graficos 1 1 1 1 1 1 1 X 1 05 0 05 1 15 2 1 05 0 05 1 15 2 1 05 0 05 1 15 2 1 05 0 05 1 15 2 1 05 0 05 1 15 2 Z X Y operacao com X e Y Z 2 15 1 05 0 05 1 15 1 05 0 05 1 15 1 05 0 05 1 15 2 05 0 05 1 15 2 25 0 05 1 15 2 25 3 522 Funcao plot3d Esta funcao e uma generalizacao da funcao plot vista na Secao 51 para esbocos tridimen sionais Sua sintaxe e plot3dmatriz Xmatriz Ymatriz Zargumentos onde matriz X matriz Y e matriz Z sao matrizes de mesmas dimensoes contendo as coordenadas tridimensionais dos pontos a serem exibidos e argumentos e um conjunto opcional que define o estilo do grafico na forma opcao 1 valor 1 opcao n valor n O argumento opcao i pode ser alpha theta leg flag e ebox alpha e theta Sao ˆangulos em graus que definem as coordenadas esfericas do ponto do observador O argumento theta descreve o ˆangulo no plano xy e alpha em torno do eixo z Se nao forem especificados sao assumidos os valores predefinidos alpha 35 e theta 45 leg Define os rotulos referentes a cada um dos trˆes eixos devendo ser uma cadeia de caracteres na forma legenda xlegenda ylegenda z sendo legenda i correpondente ao iesimo eixo Se essa opcao nao for fornecida entao e assumido o valor flag Essa opcao e um vetor numerico com trˆes elementos flag modotipocaixa O elemento inteiro modo define a cor da superfıcie Se positivo entao a superfıcie e desenhada com a cor modo e o contorno de cada faceta e desenhado com estilo de linha e cor definidos 52 Graficos tridimensionais 99 Se ele for nulo entao somente a malha da superfıcie e desenhada e se ele for negativo entao a superfıcie e desenhada com a cor modo e o contorno da faceta nao e desenhado O segundo elemento inteiro tipo define a escala tal que 0 o grafico e feito usando a escala 3D atual 1 reescala automaticamente a caixa 3D com razao de aspecto extremo e os contornos sao definidos pelo valor do argumento opcional ebox 2 reescala automaticamente a caixa 3D com razao de aspecto extremo e os contornos sao computados usando os dados fornecidos 3 3D isometrico com limites da caixa fornecido por ebox 4 3D isometrico com limites derivados dos dados fornecidos 5 limites isometricos expandidos 3D com os limites da caixa fornecidos por ebox e 6 limites isometricos expandidos 3D com limites derivados dos dados fornecidos O terceiro elemento inteiro caixa define a moldura em torno do grafico tal que 0 nada e desenhado em torno do grafico 1 o mesmo que o anterior porque ainda nao esta imple mentado 2 somente os eixos atras da superfıcie sao desenhados 3 uma caixa em torno da superfıcie e desenhada e os tıtulos sao adicionados e 4 uma caixa em torno da superfıcie e desenhada e tıtulos e eixos sao adicionados ebox Esta opcao define os limites das trˆes coordenadas do grafico com os valores dados em um vetor de seis elementos ebox Xmin Xmax Ymin Ymax Zmin Zmax Este argumento e usado junto com tipo da opcao flag caso tipo tenha o valor 1 3 ou 5 Se a opcao flag nao for fornecida entao ebox nao e considerado Exemplos Para produzir o esboco da funcao z senx cosy2 no intervalo 3 x 3 e 2 y 2 mostrado na Figura 55a utilizase os comandos XY meshgrid30232022 cria matrizes X e Y a partir de vetores Z sinXcosY2 calcula pontos da funcao plot3dXYZ desenha grafico 3D Nesta figura foram utilizados os valores predefinidos alpha 35 e theta 45 graus A Figura 55b apresenta o grafico com os valores alterados para alpha 30 e theta 60 usando o comando plot3dXYZalpha30theta60 Quando os argumentos tˆem os valores alterados para alpha 60 e theta 30 pelo co mando abaixo o grafico e rotacionado do modo mostrado na Figura 56a plot3dXYZalpha60theta30 100 Capıtulo 5 Graficos a Opcoes alpha 35 e theta 45 b Opcoes alpha 30 e theta 60 Figura 55 Esbocos de z senx cosy2 usando a funcao plot3d a Opcoes alpha 60 e theta 30 b Opcoes alpha 80 e theta 230 Figura 56 Esbocos de z senx cosy2 usando plot3d com variacao de alpha e theta 52 Graficos tridimensionais 101 Um grafico com a orientacao dos eixos mais natural e apresentado na Figura 56b sendo obtido pelo comando com alpha 80 e theta 230 plot3dXYZalpha80theta230 Um exemplo de uso da opcao leg pode ser visto na Figura 57a obtida pelos comandos legenda eixo xeixo yeixo z define legenda legenda eixo xeixo yeixo z plot3dXYZalpha80theta230leglegenda Acrescentando a opcao flag com os argumentos modo 0 tipo 2 e caixa 3 pelo comando abaixo temse a Figura 57b plot3dXYZalpha80theta230leglegendaflag0 2 3 a Opcao leg b Opcoes leg e flag Figura 57 Esbocos de z senx cosy2 usando plot3d com as opcoes leg e flag 523 Funcao mesh A funcao meshmatriz Xmatriz Ymatriz Z produz o esboco de uma malha na superfıcie especificada pelas matrizes matriz X matriz Y e matriz Z Os comandos abaixo geram o esboco mostrado na Figura 58a XY meshgrid30232022 define as matrizes X e Y Z sinXcosY2 define a matriz Z com a funcao meshXYZ desenha a malha xgrid1 coloca a grade xtitlemesheixo xeixo yeixo z titulos e rotulos 102 Capıtulo 5 Graficos a Funcao mesh b Funcao surf Figura 58 Esbocos de z senx cosy2 com diferentes funcoes 524 Funcao surf A funcao surfmatriz Xmatriz Ymatriz Z produz uma superfıcie sombreada tridimensional especificada pelas matrizes matriz X matriz Y e matriz Z Deste modo os comandos abaixo produzem a Figura 58b XY meshgrid30232022 define as matrizes X e Y Z sinXcosY2 define a matriz Z com a funcao surfXYZ desenha a superficie xtitlesurfeixo xeixo yeixo z titulos e rotulos xgrid1 coloca a grade 53 Janela de figura As figuras geradas pelo SCILAB podem ser facilmente modificadas impressas ou gravadas em um arquivo para posterior impressao ou inclusao em um texto Uma figura e gerada na janela Scilab Graphic0 que apresenta cinco botoes File Zoom UnZoom 3D Rot e Edit Escolhendo File aparecem varias opcoes entre as quais Export com a qual surge a janela Xscilab mostrada na Figura 59 com varias opcoes para produzir um arquivo com o grafico 54 Exercıcios 103 Figura 59 Janela para gerar arquivo com figura 54 Exercıcios Secao 51 Graficos bidimensionais 51 Seja a funcao y e1x10 cosxx Gerar uma tabela com 20 pontos para 5 x 5 e exibir o grafico da funcao usando o comando plot colocando rotulos e grade 52 Repetir a operacao acima usando 50 pontos e sem usar grade 53 Utilizar a funcao fplot2d no Exercıcio 51 variando os argumentos opcionais 54 Gerar uma tabela de 40 pontos para y senxx 10 x 10 e exibir o seu grafico usando o comando fplot2d com rotulos e grade 55 Usar a funcao plot no Exercıcio 54 Secao 52 Graficos tridimensionais 56 Seja a funcao z senxy2 Gerar uma malha com 5 x 5 e 3 y 3 usando a funcao meshgrid 104 Capıtulo 5 Graficos 57 Gerar um grafico usando a funcao plot3d 58 Repetir o Exercıcio 57 variando os argumentos opcionais 59 Usando o comando surf exibir a superfıcie de z x cosx seny com π x π e π y π 510 Secao 53 Janela de figura 511 Gravar a figura do Exercıcio 59 no arquivo figuraeps utilizando a janela Xscilab 512 513 514 515 Capıtulo 6 Linguagem de programacao Nos capıtulos anteriores foram descritos os elementos fundamentais do SCILAB os quais possibilitam sua utilizacao em um modo interativo Neste capıtulo serao abordadas algumas estruturas de programacao que tornarao possıvel desenvolver programas e funcoes escritos em SCILAB tais como estruturas condicionais e estruturas de repeticao 61 Programacao Alem de poder entrar com cada comando de uma vez o SCILAB permite como qualquer outra linguagem de programacao que seja executada uma sequˆencia de comandos escrita em um arquivo Por esta razao este tipo de arquivo e chamado de roteiro script Serao apresentados dois tipos de roteiros programa e funcao 611 Programa Um arquivo contendo um programa e criado usando um editor de texto qualquer e para executar esse programa utilizase o comando exec cuja sintaxe e execarquivomodo 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 sera a execucao de acordo com a Tabela 61 Seja o programa escrito no arquivo decsomatsci para gerar uma matriz com elementos aleatorios entre 100 e 100 e decompˆola na soma de trˆes matrizes uma triangular inferior uma diagonal e outra triangular superior 105 106 Capıtulo 6 Linguagem de programacao Tabela 61 Modos de execucao do comando exec modo Descricao 0 exibe resultados nao ecoa linha de comando e nao exibe o prompt valor default 1 nada e exibido 1 ecoa cada linha de comando 2 o prompt e exibido 3 ecoa cada linha de comando e exibe o prompt 4 para antes de cada prompt e continua apos um Enter 7 modos 3 e 4 juntos editado no arquivo decsomatsci programa decomposicaomatriz Objetivo decompor uma matriz aleatoria na soma de tres matrizes uma triangular inferior uma diagonal e outra triangular superior n inputOrdem da matriz gera matriz n x n com elementos aleatorios com distribuicao uniforme no intervalo 01 A fix200grandnndef05onesnn D diagdiagA obtem matriz diagonal L trilA D matriz triangular inferior com diagonal nula U triuA D matriz triangular superior com diagonal nula A L D U Executando com modo 1 para ecoar cada linha de comando execdecsomatsci1 produz os resultados editado no arquivo decsomatsci programa decomposicaomatriz Objetivo decompor uma matriz aleatoria na soma de tres matrizes uma triangular inferior uma diagonal e outra triangular superior n inputOrdem da matriz Ordem da matriz 3 gera matriz n x n com elementos aleatorios com distribuicao uniforme no intervalo 01 A fix200grandnndef05onesnn D diagdiagA obtem matriz diagonal L trilA D matriz triangular inferior com diagonal nula U triuA D matriz triangular superior com diagonal nula A L D U 61 Programacao 107 A 62 67 82 72 74 55 81 93 26 L 0 0 0 72 0 0 81 93 0 D 62 0 0 0 74 0 0 0 26 U 0 67 82 0 0 55 0 0 0 Um programa tem acesso as variaveis no espaco de trabalho e as variaveis criadas por ele farao parte do espaco de trabalho No exemplo acima as matrizes A D L e U foram criadas no espaco de trabalho O comando halt interrompe a execucao do SCILAB ate que se tecle Enter Qualquer comando digitado entre o prompt e o Enter sera ignorado a 1 comando qualquer a 1 halt causa a interrupcao no SCILAB haltb 2 atribui o valor 2 a variavel b b a atribuicao acima nao foi efetuada error 4 Undefined variable b 612 Subprograma function Um outro tipo de arquivo de roteiro e usado para o proprio usuario criar novas funcoes para o SCILAB Sua sintaxe e function parametros saıda nome funcao parametros entrada comandos endfunction sendo function uma palavrachave que determina o inıcio da funcao parametros saıda e um conjunto de variaveis contendo os argumentos gerados pela funcao separados por vırgula e delimitados por e nome funcao e uma cadeia de caracteres que especifica o nome da funcao e parametros entrada e um conjunto de variaveis com os argumentos fornecidos 108 Capıtulo 6 Linguagem de programacao a funcao separados por vırgula e delimitados por e Os parametros entrada sao opcionais e mesmo no caso de sua omissao os parˆenteses devem ser mantidos Os comandos especificam o conteudo da funcao e a palavrachave endfunction o seu final Por exemplo seja o arquivo parabolasci contendo uma funcao para calcular as duas raızes de uma parabola editado no arquivo parabolasci function raiz1raiz2 parabolaabc Objetivo calcular as duas raizes de uma parabola parabolaabc calcula as duas raizes da parabola PX ax2 bx c 0 retornandoas em raiz1 e raiz2 delta sqrtb24ac raiz1 b delta 2a raiz2 b delta 2a endfunction Os argumentos que devem ser fornecidos a funcao parˆametros de entrada sao a b e c e os valores gerados pela funcao parˆametros de saıda sao raiz1 e raiz2 O comando exec apresentado na Secao 611 Programa tambem e utilizado para que as functions editadas em um dado arquivo passem a fazer parte da biblioteca do SCILAB para uso posterior Por exemplo existsparabola verifica que a funcao parabola nao existe ans 0 execparabolasci1 funcao carregada para o espaco de trabalho existsparabola verifica que parabola agora existe ans 1 Para calcular as raızes de px 16x2 8x 5 fazse r1r2 parabola1685 executa a funcao parabola r2 025 05i r1 025 05i Caso o arquivo contendo uma function seja reeditado e salvo o comando exec deve ser novamente executado para atualizala no espaco de trabalho fato que gera uma mensagem de aviso Ao contrario do programa no qual as variaveis sao globais em uma function a lista dos parametros entrada e as variaveis internas sao locais ou seja elas nao tem acesso as 61 Programacao 109 variaveis do espaco de trabalho Por sua vez os parametros saıda sao criados no espaco de trabalho No caso da function parabola acima a variavel raizes e criada no espaco de trabalho do SCILAB E possivel chamar uma function com numeros diferentes de parˆametros de entrada ou de saıda do que aqueles definidos no arquivo que a contem Isto e feito pela funcao argn cuja sintaxe e numero parametros saıdanumero parametros entrada argn Ao evocar argn dentro da function sao fornecidos o numero parametros saıda e o numero parametros entrada O segundo argumento e opcional A function pegaso escrita no arquivo pegasosci calcula o zero pertence ao intervalo a b da funcao definida na cadeia de caracteres funcao utilizando o robusto e eficiente metodo pegaso 2 Nesta function e utilizado o comando eval para avaliacao de expressao o qual sera descrito na Secao 44 Execucao de expressoes editado no arquivo pegasosci function RaizCondErroIter pegasofuncaoabTolerIterMaxExibe Objetivo Calcular raiz de equacao pelo metodo pegaso PEGASOFUNCAOABTOLERITERMAXEXIBE calcula a raiz de uma equacao FX0 contida no intervalo A B com tolerancia TOLER e com no maximo ITERMAX iteracoes usando o metodo pegaso sendo a funcao FX dada na cadeia de caracteres FUNCAO EXIBE especifica se os resultados intermediarios serao mostrados O nao exibe e 1 exibe FUNCAO A e B sao necessarios enquanto que TOLER ITERMAX e EXIBE terao valores predefinidos caso nao sejam fornecidos nargsainargent argn numero de argumentos de saida e de entrada if nargent 3 errorNumero de argumentos insuficientes end if nargent 4 Toler 1e10 end if nargent 5 IterMax 100 end if nargent 6 Exibe 0 end x a Fa evalfuncao x b Fb evalfuncao if Exibe 0 disp Calculo de raiz de equacao pelo metodo pegaso dispiter a b x Fx deltax end k 0 x b Fx Fb while 1 k k 1 DeltaX Fx Fb Fa b a x x DeltaX Fx evalfuncao 110 Capıtulo 6 Linguagem de programacao if Exibe 0 mprintf3i115f115f115f145e145e kabxFxDeltaX end if absDeltaX Toler absFx Toler k IterMax break end if FxFb 0 a b Fa Fb else Fa Fa Fb Fb Fx end b x Fb Fx end Raiz x if nargsai 1 CondErro absDeltaX Toler absFx Toler end if nargsai 2 Iter k end endfunction O comando errormensagem exibe a cadeia de caracteres mensagem e interrompe a execucao de um programa ou funcao Os argumentos funcao a e b devem ser fornecidos senao uma mensagem de erro sera exibida e a execucao da function interrompida No entanto os argumentos Toler tolerˆancia da raiz IterMax numero maximo de iteracoes e Exibe exibe resultados intermediarios sao opcionais caso nao sejam incluıdos na lista de argumentos de entrada serao atribuıdos valores predefinidos Se forem especificados mais de seis argumentos de saıda havera a exibicao de uma mensagem de erro e a interrupcao da function Se nenhum ou apenas um argumento de saıda for especificado entao sera retornado a raiz da equacao na variavel Raiz Se forem dois argumentos entao alem da Raiz sera retornado a condicao de erro na variavel CondErro Se forem trˆes argumentos de saıda entao serao retornados Raiz CondErro e o numero de iteracoes Iter Mais de trˆes argumentos de saıda causam a exibicao de uma mensagem de erro e a nao execucao da function pegaso Para calcular a raiz de fx cosx2 1x 1 0 pertencente ao intervalo 0 2 com tolerˆancia ǫ 102 com no maximo 10 iteracoes listando os resultados intermediarios e retornado a raiz a condicao de erro e o numero de iteracoes execpegasosci0 carrega a funcao pegaso no espaco de trabalho rei pegasocosx21sqrtx1021e2101 executa pegaso Calculo de raiz de equacao pelo metodo pegaso iter a b x Fx deltax 1 000000 200000 047920 872828e01 152080e00 2 200000 047920 099219 141128e00 512995e01 3 200000 099219 168045 409987e01 688254e01 4 099219 168045 152552 383307e01 154933e01 5 168045 152552 160038 154647e02 748614e02 6 168045 160038 160340 155627e04 302353e03 i 6 61 Programacao 111 e F r 16034004 Por sua vez calculando a mesma raiz com os argumentos de entrada opcionais previamente atribuıdos ou seja tolerˆancia ǫ 1010 maximo de 100 iteracoes nao listando os resultados intermediarios e alem disto retornado somente a raiz e a condicao de erro fazse executa pegaso com tres argumentos re pegasocosx21sqrtx102 e F r 16033703 Conforme ja mencionado as variaveis de uma function sao locais ou seja so podem ser refe renciadas internamente nao sendo reconhecidas pelo espaco de trabalho e outras functions No entanto alem do uso de argumentos um outro modo de trocar informacoes entre o espaco de trabalho e as functionss e pelo uso de variaveis globais A declaracao global lista de variaveis faz com que as variaveis especificadas na lista de variaveis separadas por branco tornemse globais e portanto esta declaracao deve aparecer no programa e nas functions de interesse Por exemplo seja a funcao no arquivo soma diagonalsci para calcular a soma da diagonal da matriz resultante do produto das matrizes A e B definidas no espaco de trabalho editado no arquivo somadiagonalsci function somadiag somadiagonal Objetivo calcular a soma da diagonal do produto das matrizes AB do espaco de trabalho global A B somadiag sumdiagAB endfunction A sua execucao fornece execsomadiagonalsci0 carrega somadiagonal no espaco de trabalho A 1 2 3 4 B 5 6 7 8 define as matrizes A e B somdg somadiagonal executa a funcao somadiagonal somdg 69 O uso de variaveis globais dificulta o entedimento e a modificacao das functions alem de tornar os modulos do programa menos independentes Por estas razoes a utilizacao de variaveis globais deve ser evitada 112 Capıtulo 6 Linguagem de programacao O comando return colocado dentro de uma function causa um retorno normal para o comando seguinte aquele que chamou a function Ja o comando varesp 1varesp n return varloc 1varloc n faz com que as variaveis locais varloc i sejam copiadas no espaco de trabalho com os correspondentes nomes varesp i Seja a funcao descrita no arquivo consistenciasci editado no arquivo consistenciasci function y consisteab Objetivo exemplo de consistencia de dados if a 0 b 1 y i ef returnab end y log10a sqrt1b endfunction O seu uso resulta em execconsistenciasci0 carrega a function do arquivo x consiste1003 uso da function com argumentos validos x 4 x consiste1003 uso com argumentos invalidos x i ef verifica que as variaveis estao no espaco de trabalho e 100 f 3 Uma funcao pode tambem ser definida na janela de comando pela funcao deff deffparam saıda nome funcao param entrada comandos onde param saıda e uma lista contendo os argumentos gerados pela funcao separados por vırgula e delimitados por e nome funcao e uma cadeia de caracteres que especifica o nome da funcao e param entrada e uma lista com os argumentos fornecidos a funcao separados por vırgula e delimitados por e A matriz de caracteres comandos especifica o corpo da funcao Por exemplo seja a funcao para multiplicar e dividir dois numeros deffmuldiv operacaoabmul a bdiv a bdefine funcao multiplica divide operacao32 uso da funcao operacao divide 15 multiplica 6 62 Estruturas condicionais 113 62 Estruturas condicionais Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condicao for satisfeita ou nao possibilitando desta forma alterar o fluxo natural de comandos Esta condicao e representada por uma expressao logica 621 Estrutura ifend A estrutura condicional mais simples do SCILAB e if condicao comandos end Se o resultado da expressao logica condicao for T verdadeiro entao a lista comandos sera executada Se o resultado for F falso entao comandos nao serao executados Con sidere o programa logaritmo decimalsci programa logaritmodecimal Objetivo calcular logaritmo decimal x inputEntre com x if x 0 LogDec log10x dispx LogDec end e a execucao para x 0001 execlogaritmodecimalsci1 Entre com x 0001 0001 3 Neste exemplo o logaritmo decimal de x sera atribuıdo a LogDec se e somente se o valor de x for maior que 0 622 Estrutura ifelseend No caso de haver duas alternativas uma outra estrutura condicional deve ser usada if condicao comandos 1 else comandos 2 end Se o resultado da expressao logica condicao for T verdadeiro entao somente a lista contendo comandos 1 sera executada Se condicao for F falso entao sera a lista 114 Capıtulo 6 Linguagem de programacao comando 2 a unica a ser executada O programa funcao modularsci utiliza a funcao modular fx 2x Se x for positivo ou nulo entao sera atribuıdo a variavel fx o resultado de 2x todavia se x for negativo entao fx sera igual a 2x programa funcaomodular Objetivo avaliar uma funcao modular x inputEntre com x if x 0 fx 2 x else fx 2 x end dispx fx Executando com x 3 produz execfuncaomodularsci1 Entre com x 3 3 6 623 Estrutura ifelseifend Quando houver mais de duas alternativas a estrutura ifelseend do SCILAB tornase if condicao 1 comandos 1 elseif condicao 2 comandos 2 elseif condicao 3 comandos 3 else comandos n end A lista comandos 1 sera executada se condicao 1 for igual a T verdadeiro ja a lista comandos 2 sera executada se condicao 2 for T e assim para as outras condicoes Se nenhuma das condicoes for T entao comandos n sera executada Quando a condicao i for satisfeita e os comandos i executados a estrutura ifelseifend sera abandonada ou seja o controle do processamento sera transferido para o comando imediatamente apos o end Seja o programa modulosci para calcular o valor absoluto de um numero real ou complexo programa modulo Objetivo calcular o valor absoluto de um numero real ou complexo 62 Estruturas condicionais 115 a inputEntre com a if imaga 0 b sqrtreala2imaga2 elseif a 0 b a else b a end dispa b Para a 3 4i execmodulosci1 Entre com a 3 4 i 3 4i 5 Deste modo foi executado o primeiro comando para o qual a condicao imaga 0 foi satisfeita Assim na estrutura ifelseifend uma unica lista de comandos e executada 624 Estrutura selectcaseend Esta estrutura e similar a ifelseifend e sua sixtaxe e select expressao case expressao 1 then comandos 1 case expressao 2 then comandos 2 case expressao 3 then comandos 3 case expressao n then comandos n else comandos e end A lista comandos 1 sera executada se expressao for igual a expressao 1 A lista comandos 2 sera executada se expressao for igual a expressao 2 e assim para as outras expressoes Se expressao nao for igual a nenhuma das expressoes anteriores entao comandos e sera executada Cabe ressaltar que somente uma lista de comandos sera executada Considere o programa posicao poltronasci para determinar a posicao de uma poltrona para quem entra em um ˆonibus programa posicaopoltrona Objetivo determinar a posicao de uma poltrona em onibus poltrona inputEntre com o numero da poltrona fila fixpoltrona4 1 select modulopoltrona4 116 Capıtulo 6 Linguagem de programacao case 0 then if poltrona 0 fila fila 1 posicao esquerda corredor mprintfpoltrona3i na fila3i a s poltronafilaposicao else posicao nao existe mprintfpoltrona3i s poltronaposicao end case 1 then posicao direita janela mprintfpoltrona3i na fila3i a s poltronafilaposicao case 2 then posicao direita corredor mprintfpoltrona3i na fila3i a s poltronafilaposicao case 3 then posicao esquerda janela mprintfpoltrona3i na fila3i a s poltronafilaposicao else posicao nao existe mprintfpoltrona3i s poltronaposicao end Por exemplo as posicoes das poltronas de numeros 15 42 e 5 sao execposicaopoltronasci1 Entre com o numero da poltrona 15 poltrona 15 na fila 4 a esquerda janela execposicaopoltronasci1 Entre com o numero da poltrona 42 poltrona 42 na fila 11 a direita corredor execposicaopoltronasci1 Entre com o numero da poltrona 5 poltrona 5 nao existe 63 Estruturas de repeticao As estruturas de repeticao fazem com que uma sequˆencia de comandos seja executada re petidamente ate que uma dada condicao de interrupcao seja satisfeita O SCILAB possui duas estruturas de repeticao as estruturas forend e a whileend com as quais e possıvel construir uma terceira estrutura com interrupcao no interior 63 Estruturas de repeticao 117 631 Estrutura forend A estrutura forend permite que um grupo de comandos seja repetido um numero deter minado de vezes Sua sintaxe e for variavelarranjo comandos end onde variavel e a variaveldecontrole que assume todos os valores contidos no vetor linha arranjo Assim o numero de repeticoes da lista comandos e igual ao numero de elementos no vetor arranjo A variaveldecontrole nao pode ser redefinida dentro da estrutura forend O programa primeiros imparessci mostra que a soma dos n primeiros numeros ımpares e igual ao quadrado de n programa primeirosimpares Objetivo verificar propriedade dos numeros impares n inputEntre com n Soma 0 for i 122n1 Soma Soma i end dispSoma n2 Quando executado para n 5 execprimeirosimparessci1 Entre com n 5 25 25 Para n 5 a variaveldecontrole i assume os valores 1 3 5 7 9 cuja soma e igual a 25 Para mostrar que as estruturas forend podem estar encadeadas considere o programa soma matrizsci para calcular a soma dos elementos das linhas colunas e diagonal de uma matriz programa somamatriz Objetivo calcular a soma dos elmentos das linhas colunas e diagonal de matriz A inputEntre com a matriz nlinncol sizeA SomaLinhas zerosnlin1 SomaColunas zeros1ncol SomaDiagonal 0 for i 1nlin SomaDiagonal SomaDiagonal Aii 118 Capıtulo 6 Linguagem de programacao for j 1ncol SomaLinhasi SomaLinhasi Aij SomaColunasj SomaColunasj Aij end end A SomaLinhas SomaColunas SomaDiagonal Um quadrado magico de ordem n e uma matriz com elementos nao repetidos e com valores entre 1 e n2 tal que a soma dos elementos das linhas das colunas e da diagonal sejam iguais Para o quadrado magico de ordem 4 execsomamatrizsci0 Entre com a matriz 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 A 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 SomaLinhas 34 34 34 34 SomaColunas 34 34 34 34 SomaDiagonal 34 Cumpre observar que o SCILAB possui comandos para determinar estes somatorios de um modo bem simples pelo uso da funcao sum que fornece a soma dos elementos de uma matriz ver Tabela 33 na pagina 45 632 Estrutura whileend A estrutura whileend ao contrario da forend repete um grupo de comandos um numero indeterminado de vezes Sua sintaxe e while condicao comandos 1 else comandos 2 end Enquanto a expressao logica condicao for T verdadeiro a lista comandos 1 sera repe tida Quando ela for F falsa entao a lista comandos 2 sera executada O comando else e opcional Por exemplo seja o programa precisaosci para determinar a precisao de um computador 63 Estruturas de repeticao 119 programa precisao Objetivo determinar a precisao de um computador n 0 Epsilon 1 while 1 Epsilon 1 n n 1 Epsilon Epsilon 2 end n Epsilon eps Quando executado fornece execprecisaosci0 n 53 Epsilon 1110D16 eps 2220D16 Epsilon e a chamada precisao da maquina ǫ ou seja o maior numero que somado a 1 e igual a 1 Para computadores com aritmetica IEEE ǫ 253 Comparada com a variavel especial eps 252 do SCILAB 1 eps 1 ans 2220D16 1 Epsilon 1 ans 0 Note que quando eps for somado a 1 resulta um numero maior que 1 O mesmo nao ocorre com Epsilon porque qualquer valor igual ou menor do que ele somado a 1 sera simplesmente 1 ou seja o computador ja nao consegue mais representar 1 ǫ 633 Estrutura com interrupcao no interior A estrutura whileend permite que um grupo de comandos seja repetido um numero inde terminado de vezes no entanto a condicao de interrupcao e testada no inıcio da estrutura Em varias situacoes em programacao se faz necessario interromper a execucao da repeticao verificando a condicao no interior ou final da estrutura e nao somente no seu inıcio O comando break interrompe a execucao de uma estrutura whileend ou forend e trans fere a execucao para o comando imediatamente seguinte ao end Em repeticoes aninhadas o break interrompe a execucao apenas da estrutura mais interna Assim uma repeticao com 120 Capıtulo 6 Linguagem de programacao condicao de interrupcao no interior pode ter a forma while T comandos 1 if condicao break end comandos 2 end A estrutura whileend e executada indefinidamente a princıpio pois a condicao do while e sempre T verdadeiro Contudo quando a condicao do if for satisfeita o comando break sera executado causando a interrupcao da repeticao whileend Seja o programa racionalsci para fornecer a aproximacao racional de um numero positivo com uma dada tolerˆancia programa racional Objetivo fornecer a aproximacao racional de numero positivo com dada precisao while T numero inputEntre com um numero 0 if numero 0 break end tol inputEntre com tolerancia numden ratnumerotol dispnumero num den numeronumden end Por exemplo para 2 e π execracionalsci0 Entre com um numero 0 sqrt2 Entre com tolerancia 1e5 14142136 239 169 00000124 Entre com um numero 0 pi Entre com tolerancia 1e10 31415927 208341 66317 1224D10 Entre com um numero 0 0 Ele lista continuamente a representacao racional de um numero fornecido enquanto este for positivo 64 Depuracao de programa 121 64 Depuracao de programa O comando pause interrompe a execucao de um programa e transfere o controle para o teclado quando em uma funcao ele interrompe a sua execucao No modo de pausa aparece o sımbolo do prompt indicando o nıvel da pausa por exemplo 1 E disponibilizado entao um novo espaco de trabalho no qual todas as variaveis de nıvel mais baixo estao acessıveis mesmo as variaveis de uma funcao Para voltar ao espaco de trabalho que evocou a pausa usase o comando return Conforme mencionado na Secao 612 Subprograma function o comando varesp 1varesp n return varloc 1varloc n faz com que as variaveis locais varloc i sejam copiadas no espaco de trabalho que evocou a pausa com os correspondentes nomes varesp i Se o comando nao for usado entao as variaveis de nıvel mais baixo estao protegidas e nao podem ser modificadas Seja a funcao no arquivo avaliasci editado no arquivo avaliasci function expressao avaliaa divide a10 raiz sqrta logdec log10a expressao divide raiz logdec endfunction e sua execucao execavaliasci1 carrega a funcao para o espaco de trabalho valor avalia100 avalia a funcao valor 22 existsraiz verifica a inexistencia da variavel local raiz ans 0 A variavel raiz nao existe no espaco de trabalho por se tratar de uma variavel local Se for colocado o comando pause todas as variaveis definidas antes dele estarao disponıveis Por exemplo se for colocado depois de raiz sqrta execavaliasci1 carrega a funcao modificada Warning redefining function avalia Use funcprot0 to avoid this message valor avalia100 avalia a funcao entrando no modo de pausa 1raiz existencia da variavel local raiz no novo espaco de trabalho ans 10 122 Capıtulo 6 Linguagem de programacao 1existslogdec inexistencia da variavel logdec ans 0 1return valor 22 Neste caso a variavel local raiz esta disponıvel no espaco de trabalho e logdec nao esta porque ela foi definida depois do pause 65 Exercıcios Secao 61 Programacao 61 Criar o arquivo almaxminsci n inputOrdem da matriz A randnn maior maxA menor minA Executar o programa acima para n 5 10 e 30 62 Escrever uma function para calcular a norma2 de um vetor 63 Escrever uma function para calcular a norma de um vetor 64 Dada a matriz triangular inferior L lij e o vetor c escrever uma function para calcular y tal que Ly c l11 l21 l22 l31 l32 l33 ln1 ln2 ln3 lnn y1 y2 y3 yn c1 c2 c3 cn 65 Dada a matriz triangular superior U uij e o vetor d escrever uma function para calcular x tal que Ux d u11 u12 u13 u1n u22 u23 u2n u33 u3n unn x1 x2 x3 xn d1 d2 d3 dn 65 Exercıcios 123 Secao 62 Estruturas condicionais 66 Qual o valor de LogDec no exemplo sobre a estrutura ifend mostrada na Secao 621 para x 2 67 Encontrar o valor de fx no exemplo sobre ifelseend da Secao 622 para x 10 68 Achar o valor de b no exemplo de ifelseifend da Secao 623 para a 3 69 Qual o valor de b no exemplo sobre a estrutura ifelseifend da Secao 623 para a 34i 610 Encontrar as posicoes das poltronas numeros 4 25 e 40 usando o exemplo da estrutura selectcaseend da Secao 624 Secao 63 Estruturas de repeticao 611 Determinar o valor de Soma no exemplo sobre a estrutura forend mostrada na Secao 631 para n 7 612 Calcular a soma das linhas das colunas e da diagonal de uma matriz de Toeplitz de ordem 5 613 Explicar como e feita a determinacao da precisao de um computador 614 Calcular a norma2 do vetor x 1e200 2e200 3e200 usando a function escrita no Exercıcio 62 Qual a alteracao a ser feita para que a funcao calcule corretamente 615 Calcular a raiz de fx senxx 4 0 que esta no intervalo 1 5 utilizando a function pegaso mostrada na Secao 612 Secao 64 Depuracao de programa 616 617 618 619 620 124 Capıtulo 6 Linguagem de programacao Capıtulo 7 Comandos de entrada e saıda O SCILAB fornece algumas facilidades para especificar o formato de saıda dos resultados gravacao e leitura das variaveis de uma sessao de trabalho e de arquivos 71 Formato de exibicao Para saber o valor de uma variavel basta entrar com o seu nome O resultado e exibido usando um formato predefinido pi pi 31415927 O comando dispvariavel e usado para exibir o conteudo de variavel sem mostrar o seu nome ou para exibir uma cadeia de caracteres contida na variavel dispnumeros aleatorios entre 0 e 1 dispgrand26def numeros aleatorios entre 0 e 1 08147237 09057919 01269868 09133759 06323592 00975404 0135477 08350086 09688678 02210340 03081671 05472206 Ao exibir um resultado numerico o SCILAB segue diversas regras Se o resultado for um numero real ponto flutuante ele e mostrado com dez caracteres incluindo o ponto decimal e o sinal Quando o sinal for positivo e exibido um caracter branco em seu lugar Se os dıgitos significativos do resultado estiverem fora desta faixa entao o resultado sera exibido em notacao cientıfica dispe1e5 e1e5 e1e10 e1e10 00000272 27182818 2718D10 2718D10 125 126 Capıtulo 7 Comandos de entrada e saıda A funcao formattipodıgitos e usada para alterar o formato numerico de exibicao onde tipo e um dos caracteres v ou e para indicar formato variavel ou em notacao cientıfica respectivamente O parˆametro dıgitos indica o numero maximo de caracteres a serem exibidos incluindo sinal ponto decimal e no caso de formato e os quatro caracteres referentes a potˆencia de 10 Caso esse parˆametro nao seja fornecido e assumido o valor 10 Uma vez definido o formato de exibicao ele e mantido ate que seja modificado por um outro comando format formatv8 pi pi com formato variavel com 8 caracteres ans 314159 formatv12 pi pi com formato variavel com 12 caracteres ans 3141592654 formate8 eps eps em notacao cientifica com 8 caracteres ans 22D16 formate12 eps eps em notacao cientifica com 12 caracteres ans 222045D16 sqrteps verificar que o ultimo formato e mantido ans 149012D08 A funcao mprintf exibe dados formatados pertencentes ao espaco de trabalho na tela prin cipal do SCILAB Sua sintaxe e mprintfformatovariaveis onde a cadeia de caracteres formato contem caracteres alfanumericos eou especificacoes de conversao para exibir na tela a lista variaveis Estas especificacoes de conversao sao delimitadas pelo caracter e uma das letras i e f g ou s de acordo com a Tabela 71 Tabela 71 Formatos de exibicao Formato Especificacao ni usado para valores inteiros sendo n o tamanho do campo de exibicao ndf notacao na forma 888888 sendo n o tamanho do campo numero total de caracteres exibidos e d o numero de dıgitos decimais nde notacao na forma 8888 88 sendo n o tamanho do campo numero total de caracteres exibidos e d o numero de dıgitos decimais ndg equivalente a nde ou ndf dependendo de qual formato for mais curto alem disso os zeros insignificantes nao sao exibidos ns exibe caracteres em um campo de tamanho n 72 Espaco de trabalho 127 Deste modo mprintfa precisao deste computador 125e eps2 a precisao deste computador 111022e16 onde e usado para comecar uma nova linha Quando for necessario ter o caracter exibido basta usalo duas vezes mprintfo valor de pi e aproximadamente1310f pi o valor de pi e aproximadamente 31415926536 Assim a exibicao pode ser feita pelos comandos disp e mprintf x 1053 M xsqrtx formatv10 dispM 1 1 15 12247449 2 14142136 25 15811388 3 17320508 mprintf53f105f M 1000 100000 1500 122474 2000 141421 2500 158114 3000 173205 72 Espaco de trabalho Durante uma sessao as variaveis utilizadas residem no espaco de trabalho do SCILAB e podem ser armazenadas em um arquivo quando desejado Conforme visto o comando who lista o nome das variaveis que estao sendo usadas ou seja que estao presentes no espaco de trabalho Por sua vez o comando whos fornece informacoes mais detalhadas sobre essas variaveis Estes dois comandos listam as variaveis criadas pelo usuario e as definidas pelo proprio SCILAB Por exemplo no inıcio de uma sessao quando o usuario criou apenas as variaveis a b C e d temse a 25 b 12 32 54 C 21 34 61 93 d caracteres a 25 b 12 32 54 C 21 34 128 Capıtulo 7 Comandos de entrada e saıda 61 93 d caracteres whos Name Type Size Bytes whos function 9000 d string 1 by 1 64 C constant 2 by 2 48 b constant 1 by 3 40 a constant 1 by 1 24 M constant 5 by 2 96 algumas variaveis foram removidas da lista t boolean 1 by 1 24 f boolean 1 by 1 24 eps constant 1 by 1 24 io constant 1 by 2 32 i constant 1 by 1 32 e constant 1 by 1 24 pi constant 1 by 1 24 As variaveis no espaco de trabalho criadas pelo usuario podem ser removidas incondicio nalmente usando o comando clear clear tempo raiz remove as variaveis tempo e raiz clear remove todas as variaveis do espaco de trabalho Atencao nao sera solicitada a confirmacao Todas as variaveis estarao irremediavelmente removidas 721 Gravar dados O comando save e usado para gravar as variaveis do espaco de trabalho em um arquivo Sua sintaxe e savenome do arquivovariaveis onde nome do arquivo e uma cadeia de caracteres que especifica o nome do arquivo binario onde variaveis do espaco de trabalho serao gravadas e variaveis e uma lista de nomes que define quais as variaveis do espaco de trabalho criadas pelo usuario serao gravadas no arquivo nome do arquivo As variaveis devem estar separadas por vırgula Se os nomes variaveis nao forem especificados entao todas as variaveis do espacco de trabalho criadas pelo usuario serao salvas Por exemplo considerando as variaveis a b C e d criadas acima savequatrodat salva as quatro variaveis no arquivo quatrodat saveduasdatbd salva as variaveis b e d no arquivo duasdat 72 Espaco de trabalho 129 722 Recuperar dados O comando load e usado para recuperar os dados gravados em um arquivo pelo comando save e colocalos de volta no espaco de trabalho Sua sintaxe e loadnome do arquivovariaveis onde nome do arquivo e variaveis sao os mesmos definidos para o comando save Se o arquivo contiver uma variavel com o mesmo nome de uma ja existente no espaco de trabalho entao o comando load faz com que a variavel do espaco de trabalho seja substituıda pela variavel existente no arquivo clear remove todas as variaveis do espaco de trabalho d novos atribui novo valor a variavel d d novos loadduasdatbd recupera as variaveis b e d do arquivo duasdat d verifica o valor de d ans caracteres 723 Entrada de dados A leitura de dados pelo teclado e feita pelo comando input cuja sintaxe e variavel inputmensagemstring O comando acima exibe a cadeia de caracteres mensagem e espera ate que o usuario forneca o valor de variavel pelo teclado O segundo argumento string ou simplesmente s e opcional e informa que variavel e uma cadeia de caracteres Indice inputentre com o indice entre com o indice 13 Indice 13 cadeia de caracteres com parametro s texto inputfornecer o texto s fornecer o texto programa SCILAB texto programa SCILAB caracteres sem parametro s mas com texto inputfornecer o texto fornecer o texto programa SCILAB texto programa SCILAB 130 Capıtulo 7 Comandos de entrada e saıda 724 Janela de mensagem A interacao SCILAB usuario pode tambem ser feita por meio de janelas de mensagens utilizando comandos tais como x mdialog e x message O comando resultado x mdialogtıtulorotulos ivalores i exibe uma janela contendo a cadeia de caracteres tıtulo com uma mensagem varios vetores de caracteres rotulos i com o nome do iesimo valor requerido e os vetores de caracteres valores i com os valores iniciais sugeridos correspondentes a rotulos i Se for acionado o botao Ok entao resultado recebera os valores sugeridos ou os outros valores digitados caso seja acionado o botao Cancel entao resultado Por exemplo nomes ComprimentoLarguraAltura define os nomes das variaveis nomes Comprimento Largura Altura valorini define os valores iniciais nenhum no caso valorini dimensao xmdialogEntre com as dimensoes nomes valorini abre janela apresenta a janela mostrada na Figura 71 Digitase os valores desejados e pressionase Ok O vetor de caracteres dimensao e apresentado Em seguida converte os caracteres para numeros utilizando a funcao eval ver Secao 44 Execucao de expressoes dimensao 123 456 789 com evaldimensao1 valor numerico do comprimento com 123 lar evaldimensao2 valor numerico da largura lar 456 alt evaldimensao3 valor numerico da altura alt 789 73 Diario 131 Figura 71 Janela do comando x mdialog Por sua vez resultado x messagetıtulobotoes i exibe uma janela contendo a cadeia de caracteres tıtulo com uma mensagem e varios vetores de caracteres botoes i com as opcoes Se for acionado o iesimo botao entao resultado i Se botoes i nao for especificado assumese o valor Ok Por exemplo o comando resp xmessageA matriz e simetrica Usar CholeskySim Nao apresenta a janela mostrada na Figura 72 Se for escolhida a opcao Sim entao a variavel resp recebera o valor 1 resp 1 Figura 72 Janela do comando x message 73 Diario Todos os comandos solicitados pelo usuario e as respostas fornecidas pelo SCILAB com ex cessao de graficos podem ser gravados em um arquivo ASCII para que possam ser impressos ou mesmo incluıdos em algum relatorio como foi feito neste texto 132 Capıtulo 7 Comandos de entrada e saıda Para esta gravacao basta usar o comando diarynome do arquivo a partir do qual a interacao SCILAB usuario sera registrada no arquivo cujo nome e dado pela cadeia de caracteres nome do arquivo A finalizacao do registro e feita por diary0 Por exemplo diarydiario cria o arquivo diario a 1 b sqrteps a 1 b 1490D08 diary0 fecha o arquivo diario O conteudo do arquivo diario e unixmore diario executa o comando more do Linux a 1 b sqrteps a 1 b 1490D08 diary0 fecha o arquivo diario 74 Leitura e gravacao de dados A transferˆencia de dados entre o espaco de trabalho e algum dispositivo de entrada e saıda arquivo em disco impressora etc aumenta a utilizacao do SCILAB visto tornar possıvel por exemplo ate a troca de informacoes com um outro programa 741 Abertura de arquivo A funcao mopen abre um arquivo sendo sua sintaxe idenarqerro mopennome do arquivopermissao Deste modo a funcao mopen associa o nome externo do arquivo dado pela cadeia de carac teres nome do arquivo a unidade idenarq que sera utilizada nos comandos de entrada e saıda no modo especificado pela permissao O escalar erro indica a ocorrˆencia de algum erro Os caracteres permitidos para permissao estao listados na Tabela 72 O caractere b indica que o arquivo e binario Se permissao for omitida entao sera assumido o valor r Caso o comando mopen tenha sucesso ao abrir o arquivo ele retornara o identificador de arquivo idenarq contendo um numero inteiro positivo e o valor de erro sera 0 Em caso de algum erro o valor de erro sera negativo O idenarq e usado com outras rotinas de entrada e saıda para identificar o arquivo no qual as operacoes serao realizadas Por exemplo 74 Leitura e gravacao de dados 133 Tabela 72 Atributos de arquivo permissao Especificacao r ou rb Abre o arquivo para leitura r ou rb Abre o arquivo para atualizacao leitura e escrita mas nao cria o arquivo w ou wb Abre o arquivo para escrita e caso necessario cria o arquivo Porem remove o conteudo do arquivo existente w ou wb Abre o arquivo para atualizacao leitura e escrita e se necessario cria o arquivo Todavia remove o conteudo do arquivo existente a ou ab Cria e abre um arquivo novo ou abre um arquivo ja existente para escrita anexando ao final do arquivo a ou ab Cria e abre um arquivo novo ou abre um arquivo ja existente para atualizacao leitura e escrita anexando ao final do arquivo fiderro mopendadosdatw abre o arquivo dadosdat para escrita erro 0 fid 1 742 Fechamento de arquivo A funcao mcloseidenarq fecha o arquivo previamente aberto pela funcao mopen cujo identificador associado a este arquivo seja idenarq Quando um arquivo e fechado a associacao entre o identificador idenarq e o arquivo fısico nome do arquivo e desfeita mclose1 fecha o arquivo dadosdat ans 0 743 Gravacao em arquivo A funcao mfprintf grava dados formatados em um arquivo e sua sintaxe e mfprintfidenarqformatovariaveis onde a cadeia de caracteres formato contem caracteres alfanumericos eou especificacoes de conversao para gravar no arquivo com identificador associado idenarq a lista contendo variaveis Estas especificacoes de conversao sao delimitadas pelo caracter e uma das letras i e f g ou s de acordo com a Tabela 71 No exemplo abaixo uma tabela contendo x x e ex para 1 x 2 e gerada e gravada no arquivo sqrtexpdat 134 Capıtulo 7 Comandos de entrada e saıda x 1022 define o vetor x tab x sqrtx expx gera a tabela tab tab 1 1 03678794 12 10954451 03011942 14 1183216 02465970 16 12649111 02018965 18 13416408 01652989 2 14142136 01353353 fiderro mopensqrtexpdatw abre arquivo sqrtexpdat para escrita erro 0 fid 1 mfprintffid52f1510f1510f tab escreve tabela no arquivo mclosefid fecha o arquivo ans 0 O conteudo do arquivo sqrtexpdat e unixmore sqrtexpdat executa o comando more do Linux 100 10000000000 03678794412 120 10954451150 03011942119 140 11832159566 02465969639 160 12649110641 02018965180 180 13416407865 01652988882 200 14142135624 01353352832 744 Leitura em arquivo A funcao mfscanf efetua a leitura de dados formatados em um arquivo sendo sua sintaxe tamanhovariaveis mfscanfnumidenarqformato onde idenarq e o identificador associado ao arquivo no qual esta sendo feita a leitura dos dados escritos no formato especificado na cadeia de caracteres formato e o parˆametro opcional num especifica o numero de vezes que o formato e usado Os dados sao con vertidos segundo a cadeia de caracteres formato e atribuıdos a lista variaveis As especificacoes de conversao sao mostradas na Tabela 71 A variavel tamanho retorna o numero de elementos que foram lidos do arquivo com sucesso fid mopensqrtexpdatr abre arquivo para leitura fid 1 nabc mfscanf1fid5f15f15f leitura de 1 linha em 3 variaveis c 74 Leitura e gravacao de dados 135 03678795 b 1 a 1 n 3 vetor mfscanf1fid5f15f15f leitura de 1 linha em 1 vetor vetor 12 10954452 03011942 matriz mfscanf2fid5f15f15f leitura de 2 linhas em 1 matriz matriz 14 1183216 02465970 16 12649111 02018965 A funcao mseeknumeroidenarqposicao e usada para posicionar o acesso a um registro do arquivo cujo identificador seja idenarq A nova posicao e especificada a partir da distˆancia dada pelo numero de bytes do inıcio se posicao set ou da posicao atual se posicao cur ou do fim de arquivo se posicao end Se o parˆametro posicao nao for especificado e assumido o valor set mseek0fid posiciona leitura para o inicio do arquivo matriz mfscanf6fid5f15f15f leitura das 6 linhas em 1 matriz matriz 1 1 03678795 12 10954452 03011942 14 1183216 02465970 16 12649111 02018965 18 13416408 01652989 2 14142135 01353353 Durante o processo de leitura e importante verificar se o ultimo registro do arquivo ja foi lido A funcao meofidenarq faz esta verificacao no arquivo de identificador idenarq Se o ultimo registro ja foi lido entao sera retornado o valor 1 caso contrario 0 sera retornado Continuando o exemplo acima meoffid verifica se fim de arquivo ans 0 nm mfscanf1fid5f15f15f leitura de 1 linha em 1 variavel m n 1 meoffid verifica se fim de arquivo ans 136 Capıtulo 7 Comandos de entrada e saıda 1 mclosefid fecha o arquivo ans 0 75 Exercıcios Secao 71 Formato de exibicao Verificar as diferencas entre os formatos de exibicao para as variaveis a sqrt2 e exp10 x 110 y x e M rand33 71 a M dispa dispM 72 format15e a e x 73 mprintf105f 123e ae 74 mprintf51f x e mprintf51f y 75 Explicar a diferenca de dıgitos entre a variavel tab e o conteudo do arquivo sqrtexpdat na mostrado Secao 743 Secao 72 Espaco de trabalho Observar os resultados dos comandos para controle do espaco de trabalho utilizando as variaveis dos Exercıcios 7175 76 who whos 77 save dados clear who 78 load dados who 79 save esptrabxy clear who 710 load esptrab who x y Secao 73 Diario Entre com os comandos abaixo 75 Exercıcios 137 711 diarymeudiario 712 a 4 713 b log10a 714 diary0 715 Verificar o conteudo do arquivo meudiario Secao 74 Leitura e gravacao de dados 716 Gerar uma tabela com 10 linhas de x senx 0 x π2 e gravala no arquivo senodat 717 Fechar o arquivo senodat gravado no Exercıcio 716 e verificar o seu conteudo 718 Acrescentar o valor π 1 senπ 1 na ultima linha do arquivo senodat e verificar o seu conteudo 719 Abrir o arquivo senodat para leitura e ler a primeira linha 720 Gravar os valores 1 e 2 na ultima linha de senodat e observar o resultado 138 Capıtulo 7 Comandos de entrada e saıda Capıtulo 8 Computacao cientıfica 81 Medidas de tempo O SCILAB provˆe duas maneiras de medir o tempo gasto para executar um conjunto de comandos o tempo de execucao e o tempo de CPU Usando o tictoc e possıvel saber o tempo gasto para a execucao de um grupo de comandos A sua sintaxe e tic comandos variavel toc O tic inicia a contagem do tempo e o toc fornece para variavel o tempo em segundos passado desde o ultimo tic A atribuicao do tempo gasto a variavel e opcional Se o computador estiver executando varias tarefas simultaneamente tictoc pode nao ser uma medida muito confiavel Uma outra medida e obtida por timer que fornece o tempo de CPU unidade central de processamento que e o tempo gasto para execucao de operacoes aritmeticas e logicas Pode ser usado na forma variavel 1 timer comandos variavel 2 timer variavel 1 Por exemplo considere a execucao do programa no arquivo medidassci define duas matrizes aleatorias A grand2500300unf010 B grand3001000unf0100 tic inicia contagem do tempo de execucao t0 timer inicia contagem do tempo de CPU C A B 5 139 140 Capıtulo 8 Computacao cientıfica maximo maxabsdiagC tempocpu timer t0 tempo de CPU tempoexec toc tempo de execucao Os resultados produzidos foram execmedidassci0 tempocpu 763 tempoexec 7815 A diferenca de tempo produzida por tictoc e timer pode ser bem significativa se o com putador estiver executando outros programas ao mesmo tempo Alem disso esses tempos medidos dependerao do computador utilizado 82 Algebra linear Nesta secao serao mostrados alguns comandos do SCILAB relativos aos topicos usualmente abordados em textos de Calculo Numerico Para um conhecimento mais amplo dos comandos do SCILAB com respeito a vetores e matrizes usar os comandos apropos vector e apropos matrix 821 Parˆametros da matriz O SCILAB disponibiliza diversas funcoes para se obter informacoes sobre matrizes tais como normas numero de condicao determinante posto e traco Normas A funcao normvariaveltipo fornece a norma tipo de um vetor ou matriz contido em variavel de acordo com a Tabela 81 No caso de um vetor tipo pode ser qualquer numero inteiro ou real positivo ou negativo Exemplos de normas vetoriais x 1 2 3 4 5 define vetor x normx1 norma de soma de magnitudes ans 15 normx normx2 norma Euclidiana ans 74161985 ans 74161985 Tabela 81 Normas vetoriais e matriciais Sejam v v₁ v₂ vₘ e M m₁₁ m₁₂ m₁ₚ m₂₁ m₂₂ m₂ₚ mₙ₁ mₙ₂ mₘₚ tipo Descrição Nome normvp vₚ p Σᵢ1m vᵢᵖ normaₚ normv2 ou normv v₂ Σᵢ1m vᵢ² norma Euclidiana normvinf v max₁im vᵢ norma de máxima magnitude normM1 M₁ max₁jp Σᵢ1n mᵢⱼ norma de soma máxima de coluna normMinf M max₁in Σⱼ1p mᵢⱼ norma de soma máxima de linha normMfro Mₒ Σᵢ1n Σⱼ1p mᵢⱼ² norma de Frobenius normM2 ou normM max σᵢ valores singulares norma espectral normxinf norma de maxima magnitude ans 5 normxpi norma pi ans 09527515 e normas matriciais A 1 2 3 4 6 1 5 2 1 N 1 1 2 3 1 1 3 2 1 x 13 z 2 normM1 norma de soma maxima de coluna ans 18 normMinf norma de soma maxima de linha ans 24 normAfro norma de Frobenius ans 142 Capıtulo 8 Computacao cientıfica 16881943 normA2 normA norma espectral ans 16848103 ans 16848103 Numero de condicao A funcao condmatriz calcula o numero de condicao de matriz quadrada definido em termos da norma2 ou seja e a razao entre o maior e o menor valor singular condM κ2M M2M12 σmax σmin Para a matrix B 5 3 0 1 8 6 4 2 9 condB numero de condicao ans 26641005 A funcao rcondmatriz fornece uma estimativa do recıproco do numero de condicao de matriz definido em termos da norma1 Se matriz for bemcondicionada entao rcond e proximo de 1 e se ela for malcondicionada rcond sera proximo de 0 Para a matriz B acima r rcondB r 02094488 1r ans 47744361 Determinante A funcao detmatriz calcula o determinante de matriz sendo ela quadrada Na forma mantissaexpoente detmatriz o valor do determinante e apresentado em notacao cientıfica mantissa10expoente Para A e B definidas previamente detB determinante de B ans 399 mantissaexpoente detA determinante de A em notacao cientifica expoente 66613381 mantissa 16 detA ans 6661D16 82 Algebra linear 143 Posto O posto de uma matriz A m n e o numero maximo de vetores linhas ou de vetores colunas de A que sao linearmente independentes sendo postoA minm n No SCILAB o posto de matriz e obtido por rankmatriztolerancia sendo igual ao numero de valores singulares de matriz maiores que tolerancia Se tolerancia nao for dada entao e assumido o valor tolerancia maxm n normmatriz eps Para as matrizes A e B rankA posto de A ans 2 rankA1e20 posto de A com tolerancia 1e20 ans 3 rankB posto de B ans 3 Traco A funcao tracematriz determina o traco de matriz isto e a soma dos elementos da sua diagonal principal Para a matriz A definida anteriormente traceA traco de A ans 15 822 Decomposicoes O SCILAB disponibiliza varios tipos de decomposicoes de matrizes entre as quais LU Cholesky QR e SVD Decomposicao LU A funcao lumatriz faz a decomposicao LU de matriz de dimensao m n usando o metodo de eliminacao de Gauss com pivotacao parcial O uso do comando fatorLfatorUmatrizP lumatriz gera uma matriz triangular inferior unitaria fatorL dimensao m minm n uma matriz triangular superior fatorU dimensao minm n n e uma matriz de permutacoes matrizP dimensao n n tal que matrizP matriz fatorL fatorU Por exemplo M 2 3 5 4 1 1 1 8 6 define a matriz M M 2 3 5 4 1 1 144 Capıtulo 8 Computacao cientıfica 1 8 6 LUP luM decomposicao LU de M P 0 1 0 0 0 1 1 0 0 U 4 1 1 0 775 625 0 0 83225806 L 1 0 0 025 1 0 05 04516129 1 R P M L U verificando que P M L U R 0 0 0 0 0 0 0 0 0 Contudo o uso de dois parˆametros de saıda matrizInfmatrizSup lumatriz gera uma matriz triangular superior matrizSup fatorU e uma matriz triangular in ferior matrizInf tal que matrizP matrizInf fatorL de modo que matriz matrizInf matrizSup Para as matrizes acima TinfTsup luM decomposicao LU de M com dois parametros Tsup 4 1 1 0 775 625 0 0 83225806 Tinf 05 04516129 1 1 0 0 025 1 0 M Tinf Tsup verificando que M Tinf Tsup ans 0 0 0 0 0 0 0 0 0 Tsup U verificando que Tsup U ans 0 0 0 0 0 0 0 0 0 P Tinf L verificando que P Tinf L 82 Algebra linear 145 ans 0 0 0 0 0 0 0 0 0 Decomposicao de Cholesky A funcao fator cholmatriz fatora matriz simetrica definida positiva pelo metodo de Cholesky produzindo uma matriz fator triangular superior tal que fator fator matriz Por exemplo A 4 2 2 2 10 7 2 7 30 define a matriz A A 4 2 2 2 10 7 2 7 30 U cholA calcula o fator U U 2 1 1 0 3 2 0 0 5 A U U verificando que A UU ans 0 0 0 0 0 0 0 0 0 B 1 2 4 2 5 3 4 3 8 define a matriz B B 1 2 4 2 5 3 4 3 8 F cholB calcula o fator F error 29 Matrix is not positive definite Houve um erro porque a matriz B nao e definida positiva Decomposicao QR A funcao qr faz a decomposicao QR de uma matriz de dimensao m n O uso na forma matrizQmatrizRqrmatriz produz uma matriz ortonormal matrizQ de or dem m matrizQmatrizQeyemm e uma matriz triangular superior matrizR com a mesma dimensao mn de matriz de modo que matrizmatrizQmatrizR Sejam A 2 4 3 5 1 7 8 6 define a matriz A 146 Capıtulo 8 Computacao cientıfica A 2 4 3 5 1 7 8 6 QR qrA calcula fatores Q e R R 88317609 54349298 0 98214835 0 0 0 0 Q 02264554 05325844 05445505 06070721 03396831 03211171 05753910 06711366 01132277 07753803 05906262 01926801 09058216 01096497 01534623 03793593 roundQQ verificando que Q e ortonormal ans 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 round A Q R verificando que A QR ans 0 0 0 0 0 0 0 0 Quando os quatro caracteres e forem colocados apos o nome de uma matriz de dimensao m n m n o SCILAB produz uma decomposicao econˆomica de modo que matrizQ tera dimensao m n e matrizR sera n n Para a matriz A acima QeRe qrAe calcula fatores Q e R na forma economica Re 88317609 54349298 0 98214835 Qe 02264554 05325844 03396831 03211171 01132277 07753803 09058216 01096497 roundA Qe Re verificando que A Qe Re ans 0 0 0 0 82 Algebra linear 147 0 0 0 0 A funcao qr possui diversas formas de ser utilizada para maiores informacoes use help qr Decomposicao em valores singulares A funcao svd faz a decomposicao em valores singulares de uma matriz de dimensao m n O comando matrizUmatrizSmatrizV svdmatriz produz uma matriz ortonormal matrizU de ordem m uma matriz diagonal matrizS de dimensao m n contendo os valores singulares de matriz em ordem decrescente e uma matriz ortonormal matrizV de ordem n de modo que matriz matrizU matrizS matrizV Por exemplo A 2 4 3 5 1 7 8 6 define a matriz A A 2 4 3 5 1 7 8 6 USV svdA calcula os fatores U S e V de A V 05257311 08506508 08506508 05257311 S 12476603 0 0 69522923 0 0 0 0 U 0188444 05471902 05445505 06070721 04673105 00110328 05753910 06711366 04351204 06516942 05906262 01926801 07461769 05251246 01534623 03793593 round UU verificando que U e ortonormal ans 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 round VV verificando que V e ortonormal ans 1 0 0 1 round A U S V verificando que A USV 148 Capıtulo 8 Computacao cientıfica ans 0 0 0 0 0 0 0 0 Se os quatro caracteres e forem colocados apos o nome de uma matriz de dimensao m n m n sera computada uma decomposicao econˆomica de modo que matrizU tera dimensao m n matrizS e matrizR serao n n Utilizando a mesma matriz A UeSeVe svdAe calcula os fatores U S e V na forma economica Ve 05257311 08506508 08506508 05257311 Se 12476603 0 0 69522923 Ue 0188444 05471902 04673105 00110328 04351204 06516942 07461769 05251246 round A Ue Se Ve verificando que A UeSeVe ans 0 0 0 0 0 0 0 0 Para se obter apenas os valores singulares de matriz em vetor basta vetor svdmatriz s svdA calcula apenas os valores singulares de A s 12476603 69522923 A funcao svd possui outras formas de ser utilizada para maiores informacoes use help svd 823 Solucao de sistemas Dado um sistema Ax b a solucao x pode ser facilmente calculada pelo SCILAB pelo operador por exemplo para um sistema com matriz simetrica A 4 2 2 2 10 7 2 7 30 matriz dos coeficientes 82 Algebra linear 149 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 nao simetrica 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 824 Inversa A funcao invmatriz calcula a inversa de matriz de ordem n tal que matriz invmatriz eyenn Para a matriz M acima E invB inversa de B E 150 Capıtulo 8 Computacao cientıfica 14166667 0125 05416667 025 0125 0125 08333333 025 00833333 round B E eye33 verificando que B E I ans 0 0 0 0 0 0 0 0 0 825 Autovalores e autovetores Os autovalores sao os zeros do polinˆomio caracterıstico da matriz A funcao poly constroi o polinˆomio caracterı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 polyAx constroi o polinomio caracteristico de A p 2 3 79 78x 17x x raizes rootsp zeros do polinomio caracteristico raizes 1410402 56161546 99734434 A funcao spec permite o calculo do autosistema autovalores e autovetores de uma ma triz de ordem n por um metodo mais eficiente do que construindo o polinˆomio carac terıstico O uso de AutoVetorAutoValorspecmatriz produz uma matriz diagonal AutoValor contendo os autovalores e uma matriz AutoVetor com os cor respondentes autovetores Se a matriz for simetrica entao os autovetores sao mutuamente ortogonais AutoVetor AutoVetor eyenn Para a matriz A acima VetorValor specA calcula os autovalores e autovetores Valor 1410402 0 0 0 56161546 0 0 0 99734434 Vetor 07387367 05462817 03947713 04732062 08374647 02733656 04799416 00151370 08771698 roundVetorVetoreye33 autovetores ortogonais de uma matriz simetrica 83 Interpolacao 151 ans 0 0 0 0 0 0 0 0 0 Para obter apenas os autovalores em vetor basta vetor specmatriz Para a matriz simetrica A definida acima lambda specA calcula apenas os autovalores de A lambda 1410402 56161546 99734434 A funcao spec possui diversas formas de ser utilizada para maiores informacoes use help spec 83 Interpolacao O SCILAB possui funcoes para calculo das diferencas finitas ascendentes e interpolacao unidimensional 831 Calculo das diferencas finitas ascendentes A funcao diffvariavelordemdimensao calcula a diferenca finita ascendente de ordem dada por ordem entre dois elementos de variavel ao longo de dimensao que pode assumir os valores r para linha c para coluna ou para as colunas da matriz variavel colocadas em um vetor Os argumentos ordem e dimensao sao opcionais e seus valores predefinidos sao 1 e respectivamente Para um vetor x 1 2 4 4 7 define o vetor x x 1 2 4 4 7 d1 diffx diferenca de ordem 1 de x d1 1 2 0 3 d2 diffd1 diferenca de ordem 1 de d1 d2 1 2 3 xd2 diffx2 diferenca de ordem 2 de x xd2 1 2 3 No caso de matriz 152 Capıtulo 8 Computacao cientıfica A 15152153 define a matriz A A 1 2 3 4 5 1 4 9 16 25 1 8 27 64 125 L1 diffA1r diferenca de ordem 1 ao longo das linhas L1 0 2 6 12 20 0 4 18 48 100 C1 diffA1c diferenca de ordem 1 ao longo das colunas C1 1 1 1 1 3 5 7 9 7 19 37 61 A colunas da matriz A em um vetor transposto ans column 1 to 12 1 1 1 2 4 8 3 9 27 4 16 64 column 13 to 15 5 25 125 V1 diffA1diferenca de ordem 1 assumindo A em um vetor transposto V1 column 1 to 12 0 0 1 2 4 5 6 18 23 12 48 59 column 13 to 14 20 100 832 Interpolacao unidimensional Dada uma tabela com pares xi yi especificados nos vetores abscissas e ordenadas respectivamente entao os valores de z contidos no vetor interpolar podem ser interpo lados usando a funcao interp1 cuja sintaxe e resultado interp1abscissasordenadasinterpolarmetodo onde a cadeia de caracteres metodo especifica o metodo a ser utilizado na interpolacao sendo parˆametro metodo linear interpolacao linear spline interpolacao por splines cubicos nearest interpolacao usando o vizinho mais proximo Quando o metodo nao for especificado sera assumida uma interpolacao linear Por exemplo sejam cinco pontos da funcao y x4 para 1 x 1 definidos por 84 Integracao numerica 153 x linspace115 abscissas dos pontos y x4 ordenadas Interpolando os valores z 06 e z 07 usando os trˆes metodos interp1xy06 07linear interpolacao linear ans 025 04375 interp1xy06 07spline interpolacao com splines cubicos ans 0144 02695 interp1xy06 07nearest interpolacao com vizinho mais proximo ans 00625 00625 Considerando que os valores exatos sao 064 01296 e 074 02401 o metodo de interpolacao com splines cubicos produziu os melhores resultados para este caso As aproximacoes da funcao y x4 por trˆes funcoes interpoladoras de interp1 podem ser visualizadas pelos comandos x1 linspace1150 abscissas para a interpolacao y1 x14 ordenadas da curva real nea interp1xyx1nearest interpolacao vizinho mais proximo spl interp1xyx1spline interpolacao por splines plotxyoxyx1y1x1neax1spl xgrid1 xtitleMascii233todos de interp1xy gera graficos e grade legendpontoslinearyx4nearestsplines3 coloca legenda A partir dos 50 pontos em x1 foram criados os vetores nea e spl que contˆem as ordenadas obtidas por interpolacao usando os argumentos nearest e splines respectivamente A Figura 81 mostra graficamente os resultados da funcao interp1 Os cinco pontos iniciais estao representados por o Uma interpolacao linear e feita implicitamente desde que o comando plot interliga os pontos por retas O grafico da funcao y x4 esta representado por uma linha solida a aproximacao por polinˆomios com nearest por uma linha tracejada e os splines por uma linha pontilhada Usualmente os splines produzem uma aproximacao mais suave da funcao como pode ser observado neste caso 84 Integracao numerica A funcao integrate calcula numericamente uma integral e sua sintaxe e integratefuncaovariavellim inflim superro abserro rel onde funcao e uma cadeia de caracteres que define a funcao a ser integrada variavel e uma cadeia de caracteres que especifica a variavel de integracao lim inf e lim sup Aproximação de y x4 pela função interp1 85 Exercıcios 155 Integral integratecos3x1x2x15x19 calcula a integral Integral 10251064 A funcao a ser integrada pode tambem estar definida em uma function Seja o arquivo funcsci com o conteudo function y gx y cos3x1x2x15 endfunction Assim para calcular a integral acima usando a function g definida no arquivo funcsci execfuncsci1 carrega a function g do arquivo funcsci Integral integrategx19 calcula a integral Integral 10251064 85 Exercıcios Secao 81 Medidas de tempo 81 82 83 84 85 Secao 82 Algebra linear 86 87 88 89 810 Secao 83 Interpolacao 156 Capıtulo 8 Computacao cientıfica 811 812 813 814 815 Secao 84 Integracao numerica 816 817 818 819 820 Referˆencias Bibliograficas 1 M Abramowitz e I A Stegun Handbook of Mathematical Functions Dover Nova Iorque 1972 2 F F Campos filho Algoritmos Numericos LTC Editora Rio de Janeiro 2a edicao 2007 3 H Farrer C G Becker E C Faria F F Campos filho H F de Matos M A dos Santos e M L Maia Pascal Estruturado LTC Editora Rio de Janeiro 3a edicao 1999 4 H Farrer C G Becker E C Faria H F de Matos M A dos Santos e M L Maia Algoritmos Estruturados LTC Editora Rio de Janeiro 3a edicao 1999 5 N Wirth Algorithms Data Structures Programs PrenticeHall 1976 157 REFERÊNCIAS BIBLIOGRÁFICAS