• Nenhum resultado encontrado

Programação Aplicada à Engenharia

N/A
N/A
Protected

Academic year: 2022

Share "Programação Aplicada à Engenharia"

Copied!
60
0
0

Texto

(1)

Programação Aplicada à Engenharia

Curso Superior de Engenharia Mecatrônica Ano 2019 - Versão 3.1

Professor: Luís Oscar de Araújo Porto Henriques

(2)

1 - Introdução

1.1 - O que é o OCTAVE?

O Octave é um software livre, escrito por Eaton (1997) e por vários outros colaboradores. Originalmente concebido como livro texto para estudantes de graduação de química para a resolução de equações químicas complexas; inicialmente foi escrita por James B. Rawlings da University of Wisconsin-Madison e John G. Ekerdt of the University of Texas. O Octave é um programa de linguagem aberta, logo muitas pessoas contribuem com sentenças de comando que são adicionados às versões em fase de teste, essas contribuições estão disponíveis no site da GNU Octave.

O software está disponível sob os termos da Licença Pública Geral do GNU (GPL) (Free Software Foundation, 1991).

O programa possui uma interface por linha de comandos para a solução numérica de problemas lineares e/ou não lineares e para implementar outros experimentos numéricos usando uma linguagem que é compatível com o programa comercial Matlab.

O Matlab foi desenvolvido no início da década de 80 por Cleve Moler, no Departamento de Ciência da Computação da Universidade do Novo México, EUA É um "software" interativo de alta performance voltado para o cálculo numérico. Faz análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em ambiente fácil de usar, onde problemas e soluções são expressos somente como eles são escritos matematicamente, ao contrário da programação tradicional, os elementos básicos de informação é uma matriz que não requer dimensionamento. Além disso, as soluções dos problemas são expressas no MATLAB quase exatamente como elas são escritas matematicamente.

O Octave possui muitas ferramentas para a solução numérica de problemas comuns de álgebra linear, para a determinação de raízes de equações, polinômios e integração de equações diferenciais e equações diferencias algébricas.

Programas como o Octave são usados frequentemente no lugar de linguagens de programação científica como o C ou Fortran, por já trazerem embutidas muitas ferramentas numéricas e permitirem a visualização gráfica dos resultados de forma mais fácil.

Instalação do OCTAVE

Para instalar o software, deve-se acessar o endereço https://www.gnu.org/software/octave/

Baixar o arquivo referente ao sistema operacional desejado, e instalar no computador.

Iremos utilizar também um pacote para operações simbólicas chamado “Symbolic package”. Ele deve ser baixado no endereço: https://octave.sourceforge.io/symbolic/

Todo o processo de instalação do Symbolic package deve ser acompanhado pelo link:

https://www.youtube.com/watch?v=8C9j2qlhTf0

(3)

1.2 - Carregando o OCTAVE

No Gerenciador de Programas do Microsoft Windows deve-se abrir o grupo de programas do OCTAVE for Windows, que contém o ícone do aplicativo OCTAVE. Um duplo clique no ícone OCTAVE carrega o aplicativo.

Quando o OCTAVE é carregado, 4 janelas são exibidas: a Janela de Comando (Command Windows), ambiente de trabalho (Workspace), a janela de diretório e Histórico de comandos (Command History). A Janela de Comando é ativada quando se inicializa o OCTAVE, e o "prompt" padrão (>>) é exibido na tela.

1.3 - Usando o Help

Uma vez que você está dentro do OCTAVE, você pode pedir ajuda usando o comando help. Você pode usar os seguintes comandos:

>> help comando

Caso necessite de mais informações, você deve digitar o seguinte comando para ter acesso a toda a documentação do OCTAVE.

>> doc

Ao utilizá-lo, inúmeros tópicos irão ser apresentados, os mais importantes são: statements(que contempla os comandos de laços básicos do Octave), expressions e arithmetic(que contempla as funções matemáticas elementares – Trigonometria, exponencial, complexo).

(4)

1.4 - Formatos de números

O Octave normalmente exibe os números com seis algarismos significativos. Apesar de exibi-los dessa forma, o Octave trabalha internamente com uma precisão bem maior. Por isso, é bom guardar os resultados em variáveis, no lugar de digitar novamente os valores mostrados, para evitar erros nos resultados.

O comando format permite selecionar a forma com que os algarismos são mostrados. Digitando format long o Octave passa a exibir os valores com pelos menos 16 algarismos significativos nas respostas dos cálculos efetuados.

>> c=1/3 c = 0.33333

>> format long

>> c

c = 0.333333333333333

O comando format sem parâmetros faz o programa retornar ao seu modo normal de exibição com 5 casas decimais, o comando format long mostra o número com 16 casas decimais e o format bank com apenas 2 casas decimais:

>> format

>> c=1/3 c = 0.33333

O comando sprintf permite um maior controle sobre o número de casas decimais. Por exemplo, se quisermos exibir 1/3 com 30 caracteres (incluindo o ponto e o sinal), dos quais 20 são casas decimais da parte fracionária, usamos:

>> sprintf(’%30.20f’,1/3) ans = 0.33333333333333331483

Algumas constantes usadas em OCTAVE

Comando Função desempenhada pi π ( 3.141592...)

i ( ou j) Unidade imaginária ( se forem atribuídos valores, eles serão encarados como variáveis comuns), Se não houver atribuição, eles valem: √-1

inf Infinito

ans Resultado da ultima operação sem atribuição Para remover da área de trabalho uma variável já atribuída, usa-se o comando clear, seguido do nome da variável, como em:

(5)

>> clear c

Para apagar todas as variáveis, digita-se:

>> clear all

1.5 - Definição de variável

Uma variável é um segmento de memória que é selecionado e identificado durante a execução de um programa para armazenar um conjunto de dados. Os dados armazenados neste segmento de memória podem ser alterados ou liberados para uso de outras variáveis.

O Octave automaticamente faz dois passos importantes da criação de uma variável: a seleção da estrutura de dados adequada para delimitar o conjunto de dados (se é um número, uma matriz ou um texto, por exemplo) e a seleção do segmento de memória que a variável ocupará (o que é conhecido como alocação de memória). Em particular, não é necessário declarar ou alocar variáveis no Octave, embora a alocação seja recomendável em problemas de grande porte, conforme veremos posteriormente.

Regras para identificar variáveis

Quatro regras devem ser levadas em conta no momento de escolher um nome para identificar uma variável:

1. O primeiro caractere deve ser uma letra;

2. Os demais caracteres podem ser letras, números ou o caractere ; 3. Maiúsculas e minúsculas são considerados caracteres distintos;

4. O nome não pode coincidir com nenhuma palavra reservada do matlab;

Por exemplo, nomes como soma1, soma 1 e Soma 1 são válidos, enquanto soma 1, 1soma, e soma1! não são válidos.

1.6 - Interface Gráfica

Temos abaixo algumas de demonstrações de sistemas modelados neste tipo de software

(6)

( )

Motor

Te

1.7 - Como avaliar os possíveis erros no Octave

O Octave informa dois tipos de erros para programas inválidos. Um erro devido análise gramatical, que acontece se o Octave não entender algo que você digitou, por exemplo, se você escreve errado um determinado comando, tem-se:

>> functon y=f(x) y=x^2;endfunction O octave responderá com uma mensagem do tipo:

parse error:

(7)

>> functon y=f(x) y=x^2;endfunction

^

Para a maioria dos erros, devido à análise gramatical, o Octave usa um sinal de intercalação, para marcar o ponto específico onde esta o erro. Neste exemplo, o Octave acusou um erro de comando mal escrito, functon em vez de function e como ficou faltando a letra ’i’, o cursor apontou exatamente para a letra ’o’, onde deveria conter também a letra ’i’. Estas mensagens facilitam muito a identificação e correção dos erros de compilação.

Outra forma de erro é quando o Octave não reconhece uma variável ou a estrutura de um comando, como o exemplo abaixo, em que a variável x não foi definida.

>> x

error: ‘x’ undefined near line 1 column 1

1.8 - Fazendo um exemplo simples

Suponha que temos dois pontos P1 e P2 cujas coordenadas são:

P1=(1,5) e P2=(4,7)

Queremos calcular a distancia entre dois pontos, que é a hipotenusa de um triângulo retângulo, conforme mostra a figura abaixo. Usando o teorema de Pitágoras, podemos calcular a distancia d com a seguinte equação:

2 2

2 2

1 2

(4 1) (7 5) 13

3,61

d s s

d d d

 

   

1 4

7

5

Como solucionaríamos este sistema no Octave?

(8)

Para isto devemos criar um arquivo texto com extensão *.m ( extensão do Octave).

Os comandos do OCTAVE são normalmente digitados na Janela de Comando, onde uma única linha de comando é introduzida e processada imediatamente. O OCTAVE é também capaz de executar sequências de comandos armazenadas em arquivos.

Os arquivos que contêm as declarações do OCTAVE são chamados arquivos ".m", e consistem de uma sequências de comandos normais do OCTAVE, possibilitando incluir outros arquivos ".m" escritos no formato texto (ASCII).

Para editar um arquivo texto na Janela de Comando do OCTAVE selecione New M-File para criar um novo arquivo ou Open M-File para editar um arquivo já existente, a partir do menu File. Os arquivos podem, também, ser editados fora do OCTAVE utilizando qualquer editor de texto.

Uma nova janela será criada. Nela digite os comando abaixo:

%este programa calcula e imprime a distancia em linha reta, entre dois pontos

p1x=1; %ponto 1 – eixo x

p1y=5; %ponto 1 – eixo y

p2x=4; %ponto 2 – eixo x

p2y=7; %ponto 2 – eixo y

d=sqrt((p2x-p1x)^2+(p2y-p1y)^2) % calcula a distância

Salve o arquivo com seu nome na pasta work e o execute na linha de comando Ao executarmos teremos o resultado:

d=3.6056

Observações: 1) o sinal de percentagem serve como comentário no Octave

2)Salve o arquivo com um nome sem acentos, espaços, e sinais alternativos.

Esta saída coincide com o valor que calculamos no exemplo manual. Se a solução OCTAVE não coincidir com o exemplo manual, devemos rever ambas as soluções a fim de encontrar o erro.

Testem o programa de vocês agora com outros pontos:

P3=(4,-2) e P2=(10,2). A resposta deve ser de: 7.2111

Percebe-se que todas as vezes que precisamos mudar os valores dos pontos temos que abrir o arquivo salvo. Podemos fazer melhorias no programa com o objetivo de evitar a modificação do arquivo.

Façamos então:

(9)

%este programa calcula e imprime a distancia em linha reta, entre dois pontos

p1x=input('Entre com o valor de x do ponto 1:') p1y=input('Entre com o valor de y do ponto 1:') p2x=input('Entre com o valor de x do ponto 2:') p2y=input('Entre com o valor de y do ponto 2:') d=sqrt((p2x-p1x)^2+(p2y-p1y)^2) % calcula a distância

Obs: Podemos incluir no fim deste programa os seguintes comandos também.

Distancia=['A distancia entre os pontos é:' num2str(d)];

disp(Distancia)

1.9 - Outro exemplo

Para entrar com uma matriz pequena, por exemplo usa-se

>> A = [1 2 3; 4 5 6; 7 8 9]

colocando colchetes em volta dos dados e separando as linhas por ponto e vírgula. Quando se pressiona a tecla <enter> o OCTAVE responde com





9 8 7

6 5 4

3 2 1 A

Para inverter esta matriz usa-se

>> B = inv(A)

e o OCTAVE responde com o resultado.

(colocar aqui o resultado obtido) O que achou do resultado?

(10)

B

1.10 - Funções especiais de matrizes no Octave

zeros(n) Matriz quadrada de zeros de ordem n

ones(n) Matriz quadrada de uns de ordem n

eye(n) Matriz quadrada identidade de ordem n

size(A) Retorna 2 valores: número de linhas e número de colunas da matriz A

length(A) Retorna a maior dimensão da matriz A.

rank(A) Posto de uma matriz A

eig(A) Autovetores de A

max(A) Maior valor da matriz por colunas

min(a) Menor valor da matriz por colunas

rand(m,n)

matriz de dimensão m x n em que os elementos são aleatoriamente

(11)

distribuídos entre 0 e 1.

1.11 - Exportando e Importando Dados

Você pode exportar e importar dados gerados do OCTAVE.

Suponha você tenha duas matrizes a e b.

>>a=[1 2;3 4]

>>b=[4 3;2 1]

Vamos salvar em um arquivo chamado: valores.mat

>>save valores.mat a b -ascii % salva a e b no arquivo valores.mat O arquivo será salvo no diretório em uso.

Para reabri-lo devemos digitar:

>>clear all

>> load valores.mat

1.12 - Uso do printf

printf (TEMPLATE, ...) Imprime os argumentos sob o controle dos parâmetros de saída.

Parâmetros de saída

Conversões de saída:

 ‘%d’, ‘%i’ Imprime um inteiro com um simples número decimal.

 ‘%f’ Imprime um ponto flutuante em ponto flutuante.

 ‘%e’ Imprime um ponto flutuante em notação exponencial.

 ‘%g’

Imprime um ponto flutuante em ponto flutuante ou exponencial, o que tiver

(12)

tamanho mais conveniente.

 ‘%c’ – Imprime um carácter.

 ‘%s’ – Imprime uma string,

 ‘%%’ – Imprime o caractere literal ‘%’.

O uso de conversões inválidas pode causar erros não perceptíveis (que pode facilmente causar engano!), o que deve ser evitado ao máximo.

Exemplos:

a) Várias saídas numéricas:

>> printf ("%4d, %4.2f %8.4e %8.4g\n", 1234, 34.123456, e^10, e^10);

1234, 34.12, 2.2026e+004, 2.203e+004 b) Várias saídas de um valor numérico:

>> e^10, printf (" a=%5i,\n b=%4.2f,\n c=%8.4e,\n d=%8.4g\n", e^10, e^10,e^10, e^10)

ans = 22026.4657948067 a=22026,

b=22026.47, c=2.2026e+004, d=2.203e+004 c) Saída string:

>> printf ("Podemos escrever strings: %s \n", "Octave");

Podemos escrever strings: Octave d) Saída de caracteres:

>> printf ("Caracteres acentuados e especiais: %c, %c \n", 128, 123) Caracteres acentuados e especiais: Ç, {

e) Saída matricial:

>> h=hilb(3), printf ("%4.2f %10.2e %8.4g\n", h);

(13)

h =

1.00000 0.50000 0.33333 0.50000 0.33333 0.25000 0.33333 0.25000 0.20000 1.00 5.00e-001 0.3333 0.50 3.33e-001 0.25 0.33 2.50e-001 0.2

>> h=hilb(4), printf (" %.5f %.5f %.5f %.5f\n", h);

h =

1.00000 0.50000 0.33333 0.25000 0.50000 0.33333 0.25000 0.20000 0.33333 0.25000 0.20000 0.16667 0.25000 0.20000 0.16667 0.14286 1.00000 0.50000 0.33333 0.25000 0.50000 0.33333 0.25000 0.20000 0.33333 0.25000 0.20000 0.16667 0.25000 0.20000 0.16667 0.14286 f) Saída de caracteres especiais:

>>printf("\n Isto %c um sufoco, mas %c poss%cvel: \n\n",130,130,161) Isto é um sufoco, mas é possível:

>> printf("%c\n%c f(x) dx = 1.2 \n",244,245)

⌠ ⌡ f(x) dx = 1.2

(14)

2 - Controle de Fluxo ( Programação com loop e repetição)

Os comandos que controlam o fluxo especificam a ordem em que a computação é feita. No OCTAVE estes comandos são semelhantes aos usados na linguagem C, mas com uma estrutura diferente.

2.1 - Laço for

O laço for é o controlador de fluxo mais simples e usado na programação OCTAVE. Analisando a expressão

>> for i=1:5, X(i)=i^2;

end

pode-se notar que o laço for é dividido em três partes:

A primeira parte (i=1) é realizada uma vez, antes de o laço ser inicializado.

A segunda parte é o teste ou condição que controla o laço, (i<=5).

Esta condição é avaliada; se verdadeira, o corpo do laço (X(i)=i^2) é executado.

A terceira parte acontece quando a condição se torna falsa e o laço termina.

O comando end é usado como limite inferior do corpo do laço.

São comum construções em que conjuntos de laços for são usados principalmente com matrizes:

for i=1:8 for j=1:8,

A(i,j)=i+j;

B(i,j)=i-j;

end end

C=A+B;

2.2 - Laço while

No laço while apenas a condição é testada. Por exemplo na expressão

a = 1; b = 15;

(15)

while a<b, clc a = a+1 b = b-1 pause(1) end

disp('fim do loop')

a condição a<b é testada. Se ela for verdadeira o corpo do laço, será executado.

Então a condição é retestada, e se verdadeira o corpo será executado novamente. Quando o teste se tornar falso o laço terminará, e a execução continuará no comando que segue o laço após o end.

2.3 - Declarações if e break

A seguir, é apresentado um exemplo do uso da declaração if no OCTAVE.

for i = 1:5, for j = 1:5, if i == j

A(i,j) = 2;

else if abs(i-j) == 1 A(i,j) = -1;

else

A(i,j) = 0;

end end end end

Os valores de i e j variam de 1 a 5, varrendo toda a matriz A. Se (if) i for igual a j, A(i,j)=2, ou se (elseif) o valor absoluto de i-j for igual a 1, A(i,j)=-1, ou (else) A(i,j)=0, se nenhuma das condições anteriores forem satisfeitas.

Vejam que estas declarações também podem conter o comando ELSE que executa outro conjunto de comandos se o resultado do IF for falso.

É conveniente, às vezes, controlarmos a saída deu m laço de outro modo além do teste, no início ou no fim do mesmo. O comando break permite uma saída antecipada de um for ou while. Um comando break faz com que o laço mais interno seja terminado imediatamente.

Exemplo a ser feito em casa.

caras=0 coroas=0

(16)

quantidade_de_lancamento=1000 x=rand(1,quantidade_de_lancamento) for i=1:length(x)

if x(i) <0.5 x(i)=0 %cara else

x(i)=1 %coroa end

end figure hist(x);

title('caras e coroas') for i=1:length(x)

if x(i)==0

caras=caras+1;

else

coroas=coroas+1;

end end

P=caras/length(x)

Exercício para casa: Fazer um programa que gerencie o sistema de notas de um professor em determinada turma. Os alunos desta turma terão 3 notas entre 0 e 10. A regra de aprovação é a mesma usada no IFSudeste MG (Caso não tenham média terão que fazer uma prova final). Calcule a média final e determine se o aluno será aprovado com ou sem prova final.

(17)

3 – MATRIZES

3.1 - MANIPULAÇÃO DE VETORES E MATRIZES

O OCTAVE permite a manipulação de linhas, colunas, elementos individuais e partes de matrizes.

3.1.1 - Gerando Vetores

Os dois pontos, " : ", é um caractere importante no OCTAVE. A declaração

>> x = 1 : 5

gera um vetor linha contendo os números de 1 a 5 com incremento unitário. Produzindo

1 2 3 4 5

 x

Outros incrementos, diferentes de um, podem ser usados.

>> y = 0 : pi/4 : pi que resulta em

0.000 0.7854 1.5708 2.3562 3.1416

 y

Incrementos negativos também são possíveis.

>> z = 6 : -l : l

6 5 4 3 2 1

 z

Pode-se, também, gerar vetores usando a função linspace. Por exemplo,

>> k = linspace (0, l, 6)

0 0.2 0.4 0.6 0.8 1

 k

gera um vetor linearmente espaçado de 0 a 1, contendo 6 elementos.

3.1.2 - Elementos das Matrizes

Um elemento individual da matriz pode ser indicado incluindo os seus subscritos entre parênteses. Por exemplo, dada a matriz A:

(18)





9 8 7

6 5 4

3 2 1 A

a declaração

>> A(3,3) = A(1,3) + A(3,l) resulta em





10 8 7

6 5 4

3 2 1 A

3.1.3 - Como acessar os elementos da Matriz

Para acessar cada elemento da matriz utiliza-se a notação de matrizes B(i,j), onde ’i’ é a linha, e ’j’ é a coluna onde o elemento da matriz ’B’ está. Por exemplo:

>> B=[2 3 4;5 6 7]

B = 2 3 4 5 6 7

>> B(1,2) ans = 3

>> B(2,2) ans = 6

>> B(1,:) ans = 2 3 4

>> B(:,2) ans = 3 6

>> B(:,1:2) ans =

2 3 5 6

Observe que:

• B(1,2), este comando fornece o elemento da linha 1 e coluna 2;

• B(2,2), este comando fornece o elemento da linha 2 e coluna 2;

(19)

• B(1,:), este comando fornece todos os elementos da linha 1;

• B(:,2), este comando fornece todos os elementos da coluna 2;

• B(:,1:2), este comando fornece os elementos de todas as linhas das colunas 1 até a 2.

3.1.4 Como acrescentar linhas ou colunas numa dada Matriz

>> A=[5 6 7;5 8 9]

A = 5 6 7 5 8 9

>> B=[A,[15;12]]

B = 5 6 7 15 5 8 9 12

>> C=[B;[16 17 18 19]]

C = 5 6 7 15 5 8 9 12 16 17 18 19

• B=[A,[15;12]], este comando, acrescenta-se a Matriz A, a quarta coluna formada pelos elementos 15 e 12;

• C=[B;[16 17 18 19]], este comando, acrescenta-se a Matriz A, a terceira linha formada pelos elementos 16, 17, 18 e 19.

3.2 - OPERAÇÕES COM MATRIZES

As operações com matrizes no OCTAVE são as seguintes:

 · Adição;

 · Subtração

 · Multiplicação;

 · Transposta;

A seguir cada uma dessas operações é mostrada com mais detalhe.

3.2.1 - Transposta

O caractere apóstrofo, " ' " , indica a transposta de uma matriz. A declaração

(20)

>> A = [1 2 3; 4 5 6; 7 8 0]

>> B = A' que resulta em





0 8 7

6 5 4

3 2 1 A





0 6 3

8 5 2

7 4 1 B

e

>> x = [-1 0 2]' Produz







 2 0 1 x

Se Z é uma matriz complexa, Z' será o conjugado complexo composto. Para obter simplesmente a transposta de Z deve-se usar Z. ', como mostra o exemplo

>> Z = [1 2; 3 4] + [5 6; 7 8]*i

>> Z1 = Z' que resulta em:



 

 



 

 

i i

i Z i

i i

i Z i

8 4 6 2

7 3 5 1 1

8 4 7 3

6 2 5 1

3.2.2 - Determinante

O determinante de uma matriz é obtido através do comando det(A).

Portanto, se

(21)





0 8 7

6 5 4

3 2 1 A

det(A) = 27

3.2.3 - Adição e Subtração

A adição e subtração de matrizes são indicadas, respectivamente, por "+" e "-". As operações são definidas somente se as matrizes as mesmas dimensões. Por exemplo, a soma com as matrizes mostradas acima, A + x, não é correta porque A é 3x3 e x é 3x1. Porém,

>> C = A + B

é aceitável, e o resultado da soma é





0 14 10

14 10 6

10 6 2 C

A adição e subtração também são definidas se um dos operadores é um escalar, ou seja, uma matriz l x l.

Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo:

>> y = x - 1 resulta em:





 1

1 2 y

3.2.4 - Multiplicação

A multiplicação de matrizes é indicada por "*". A multiplicação x*y é definida somente se a segunda dimensão de x for igual à primeira dimensão de y. A multiplicação

>> x'* y

é aceitável, e resulta em Ans =

4

(22)

É evidente que o resultado da multiplicação y'*x será o mesmo. Existem dois outros produtos que são transpostos um do outro.

>> x*y'





2 2 4

0 0 0

1 1 2 Ans

>> y*x'





2 0 1

2 0 1

4 0 2 Ans

3.2.5 - Divisão

Existem dois símbolos para divisão de matrizes no OCTAVE "\" e "/". Se A é uma matriz quadrada não singular, então A\B e B/A correspondem respectivamente à multiplicação à esquerda e à direita da matriz B pela inversa da matriz A, ou inv(A)*B e B*inv(A), mas o resultado é obtido diretamente. Em geral, X = A\B é a solução de A*X = B

X = B/A é a solução de X*A = B

Por exemplo, como o vetor B foi definido como A*x, a declaração

>> z = A\B resulta em







 2 0 1 z

3.2.6 - Exponenciação

A expressão A^p eleva A à p-ésima potência e é definida se A é matriz quadrada e p um escalar. Se p é um inteiro maior do que um, a exponenciação é computada como múltiplas multiplicações. Por exemplo,

>> A^3

(23)





441 900 738

684 873 684

306 360 279 Ans

Agora vamos aplicar este conhecimento na resolução de um sistema de equações baseado no circuito abaixo.

 





20V

10V

15V

R1 R2 R3

E1

R4

E2 E3

3.3 - OPERAÇÕES COM CONJUNTOS

O termo operações com conjuntos é usado quando as operações aritméticas são realizadas entre os elementos que ocupam as mesmas posições em cada matriz (elemento por elemento). As operações com conjuntos são feitas como as operações usuais, utilizando-se dos mesmos caracteres ("*", "/", "\", "^" e " ‘

") precedidos por um ponto "." (".*", "./", ".\", ".^" e " .‘ ").

3.3.1 - Adição e Subtração

Para a adição e a subtração, a operação com conjuntos e as operações com matrizes são as mesmas. Deste modo os caracteres "+" e "-" podem ser utilizados tanto para operações com matrizes como para operações com conjuntos.

3.3.2 - Multiplicação e Divisão

A multiplicação de conjuntos é indicada por ".*". Se A e B são matrizes com as mesmas dimensões, então A.*B indica um conjunto cujos elementos são simplesmente o produto dos elementos individuais de A e B. Por exemplo, se

>> x = [1 2 3]; y = [4 5 6];

(24)

então,

>> z = x.*y resulta em

4 10 18

 z

As expressões A./B e A.\B formam um conjunto cujos elementos são simplesmente os quocientes dos elementos individuais de A e B. Assim,

>>z=x.\y resulta em

4 2.5 2

z

3.3.3 - Exponenciação

A exponenciação de conjuntos é indicada por ".^". A seguir são mostrados alguns exemplos usando os vetores x e y. A expressão

>> z = x .^ y resulta em

1 36 729

z

A exponenciação pode usar um escalar.

>> z = x.^2

1 4 9

 z

Ou, a base pode ser um escalar.

>> z = 2.^[x y]

Z=

2 4 8 16 32 64

Caso deseje calcular a raiz Terceira, quarta, e assim por diante, basta fazer:

>> z = x.^(1/3)

(25)

z=[1.0000 1.2599 1.4422]

3.3.4 - Operações relacionais e lógicas

Estes são os seis operadores usados para comparação de duas matrizes com as mesmas dimensões:

< menor

<= menor ou igual

> maior

>= maior ou igual

== igual

~= diferente

A comparação é feita entre os pares de elementos correspondentes e o resultado é uma matriz composta dos números um e zero, com um representando VERDADEIRO e zero, FALSO. Por exemplo,

>> 2 + 2 ~= 4

ans = 0

Pode-se usar, também os operadores lógicos & (e) e I (ou). Por exemplo,

>> 1= = 1 & 4 = = 3 ans =

0

>> 1 = = 1 | 4 = = 3 ans =

1

Exemplo de Aplicação em Circuitos Lógicos

(26)

3.3.5 - Funções Matemáticas e Lógicas

O Octave dispõe de um grande número de funções matemáticas pré-definidas, que denominamos funções intrínsecas (built-in functions).

As funções trigonométricas para cálculo de ângulos em radianos incluídas no OCTAVE são:

sin - seno cos - cosseno tan - tangente asin - arco-seno acos - arco-cosseno atan - arco-tangente

atan2 - arco-tangente para os quatro quadrantes sinh - seno hiperbólico

cosh - cosseno hiperbólico tanh - tangente hiperbólica asinh - arco-seno hiperbólico acosh - arco-cosseno hiperbólico atanh - arco-tangente hiperbólico

No caso de ângulos em graus, deve-se incluir logo após o comando a letra d ( degree). Assim:

sind - seno cosd - cosseno tand - tangente asind - arco-seno acosd - arco-cosseno atand - arco-tangente

OCTAVE inclui como funções elementares

abs(x) - valor absoluto ou módulo de um número complexo

(27)

angle(x) - ângulo de fase sqrt(x) - raiz quadrada real(x) - parte real

imag(x) - parte imaginária conj(x) - complexo conjugado

round(x) - arredondamento para o inteiro mais próximo fix(x) - arredondamento para o inteiro mais próximo de zero floor(x) - arredondamento para o inteiro mais próximo de - ceil(x) - arredondamento para o inteiro mais próximo de + gcd(a,b,c) - máximo divisor comum

lcm(a,b,c) - mínimo múltiplo comum exp(x) - exponencial de base e

log(x) - logaritmo natural log10(x) - logaritmo de base 10

roots(x) – encontra a raiz do polinômio cujos coeficientes estão no vetor x poly(x) – encontra os coeficientes do polinômio cujas raízes estão no vetor x pol2cart(theta,R) – transforma polar para retangular/cartesiano

cart2pol(x,y) - transforma retangular/cartesiano para polar.

(28)

4 GRÁFICOS

A construção de gráficos no OCTAVE é mais uma das facilidades do sistema. Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. Existe no OCTAVE uma vasta biblioteca de comandos gráficos.

4.1 - Gráficos Bidimensionais

4.1.1 - Números Complexos

Quando os argumentos para plotar são complexos, a parte imaginária é ignorada, exceto quando é dado simplesmente um argumento complexo. Para este caso especial é plotada a parte real versos a parte imaginária. Então, plot(Z), quando Z é um vetor complexo, é equivalente a plot(real(Z),imag(Z)).

4.1.2 - Escala Logarítmica, Coordenada Polar e Gráfico de Barras

O uso de loglog, semilogx, semilogy e polar é idêntico ao uso de plot. Estes comandos são usados para plotar gráficos em diferentes coordenadas e escalas:

polar(Theta,R) plota em coordenadas polares o ângulo THETA, em radianos, versos o raio R;

loglog plota usando a escala log10xlog10;

semilogx plota usando a escala semi-logarítmica. O eixo x é log10 e o eixo y é linear;

semilogy plota usando a escala semi-logarítmica. O eixo x é linear e o eixo y é log10; O comando bar(X) mostra um gráfico de barras dos elementos do vetor X, e não aceita múltiplos argumentos.

4.1.3 - Escala Linear

Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico bidimensional dos elementos de X versos os elementos de Y, por exemplo

>> t = 0:0.05:4*pi;

>> y = sin(t);

>> plot(t,y) resulta em

(29)

0 2 4 6 8 10 12 14 -1

-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Linhas de grade podem ser adicionadas ao gráfico com o comando

>> grid on

O OCTAVE pode também plotar múltiplas linhas e apenas um gráfico. Existem duas maneiras, a primeira é usado o comando hold on logo após gerarmos a 1 curva.

Exemplo:

>> t = 0:0.05:4*pi;

>> y = sin(t);

>> plot(t,y)

>> hold on

>> y2=cos(t);

>> plot(t,y2)

A segunda, e mais fácil, maneira de plotar gráficos com múltiplas linhas é usando o comando plot com múltiplos argumentos. Por exemplo:

>> plot(t,sin(t),t,cos(t),t,sin(t+pi), t,cos(t+pi))

(30)

Estes são os comandos para plotar gráficos bidimensionais:

plot Plotar linear.

loglog Plotar em escala loglog.

semilogx Plotar em semilog.

semilogy Plotar em semilog.

fill Desenhar polígono 2D.

polar Plotar em coordenada polar.

bar Gráfico de barras.

stem Seqüência discreta.

stairs Plotar em degrau.

errorbar Plotar erro.

hist Plotar histograma.

rose Plotar histograma em ângulo.

compass Plotar em forma de bússola.

feather Plotar em forma de pena.

fplot Plotar função.

comet Plotar com trajetória de cometa.

Exemplos:

1) gráfico em polar

>> t=0:.01:2*pi;

>>r=sin(2*t).*cos(2*t);

>> polar(t,r) 2) gráfico de barras

(31)

>> x=-2.9:0.2:2.9;

>> y=exp(-x.*x);

>> bar (x,y)

>> figure

>> stairs(x,y) 3) gráfico de stem

>> y=randn(50,1); % cria dados aleatórios

>> stem(y,’:’)

4.2 - Anotações no Gráfico

O OCTAVE possui comandos de fácil utilização para adicionar informações em um gráfico:

title Título do gráfico.

xlabel Título do eixo-X.

ylabel Título do eixo-Y.

zlabel Título do eixo-Z.

text Inserir anotação no gráfico.

gtext Inserir anotação com o "mouse".

grid Linhas de grade.

legend Cria legenda para os gráficos Por exemplo:

Coloque titulo no gráfico, nos eixos e também legenda no gráfico anterior.

4.3 Estilos de Linha e Símbolo

Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados se os padrões não são satisfatórios. Por exemplo,

>> X = 0:0.05:1;

>> subplot(l,2,l), plot(X,X.^2,’m*’)

>> subplot(l,2,2), plot(X,X.^2,’k --‘)

(32)

Outros tipos de linhas, pontos e cores também podem ser usados:

TIPO DE PONTO

. ...

* * * * * * * * *

° ° ° °° ° ° ° ° ° °

+ ++++++++++

X xx x x x x x x V Triângulo para baixo

^ Triângulo para cima

d Losango

S Quadrado

P Pentágono

h hexágono

Gráfico com padronização de espessura de linha TIPO DE LINHA

_ _______________

-- --- -. -.-.-.-.-.-.-.-.-.-.-.-.

. ...

CORES

y amarelo

m lilás

c azul claro

r vermelho

g verde

b azul escuro

w branco

k preto

(33)

>>x=1:13

>>y=sin(2*pi*x/13)

>>plot(x,y,'linewidth',3)

Sequencia Símbolo Comando Símbolo

\alpha α \theta θ

\beta β \lambda λ

\gamma γ \pi π

\delta δ \int ∫

\epsolon ε \infty ∞

\omega ω \rho ρ

4.4 - Arquivos ".m" para gráficos

%Plota uma função y=ax^2 + bx + c no intervalo -5<x<5 clear

aux='s';

while aux== 's', clc

a=input('a =');

b=input('b =');

c=input('c =');

x=-5:0.1:5;

y=a*x.^2+b*x+c;

plot(y) figure(1) pause clc close

aux=input('Plotar outro ? (s/n) = => ','s');

end

Relembrando: O caractere % é usado para inserir um comentário no texto, o comando clear apaga todos os dados da memória, o comando input é usado quando se deseja entrar com um dado a partir da Janela de Comando, pause provoca uma pausa na execução do arquivo até que qualquer tecla seja digitada, clc limpa a Janela de Comando, figure(1) mostra a Janela Gráfica número 1 e close fecha todas as Janelas Gráficas.

4.5 - Plotando Gráficos Tridimensionais e Contornos

(34)

Estes são alguns comandos para plotar gráficos tridimensionais e contornos.

plot3 Plotar em espaço 3D.

fill3 Desenhar polígono 3D.

comet3 Plotar em 3D com trajetória de cometa.

Contour Plotar contorno 2D.

contour3 Plotar contorno 3D.

Clabel Plotar contorno com valores.

quiver Plotar gradiente.

mesh Plotar malha 3D.

meshc Combinação mesh/contour.

surf Plotar superfície 3D.

surfc Combinação surf/contour.

surfil Plotar superfície 3D com iluminação.

slice Plot visualização volumétrica.

cylinder Gerar cilindro.

sphere Gerar esfera.

waterfall Superfície de queda d´agua.

O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da matriz Z em relação ao plano definindo pelas matrizes X e Y. Por exemplo,

>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);

>> Z = X.* exp(-X.^2 - Y.^2);

>> mesh(X,Y,Z)

-2

-1 0

1 2

-2 -1 0 1 -0.52

0 0.5

e o comando contour(Z,10) mostra a projeção da superfície acima no plano xy com 10 iso-linhas:

(35)

2 4 6 8 10 12 14 16 18 20 2

4 6 8 10 12 14 16 18 20

Tabela: cores utilizadas em recursos gráficos

função Descrição função Descrição

hsv Cores saturadas copper Tons acobreados

hot Preto-vermelho-amarelo- branco flag Vermelho, branco, azul e preto alternados

gray Tons de cinza cool Ciana e magenta

bone Cinza azulado ocean azul

jet Variante do hsv pink Tons de rosa

Exemplos:

1)

>> [x,y] = meshgrid(0:0.1:10,0:0.1:10);

>> z = sin(x).*cos(y);

>> mesh(X,Y,Z) 2)

>>x=-3:0.1:3

>>y=x

>> [X,Y]=meshgrid(x,y)

>>Z=X.^3+Y.^3-5*X.*Y+1/5

>>surf(X,Y,Z)

>>colormap([summer])

>>figure

>>surf(X,Y,Z)

(36)

>>colormap([hot]) 3)

>> t=0:0.1:6*pi;

>> x=sqrt(t).*sin(2*t);

>> y=sqrt(t).*cos(2*t);

>> z=0.5*t;

>> plot3(x,y,z,'k','linewidth',1)

>> grid on

>> xlabel('x');ylabel('y');zlabel('z')

4)

>> t=linspace(0,pi,20);

>> r=1+sin(t);

>> [X,Y,Z]=cylinder(r);

>> surf(X,Y,Z);

>> axis square

5)

>> t=0:0.04:10;

>> x=t;

>> y=sin(x);

>> z=t.^1.5;

>> stem3(x,y,z,'fill');

6)

>> X=[5 9 14 20];

>> explode=[0 0 1 0];

>> pie3(X,explode)

7)

>>[x,y]=meshgrid(0:0.2:2,0:0.2:2)

>>u=cos(x).*y

>>v=sin(x).*y

>>figure

(37)

>>quiver(x,y,u,v)

8)

>>t=-10*pi:pi/250:10*pi

>>x=(cos(2*t).^2).*sin(t);

>>y=(sin(2*t).^2).*cos(t);

>>comet3(x,y,t)

4.6 - Superfícies de Revolução

Para se obter uma superfície de revolução a partir de uma função, podemos seguir os comandos abaixo:

x=[0:0.1:1]; pontos de discretização do eixo ox rad=f(x); % função que desejamos plotar

n=length(rad);

cylinder(rad,n) xlabel(‘eixo x’) ylabel(‘eixo y’) zlabel(‘eixo z’)

[X,Y,Z]=cylinder(rad,n);

h=surf(X,Y,Z);

rotate(h,[0,1,0],90) xlabel(‘eixo x’) ylabel(‘eixo y’) zlabel(‘eixo z’) view(15,15)

Exemplo: Construir a superfície de revolução ao girar a curva y=x^2+1:

Substitui f(x) no programa acima por x^2+1.

(38)

5 - FUNÇÕES

As chamadas functions são representadas no OCTAVE por arquivos ".m", mas que funcionam da mesma forma que as funções intrínsecas do OCTAVE.

Sua forma geral é:

function [variaveis_de_saida] = nome(variaveis_de_entrada) comandos da função

endfuction

Por exemplo, uma função que está disponível no OCTAVE é a function humps.m:

function y = humps(x)

y =1 ./ ((x-.3).^2 + .0l) + 1./((x-.9).^2 + .04) - 6;

04 6 . 0 ) 9 . 0 (

1 01

. 0 ) 3 . 0 ( ) 1 (

humps 2 2

 

 

x x x

O gráfico da função é:

>> x = -1:0.01:2;

>> plot(x,humps(x))

Devemos salientar que na primeira linha temos um vetor que começa em -1 e termina em 2 com passo de 0.01.

(39)

-1 -0.5 0 0.5 1 1.5 2 -20

0 20 40 60 80 100

Além das variáveis internas, duas diferenças cruciais entre scripts e funções são a forma como cada arquivo é chamado na linha de comando, e a maneira como os dados de entrada e saída são informados.

Nossa próxima tarefa é documentar o script acima, ou seja, inserir informações no arquivo que permitam que outra pessoa compreenda mais rapidamente o programa. A primeira atitude de alguém que acabou de receber o arquivo humps.m poderia ser tentar usar o comando help:

>> help humps

error: help: ‘humps’ is not documented

Vamos alterar o arquivo humps.m de modo que a descrição do arquivo esteja disponível. Para isso, inserimos, na primeira linha do arquivo, o seguinte texto:

% humps: plota uma equação

% y =1 ./ ((x-.3).^2 + .0l) + 1./((x-.9).^2 + .04) - 6;% y = sin(t), t entre 0 e 2*pi

Existem mais duas maneiras de trabalhar funções São os comandos

(40)

inline() e @()

Exemplos do uso para definir f=x^2+1:

>>f = @(x)x.^2+1;

f = @(x) x .^ 2 + 1

>>f(1) Ans=2

>>f = inline("x^2+1") f = f(x) = x^2+1

>>f(2) ans = 5

Extraindo informações das variáveis de entrada

Veremos alguns recursos que permitem extrair informações das variáveis de entrada de uma Função, visando atingir os objetivos desta função.

A variável nargin (Number of ARGuments of INput ) permite identificar quantos argumentos de entrada foram fornecidos pelo usuário. Usaremos este comando para fazer um exemplo:

function two.m

function A = twos(m,n) A = 2*ones(m,n);

Se rodamos esta function da forma abaixo:

>> twos(4,3) Teremos o resultado ans =

2 2 2 2 2 2 2 2 2 2 2 2

Mas se fizermos

>> twos(4)

Teremos um erro. Ele irá cobrar a outra variável de entrada Para resolver isto faremos:

function A = twos(m,n) if (nargin==2)

(41)

A = 2*ones(m,n);

else

A = 2*ones(m);

end

Exercício: 1) Crie uma função, chamada de somaprod, que recebe dois valores retorna a soma e o produto entre esses dois valores.

2) Fazer uma function que calcule o fatorial de um numero

5.1 - Integração Numérica

A área abaixo da curva pode ser determinada através da integração numérica da função humps(x), usando o processo chamado quadratura. Integrando a função humps(x) de -1 a 2:

>> q = quad ('humps',-1,2) Q =

26.3450

5.2 - Equações Não-Lineares e Otimização

Os dois comandos para equações não-lineares e otimização incluem:

fminbnd Minimizar função de uma variável.

fmins Minimizar função de várias variáveis fzero Encontrar zero de função de uma variável.

Continuando o exemplo, a localização do mínimo da função humps(x) no intervalo de 0.5 a 1 é obtido da seguinte maneira,

>> xm = fminbnd('humps',0.5,1) xm =

0.6370

>> ym = humps(xm) ym =

(42)

11.2528

E o gráfico deste intervalo com o ponto de mínimo pode ser construído:

>> x = 0.5:0.01:1

>> plot(x, humps(x), xm, ym, ‘o’)

Pode-se ver que a função humps(x) apresenta dois "zeros" no intervalo de -1 a 2. A localização do primeiro "zero" é próxima do ponto x = 0,

xzl = fzero('humps',0) xzl =

-0.1316

e a localização do segundo "zero" é próxima do ponto x= 1,

>> xz2=fzero('humps',1) xz2 =

1.2995

O gráfico da função com os dois "zeros" é obtido através da expressão:

>> x = -1:0.01:2

>> plot(x, humps(x), xzl, humps(xzl),'*', xz2, humps(xz2), '+'), grid

(43)

5.3 - Estatística

Neste capítulo são encontradas funções para cálculo de média, desvio padrão, entre outras.

Função: mean(x)

Se x é uma matriz, esta função irá computar o significado para cada coluna e retorná-las em um vetor linha.

Função: median(x)

Esta função calcula o valor mediano do vetor x.

Função: std(x)

Esta função calcula o desvio padrão do vetor x.

Função: cov(x,y)

Esta função calcula a matriz covariância de x e y Função: corrcoef(x,y)

Esta função faz a correlação entre a variável de ordem i em x, e a variável de ordem j em y.

5.4-Cálculo Diferencial e Integral

5.4.1- Operações Simbólicas

Antes de qualquer operação, onde se tem x, y, z ou qualquer outra como variável, é preciso definir sua variável, para isso usa-se o comando:

(44)

syms x ,

Dessa forma estará indicando que qualquer x que for colocado em funções é uma variável e não um número.

Uma vez definido que a variável x é uma variável simbólica, podemos definir expressões que envolvem esta variável. Por exemplo, dadas duas funções

5 3 2 )

(x  x2 x

f e g(x)x2x7

podemos fazer uma série de operações algébricas envolvendo estas funções.

>> f=2*x^2+3*x-5; g=x^2-x+7;

>> f+g ans =

3*x^2+2*x+2

>> f-g ans =

x^2+4*x-12

>> f*g ans =

(2*x^2+3*x-5)*(x^2-x+7)

>> expand(ans) ans =

2*x^4+x^3+6*x^2+26*x-35

>> f/g ans =

(2*x^2+3*x-5)/(x^2-x+7)

>> expand(ans) ans =

2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7)

>> pretty(ans)

Observe que o Octave não faz as simplificações ou expansões automaticamente. Para isso, usamos os comandos simplify que simplifica e expand que faz a expansão. Além destes, usamos acima também o comando pretty, que mostra a expressão de uma forma mais fácil de

enxergar. Além destes, que já vimos, existe o comando simple, que tenta encontrar a forma mais simples de escrever uma expressão.

(45)

5.4.2 Limites

Para efetuar uma operação com limites no OCTAVE, o comando que se deve dar é:

>>limit(f(x),x,a)

onde f(x) é a função que se quer achar o limite, x é a variável e a é o número no qual o x está tendendo ( x

→ a ).

Exemplo: Achar o limite abaixo:

resposta: -5/3

5.4.3 Limites à esquerda e à direita

Para calcular limites à esquerda e à direita, o comando é:

>>limit(f(x),x,a,’left’) e

>> limit(f(x),x,a,’right’)

onde ‘left’ e ‘right’ são os comandos para calcular à esquerda e à direita, respectivamente.

5.4.4 - Derivadas

Para o cálculo de derivadas, o comando no OCTAVE é:

>>diff(f(x)),

onde f(x) é a função que se quer determinar a derivada.

Exemplo: Derivar as funções abaixo:

(46)

resposta: 4*x+3 e 1/(3-x)^2 5.4.5 - Derivadas superiores

As derivadas superiores são simples de se calcular no OCTAVE, o comando para tal operação é o mostrado abaixo:

>> diff(f(x),2),

esse exemplo é para a derivada segunda da função f(x), para derivada terceira, coloca-se 3 no lugar do número 2, para derivada quarta, o numero 4 e assim por diante.

Exemplo: Derivar as funções abaixo:

resposta:a) 2/(3-x)^3 e -2/x^3, 1+1/x^2 5.4.6 - Derivadas Trigonométricas

resposta: cos(x), -2*sen(2*x) e 3+3*tan(3*x+5)^2 5.4.7 - Integrais

Na integração de funções, o comando que o OCTAVE reconhece para tal operação é:

>> int(f(x)) ,

pode – se colocar a função dentro dos parênteses, ou então definir uma função f e simplesmente escrever int(f).

(47)

Exemplo: Integrar as funções abaixo:

5.4.8 Integrais definidas

Ao se calcular integrais definidas no OCTAVE, o comando necessário fornecer o seguinte comando:

>> int(f(x),a,b),

onde a é o limite inferior e b, o limite superior da integral.

Exemplos:

(48)

6 – Scilab/ Simulink

6.1 - O que é Scilab?

O Scilab é um software científico para computação numérica semelhante ao Matlab que fornece um poderoso ambiente computacional aberto para aplicações científicas.

Desenvolvido desde 1990 pelos pesquisadores do INRIA (Institut National de Recherche en Informatique et en Automatique) e do ENPC (École Nationale des Ponts et Chaussées), então pelo Consorcio Scilab desde Maio de 2003, Scilab é agora mantido e desenvolvido pelo Scilab Enterprises desde Julho de 2012. Distribuído gratuitamente via Internet desde 1994, o Scilab é atualmente usado em diversos ambientes industriais e educacionais pelo mundo.

Um dos aplicativos deste programa é o XCOS, objeto deste texto. O XCOS (antigo Scicos - Scilab Connected Object Simulator) configura-se como um toolbox do software SCILAB que permite a simulação de sistemas dinâmicos tanto de natureza contínua ou discreta. Ele é muito similar ao SIMULINK que é a interface gráfica do MATLAB.

(49)

6.2 - Rodando um modelo de demonstração

Um exemplo interessante de sistema no Simulink é o modelo termodinâmico de uma casa. Para rodar esta demonstração sigam os passos:

Dentro do MATLAB, rode o sistema digitando sldemo_househeat no matlab 2016 na janela de comando do MATLAB. Este comando inicia o Simulink e cria a janela de modela que contém a demonstração.

Obs: este modelo pode ter outros nomes em outras versões do matlab: thermo no matlab 2004 e open_system('sldemo_househeat’) no matlab 2007

6.3 - Descrição da demonstração

O modelo usado nesta demonstração é bem simples. O termostato é ajustado a 70 graus de Fahrenheit e afetado pela temperatura exterior, que varia aplicando uma onda do seno com amplitude de 15 graus a uma temperatura baixa de 50 graus. Isto simula flutuações diárias da temperatura.

(50)

6.4 - Fazendo um modelo simples no XCOS

Este exemplo mostra-lhe como construir um modelo bem simples. O modelo multiplica a onda do seno por 2 e indica o resultado junto com a onda do seno. O diagrama de blocos é como este:

Para rodar esta demonstração sigam os passos:

1- Entre no Scilab e clique no menu APLICATIVOS->XCOS 2- Uma janela com os blocos mais comuns vai ser aberta.

3- Uma janela de novo modelo também será aberta e o usuário deverá arrastar os blocos desejados para dentro desta janela.

Para criar este modelo, você precisará copiar para dentro do seu modelo os seguintes blocos das bibliotecas:

(51)

 Fontes ( blocos CLOCK_c e GENSIN_f)

 Receptores ( bloco CSCOPE)

 Operações matemáticas ( bloco GAINBLK)

 Roteamento de sinal ( bloco MUX)

Temos agora todos os componentes na nossa área de trabalho.

O próximo passo é conectar todos os blocos. Colocando-se o mouse sobre a saída da fonte senoidal e segurando o botão arrasta-se o fio até o multiplexador.

(52)

Após montarmos o circuito devemos mexer nos parâmetros da simulação. Vá em Simulação>>

Configuração

Mexeremos somente no tempo de simulação: escolha TEMPO FINAL DE INTEGRAÇÃO o valor de 20 segundos.

Feche a caixa de dialogo configuração clicando no botão OK

Escolha INICIAR no menu Simulação e olhe a curva que sairá no bloco de gráfico

(53)

6.5 – Comunicação entre Octave e Simulink

Como vimos nos capitulos anteriores, o Octave é o motor matemático que executa cálculos necessários para a simulação de modelos do Simulink.

Este capítulo apresenta os conceitos básicos e principais mecanismos de interação entre estes dois ambientes.

Para levar dados do simulink para o Octave usamos o bloco [To Workspace]

Para levar dados do Octave para o simulink usamos o bloco [From Workspace]

Há também a forma de enviar dados do simulink para arquivos *.mat [From File] ou de arquivo *.mat para o simulink [To File]

simout T o Workspace untitl ed.mat

T o File untitl ed.mat

From File

simin From Workspace

Exercício:

1)Monte o circuito abaixo e faça o gráfico no Octave

(54)

simout To Workspace

Sine Wave Scope

2) incluir a variável A no Octave e depois obter o resultado abaixo:

Scope 1

s Integrator1 1

s Integrator A

Constant

Aceleração Aceleração

Espaço Velocidade Velocidade

(55)

7 - Exercícios.

1) Dado x=9, calcule sqrt(x), exp(x), log(sqrt(x)), log10(x^2+6) Respostas: ans = 3, ans = 8.1031e+03, ans = 1.0986 e ans = 1.9395

Observação: exp(x) é a função exponencial ex e é a função inversa de log(x)

2) Responda qual o comando deve ser aplicado para responder às questões seguintes baseando na matriz abaixo:





5 . 5 6 . 0 3 . 1

6 . 0 1 . 1 6 . 0

4 . 3 2 . 3 1 . 1 C

a)Qual o tamanho da matriz C?

b)qual o valor de C(2,3)?

c) Quais os índices de todos os elementos cujo valor é o módulo de 0.6

3)Baseando-se na resolução do exemplo da distancia entre dois pontos, faça agora um programa que calcule a distancia de diversos pares de pontos armazenados em uma matriz de valores chamada A. A coluna 1 são referentes a P1x, a coluna 2 referentes a P1y, a coluna 3 referentes a P2x, a coluna 4 referentes a P2y.





























8 6 8 7

4 1 3 2

8 4 0 1

2 4 7 6

5 2 7 9

2 3 4 5

8 5 2 1

6 3 3 6

8 2 5 2

1 1 2 1

A

(56)

4)Baseando-se na resolução do exercício 4, faça agora um programa que calcule a distancia entre todos os pontos armazenados em uma matriz de valores chamada B. A coluna 1 são referentes a posição do ponto referente ao eixo X e a coluna 2 a posição referente ao eixo Y.





























8 7

3 2

0 1

7 6

7 9

4 5

2 1

3 6

5 2

2 1

B

5)Um trabalhador é pago de acordo com sua jornada semanal de trabalho de 40h, ,mais 50% sobre as horas extras trabalhadas. Escrever uma rotina que calcule o salário deste trabalhador. O programa deve solicitar ao usuário a quantidade de horas trabalhadas e o valor pago por hora. No fim o programa deve retornar o salário final.

6) Construa um laço for-end em uma rotina para determinar a soma dos n primeiros termos da série:

n

k k

k

k

1

2

) 1

(

. Execute a rotina para n=4 e n=20

7) Dado





13 16 2

9 10 8

5 4 4

A Obtenha A após o seguinte comando:

>> A(:,1) = A(:,2) + A(:,3)

8) Transformar a matriz





13 16 2

9 10 8

5 4 4

A em uma matriz linha B.

(57)

%%%%%%%%%%

9) Resolva o sistema



 7 2 4

6 3 2

y x

y x

Resposta: 2.0625 e 0.625

10 ) Dado 

 

 4 3

2

A 1 calcule A^2 e A.^2 . Qual a diferença entre eles?

E dado 

 

 5

B 4 calcule B^2 e B.^2

11) Desenhe o circuito lógico que represente a equação abaixo e mostre matricialmente o resultado usando o Octave.

(A|B)&(C&D) &(~E)

12) Monte um programa que calcule a saída do circuito lógico abaixo:

13) Calcule os valores absolutos e de fase do numero complexo 2+j*3 Resposta:3,6156,31

14) Usando os comandos de arredondamento calcule: round(x), fix(x), floor(x) e ceil(x) Para a matriz x=[1 1.1 1.5 1.7 1.9]

15) Conforme mostra a figura, três forças estão aplicadas num suporte. Determine a força total (ou resultante) aplicada ao suporte.

(58)

16)Fazer os gráficos referentes a relação peso X idade e altura X idade e uma criança baseado na tabela abaixo:

idade altura peso

0 dias 50 3,25

2 meses 59 5,5

4 meses 63 6,9

6 meses 66 7,85

8 meses 70 8,7

10 meses 72 9,45

12 meses 75 10,1

18 meses 82 11,77

2 anos 87 13

3 anos 95 14,87

4 anos 101 16,63

5 anos 107 18,67

6 anos 114 21,04

7 anos 120 23,6

8 anos 126 26,1

9 anos 131 28,5

10 anos 135 30,9

11 anos 139 34

12 anos 144 38,8

17) a)Crie uma função que calcule a área e o volume de um paralelepípedo

b)Após desenvolver o item a), fazer um programa que calcule também a área e volume de um cilindro e identifique se o sólido é paralelepípedo ou cilindro ( usar comando NARGIN)

(59)

18) Um trem e um carro aproximam-se de uma passagem de nível, Em t = 0, o trem esta 122m ao sul da passagem, viajando no sentido norte com velocidade constante de 87 km/h ; o carro esta 61m a leste da passagem , viajando no sentido oeste com velocidade de 45km/h e aceleração de 4m/s2. Determine as posições do trem e do carro; a distancia relativa e as velocidades em cada segundo até o tempo t = 10s.

Faça um gráfico dom estes valores

19)- Mostre computacionalmente que:

1 . 1

lim e

n

n

n

 

 

  

20)Dadas 3 fontes senoidais equilibradas de amplitude 1 e defasados de 120. Desenhar as 3 curvas e a soma delas.

21) Dada a função abaixo obtenha a sua derivada e sua integral. Obs: Usar os blocos integrator e derivative

Referencias adicionais

Existem diversos livros e tutoriais disponíveis na internet para Matlab e Octave, apresentando desde conceitos básicos – como os aqui abordados – até ferramentas de toolboxes (como as toolboxes de processamento de sinais, de redes neurais, de lógica fuzzy e de design de filtros). A seguir, alguns livros e sites são sugeridos e listados como fontes auxiliares para o aprendizado dessas ferramentas.

No caso do Matlab, veja na aba Help!Product Help, e procure por Getting Started.

• Matlab Guide - Desmond J. Higham e Nicholas J. Higham - Second edition, Siam

• A Matlab Guide for Beginners and Experienced Users - Brian R. Hunt, Ronald L. Lipsman e Jontahan M. Rosenberg - Second edition, Cambridge

• http://www.mathworks.com/

• http://www.gnu.org/software/octave/ (Para download e informações sobre o Octave)

(60)

• http://www.inf.ufes.br/ pet/ (Um mini-curso deMatlab/Octave voltado para cáculo numérico)

• http://www.ceunes.ufes.br/downloads/2/isaacsantos-apostila-Octave.pdf (Mais uma apostila básica de Octave)

https://regijs.github.io/topicos/intmatl.pdf

Referências

Documentos relacionados

Com todas as informações aqui discorridas, podemos perceber que o projeto “Adeus aos Lixões” teve resultados permanentes, pois embora não se tenha conseguido adaptar efetivamente

A questão tipicamente usada pelos pesquisadores é: “Se você tivesse um amigo que não conhecesse nada sobre „tal personalidade política‟, o que você diria a

Destaca-se que esses resultados foram seme- lhantes aos de um estudo realizado na Islândia, no qual os profissionais com maior nível educacional relataram maiores frequência

The main reasons attributed to missed care were pro- blems related to the labor resource domains, such as: ina- dequate staff numbers, patient emergency situations and

Amongst them, the most outstanding factors are a pool of qualified workers within the region; geographical proximity to the main suppliers of technology; the role of

One of Bakhtin’s concepts – exotopy (outsideness) 27 - originating from the aesthetic-literary theory presented in his essay, Author and Hero in Aesthetic

No atual estágio em que nos encontramos, cabe-nos ainda perguntar: quando os professores-estagiários apresentam em seus discursos analíticos da prática de ensino

21 It is certainly the most quoted passage on the subject in works that would follow Pêcheux, even if its details are not really considered. In general, one does not