SCILAB Software livre para cálculo numérico e simulação de sistemas físicos Utilizado nas áreas de: Controle e processamento de sinais Automação industrial Computação gráfica Matemática Física Entre outras. SCILAB Disponível como software livre desde 1994 pelo site: www.scilab.org Possui a maioria das funcionalidades do concorrente MatLab. Disponível para diversas plataformas: Linux Windows Solaris Unix SCILAB SCILAB SCILAB Variáveis que não podem ser modificadas %s variável complexa de polinômios (Transformada de Laplace) %z variável complexa de polinômios (Transformada z) %T variável booleana True ( verdadeiro) %F variável booleana False (falso) %pi valor de π (3,1415926...) %e número de Euler ( 2,7182818...) %eps precisão da máquina (%eps+1=1) %inf infinito SCILAB Declaração de variáveis Sensível a maiúsculas e minúsculas Palavra única Até 24 caracteres Não pode iniciar com número Ex1.: a variável que armazena o valor do custo de produção de um produto pode ser custo_total SCILAB – Operações básicas >a=2;b=3; //declarando as variaveis >a+b //soma ans = 5. >ab //subtracao ans = 1. ans = 6. >a^b /exponenciacao ans = 8. >a*b //multiplicacao >a/b /divisao ans = 0.6666667 O SCILAB atribui à variável ans o valor do resultado do cálculo. SCILAB – Operações com números complexos >a=3+2*%i; b=96*%i; //declarando as variaveis >a+b //soma de complexos ans = 12. 4.i >ab //subtracao de complexos ans = 6. + 8.i >a*b //multiplicacao de complexos ans = 39. >a/b //divisao de complexos ans = 0.1282051 + 0.3076923i SCILAB – Operações com números complexos Conversão de retangular para polar (x,y) > (ρ,θ) Ex.: Se o número é z = 4+3i; módulo = ρ = √(42+32) Ângulo = θ= arctan(3/4) A função abs(x) calcula o módulo do número complexo; Utilização da fórmula de Euler: Ex.: z = 5e0.6435011 (forma polar) z = 4+3i (forma retangular) >z=5*%e^(0.6435011*%i) z = 4. + 3.i SCILAB – Funções elementares abs(x) Retorna o valor absoluto (se x é real) e o módulo ( se x é complexo) cos(x), sin(x), tan(x), cotg(x) Retorna cosseno, seno, tangente ou cotangente de x (x deve estar em radianos) acos(x), asin(x), atan(x)* Retorna o angulo (em radianos) SCILAB – Funções elementares Função atan(x), atan(x,y) atan(x): Calcula o arco tangente para os quadrantes I e IV [/2, /2 ] atan(x,y): Calcula o arco tangente para todos os quadrantes [, ] SCILAB – Funções elementares imag(x) Mostra a parte imaginária de um complexo real(x) Mostra a parte real de um complexo log(x), log10(x), log2(x) Logaritmos natural, base 10 e base 2 modulo(x,y) Mostra o resto da divisão de x por y SCILAB – Funções elementares round(x) Arredonda o valor de x para o inteiro mais próximo floor(x) Arredonda para o menor inteiro ceil(x) Arredonda para o maior inteiro sqrt(x) Calcula a raiz quadrada de x SCILAB – Funções elementares 1 Usando a linha de comando do SCILAB resolva o seguinte problema: Um terreno A mede 5 m de largura por 30 m de comprimento. O outro terreno B mede 8 m de largura por 40 de comprimento. Sabendo que o m2 de cada terreno vale R$ 15,00, calcule a área total e o valor monetário necessário para se adquirir esses dois terrenos. 2 - O raio de uma circunferência r é igual a 2 m. Calcule o perímetro desta circunferência, bem como, a área do círculo. 3 A seção transversal de um cilindro tem raio 0,5 m e o comprimento do mesmo é 1,5 m. Calcule o volume e área da seção transversal do mesmo. 4 Qual é o resultado das seguintes expressões segundo o SCILAB: ((5+3)*2^2+7)*2 (5+3*2^2+7)*2 (5+3*2^(41)*2)+(53*2) (2*3)^(31)/(52)+6 SCILAB – Funções elementares SCILAB - Polinômios Formas de declaração Ex.: forma fatorada: p = (s – 1)(s – 2) p = s2 – 3s +2 Usando a função poly() Pelas raízes: p = poly([ 1 2 ], 's') Pelos coeficientes: p = poly([ 2 3 1 ], 's' , 'coeff ' ) Obs.: os coeficientes devem ser digitados do menor grau para o maior. SCILAB - Polinômios Usando a variável %s p = %s^23*%s+2 Declarando um polinômio x x = poly(0, 'x') p = x^23*x+2 SCILAB - Polinômios >p=poly([1 2],'s') p = 2 2 3s + s //pelas raizes >p=poly([2 3 1],'s','coeff') p = 2 2 3s + s //pelos coeficientes >x = poly(0, 'x');p = x^23*x+2 p = 2 2 3x + x SCILAB - Polinômios A função roots() calcula as raízes da função polinômio ex.: roots(p) A função horner() calcula o valor da função polinômio ex.: horner(p,2) A função derivat() calcula a derivada do polinômio ex.: derivat(p) SCILAB - Polinômios Ex.: p = s2 – 3s +2: >p=poly([2 3 1],'s','coeff') p = 2 2 3s + s >roots(p) //calcula raizes ans = 1. 2. >horner(p,2) ans = 0. //substitui s por 2 (uma raiz) SCILAB – Vetores e Matrizes Dizse que x é um vetor de dimensão n em R se: x= x 1, x 2, ... , x n Mas, ao invés de pensar em coordenadas, podese pensar em matrizescoluna: SCILAB – Vetores e Matrizes Declarando vetores (sequencias) A = valor_inicial:incremento:valor_final >A=0:2:10 //incrementa de 2 em 2 A = 0. 2. 4. 6. 8. 10. >b=0:10 //incrementa de 1 em 1 (padrao) b = 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. >C=10:2:0 //decresce de 2 em 2 C = 10. 8. 6. 4. 2. 0. SCILAB – Vetores e Matrizes Declarando vetores (vetor coluna) Consideremos o vetor . Seus elementos devem ser separados por ' ; ' (ponto e vírgula) no Scilab. Ex.: >A=[4;5;6] A = 4. 5. 6. SCILAB – Vetores e Matrizes Declarando vetores (vetor linha) A = [a11,a12, a13] ou A=[a11 a12 a13] Obs.: os elementos são separados por ' , ' (vírgula) ou espaço Ex.: >A=[4,5,6]; B=[4 5 6]; //elementos separados por (,) >A,B A = 4. 5. 6. B = 4. 5. 6. SCILAB – Vetores e Matrizes Transposição A' Ex.: >A=[1 2 3] //vetor linha A = 1. 2. 3. >A' //vetor coluna ans = 1. 2. 3. SCILAB – Vetores e Matrizes Operações com vetores SCILAB – Vetores e Matrizes SCILAB – Vetores e Matrizes Operações com matrizes SCILAB – Vetores e Matrizes Formas de declaração SCILAB – Vetores e Matrizes SCILAB – Vetores e Matrizes Para calcular a inversa utiliza-se o comando inv(). Para calcular o determinante utiliza-se o comando det() SCILAB – Vetores e Matrizes SCILAB – Vetores e Matrizes Vejamos agora uma aplicação matemática com vetores: Calcular o valor da seguinte série para os seguintes valores de n: n = 10 n = 20 n = 1000 Utilizar a função sum() SCILAB – Vetores e Matrizes Exercício: elaborar o cálculo do produto vetorial de dois vetores no sistema xyz. SCILAB - Gráficos SCILAB - Gráficos SCILAB - Gráficos • Outras funcionalidades.. SCILAB - Gráficos • Outras funcionalidades.. SCILAB - Gráficos Outra opção...... xtitle(“< titulo do gráfico >",“ < título do eixo x >",“<título do eixo y"); SCILAB - Gráficos • • • • >> y=sin(x); >> z=cos(x); >> plot(x,y,x,z) Vamos plotar um gráfico do seno e do co-seno simultaneamente. O resultado está no gráfico da figura abaixo. SCILAB - Gráficos Para plotar gráficos em janelas diferentes, utilizamos o comando: xset('window',n) onde n é o número da janela gráfica, ex.: >> y=sin(x); >> xset('window',0) >> plot(x,y) >> z=cos(x); >> xset('window',1) >>plot(x,z) SCILAB - Gráficos SCILAB - Gráficos >> y=sin(x); >> plot(x,y); Vamos plotar um gráfico do seno e do coseno simultaneamente. >> z=cos(x); >> plot(x,y,x,z) Plotaremos agora o mesmo gráfico anterior acrescido da função soma entre o seno e o coseno do ângulo. >> u=sin(x)+cos(x); >> plot(x,y,x,z,x,u) SCILAB - Gráficos • Estilos de Linha, Marcadores e Cores – Quando plotamos vários gráficos, podemos diferenciá-los utilizando cores e marcadores diferentes. SCILAB - Gráficos SCILAB - Gráficos SCILAB - Gráficos • Podemos colocar em uma mesma janela gráfica, gráficos separados. • Utilizamos para isso o comando subplot() – subplot(n_linhas, n_colunas, sequencia) SCILAB - Gráficos plot2d([x,x],[sin(x) cos(x)],[10 20],leg='seno@cos') SCILAB - Gráficos SCILAB - Gráficos SCILAB - Gráficos Exercícios: 1 – Elaborar o gráfico das funções: exponencial positiva exponencial negativa ln log10 (em áreas separadas da janela gráfica, com títulos, e legendas) 2 – Elaborar o gráfico da função 3d z = sen(x2+y2) SCILAB - Programação SCILAB - Programação SCILAB - Programação SCILAB - Programação • Ex1.: Elaborar um programa que avalia a média das notas de um aluno e retorna a situação do mesmo (aprovado ou reprovado) SCILAB - Programação • Estrutura condicional SCILAB - Programação • Estrutura condicional SCILAB - Programação SCILAB - Programação Elaborar o programa do exemplo 1. Para imprimir no console utilizar a função: printf('\n <texto>: %f",<variável>) O \n serve para pular uma linha no console. SCILAB - Programação • Ex2.: Elaborar um programa para cálculo do fatorial de um número. SCILAB - Programação • Estruturas repetitivas SCILAB - Programação • Estruturas repetitivas SCILAB - Programação Elaborar o programa do exemplo 2. SCILAB - Programação Utilizando as estruturas de repetição e condicionais....e SCILAB - Programação • Funções – Funções internas • Sin(), tan(), sqrt(), bode(), entre outras. – Funções definidas pelo usuário • Utiliza a definição de função – function y = nome_da_função(argumentos) – < algorítmo da função > – endfunction • São gravadas em arquivos de script (.sce) utilizando um editor de texto ascii qualquer. SCILAB - Programação Funções Para serem utilizadas, as funçoes devem ser carregadas na memória. Utilizar o menu FILE > EXECUTE ou Utilizar o comando getf, ex.: getf('/home/manoel/Documentos/matlab/work_scilab/funcoes.sci'); Implementar os exemplos 1 e 2 em funções. SCILAB – Sistemas de controle Existem diversas funções internas para utilização em sistemas de controle. poly Escreve um polinômio,dados os coeficientes em ordem crescente ou as raízes do mesmo roots Extraí as raízes de um polinômio ones Cria um vetor (ou matriz), onde o valor de cada elemento do vetor vale 1. Vetor de 1. Zeros Vetor (ou matriz) de zeros csim Simulação de um sistema linear, dado o tipo de entrada U. Resposta no tempo plot Desenha um gráfico SCILAB – Sistemas de controle Para determinar raízes polinômios: Exemplo: p(s)=7s3 +2s2+5s+1 Comando: (roots) > p = poly ([1 5 2 7], ' s ',' coef ' ); > roots ( p ); As variáveis “s” e “z”, são reconhecidas pelo SCILAB, basta escrever: %s SCILAB – Sistemas de controle Para utilizar a função de transferência Definir o polinômio do numerador Definir o polinômio do denominador Ex.: num = poly([3 2 1],’s’,’coeff’) Ex.: den = poly([2 3 1],’s’,’coeff’) Definir a função de transferência TF = num / den SCILAB – Sistemas de controle Decomposição em frações parciais Decompor em frações parciais a seguinte funções de 2 transferência G2(s)=(5s+2)/(s+1)(s+2) Comando: (pfss) --> G2 = (5*%s+2) / ((%s+1)(%s+2)2 ) > pfss(G2) SCILAB – Sistemas de controle Para extrair os pólos e zeros Utilizar o comando roots() Para se obter a resposta do sistema Utilizar o comando csim() Deve ser definido o intervalo de tempo da resposta t=0.1:0.1:10 c = csim('step',t,H) plot(t,c) O sinal de entrada pode ser step, impulse, ou definido pelo usuário. SCILAB – Sistemas de controle deff('u=input(t)','u=(sin(t))') plot2d([t',t'],[(csim(input,t,H))',0*t']) plot(t,0.1*input(t)) xtitle("Resposta para função senoidal","t [s]","Deslocamento angular [rad]"); SCILAB – Sistemas de controle Gráfico da resposta em frequência. Utilizado como exemplo a seguinte função de 2 transferência G2(s)=(5s+2)/(s+1)(s+2) Comando: (bode) --> G2 = (5*%s+2) / ((%s+1)(%s+2)2 ) --> G = syslin('c',G2) //'c' indica um sistema contínuo no tempo > bode(G) SCILAB – Sistemas de controle Exercício1: Elaborar um programa que dada a função de transferência de 1a ou 2a ordem, o mesmo apresente: O tipo de resposta para o degrau (sub, super, criticamente amortecido ou oscilatório) Encontre a frequência natural e a taxa de amortecimento. Calcule o tempo de pico, overshoot, tempo de subida, conforme o caso. Decomponha a equação de saída em frações parciais. Trace o gráfico da resposta para uma entrada degrau Trace o gráfico de Bode. Exercício2: Implementar a função de transferência que relaciona a velocidade e a tensão em um motor cc e obter os gráficos da resposta para o impulso, degrau e senoidal.