·

Engenharia Elétrica ·

Sinais e Sistemas

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

SCILAB 5 Danusio Gadelha Filho Universidade Federal do Ceará SCILAB 5X Danusio Gadelha Filho Universidade Federal do Ceará Danusio Gadelha Filho Universidade Federal do Ceará SUMÁRIO CAPÍTULO 1 INTERFACE GRÁFICA DO SCILAB CAPÍTULO 2 OPERAÇÕES PRIMÁRIAS CAPÍTULO 3 COMANDOS DE FLUXOS CAPÍTULO 4 VETORES MATRIZES CAPÍTULO 5 POLINÔMIOS CAPÍTULO 6 LISTAS CAPÍTULO 7 FUNÇÕES CAPÍTULO 8 GRÁFICOS APÊNDICE EQUAÇÕES DIFERENCIAIS CAPÍTULO I INTERFACE GRÁFICA DO SCILAB Scilab é um ambiente voltado para o desenvolvimento de software para resolução de problemas numéricos O Scilab foi criado em 1990 por um grupo de pesquisadores do INRIA Institut de Recherche en Informatique et en Automatique e do ENPC Ècole Nationale des Ponts et Chaussées Desde 1994 quando passou a ser disponível na Internet Scilab é gratuito free software e distribuído com o código fonte open source software Além da distribuição com o código fonte existem também distribuições précompiladas do Scilab para vários sistemas operacionais As principais características desse ambiente de programação numérica extremamente flexível são Ambiente poderoso para geração de gráficos bi e tridimensionais inclusive com animações Manipulações com matrizes são facilitadas por diversas funções implementadas nos toolboxes Permite trabalhar com polinômios funções de transferência sistemas lineares e grafos Define funções facilmente Permite acesso a rotinas escritas em FORTRAN e C Pode ser acessado por programas de computação simbólica como o MuPad Permite o desenvolvimento de toolboxes Além dos toolboxes desenvolvidos pelo grupo Scilab estão disponíveis outras complementares igualmente gratuitas como o ANN Artificial Neural Network o FISLAB Fuzzy Logic Inference e o FRACLAB Fractal Multifractal and Wavelet Analisys Algumas funções do Scilab estão alocadas em toolboxes bem definidas dadas as suas especificidades Temos como exemplo Funções de Álgebra Linear bibliotecas LINPACK EISPACK LAPACK e BLAS Funções para solução de Equações Diferenciais bibliotecas ODEPACK e SLATEC Funções de Otimização biblioteca MINPACK Descritas algumas características internas do Scilab é hora de conhecer a janela de trabalho Workspace do Scilab Na versão 530 beta 2 ela se apresenta da seguinte forma Podemos observar o prompt inicial representado pelo símbolo que faz a marcação da linha de comando e o cursor ao lado do prompt Nesse espaço podem ser realizados cálculos e compilados programas sem serem salvas alterações É através dele também que pode ser acessado o help do programa através do comando help digitado no prompt Será aberta uma janela depois de o comando ser executado apertando se a tecla ENTER contento uma lista de todas as funções presentes Ainda na tela inicial estão presentes os menus drop down com sete opções File Edit Preferences Control Editor Applications e Cada menu possui os seguintes sub menus File New Scilab Exec Open Load Save Change Directory Get Current Directory Print Setup Print e Exit Edit Select All Copy Paste Empty Clipboard e History Preferences Language Colors Toolbar Files Association Choose Fonts Clear History Clear Command Window e Console Control Resume Abort e Interrupt Editor Applications Scicos Edit Graph m2sci e Browser Variables Scilab Help Configure Scilab Demos Web Links e About Conhecidos os menus da tela inicial vamos analisar algumas peculiaridades da linguagem O primeiro tópico a ser abordado é sobre variáveis especiais presentes no ambiente Esses são valores pré definidos que podem ser usados diretamente na programação A maioria dessas variáveis é prefixada com o símbolo de porcentagem Elas podem ser acessadas através da digitação do comando whos no prompt de comando é importante lembrar que se o usuário definir alguma variável antes de digitar whos ela também aparecerá no workspace Na tabela a seguir temos a listagem de algumas delas tal como aparecem na janela VARIÁVEL TIPO F Booleana T Booleana z Polinomial s Polinomial nan Constante inf Constante COMPILER String gtk Booleana gui Booleana pvm Booleana tk Booleana Polinomial t Booleana f Booleana eps Constante io Constante i Constante e Constante pi Constante Tabela 1 Variáveis Especiais Temos mais duas importantes variáveis as variáveis de localização de diretórios SCI e PWD Para entendê las digite as no prompt de comandos SCI diretório onde o Scilab foi instalado PWD diretório onde o Scilab foi lançado isto é de onde seu script está rodando Existem ainda funções para manipular arquivos e diretórios A função pwd mostra qual o diretório está sendo usado e chdir muda o diretório de trabalho É importante lembrar que depois de usada chdir o valor de pwd muda mas PWD permanece inalterado Todas as variáveis criadas durante os trabalhos no ambiente podem ser armazenadas em um arquivo O comando save é usado para tal com a seguinte sintaxe savenomedoarquivodatvariáveis Para recuperar os valores das variáveis usa se o comando load e o comando clear é usado para limpar variáveis não protegidas loadnomedoarquivovariáveis O comando help quando digitado sem caracterização abre uma listagem com todas as funções presentes no programa Se caracterizado abre a mesma janela porém com a função já aparecendo diretamente Além de armazenar variáveis é possível criar uma memória de cálculo salvando os comandos digitados em um arquivo através do comando diary diarynomedoarquivo diary0 Fecha o comando CAPÍTULO II OPERAÇÕES PRIMÁRIAS Scilab é um ambiente de programação numérica Desse modo existem duas formas de interação com o software digitação diretamente no prompt em que se tem uso de uma poderosíssima máquina de cálculo ou como programação numérica propriamente dita em que se delineiam linhas de código Neste capítulo será abordada a primeira forma A primeira instrução a respeito do prompt é quanto ao uso do ponto e vírgula ele faz com que o compilador interprete o fim da execução da linha de comando e esteja pronto para receber outra linha Neste caso o resultado da operação fica mascarado para o usuário Se não for escrito o ponto e vírgula a quebra de linha vai denotar fim da execução mas o resultado será exibido para o usuário Ambas as formas têm sua aplicação Quando se está trabalhando com vetores de muitos elementos não é conveniente esquecer o ponto e vírgula pois isto pode acarretar perda de tempo e travamento da máquina o Scilab tem uma ferramento útil para evitar esse infortúnio a cada algumas linhas de exibição aparece uma mensagem perguntando se se deseja continuar a exibição já quando se quer testar uma operação debugar um programa ou se as variáveis usadas forem de baixa ordem o ponto e vírgula é por vezes necessário no mínimo facultativo Outra observação importante é que o Scilab é case sensitive Quando o programador definir uma variável com letras maiúsculas e minúsculas deve se lembrar de manter a caixa das letras OPERAÇÕES MATEMÁTICAS De um modo geral as variáveis matemáticas usadas no Scilab são vetores complexos O número imaginário é denotado por i e seguindo a notação padrão de um número complexo z abi temos as seguintes operações possíveis SOMA SUBTRAÇÃO MULTIPLICAÇÃO DIVISÃO À DIREITA DIVISÃO À ESQUERDA POTENCIAÇÃO ORGANIZAÇÃO DAS LINHAS DE COMANDO A forma usual de se escreverem os comando é pôr uma instrução por linha Também é permitido dispor as instruções numa mesma linha desde que separadas pelo ponto e vírgula e distribuir o comando em várias linhas usando as reticências no final de cada linha com exceção da última e no começo da linha seguinte com exceção da primeira AMBIENTE Um ambiente é como um espaço de trabalho no prompt de comando do Scilab Pode se trabalhar com mais de um espaço de trabalho e é indicada esta prática caso sejam necessárias operações paralelas durante a execução de um programa principal Para adicionar se um ambiente basta digitar pause no workspace ou usar o atalho ctrl c no teclado uma nova seta acompanhada do cardinal correspondente a hierarquia do ambiente ira surgir O retorno ao ambiente principal dado pelo comando abort e ao ambiente anterior pelos comandos return ou resume As variaveis definidas num ambiente inferior nao sao salvas quando se sobe para um ambiente anterior Caso se queira utilizar algum contetdo de ambientes inferiores deve se usar a linha aresumea onde a é a variavel que se deseja salvar Se tratando de um software dedicado a computacao numérica em tecnologia 0 Scilab traz carregadas algumas funcoes utilizadas nessa area tais como FFT fatoracgao LU determinante de matrizes fungées de Bessel dentre varias outras A seguir temos uma tabela contendo varias fungdes basicas existentes no Scilab abs absx modulo argumento de x acos acosx arco cosseno de x em radianos acosh acoshx arco cosseno hiperbolico de x em radianos asin asinx arco seno de x em radianos asinh asinhx arco seno hiperbdlicode x em radianos atan atanx arco tangente de x em radianos atanh atanhx arco tangente hiperbdlico de x em radianos binomial binomial pn binomial normalizado de p classe n ceil ceilx arredondamento para o maior inteiro posterior cos cosx cosseno de x com x em radianos cosh coshx cosseno hiperbolico de x com x em radianos cotg cotgx cotangente de x com x em radianos coth cothx cotangente hiperbolica de x com x em radianos cumprod cumprodv produto cumulativo do vetor v cumsum cumsumv soma cumulativa do vetor v diff diffv diferencial discreta do vetor v eval evals valor numérico de uma expressdo de strings exp expx exponencial euleriana de x factor factorN fatores primos de N find findk s V encontra os indices dos elementos de V que tornam a comparacao verdadeira s fix fixx arredondamento para o inteiro mais proximo de zero floor floorx arredondamento para o maior inteiro anterior gsort gsortVrc id ordenacdo dos elementos de V imag imagz coeficiente da parte imagnaria de z int intN parte inteira de N linspace linspaceABN vetor com N pontos entre A e B inclusos log logx logaritmo neperiano de x log10 log10x logaritmo decimal de x log2 log2x logaritmo na base 2 de x logspace logspace ABN vetor de N pontos com espaco logaritmico entre Ae B inclusos max maxv maximo valor contido no vetor v min minv minimo valor contido no vetor v modulo modulomn resto da divisdo de m porn inm int n m ndims ndimsM numero de dimensdes de M pmodulo pmodulomn resto da divisdo de m porn inm floor n m nextpow2 nextpow2x poténcia de 2 maior e mais prdéxima de x norm normA norma deA perms permsv todas as permutacoes do vetor v primes primesN todos os números primos até N prod prodv produto de todos os elementos de v rand randmn matriz m x n de números aleatórios entre 0 e 1 real realz parte real do número complexo z round roundN número inteiro mais próximo de N setdiff setdiffab retorna os elementos de a que não estão em b sign signv retorna os sinais dos elementos de v 1 se positivo e 1 sin sinx seno de x x em radianos sinh sinhx seno hiperbólico de x x em radianos sqrt sqrtx raiz quadrada de x ssprint ssprintexpr modifica a forma de exibição de um sistema linear sum sumv soma de todos os elementos de v tan tanx tangente de x x em radianos tanh tanhx tangente hiperbólica de x x em radianos tril trilM triangularização inferior de M triu triuM triangularização superior de M vectorfind vectorfindabs encontra o vetor a na matriz b sr ou sc Os termos estão localizados entre 0 e 1 Um exemplo de uso a1 b2 z2abb2 evalz ans 0 O comando solve soluciona um sistema linear simbólico através da definição dos coeficientes das variáveis e dos resultados de cada equação em formato de string Ac1c2c3c4 bb1b2 solveAb ans c1b1c2c4b2 c4b2 O comando eval pode ser usado para avaliar o resultado para valores de todas as strings Dois tipos de função são imprescindíveis para a programação os comandos de entrada e saída de dados No Scilab quando o programador quer que o usuário atribua um valor para uma variável aquele faz o uso da função input A variável é atribuída da seguinte forma xinputExpressão Uma forma mais elegante de pedir ao usuário que entre com dados necessários à execução do programa é usando caixas de diálogo através da função xdialog na seguinte sintaxe xevstrxdialogExpressãoMáscara A função evstr é usada para converter os dados digitados pelo usuário que são da forma strings para um formato numérico A máscara é um indicativo da forma dos dados que se querem obter Por exemplo se se deseja uma matriz tringular superior de terceira ordem pode se proceder da seguinte forma MevstrxdialogDigite a matriz Ua b c0 d e0 0 f Há outras caixas de diálogo mais específicas presentes no ambiente A sintaxe de cada uma pode ser observada a seguir xchoices l1listescolha 11botão a1botão a2botão a3 l2listescolha 22botão b1botão b2botão b3 botão b4 l3listescolha 33botão c1botão c2 repxchoicesMenu de Escolhaslistl1l2l3 xchoose nxchooseitem1item2item3Escolha sua opçãopara a enquete xmatrix mevstrxmatrixentre com uma matriz 3x3zeros33 messagebox x057 messageboxO valor de x é stringx uigetfile arquivoxgetfiletitlestring O comando de saída tradicional é disp que retorna o conteúdo entre parênteses Uma forma mais elegante é feita com o uso de mtlbfprintf ou printf que combina texto de exibição e variáveis A seguir exemplos de aplicação das funções printfMeu nome é sDanusio Meu nome é Danusio printfO número é f4357666 O número é 435766600 dispEu sou eu mesmo Eu sou eu mesmo disp14 14 disp Pode se obter dados externos em forma de matriz através da função fscanfMatnomedoarquivo bem como se pode escrever uma variável como uma matriz em um arquivo com a função fprintfMatarquivoMatrizformato CAPÍTULO III COMANDOS DE FLUXO Os laços são de longe a parte mais importante para se programar com o Scilab Os laços reconhecidos pelo ambiente são for if e while O laço for segue a seguinte lógica para um determinado índice variando de um valor inicial até um valor final com um determinado incremento execute os comando sob o laço Como exemplo considere o seguinte exemplo que carrega para uma matriz M os números pares de 1 a 100 clc clear close N100 M for i12N1 MM i1 end dispM Note que N é o número final do intervalo a ser varrido e que a variável i é na verdade entendido como um vetor O laço if funciona com a seguinte lógica caso a condição seja verdadeira execute os comandos Considere o exemplo para separar os números pares dos ímpares de 1 a 100 clc clear close N100 P I for i1N if moduloi20 PP i end if moduloi21 II i end end dispP dispI Nesse caso a condição testada é o valor retornado pela função modulo qv A esse laço podem ser agregados dois outros comandos elseif e if Estes dois tornam a programação mais eficiente elegante e imune a erros O programa anterior se utilizada a função else ficaria clc clear close N100 P I for i1N if moduloi20 PP i else II i end end dispP dispI O uso de elseif pode ser exemplificado pelo seguinte problema deseja se também separar os múltiplos de 7 dentre os pares e os ímpares clc clear close N100 S P I for i1N if moduloi70 SS i elseif moduloi20 PP i else II i end end dispS dispP dispI É importante observar que a mudança da ordem de checagem das condições influencia o resultado Por exemplo em vez de testar primeiro se o número é múltiplo de 7 teste se ele é ímpar O resultado é na matriz S os múltiplos pares de 7 Os operadores lógicos mais comuns ao se usar a estrutura if são e e ou barra vertical Estes operadores são postos entre duas condições O comando while funciona como um misto de for e if na medida em que são executados comandos até que uma condição não seja mais satisfeita Funciona como se os laços citados estivessem alinhados porém sob a condição de haver um único if booleano Um processo iterativo é um bom exemplo do uso deste recurso clc clear close s5 N0 while s1e5 ss10 NN1 end O contador N indica o número de operações realizadas até que o valor s seja menor que 1e5 A seguir temos alguns códigos interessantes em que há os laços apresentados Código 1 clc clear close disp Programa para carregar valores de uma função de duas variáveis para domínios de tamanhos diferentes disp disp Danusio Gadelha Filho disp x115 y128 disp Tamanho de x disp displengthx disp disp Tamanho de y disp displengthy disp disp Função de xy disp disp f x²y³xy disp for i1lengthx for j1lengthy fijxi2yj3xiyj end end disp Valores de f disp dispf surff veja capítulo sobre gráficos Código 2 clc clear close disp Programa para simular a transcrição do RNA mensageiro disp disp Danusio Gadelha Filho disp DNAA G C A G T H C C disp DNA a ser transportado disp dispDNA disp clengthDNA for i1sumc if DNAiA RNAiT elseif DNAiT RNAiA elseif DNAiG RNAiC elseif DNAiC RNAiG else continue end end disp Codificação do RNA mensageiro disp dispRNA disp Código 3 clc clear close disp Programa para encontrar a raiz de uma função em um intervalo disp disp Danusio Gadelha Filho disp prec0001 X0prec3 NlengthX cont1 xX1 errx32x25 disp Intervalo disp dispstringX1 stringX disp disp Precisão disp dispprec disp disp Função disp disp x³2x²5 disp while absx32x25 10prec contN1 xXcont132Xcont125 contcont1 if absxabserr errx raizXcont end end disp Raizes no intervalo disp dispraiz CAPÍTULO IV VETORES E MATRIZES Vetores são um agrupamento de elementos em uma única fila linha ou coluna No Scilab eles são sempre indicados entre colchetes o ponto e vírgula denota mudança de linha enquanto elementos de ma mesma linha são separados por vírgulas ou espaços A transformação de um vetor linha em um vetor coluna ou vice versa chamada de transposição é feita através do acréscimo de um apóstrofo ao lado direito do colchete de fechamento ou da variável que identifica o vetor Dois vetores estão sujeitos às seguintes operações entre si SOMA v1v2 desde que sejam da mesma dimensão SUBTRAÇÃO v1v2 desde que sejam da mesma dimensão MULTIPLICAÇÃO ESTRUTURAL v1v2 desde que sejam da mesma dimensão DIVISÃO À DIREITA ESTRUTURAL v1v2 desde que sejam da mesma dimensão DIVISÃO À ESQUERDA ESTRUTURAL v1v2 desde que sejam da mesma dimensão MULTIPLICAÇÃO v1v2 desde que o número de colunas de v1 seja igual ao número de linhas de v2 DIVISÃO À DIREITA v1v2 desde que sejam da mesma dimensão DIVISÃO À ESQUERDA v1v2 desde que sejam da mesma dimensão Matrizes são conjuntos de elementos dispostos em múltiplas filas Todas as operações definidas para vetores podem ser usadas com matrizes desde que a compatibilidade entre as dimensões seja observada Existem algumas funções úteis no tratamento com matrizes tanto como recurso de programação quanto para debugar a rotina As funções size e length retornam respectivamente a ordem e a maior dimensão de uma matriz A função rank retorna o rank da matriz rank é o número de filas linearmente independentes A função norm retorna a norma de uma matriz Com o comando trace podemos obter a soma dos elementos da diagonal principal da matriz ou traço da matriz A diagonal principal pode ser extraída com o comando diagMn onde n é a localização da matriz principal de baixo para cima variando de L a L onde L é a maior dimensão de M subtraída de um Uma aplicação interessante do uso das matrizes é na resolução de sistemas lineares Dado um sistema linear no formato matricial Axb as variáveis contidas em x podem ser obtidas simplesmente por Ab A priori todas as variáveis para o Scilab são matrizes deste modo todas as operações acima descritas são válidas para qualquer variável definida no programa Definida uma matriz M o elemento da linha i e coluna j é acessado através da digitação de Mij O caractere especial faz com q o último elemento seja acessado M Quando se quer varrer toda uma sequência de filas usam se os dois pontos entre o numero das filas Por exemplo se a ordem de M 1 x 15 as colunas de 7 a 11 poderiam ser acessadas pelo comando M711 Se se deseja ler toda uma sequéncia de filas p6em se apenas os dois pontos sem numero algum M Caso seja digitado apenas M o resultado sera um vetor coluna contendo todos os elementos de M Outra forma de selecionar elementos substituir os elementos desejados por T verdadeiro e os nao selecionados por F falso Por exemplo se M 2 3 4 5 o comando MT F F T F exibira apenas 0 2 e 0 4 Os elementos de uma fila podem ser organizados em outra matriz através do comando MnI n2 nZ c caso se queira selecionar os elementos de ordem n n2 até nZ da coluna c ou M1 n1n2 nZ caso a operacao deva ser aplicada na linha Existem matrizes especiais j4 implementadas dentro do ambiente do Scilab tais como a matriz identidade a matriz nula e a matriz de uns criadas respectivamente por eye zeros e ones seguidas pela ordem A fungao bdiagM faz a diagonalizacao da matriz A matriz inversa pode ser calculada pelo comando invM Uma alternativa a resolugao de sistemas lineares é a fungao linsolveAb onde A e b sao as matrizes de coeficientes e resultados respectivamente A linha de comando Z U luM faz a fatoragcao LU da matriz M Outros dois tipos de fatoracdo presentes sAo a de Choleski e a fatoragao QR chamadas pelos comandos cholM e grM O comando oerthM retorna a base ortogonal de um espaco vetorial definido pela matriz MW A forma sintatica rapolarM transforma a matriz M de coordenadas retangulares para coordenadas polares Uma operagéo que pode ser util quando se trabalha com matrizes a eliminagao de linhas eou colunas Se se quer eliminar a fila da matriz M basta atribuir uma matriz vazia a linha Mk ou MkK J Em diversas aplicagdes costuma se denotar certas caracteristicas de um sistema atribuindo se 0 ao indice correspondente na matriz que representa o sistema Por vezes necessario avaliar a quantidade de zeros a posicao deles dentre outras A seguir algumas fungoes relacionadas a zeros nnzM Numero de elementos nao nulos de M sparseM Transforma M numa matriz esparsa spzerosM Retorna uma matriz esparsa do tamanho de M spgetM Converte uma matriz esparsa para o formato padrao indices dos elementos nao nulos valor dos elementos nao nulos e tamanho da matriz M M l eptt 3 0 1 0 0 0 21 AsparseM A 3 3 sparse matrix I 2D 1 I 2 2 I 3 3 2 2 1 3 3 1 ijvalsizespgetA size 3 3 val 1 2 3 1 1 ij 1 1 1 2 1 3 2 2 3 3 Mais funções a respeito podem ser encontradas na biblioteca Sparse A seguir um exemplo de uso da fatoração QR para a extração dos autovalores de uma matriz clc clear close EXTRAI OS AUTOVALORES DA MATRIZ A POR MEIO DA FATORAÇÃO QR CÓDIGO ESCRITO POR DANUSIO GADELHA FILHO PERMITIDA REPRODUÇÃO COM OS DEVIDOS CRÉDITOS format 8 formato de exibição dos números um menor número de casas decimais disp disp Programa de extração de autovalores por fatoração QR disp Danusio Gadelha Filho disp A25 1 0 1 5 sqrt2 0 sqrt2 10 LsizeA IeyeL1L2 dispMatriz a ser fatorada disp dispA disp format 16 um maior número de casas decimais Q RqrA N100 número de iterações Q1Q Q2Q for i1N Q RqrA Q1QQ1 Q2Q2Q ARQ end printf Para d iterações a matriz de autovalores é N disp dispcleanA disp O código apresentado abaixo retorna os valores de uma matriz M que estão acima ou abaixo de um valor de corte w Observe que não foram usados comandos condicionais qv capítulo 2 clc clear close disp Programa Filtro Lógico disp Danusio Gadelha Filho disp disp Este script permite eliminar os elementos de uma matriz abaixo ou acima de um determinado valor disp M19 34 1 76 14 13 12 1 1 14 19 116 LsizeM w3 disp Matriz a ser reduzida disp dispM disp printf Valor de corte f w for i1L1 for j1L2 Abool2sMijw sinal script elimina x se xw MijAMij end end indexMsizeMspgetsparseM dispMatriz atualizada disp dispM disp Ídices disp dispindex CAPÍTULO V POLINÔMIOS Esta é uma classe de variáveis tal como real ou lógica Um polinômio é gerado no Scilab através da função poly Caso sejam definidos dois polinômios sob a mesma variável estes podem ser somados subtraídos multiplicados e divididos entre si e com números complexos Existem duas formas de se criar um polinômio no Scilab especificando suas raízes ou seus coeficientes Para a primeira forma são permitidas três sintaxes Ppolya bs Ppolya b s r Ppolya b s roots Quando se deseja a segunda alternativa as opções são apenas duas Ppolyc d s c Ppolyc d s coeff Caso o usuário não queira trabalhar extensamente com uma variável polinomial se quer apenas a raiz de um polinômio qualquer por exemplo pode se trabalhar com as duas variáveis polinomiais disponibilizadas pelo Scilab s e z As raízes de um polinômio podem ser obtidas com o comando rootsP e seu valor numérico pelo comando hornerPN Uma observação pertinente se refere à divisão de polinômios caso não seja exata é possível obter o resto e o quociente através da operação pdiv r qpdivPQ A função coeffPn retorna o coeficiente do polinômio P associado ao termo de grau n O comando clean zera na matriz todos os elementos que são menores que a tolerância definida pelo usuário A sintaxe é a que segue QcleanPtatr Os parâmetros ta e tr são respectivamente as tolerâncias absoluta e relativa abaixo das quais os termos serão zerados x12s13s2s22s32s3s2 cleanx95 x12s13s2s22s32s3s212s5 3s xinvx cleanxinvx Este comando é muito em procedimentos numéricos quando se opera com vetores extensos e se deseja reduzir o tempo de execução A função coffg retorna as matrizes inversas do numerador e denominador da matriz polinomial em questão x12s13s2s NDcoffgx NDinvx O quociente da divisão dos dois termos de saída da função a matriz inversa da matriz de polinômios inicial Dada uma matriz polinomial o comando ordem do argumento de entrada com o grau de cada elemento As funções denom numeradores de uma matriz polinomial racional Um dos comandos mais úteis para polinômios é o termos de uma matriz polinomial racional inclusive O determinante de uma matriz polinomial pode ser calculado pela função A função hrmt retorna o fator comum de um vetor linha polinomial e uma matriz U de determinante igual a 1 e tal questão é igual a um vetor fator comum de v xpoly0x vxx21x2x1x pgUhrmtv UcleanU pg fator comum detU A triangularização da matriz polinomial htrianrM A matriz de entrada não pode conter termos fracionários Se uma matriz polinomial é a variável dos polinômios de função pol2desM Os termos A função polfactP multiplicados resultam no mínimos fatores Uma fração polinomial pode ser simplificada através do uso da função que retorna a forma irredutível da matriz A seguir uma forma de encontrar os autovalores polinômios clc clear close EXTRAI OS AUTOVALORES DA MATRIZ A POR MEIO DAS RAÍZES DO POLINÔMIO CARACTERÍSTICO CÓDIGO ESCRITO POR DANUSIO GADELHA FILHO Este comando é muito em procedimentos numéricos quando se opera com tores extensos e se deseja reduzir o tempo de execução retorna as matrizes inversas do numerador e denominador da matriz polinomial em questão 13s2s22s32s3s21 2s O quociente da divisão dos dois termos de saída da função coeffg a matriz inversa da matriz de polinômios inicial Dada uma matriz polinomial o comando degree retorna uma matriz de mesma ordem do argumento de entrada com o grau de cada elemento denom e numer retornam respectivamente os denominadores e os numeradores de uma matriz polinomial racional Um dos comandos mais úteis para polinômios é o derivat que deriva todos os termos de uma matriz polinomial racional inclusive O determinante de uma matriz polinomial pode ser calculado pela função retorna o fator comum de um vetor linha polinomial e uma igual a 1 e tal que o produto vU onde v é o vetor linha em questão é igual a um vetor 1xn onde n é o comprimento de v onde o último termo é o 1x2x1x2x22x13x22x13 pgUhrmtv pg fator comum A triangularização da matriz polinomial M pode ser feita através do comando A matriz de entrada não pode conter termos fracionários Se uma matriz polinomial M for dada na forma é a variável dos polinômios de M os termos A B e C podem ser encontrados pela Os termos AB e C são chamados de matrizes descritoras de polfactP retorna os fatores mínimos do polinômio fatores que os resultam no polinômio O argumento de saída é um vetor contendo os Uma fração polinomial pode ser simplificada através do uso da função que retorna a forma irredutível da matriz A seguir uma forma de encontrar os autovalores de uma matriz EXTRAI OS AUTOVALORES DA MATRIZ A POR MEIO DAS RAÍZES DO POLINÔMIO CARACTERÍSTICO CÓDIGO ESCRITO POR DANUSIO GADELHA FILHO Este comando é muito em procedimentos numéricos quando se opera com retorna as matrizes inversas do numerador e denominador da s21 2s 53s coeffg é exatamente retorna uma matriz de mesma retornam respectivamente os denominadores e os que deriva todos os O determinante de uma matriz polinomial pode ser calculado pela função detr retorna o fator comum de um vetor linha polinomial e uma é o vetor linha em é o comprimento de v onde o último termo é o 2x22x13x22x13 pode ser feita através do comando onde x podem ser encontrados pela são chamados de matrizes descritoras de M retorna os fatores mínimos do polinômio fatores que O argumento de saída é um vetor contendo os Uma fração polinomial pode ser simplificada através do uso da função simp de uma matriz M utilizando EXTRAI OS AUTOVALORES DA MATRIZ A POR MEIO DAS RAÍZES DO PERMITIDA REPRODUÇÃO COM OS DEVIDOS CRÉDITOS format 8 formato de exibição dos números um menor número de casas decimais disp disp Programa de extração de autovalores por polinômio característico disp Danusio Gadelha Filho disp A25 1 0 1 5 sqrt2 0 sqrt2 10 LsizeA IeyeL1L2 dispMatriz a ser fatorada disp dispA disp polcardetAIs dispO poliômio característico é disp disppolcar disp format 16 um maior número de casas decimais lambdarootspolcar disp Os autovalores são disp displambda disp Script com funções adicionais que utilizam polinômios clc clear close format 8 formato de exibição dos números um menor número de casas decimais disp disp Algumas funções extra para polinômios disp Danusio Gadelha Filho disp disp Fatoração Espectral disp zpoly0z pz122z35zz27 Cada raíz de p tem um inverso simétrico que também é raíz de p wsfactp as raízes de w são as raízes antiestáveis de p disp disp Verificação disp dispwnumerhornerw1z igual a p disp disp Equação de Bezout disp paqbr disp ppoly1 2xc qpoly10 2xc apoly2 12xc bpoly5 1xc rpaqb xerrdiophantpqr rapproachcleanpx1qx2 r disp disp Forma Hermitiana disp spoly0s disp Matriz a ser transformada disp ps ss12 2s2 s1 dispp ArUhermitpp disp disp Forma Hermitiana de p ptranspUtrans disp cleanAr disp Matriz unimodular U dispU disp detUcleandetU CAPÍTULO VI LISTAS São outra classe de variáveis parecidas com as matrizes mas que agrupam conteúdo de diferentes tipos São implementadas através do comando list seguido dos elementos os quais se desejam agrupar L listDanusiorand321315171F T T F Uma operação comum quando se trabalha com listas é substituir um determinado elemento da lista por outra lista L4listGodT T1212 L L4212 As listas são consideradas estruturas de dados e têm sua biblioteca própria A seguir serão explicados diversos comandos e operações relacionadas a estruturas de dados O comando cell cria um vetor de matrizes vazias segundo uma ordem definida Esta ordem vem definida por outra matriz que é uma matriz de índices Considere o exemplo a seguir em que é criada uma matriz nula c de ordem 2 x 3 x 4 x 2 m2 34 2 ccellm c 11 21 31 12 22 32 No exemplo temos uma matriz 2 x 3 cujos elementos são matrizes 4 x 2 nulas A utilidade de matrizes nulas reside na necessidade de inicialização de matrizes variáveis destacadamente quando são usados laços O comando hypermat inicializa uma matriz Ndimensional através de uma série de dados Mhypermat2 3 2 1rand15 eye15 zeros12 M M 11 01280058 02119030 06856896 07783129 01121355 1 21 0 0 0 0 0 0 Note que o produto dos índices entre colchetes deve ser igual ao número de elementos da matriz ao lado O comando struct é a forma mais simples de se criar uma estrutura de dados Apesar da simplicidade esta função dá uma boa dinâmica à estrutura permitindo uma substituição intuitiva dos campos e a aquisição de novos campos dadosstructNomeDanusioIdade18Renda Mensal100000 Neste caso os campos são Nome Idade e Renda Mensal e os valores armazenados são Danusio 18 e 100000 Um dado pode ser acessado através do nome da estrutura seguido por ponto e o nome do campo dadosNome Um novo campo pode ser adicionado seguindo a mesma sintaxe dadosAltura182 dados dados Nome Danusio Idade 18 Renda Mensal 10000 Altura 182 A função lstcat concatena várias listas numa variável só lstcatl1l2ln Por fim a função definedfields retorna os índices definidos dentro de uma lista é possível definir uma lista com uma determinada posição sem elemento algum daí a importância de se saber quais posições estão preenchidas com elementos CAPÍTULO VII FUNÇÕES Funções são procedimentos sintetizados em uma só operação de comando Considere a operação de obter os números pares até um número N Podemos sintetizá la em uma função por exemplo pares Os comandos obrigatórios para a definição de uma função são function outputsnomedafunção inputs e endfunction function nparesN n0 for i1N if moduloi20 nn1 end end endfunction A partir da execução deste script a função pares pode ser executada normalmente como se fosse um comando interno do Scilab Caso se tenha uma relação direta entre o output e os inputs é mais conveniente fazer uso da função deff Considere o exemplo a seguir deffrquadrabcr12absqrtb24ac12absqrtb24ac A definição anterior retorna as raízes de uma equação quadrática em função dos coeficientes quadr156 ans 3 2 O comando deff requer duas strings o escopo da função rquadrabc e a relação entre o output e os inputs Este tipo de função que retorna apenas um argumento é também chamado de procedimento A seguir temos um exemplo de função recorrente em cálculo vetorial função que calcula as diferenças entre elementos sucessivos de um vetor x function xdiffX nlengthX for i1n1 xiXi1Xi end endfunction Calcula o comprimento da linha formada pelos pontos de coordenada xy deffLcomplxydxdiffxdydiffyLsumsqrtdx2dy2 O uso de de funções e procedimentos se torna quase obrigatório em programas muito longos na medida em que permitem subdividir o código o que facilita a debugagem e realizar comandos comuns na rotina de forma mais prática A seguir uma função muito útil em problemas de interpolação permite achar os valores imediatamente acima e abaixo de um pré determinado em uma série de dados function supinflimitsXc Bbool2sXc Cbool2sXc S1BX S2CX vposSmin1S11 vposImaxS2 supXposS infXposI endfunction X2 3 5 1 8 c4 silimitsXc CAPÍTULO VIII GRÁFICOS GRÁFICOS BIDIMENSIONAIS São constituídos de dois eixos sendo necessário portanto dois argumentos de entrada para a execução que na verdade são vetores com a mesma dimensão As funções responsáveis pela plotagem 2D são plot plot2d fplot2d e contour2d É importante notar que caso um eixo seja função do outro todas as operações devem ser realizadas elemento a elemento O comando plot2d plota uma curva bidimensional Aceita quatro especificações considere um eixo x definido de 0 a 5 plot2d1 plotagem padrão linear clc clear close x0015 ysinx2 plot2d1xy plot2d2 plotagem discreta histograma ou degraus clc clear close x015 ysinx2 plot2d2xy plot2d3 plotagem em barras verticais clc clear close x0055 ysinx2 plot2d3xy plot2d4 plotagem em setas clc clear close x0055 ysinx2 plot2d4xy O comando fplot2d clc clear close deffxstx2sin3t t0116pi fplot2dts O comando contour2d geométricos da superfície a ser modelada clc clear close nz10 número de níveis aeye510rand510ones510 matriz para a plotagem z mina 1nzmaxa xsizea contour2d1x11x2anz fplot2d plota uma função definida por function ou deffxstx2sin3t contour2d plota curvas de nível com base numa matriz de dados geométricos da superfície a ser modelada nz10 número de níveis aeye510rand510ones510 matriz para a plotagem z mina 1nzmaxaminanz1 valor numérico de cada nível contour2d1x11x2anz ou deff com base numa matriz de dados aeye510rand510ones510 matriz para a plotagem minanz1 valor numérico de cada nível O comando polarplot clc clear close t 0012pi polarplotsin2tcos5t O comando plot realiza as operações acréscimo de propriedades POSIÇÃO DOS EIXOS x0014pi plotxsin2x agca definição da janela de plotagem aylocation right left middle axlocation top bottom origin aisoviewon posição centralizada na janela PROPRIEDADES DE TRAÇO MARCADOR polarplot plota as variáveis em coordenadas polares polarplotsin2tcos5t realiza as operações de plotagem de forma mais geral com o POSIÇÃO DOS EIXOS agca definição da janela de plotagem aylocation right left middle axlocation top bottom origin posição centralizada na janela PROPRIEDADES DE TRAÇO SIGNIFICADO Solid line default em coordenadas polares de plotagem de forma mais geral com o Dashed line Dotted line Dashdotted line r Red g Green b Blue c Cyan m Magenta y Yellow k Black w White Plus sign o Circle Asterisk Point x Cross square or s Square diamond or d Diamond Upwardpointing triangle v Downwardpointing triangle Rightpointing triangle Leftpointing triangle pentagram Fivepointed star pentagram none No marker default EXEMPLO x0012pi plotxsin2xrpentagram agca definição da janela de plotagem aylocation middle left middle axlocation middle bottom origin GRÁFICOS TRIDIMENSIONAIS O comando mais utilizado é o plot3d O seu uso pode ser observado na rotina a seguir clc clear close t0012pi zsintexptcost plot3dttz sizet ans 63 1 sizez ans 63 63 Observe que se o eixo base tiver a dimensão eixo tem dimensão N x N Esta função tem uma derivação em cores múltiplas Um modo mais rápido é gerar superfícies a partir de funções definidas pelo comando deff através do comando clc clear close x212 yx deffzfxyz cosxy zeval3dfxy plot3dxyz Observe que se o eixo base tiver a dimensão 1 x N a matriz imagem deste Esta função tem uma derivação plot3d1 que gera uma figura Um modo mais rápido é gerar superfícies a partir de funções definidas pelo através do comando eval3d deffzfxyz cosxy a matriz imagem deste que gera uma figura Um modo mais rápido é gerar superfícies a partir de funções definidas pelo CAMPO VETORIAL Um campo vetorial é descrito por duas funções e fyxy que são entendidas como matrizes contendo os valores das duas componentes em função das coordenadas x e y Observe o código abaixo em que a função plota um campo vetorial use a função clc clear close x222 y222 fxcosx2y23 matriz com as coordenadas x fysinx2y matriz com as coordenadas y champxyfxfy CAMPO VETORIAL Um campo vetorial é descrito por duas funções que são entendidas como matrizes contendo os valores das duas componentes em função das coordenadas x e y Observe o código abaixo em que a função use a função champ1 para plotar em cores cosx2y23 matriz com as coordenadas x fysinx2y matriz com as coordenadas y CAMPO VETORIAL Um campo vetorial é descrito por duas funções fxxy que são entendidas como matrizes contendo os valores das duas componentes em função das coordenadas x e y Observe o código abaixo em que a função champ Uma curva tridimensional pode ser obtida através do comando Código 1 clc clear close t00110pi param3dsintcostt5 Código 2 clc clear close t0015pi param3d1sintsin2ttcos2tt t A função param3d1 Uma curva tridimensional pode ser obtida através do comando param3dsintcostt5 t0015pi param3d1sintsin2ttcos2tt t param3d1 permite a plotagem de várias curvas na mesma janela Uma curva tridimensional pode ser obtida através do comando param3d a mesma janela O comando pie plota um gráfico em pizza Abaixo atributos deste comando clc clear close pie53 42 62 202 1 1 1parte 1parte 2parte 3parte 4 Valores distâncias entre as fatias rótulos plota um gráfico em pizza Abaixo estão explicitados todos os pie53 42 62 202 1 1 1parte 1parte 2parte 3parte 4 Valores distâncias entre as fatias rótulos estão explicitados todos os pie53 42 62 202 1 1 1parte 1parte 2parte 3parte 4 Um histograma é gerado pelas funções Define se também a largura e a cor das barras plotadas clc clear close yrand120 scf1 bary25r scf2 barhy75y barras horizontais Um histograma é gerado pelas funções bar e barh aplicado numa matriz se também a largura e a cor das barras plotadas barhy75y barras horizontais aplicado numa matriz Caso se ponha uma matriz para ser plotada os exemplos anteriores um vetor o eixo das abscissas ou cardinais iguais à ordem das linhas da matriz Outras funções podem ser encontradas na biblioteca figuras presentes neste material foram menu da janela de gráfico gerada possibilidade de se alterar as propriedades do gráfico e da janela se ponha uma matriz para ser plotada os exemplos anteriores um vetor o eixo das abscissas ou ordenadas no caso de ser usado barh cardinais iguais à ordem das linhas da matriz Outras funções podem ser encontradas na biblioteca Graphics Library e material foram exportadas para formato de imagem a partir do menu da janela de gráfico gerada File Export to O menu ainda oferece a possibilidade de se alterar as propriedades do gráfico e da janela se ponha uma matriz para ser plotada os exemplos anteriores são para barh terá valores phics Library As formato de imagem a partir do O menu ainda oferece a EQUAÇÕES A função ode resolve numericamente uma equação ordinária de primeira ordem considerando como variável a derivada primeira da função y A relação entre a função e sua derivada tem que ser explicitada através de uma função como no exemplo a seguir clc clear close dydty2y sint function ydotfty ydoty2ysint endfunction y00 valor inicial de y no tempo inicial t00 tempo inicial t001pi escla de tempo yodey0t0tf plotty APÊNDICE QUAÇÕES DIFERENCIAIS resolve numericamente uma equação ordinária de primeira ordem considerando como variável a derivada primeira da função y A relação entre a função e sua derivada tem que ser explicitada através de uma função como no exemplo y sintcost y00 function ydotfty ysintcost valor inicial de y no tempo inicial tempo inicial escla de tempo resolve numericamente uma equação ordinária de primeira ordem considerando como variável a derivada primeira da função y A relação entre a função e sua derivada tem que ser explicitada através de uma função como no exemplo Para soluções de ordem superior substitui se y e ydot por dois vetores como é mostrado a seguir que resolve uma equação de segunda ordem clc clear close function ssgnv Nlengthv for i1N if vi0 si0 else siabsvivi end end endfunction function ydotfty xy1 vy2 ydot1v ydot23872484622pix02096573981sgnv endfunction y050 t000 t00014pi yodey0t0tf ydotfty aydot2 vy2 xy1 subplot311 plottx subplot312 plottv subplot313 plotta Observe que em um vetor temos as derivadas da função da ordem 0 a própria função até à ordem n1 onde ordem 1 à n Uma alternativa ao uso da função função em cada passo Considere a equação la está abaixo juntamente com o gráfico gerado clc clear close deffy2dotfydotyy2dot y15e3 ydot10 y2dot1fydot1y1 dt05 t0dt10 for i2lengtht ydotiydoti1dty2doti yiyi1dtydoti y2dotifydotiyi end Yy ydot y2dot Xt t t Observe que em um vetor temos as derivadas da função da ordem 0 a própria 1 onde n é a ordem da equação e no outro as derivadas de Uma alternativa ao uso da função ode é utilizar laços para obter os valores da cada passo Considere a equação y 4y 08y 0 O script para juntamente com o gráfico gerado deffy2dotfydotyy2dot4y08ydot y2dot1fydot1y1 1dty2doti1 1dtydoti1 y2dotifydotiyi azulverdevermelho Observe que em um vetor temos as derivadas da função da ordem 0 a própria é a ordem da equação e no outro as derivadas de é utilizar laços para obter os valores da cript para resolvê plotXY O princípio é simples e bastante intuitivo dados os valores iniciais de velocidade e espaço obtemos a aceleração pela substituição na equação diferencial os valores seguintes de deslocamento e aceleração são obtidos pela expressão discretização da definição de derivada ydotpasso iydotpasso i1dty2doti1 e ypasso iypasso i1dtydoti1 A partir daí o processo se repete