74
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.

Aula Scilab

Embed Size (px)

Citation preview

Page 1: Aula Scilab

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.

Page 2: Aula Scilab

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

Page 3: Aula Scilab

SCILAB

Page 4: Aula Scilab

SCILAB

Page 5: Aula 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

Page 6: Aula Scilab

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

Page 7: Aula Scilab

SCILAB – Operações básicas ­­>a=2;b=3; //declarando as variaveis

­­>a+b //soma

ans =

5.

­­>a­b //subtracao

ans =

­ 1.

­­>a*b //multiplicacao

ans =

6.

­­>a/b /divisao

ans =

0.6666667

­­>a^b /exponenciacao

ans =

8.

O SCILAB atribui à variável ans o valor do resultado do cálculo.

Page 8: Aula Scilab

SCILAB – Operações com números complexos

­­>a=3+2*%i; b=9­6*%i; //declarando as variaveis

­­>a+b //soma de complexos

ans =

12. ­ 4.i

­­>a­b //subtracao de complexos

ans =

­ 6. + 8.i

­­>a*b //multiplicacao de complexos

ans =

39.

­­>a/b //divisao de complexos

ans =

0.1282051 + 0.3076923i

Page 9: Aula Scilab

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

Page 10: Aula Scilab

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)

Page 11: Aula Scilab

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 [­ , ]

Page 12: Aula Scilab

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

Page 13: Aula Scilab

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

Page 14: Aula Scilab

SCILAB – Funções elementares1 ­ 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^(4­1)*2)+(5­3*2)

(2*3)^(3­1)/(5­2)+6

Page 15: Aula Scilab

SCILAB – Funções elementares

Page 16: Aula Scilab

SCILAB - Polinômios

Formas de declaração Ex.: p = s2 – 3s +2 forma fatorada: p = (s – 1)(s – 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.

Page 17: Aula Scilab

SCILAB - Polinômios

Usando a variável %s

p = %s^2­3*%s+2 Declarando um polinômio x x = poly(0, 'x') p = x^2­3*x+2

Page 18: Aula Scilab

SCILAB - Polinômios

­­>p=poly([1 2],'s') //pelas raizes p = 2 2 ­ 3s + s ­­>p=poly([2 ­3 1],'s','coeff') //pelos coeficientes p = 2 2 ­ 3s + s ­­>x = poly(0, 'x');p = x^2­3*x+2 p = 2 2 ­ 3x + x

Page 19: Aula Scilab

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)

Page 20: Aula Scilab

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) //substitui s por 2 (uma raiz) ans = 0.

Page 21: Aula Scilab

SCILAB – Vetores e Matrizes

Diz­se 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, pode­se pensar em matrizes­coluna:

Page 22: Aula Scilab

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.

Page 23: Aula Scilab

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.

Page 24: Aula Scilab

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.

Page 25: Aula Scilab

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.

Page 26: Aula Scilab

SCILAB – Vetores e Matrizes

Operações com vetores

Page 27: Aula Scilab

SCILAB – Vetores e Matrizes

Page 28: Aula Scilab

SCILAB – Vetores e Matrizes

Operações com matrizes

Page 29: Aula Scilab

SCILAB – Vetores e Matrizes

Formas de declaração

Page 30: Aula Scilab

SCILAB – Vetores e Matrizes

Page 31: Aula Scilab

SCILAB – Vetores e Matrizes

Para calcular a inversa utiliza-se o comando inv().Para calcular o determinante utiliza-se o comando det()

Page 32: Aula Scilab

SCILAB – Vetores e Matrizes

Page 33: Aula Scilab

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 = 10n = 20 Utilizar a função sum()n = 1000

Page 34: Aula Scilab

SCILAB – Vetores e Matrizes

Exercício: elaborar o cálculo do produto vetorial de dois vetores no sistema xyz.

Page 35: Aula Scilab

SCILAB - Gráficos

Page 36: Aula Scilab

SCILAB - Gráficos

Page 37: Aula Scilab

SCILAB - Gráficos

• Outras funcionalidades..

Page 38: Aula Scilab

SCILAB - Gráficos

• Outras funcionalidades..

Page 39: Aula Scilab

SCILAB - Gráficos

Outra opção...... xtitle(“< titulo do gráfico >",“ < título do eixo x

>",“<título do eixo y");

Page 40: Aula Scilab

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.

Page 41: Aula Scilab

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)

Page 42: Aula Scilab

SCILAB - Gráficos

Page 43: Aula Scilab

SCILAB - Gráficos

>> y=sin(x); >> plot(x,y); Vamos plotar um gráfico do seno e do co­seno

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 co­seno do ângulo. >> u=sin(x)+cos(x); >> plot(x,y,x,z,x,u)

Page 44: Aula Scilab

SCILAB - Gráficos

• Estilos de Linha, Marcadores e Cores– Quando plotamos vários gráficos, podemos

diferenciá-los utilizando cores e marcadores diferentes.

Page 45: Aula Scilab

SCILAB - Gráficos

Page 46: Aula Scilab

SCILAB - Gráficos

Page 47: Aula Scilab

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)

Page 48: Aula Scilab

SCILAB - Gráficos

plot2d([x,x],[sin(x) cos(x)],[10 20],leg='seno@cos')

Page 49: Aula Scilab

SCILAB - Gráficos

Page 50: Aula Scilab

SCILAB - Gráficos

Page 51: Aula Scilab

SCILAB - Gráficos

Exercícios:

1 – Elaborar o gráfico das funções:exponencial positivaexponencial negativalnlog10

(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)

Page 52: Aula Scilab

SCILAB - Programação

Page 53: Aula Scilab

SCILAB - Programação

Page 54: Aula Scilab

SCILAB - Programação

Page 55: Aula Scilab

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)

Page 56: Aula Scilab

SCILAB - Programação

• Estrutura condicional

Page 57: Aula Scilab

SCILAB - Programação

• Estrutura condicional

Page 58: Aula Scilab

SCILAB - Programação

Page 59: Aula Scilab

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.

Page 60: Aula Scilab

SCILAB - Programação

• Ex2.: Elaborar um programa para cálculo do fatorial de um número.

Page 61: Aula Scilab

SCILAB - Programação

• Estruturas repetitivas

Page 62: Aula Scilab

SCILAB - Programação

• Estruturas repetitivas

Page 63: Aula Scilab

SCILAB - Programação

Elaborar o programa do exemplo 2.

Page 64: Aula Scilab

SCILAB - Programação

Utilizando as estruturas de repetição e condicionais....e

Page 65: Aula Scilab

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.

Page 66: Aula Scilab

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.

Page 67: Aula Scilab

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 rootsExtraí 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

Page 68: Aula Scilab

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

Page 69: Aula Scilab

SCILAB – Sistemas de controle

Para utilizar a função de transferência Definir o polinômio do numerador

Ex.: num = poly([3 2 1],’s’,’coeff’) Definir o polinômio do denominador

Ex.: den = poly([2 3 1],’s’,’coeff’) Definir a função de transferência

TF = num / den

Page 70: Aula Scilab

SCILAB – Sistemas de controle

Decomposição em frações parciais Decompor em frações parciais a seguinte funções de

transferência G2(s)=(5s+2)/(s+1)(s+2)2

Comando: (pfss)

--> G2 = (5*%s+2) / ((%s+1)(%s+2)2 )

­­> pfss(G2)

Page 71: Aula Scilab

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.

Page 72: Aula Scilab

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]");

Page 73: Aula Scilab

SCILAB – Sistemas de controle

Gráfico da resposta em frequência. Utilizado como exemplo a seguinte função de

transferência G2(s)=(5s+2)/(s+1)(s+2)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)

Page 74: Aula Scilab

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.