Matlab: Um Curso Introdutório Matlab: Um Curso Introdutório OBJETIVO: O objetivo desta apostila é permitir ao aluno dominar o conceito, a lógica e os comandos básicos presentes no Matlab. Através desta apostila, o aluno que nunca teve contato com programação pode também familiarizar-se com os conceitos elementares presentes nas linguagens de computação científica usuais. É importante que a leitura da apostila seja feita em paralelo com a utilização do computador, permitindo assim uma melhor compreensão dos tópicos apresentados. Com base nesta idéia, há uma série de exemplos numerados com tarefas computacionais. Esta apostila não é uma obra fechada, qualquer crítica ou sugestão, que venha a aprimorá-la, de maneira a atingir as metas propostas, serão bem recebidas. 1. INTRODUÇÃO: 1.1 Computação e Engenharia Com o desenvolvimento da indústria de informática, máquinas cada vez mais poderosas passaram a estar disponíveis a um custo cada vez menor. Este fenômeno alterou de forma marcante os rumos das ciências da engenharia, permitindo precisão e velocidade no processamento de informações. Em virtude deste cenário, o domínio das principais ferramentas computacionais passou a ser um requisito básico para o engenheiro moderno. Apesar da existência no mercado de um grande número de programas para a resolução dos mais diversos problemas de engenharia, um profissional deve conhecer pelo menos os fundamentos de uma linguagem de programação, uma vez que o desenvolvimento de ferramentas computacionais apresenta grande importância nas áreas acadêmica, pesquisa e desenvolvimento e engenharia básica. 1.2 Matlab O Matlab (Matrix laboratory) é um ambiente que permite o desenvolvimento de rotinas computacionais semelhantes a uma linguagem de programação (FORTRAN, PASCAL, BASIC, etc.), dispondo ainda de poderosos recursos para a apresentação de resultados gráficos e processamento de matrizes. Apesar da sua grande versatilidade, o desenvolvimento de programas através do Matlab é uma tarefa mais simples quando comparada às demais linguagens de programação. 1 2. AMBIENTE DE TRABALHO: 2.1 Descrição Quando o Matlab é acionado, surge na tela do computador uma janela (janela de comando/command window) com um pequeno texto introdutório na parte superior e logo abaixo o símbolo ( » ), com o cursor piscando ao lado (linha de comando/command line). É através da janela de comando que o usuário vai se comunicar com o software, introduzindo as instruções na linha de comando. O símbolo ( » ) indica que o software está pronto para receber as instruções do usuário. Exemplo 2.1: Digite 238*436 Obs: Em todos os exemplos apresentados, após cada linha pressione “Enter”. Exemplo 2.2: Digite clc (este comando apaga a tela) Exemplo 2.3: Digite 258/652 , 56*48 (a vírgula permite que mais de um comando seja introduzido de uma só vez, o Matlab executará os comandos da esquerda para a direita). 2.2 Acesso ao “Help” A existência de um comando de ajuda (“help”) no Matlab permite ao estudante, uma vez dominando os comandos básicos do software, explorar ao longo do tempo uma quantidade cada vez maior de recursos, em um processo de autoaprendizado contínuo. O comando “help” pode ser acessado através da barra de menu (como qualquer “software for Windows” convencional) ou diretamente da linha de comando, como indica o exemplo: Exemplo 2.4: help quad 3. EXPRESSÕES ARITMÉTICAS E FUNÇÕES: 3.1 Operações aritméticas A linha de comando pode ser utilizada como uma calculadora científica. No entanto, as operações devem ser escritas da maneira adequada: Operação Soma Subtração Multiplicação Símbolo + * Operação Divisão Potenciação 2 Símbolo / ^ 3.2 Funções O Matlab apresenta um grande número de funções matemáticas embutidas. Exemplos destas funções podem ser encontrados na tabela abaixo: Função Comando Função Comando Módulo de x abs(x) seno de x sin(x) Raiz quadrada de x sqrt(x) cosseno de x cos(x) Exponencial exp(x) tangente de x tan(x) Logaritmo natural de x log(x) arco-seno de x asin(x) Logaritmo decimal de x log10(x) arco-cosseno de x acos(x) Resto de x/y rem(x,y) arco-tangente de x atan(x) Observação: Note que as funções indicadas (como todos os comandos do Matlab) são descritos através de letras minúsculas. 3.3 Ordem dos cálculos Os cálculos aritméticos são realizados sempre segundo a seguinte ordem: 1) Operações dentro dos parênteses (interno externo); 2) Funções; 3) Potenciação; 4) Multiplicação e divisão; 5) Soma e subtração. Observação: Operadores de mesma hierarquia são efetuados da esquerda para a direita. Exemplo 3.1: (9,8 0,8) (4 ln(10)) Determine o valor da expressão: ( 245 ) 124 Esta expressão matemática escrita na forma adequada para o Matlab resulta em: ((9.8-0.8)/(4-log(10)))^(245/124) E o seu resultado é: 27.0011 Exemplo 3.2: Determine o resultado das seguintes operações: a) 433 256 23,45 47 (483 234) b) 3,21 133 seno(ln(2)) 3 Observação: Notação: 1,2 106 = 1.2e6 9,9 1012 = 9.9e-12 3 4. VARIÁVEIS: 4.1 Conceito de variável Uma variável pode ser considerada como um objeto armazenado na memória do computador. Uma variável é composta pelo nome da variável (cadeia de letras e números começando por uma letra) e o conteúdo (objeto armazenado naquela variável, para as nossas aplicações vamos considerar sempre que este objeto é um resultado numérico, escalar ou matricial). Observação: Para criar o nome de uma variável é possível utilizar letras maiúsculas ou minúsculas mas deve-se observar que o Matlab faz distinção entre elas, ou seja, a e A são variáveis diferentes. Uma vez que a variável armazena o valor numérico, a variável pode participar plenamente de operações aritméticas representando aquele valor numérico. Por exemplo, se as variáveis A e B correspondem respectivamente aos valores numéricos 10 e 20, então digitar: A+B é equivalente a digitar: 10 + 20 4.2 Comando de atribuição Para armazenar um valor numérico sob uma variável, utiliza-se o comando de atribuição. Este comando apresenta a seguinte estrutura: Nome da variável = Valor numérico O valor numérico que é armazenado na variável pode estar representado por uma expressão aritmética ou até mesmo através de outras variáveis. Veja o exemplo: Exemplo 4.1: Qual é o valor da variável Casa ? A=3 , B=45+234 Casa=sqrt(A+B) Casa=Casa*3 4.3 Comandos de entrada e saída Os comandos de entrada e saída são responsáveis pela comunicação de dados entre o usuário e a máquina. A definição de um valor para uma variável pode ser feita diretamente pelo programador, utilizando o comando de atribuição (Seção 4.2). No entanto, em certas ocasiões, é necessário que o usuário (e não o programador) entre com o valor da variável. Neste caso, utiliza-se o comando de entrada input. Através deste comando, o computador interrompe a execução das demais atividades, apresenta uma mensagem e espera o usuário entrar com o valor da variável. 4 A sintaxe do comando é a seguinte: Nome da variável = input('mensagem') Exemplo 4.2: w=input('Entre com o valor da variável') Para a exibição do valor numérico de uma variável, basta apenas digitar o nome da variável. Caso em algum momento, seja necessário apresentar uma mensagem na tela, utiliza-se o comando disp('mensagem'). Exemplo 4.3: disp('Valores das variáveis Casa e w') , Casa , w Observação: Cada vez que o comando de atribuição é efetuado, o Matlab apresenta na tela o nome da variável e o valor armazenado. No entanto, pode não ser desejável a apresentação na tela do resultado de um determinado comando de atribuição (por exemplo, este pode ser apenas um resultado intermediário em um cálculo), neste caso, coloca-se o símbolo ( ; ) no final da operação. Exemplo 4.4: Verifique a diferença entre os comandos: C=40 D=50; C,D 4.4 Gerenciamento de variáveis Quando em algum momento, é necessário determinar quais variáveis estão definidas, é utilizado o comando who. Exemplo 4.5: who Uma vez que uma variável foi definida através do Matlab, ela fica armazenada na memória até o momento em que a janela de comando é fechada. No entanto, quando uma tarefa no Matlab é finalizada e outra é logo iniciada na mesma sessão de trabalho, é indesejável que os valores das variáveis do trabalho anterior interfiram no novo trabalho. Utiliza-se então o comando clear que apaga da memória do computador uma ou mais variáveis. clear nome da variável (Apaga a variável) clear all (Apaga todas as variáveis armazenadas) Exemplo 4.6: A=30; A (O valor da variável é apresentado, indicando sua presença) clear A A (A variável foi eliminada) 5 5. ARQUIVOS DE COMANDOS: A entrada das informações através da linha de comando pode ser inconveniente pois requer a introdução dos comandos passo a passo. Além deste fato, caso seja necessário repetir um procedimento, todos os comandos devem ser novamente digitados. Para permitir a realização de tarefas mais complexas, o Matlab possibilita a criação de arquivos de comandos (“script files”). Arquivos de comandos são arquivos texto onde é armazenada uma seqüência qualquer de comandos, de maneira que estes podem ser executados quando necessário. Estes arquivos desempenham tarefa equivalente às listagens de programa utilizadas pelas linguagens de programação convencionais. Através de um arquivo de comandos, é possível inclusive acionar outros arquivos de comandos. Os arquivos de comandos devem ser escritos através do bloco de notas (notepad - editor de texto disponível no Windows) e sempre gravados com a extensão “.m”. Para executar um arquivo de comandos, deve-se apenas digitar o nome do arquivo na linha de comando. No entanto, é necessário antes da execução do arquivo, indicar ao Matlab em que subdiretório se encontra o arquivo. Para esta tarefa, é possível utilizar o comando path, ou, alternativamente, o comando cd. As sintaxes utilizadas são as seguintes, path(path,'endereço do subdiretório') ou cd endereço do subdiretório Abaixo está apresentado, passo a passo, o procedimento básico para a criação de um programa: - Passo 1 Inicialmente, deve-se identificar um subdiretório existente ou criar um novo subdiretório, onde serão colocados seus arquivos de trabalho, por exemplo subdiretório “prog”. - Passo 2 Informe ao Matlab onde seus arquivos de comandos estarão localizados, por exemplo, path(path,'a:\prog'), ou então, cd a:\prog - Passo 3 Abra um arquivo novo do bloco de notas. - Passo 4 Escreva neste arquivo os comandos do programa. Os comandos devem ser escritos linha por linha, ou quando escritos na mesma linha separados por vírgula. - Passo 5 Grave o arquivo de comandos com um nome apropriado, por exemplo, “trab.m” (nunca esquecer da extensão “.m”). - Passo 6 Passe para a linha de comando do Matlab e digite o nome do arquivo de comandos (sem a extensão), no exemplo: “trab”. Observação: Após qualquer alteração realizada no programa, o arquivo deve ser novamente salvo. Deve-se sempre ter em mente que o Matlab não lê o arquivo da tela e sim do disco. 6 Dicas: - Introduza comentários nas listagens dos programas. Os comentários são linhas entre os comandos destinadas apenas a descrever a função de certos trechos do programa. Os comentários auxiliam no momento de corrigir possíveis erros (“bugs”), facilitando também que uma outra pessoa possa entender o programa. Para colocar um comentário é utilizado o caracter “ % ”. Após este símbolo, o Matlab não executará o restante da linha pois o resto é apenas um comentário. - Para evitar que na execução dos programas, variáveis anteriormente definidas perturbem a seqüência de comandos, sugere-se que no começo do arquivo seja adicionado o comando clear all. Este comando nunca deve ser introduzido no meio do programa, pois caso isto aconteça, haverá a eliminação de todas as informações geradas até aquele momento. - Quando um trabalho de programação um pouco maior estiver sendo feito no Matlab, sugere-se criar um subdiretório só para os arquivos de comando referentes a este trabalho. Ou seja, cada tarefa executada no Matlab deve possuir um subdiretório próprio. Esta medida facilita o acesso aos arquivos, evitando confusões desnecessárias. No próximo exemplo está apresentada uma listagem de programa típica: Exemplo 5.1: Conversão de temperaturas F C e K % Programa para a conversão de temperaturas % Inicialização clc , clear all % Entrada de dados Tf=input('Digite a temperatura em graus Fahrenheit'); % Cálculos Tc=(Tf-32)/9*5; Tk=Tc+273.15; % Resultado disp('Temperatura em graus Celsius'); Tc disp('Temperatura em Kelvin'); Tk Exemplo 5.2: Criar um programa para o projeto de tanques cilíndricos. O usuário deve introduzir o diâmetro e a altura do tanque e o programa deve calcular o volume e a área total do tanque. 7 6. MATRIZES E VETORES: 6.1 Definição e entrada de matrizes e vetores Matrizes são arranjos bidimensionais de números. Nas matrizes, os valores numéricos estão organizados em linhas e colunas (dimensão n x m). Vetores são matrizes formadas por apenas uma linha ou uma coluna (dimensão n x 1 ou 1 x m). A introdução de matrizes pode ser feita diretamente pela definição de seus elementos individuais: A(i,j) = valor numérico onde (i,j) é a posição do elemento na matriz A . No entanto, é mais prático introduzir as matrizes de uma outra forma, como está representado abaixo: A = [ A11 A12 ; A21 A22 ] onde A i , j representa o elemento na posição (i,j). Neste caso, todos os elementos são envolvidos por colchetes. O ponto-e-vírgula indica a mudança de linha e em uma determinada linha os elementos são separados por um espaço ou uma vírgula. Exemplo 6.1: Entre com a seguinte matriz, 34 1 B 4 2 6.2 Operações matriciais O Matlab possui a capacidade de realizar operações matriciais do mesmo modo que as operações aritméticas com escalares. Operação Soma Subtração Multiplicação Símbolo + * Operação Transposição Matriz Inversa Símbolo ' inv(A) Exemplo 6.2: Indicar o resultado das seguinte operações matriciais: 1 AB AC A A a) b) c) d) A T onde, 1 2 A 5 3 e) d Ad T 3 5 5 B 2 4 4 2 6 C 4 5 8 2 d 3 6.3 Operações elemento a elemento Além das operações tradicionais entre matrizes, o Matlab dispõe do recurso das operações elemento a elemento. Quando aplicamos uma operação elemento a elemento a uma matriz, a operação é aplicada separadamente a cada elemento da matriz. Veja abaixo o exemplo da potenciação elemento a elemento: 1 2 A 3 4 1 4 A· ^ 2 = 9 16 , As principais operações elemento a elemento são: Operação Multiplicação Divisão Potenciação Símbolo ·* ·/ ·^ Observações: - Para realizarmos uma multiplicação ou divisão elemento a elemento entre duas matrizes, estas devem ter a mesma dimensão (deve existir correspondência entre os elementos). - As operações de soma e subtração convencionais já são naturalmente operações elemento a elemento, não necessitando assim de um caracter especial. As funções matemáticas embutidas no Matlab (seno, exponencial, etc.) quando aplicadas a matrizes geram resultados do tipo elemento a elemento. Exemplo 6.3: Indicar o resultado das seguinte operações matriciais elemento a elemento: a)A·*B onde, 1 2 A 5 3 b)seno(c) 2 6 B 4 5 c 0 2 3 2 2 6.4 Manipulações de matrizes e vetores O Matlab executa a manipulação de matrizes e vetores de maneira bastante flexível. Você pode alterar e compor matrizes e vetores através de elementos individuais, linhas, colunas ou até mesmo submatrizes. Através de exemplos retirados do Matlab, são apresentados e comentados abaixo os principais recursos de manipulação. 9 6.4.1 Vetores Exemplo 6.4: Digitando, x = 1:4 Obtém-se, x= 1 2 3 4 Ou seja um vetor de 1 até 4, com os elementos separados por um incremento unitário. Exemplo 6.5: Digitando, x = 1:0.5:4 Obtém-se, x= 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 O vetor continua sendo de 1 a 4, mas o incremento entre os elementos passa a ser 0,5. Exemplo 6.6: Digitando, x=0:2:10 Gera-se o vetor, x= 0 2 4 6 8 10 Agora podemos criar um novo vetor selecionando “partes” do vetor original, y=x(1:4) y= 0 2 4 6 O vetor y contém apenas as quatro primeiras componentes do vetor original. 6.4.2 Matrizes Exemplo 6.7: Digitando, A=[ 2 3 ; 4 5 ] , B=[ 1 2 ; 4 6 ] Obtém-se, A= 2 3 4 5 B= 1 2 4 6 A partir desta duas matrizes é possível criar uma terceira, C=[ A , B ] C= 2 3 1 2 4 5 4 6 Utilizando este conceito é possível compor matrizes complexas a partir de submatrizes mais simples. 10 Exemplo 6.8: O caracter (:) também pode ser utilizado para matrizes de maneira equivalente àquela utilizada para vetores, Digitando, A=[ 1:4 ; 5:8 ] Obtém-se, A= 1 2 3 4 5 6 7 8 Elementos desta matriz podem ser rearrumados em uma outra matriz, B=A(:,1:3) B= 1 2 3 5 6 7 Esta nova matriz contém todas as linhas da matriz original e apenas as três primeiras colunas. 6.5 Resolução de sistemas lineares Através da representação matricial de um sistema linear, é possível determinar a sua solução utilizando o Matlab. Considere um sistema linear genérico com duas variáveis (x1 e x2) e duas equações: A1,1 x1 A1, 2 x 2 b1 A 2,1 x1 A 2, 2 x 2 b 2 Este sistema também pode ser representado matricialmente da seguinte forma, A1,1 A 2,1 A1,2 x1 b1 A 2, 2 x 2 b 2 ou seja, Axb Para resolver um sistema de equações lineares através do Matlab, é necessário primeiro definir a matriz de coeficientes (matriz A ) e o vetor correspondente (vetor b ). Uma vez definidos a matriz e o vetor, basta apenas aplicar o seguinte comando e o Matlab indicará a solução, A\b Exemplo 6.9: Resolver o sistema de equações: x yz 6 x y 4 z 11 x 2 y 3z 14 11 6.6 Exemplos de aplicações de operações matriciais Exemplo 6.10: Para facilitar o trabalho dos operadores de uma planta industrial, deseja-se montar uma tabela que relacione a altura de líquido em um determinado tanque com o seu volume. O tanque possui 2 m de diâmetro e altura máxima de 2 m. Preparar esta tabela considerando um intervalo de 10 cm entre seus elementos. Sugestões: Utilize vetores coluna, operações elemento a elemento e composição de vetores para formar matrizes. Exemplo 6.11: Em uma unidade industrial três tanques cilíndricos (A, B e C) são periodicamente alimentados com nitrogênio. Os diâmetros e as alturas dos tanques são respetivamente: tanque A, 2 m e 3 m; tanque B, 1,5 m e 2 m e tanque C, 1,8 m e 2 m. Em um determinado momento a temperatura em cada tanque é 25 C. A instrumentação dos tanques indicam as seguintes pressões 1 atm, 2 atm e 3 atm. Calcular a massa de gás em cada tanque. Utilize a equação dos gases ideais para descrever o comportamento do gás no interior dos tanques. 7. GRÁFICOS: 7.1 Gráficos bidimensionais A maneira mais prática para traçar gráficos bidimensionais consiste na utilização do comando plot. Este comando, em sua forma mais simples, apresenta a seguinte sintaxe, plot(x,y) onde x é um vetor contendo as abcissas e y é um vetor contendo as ordenadas dos pontos, de maneira que são marcadas as coordenadas ( xi , yi ). Exemplo 7.1: Traçar o gráfico da função f(x) = x3 entre os valores de x = -2 e x = 2. Sugestão: Lembre-se das operações elemento a elemento. Através do comando plot também é possível definir a cor e/ou os símbolos apresentados nos gráficos: plot(x,y,'ct') onde c e t indicam respectivamente o código da cor e o código do símbolo a ser utilizado para traçar o gráfico, segundo as indicações da próxima tabela: 12 Código y m c r g b w k Cor amarelo magenta azul claro vermelho verde azul branco preto Código · o x + * : -· -- Símbolo pontos círculos xis cruzes asteriscos linha contínua tracejado traço-ponto linha interrompida Exemplo 7.2: Repetir o gráfico do exemplo 7.1, testando diferentes tipos de cores e/ou símbolos É possível traçar duas ou mais curvas no mesmo gráfico, com apenas um comando plot, plot(x1,y1,'ct',x2,y2,'ct') onde as indicações dos códigos de cores e símbolos ('ct') é opcional. Uma outra alternativa utilizada, quando todas as curvas apresentam a mesma variável dependente, é: plot(x,[ y1 y2 ]) Observação: Quando várias curvas são traçadas em um mesmo gráfico, o Matlab vai colorindo cada curva de acordo com a ordem da tabela de cores apresentada. Exemplo 7.3: Traçar os gráficos das curvas y = x2, w = x3, no intervalo entre -2 e 2. 7.2 Gráficos tridimensionais 7.2.1 Curvas O procedimento para traçar curvas no espaço tridimensional é semelhante àqueles empregados para as curvas 2-D, bastando apenas utilizar o comando plot3, plot3(x,y,z) plot3(x,y,z,'ct') plot3(x1,y1,z1,'ct',x2,y2,z2,'ct') Exemplo 7.4: Traçar a curva parametrizada x = t · seno(t), y = t · cosseno(t), z = t ; no intervalo [0,20]. 13 7.2.2 Superfícies A criação de gráficos de superfícies é realizada através de um conjunto de etapas. Primeiro, deve-se definir os vetores das variáveis independentes. Por exemplo, x= limite inferior das variáveis x:incremento:limite superior das variáveis x; y= limite inferior das variáveis y:incremento:limite superior das variáveis y; O próximo passo consiste em, a partir destes dois vetores, criar duas matrizes especiais através do comando meshgrid, [X,Y]=meshgrid(x,y) A matriz X consiste no vetor x repetido através das linhas e a matriz Y consiste no vetor y repetido em colunas. Estas matrizes servirão para a determinação do gráfico da superfície. O próximo passo agora é calcular o valor da variável dependente, por exemplo, Z=X.^2+Y.^2; Para traçar o gráfico da superfície utilize o comando surf surf(X,Y,Z) Além do comando surf, o Matlab dispõe de uma série de comandos equivalentes que permitem visualizar a superfície de diferentes maneiras, por exemplo, surfc, mesh, meshc, meshz, waterfall e contour3. Exemplo 7.5: Traçar o gráfico da superfície do exemplo apresentado entre os intervalos x [ 2,2] e y [ 2,2] . Para traçar curvas de nível de superfícies no Matlab, utiliza-se o comando contour, contour(X,Y,Z) 7.3 Identificação de gráficos Para complementar a representação gráfica de uma curva ou de uma superfície, existem uma série de comandos que permitem adicionar títulos e identificações dos eixos. 7.3.1 Títulos Adiciona-se um título ao gráfico através do comando title, title('Título') 14 7.3.2 Identificações dos eixos A identificação dos eixos x, y e z do gráfico é realizada respectivamente através do comandos xlabel, ylabel e zlabel, xlabel('Eixo x') , ylabel(‘Eixo y’) , zlabel(‘Eixo z’) Exemplo 7.6: Refazer o exemplo 7.1, colocando um título no gráfico e identificando os eixos . 7.4 Organização dos gráficos Quando o usuário traça um gráfico, e imediatamente logo após, traça um segundo gráfico, o último gráfico substitui o primeiro. Caso seja necessário, a apresentação dos dois gráficos em janelas diferentes, mas simultaneamente, utiliza-se o comando figure. Veja o exemplo, plot(x1,y1) (este comando traça o primeiro gráfico) figure(2) (este comando prepara uma outra janela para o segundo gráfico) plot(x2,y2) (o próximo gráfico agora vai para a segunda janela) Para fechar uma janela, utiliza-se o comando close close(n) (Fecha a janela n) close all (Fecha todas as janelas de gráfico abertas) 7.5 Exemplo de aplicação de gráficos Exemplo 7.7: (Adaptado de “Fundamentos de Transferência de Calor e Massa”, Incropera, F. P. e De Witt, D. P.) Quando um fluido escoa através de um tubo com temperatura de parede constante, a temperatura média do fluido ao longo do comprimento do tubo se aproxima gradativamente da temperatura da parede. A equação que relaciona a temperatura média do fluido e a posição ao longo do comprimento de um tubo circular é: dh T(x) Tp (Tp Te) exp x mCp Apresente o gráfico do perfil de temperatura média de um fluido, T(x), ao longo do comprimento de um tubo (x). No mesmo gráfico apresente também a temperatura da parede ao longo do comprimento do tubo. Incluir título e a identificação dos eixos. Dados do problema: Temperatura média do fluido na entrada do tubo: Te = 15 C; Temperatura da parede do tubo: Tp = 100 C; Diâmetro do tubo: d = 50 mm; Coeficiente de médio de convecção: h = 756 W/m2K; 15 Vazão mássica de fluido: m = 0,25 kg/s; Capacidade calorífica do fluido a pressão constante: Cp = 4178 J/kgK; Comprimento total do tubo: L = 6 m. Obs: Utilizar o sistema internacional (SI). 8. EXPRESSÕES LÓGICAS, COMANDOS CONDICIONAIS: EXPRESSÕES RELACIONAIS E 8.1 Expressões relacionais Expressões relacionais são utilizadas para comparar dois elementos. O resultado da comparação pode ser falso (0) ou verdadeiro (1) (variável booleana). Os operadores utilizados para compor as expressões relacionais são: Operador == ~= > Significado igual diferente maior Operador >= < <= Significado maior ou igual menor menor ou igual Exemplo 8.1: Verifique o resultado das seguintes expressões relacionais: 2>3 , 10+2==13 , (2+3)^2 ~= (2^2+3^2) 8.2 Expressões lógicas Expressões lógicas relacionam elementos do tipo verdadeiro (1) ou falso (0). O resultado de uma expressão lógica é também um resultado tipo verdadeiro/falso (1/0). Os principais operadores lógicos são: Operador & | ~ Significado and / e or / ou not / não Sejam A e B duas variáveis booleanas. Os resultados dos operadores lógicos são: A 0 0 1 1 B 0 1 0 1 A and B 0 0 0 1 A or B 0 1 1 1 Exemplo 8.2: Verifique o resultado da expressão lógica a seguir: not A and B onde A=0 e B=1 16 not A 1 1 0 0 8.3 Expressões mistas Expressões mistas utilizam operadores lógicos e relacionais em conjunto. Exemplo 8.3: Qual o resultado das expressões abaixo: 10 > 2 & 3 < 4 e ~(2^2~=4 or 3/5==0.6) 8.4 Comandos condicionais Comandos condicionais do tipo if/else/end (if/then/else) permitem a comparação entre dois elementos, e a partir do resultado desta comparação, o programa pode seguir um caminho ou outro. Estes comandos apresentam duas estruturas fundamentais: if-end e if-else-end. Estrutura if-end: if condição seqüência de comandos end Caso a condição (expressão relacional, lógica ou mista) seja verdadeira, o programa executa a seqüência de comandos, caso contrário, o programa ignora a seqüência. Estrutura if-else-end: if condição seqüência de comandos 1 else seqüência de comandos 2 end Se a condição (expressão relacional, lógica ou mista) for verdadeira, o programa executa a seqüência de comandos 1, caso a expressão seja falsa, o programa executa a seqüência de comandos 2. As seqüências consideradas no interior dos comandos if-else-end, também podem incluir novos comandos if/else/end, gerando estruturas mais complexas. Por exemplo, if condição 1 if condição 1a seqüência de comandos 1a end seqüência de comandos 1b else seqüência de comandos 2 end 17 Exemplo 8.4: Este trecho de programa identifica se a produção de uma fábrica (prod) atingiu a meta (meta) ou não. O programa também identifica se a produção ficou abaixo do limite aceitável (lim). if prod>meta disp(‘Parabéns, a meta de produção foi atingida’) else disp(‘Produção não atingiu a meta desejada’) if prod<lim disp(‘Produção abaixo do limite aceitável. Realizar auditorias’) end end Observação: Há outras formas equivalentes de conjuntos de comandos tipo if/else/end que poderiam executar a tarefa do exemplo. Você poderia propor uma alternativa ? Exemplo 8.5: Um tanque de dióxido de carbono cilíndrico resiste a uma pressão máxima de 3 atmosferas. As dimensões do cilindro são: diâmetro igual a 2 m e altura igual a 1,5 m. Fazer um programa onde o usuário digite a temperatura no interior do tanque e a massa de gás que deve ser adicionada. O programa deve responder se a operação é segura ou não. Tente por exemplo T = 27 C e uma massa de gás de 30 kg. Utilizar a equação dos gases ideais para descrever o comportamento do gás no interior do tanque. 9. COMANDOS DE REPETIÇÃO FOR E WHILE: 9.1 Comando for O comando for permite que um trecho do programa seja repetido um número previamente determinado de vezes, for contador = valor inicial:passo:valor final seqüência de comandos end Obedecendo ao comando for, é possível considerar que o programa seguirá as seguintes etapas: 1) Programa inicialmente atribui ao contador (variável) o seu valor inicial; 2) A seqüência de comandos é executada; 3) O contador é atualizado, contador = valor atual + passo. 4) Caso o valor do contador tenha ultrapassado o valor final, o processo termina, em caso contrário, retorna a etapa 2. Observação: A indicação do passo é opcional (valor “default” = 1). 18 Exemplo 9.1: Este programa calcula a produção média diária (med) a partir de um período de tempo definido pelo usuário (N). N=input(`Digite o número de dias de acompanhamento da produção’); soma=0; for d=1:N disp(‘Dia’) , d prod=input(‘Digite a produção do dia’); soma=soma+prod; end med=soma/N; disp(‘A produção média diária é’) , med Exemplo 9.2: Séries infinitas são seqüências de somas de números. A utilização de séries apresenta grande importância em diversos campos da engenharia química, como por exemplo nos estudos de transferência de calor e mecânica dos fluidos. É possível calcular o valor de com o auxílio de uma série: n 1 onde s n 2 6sn , quando n k 1 k Determine o valor de utilizando a série com a soma de 100 termos (n =100). Observação: Haveria outra maneira de resolver o exemplo acima sem a utilização de um “loop”? Pesquise o comando “sum”. 9.2 Comando while O comando while permite que um trecho do programa seja repetido enquanto uma determinada condição permanecer verdadeira. while condição seqüência de comandos end Este comando segue as seguintes etapas: 1) Verifica inicialmente se a condição é verdadeira. Caso seja verdade, segue para a seqüência de comandos, caso contrário a execução passa para o restante do programa 2) Executa a seqüência de comandos; 3) Volta à etapa 1. Exemplo 9.3: Este trecho de programa é utilizado para determinar quantos reatores em série (N) são necessários para que uma corrente de produto atinja a concentração desejada (cdes). A concentração de saída de cada reator (cs) é determinada por uma função chamada reat que utiliza como argumento a concentração de produto na corrente de entrada (ce). 19 cs=0; , N=0 while cs<cdes N=N+1; , ce=cs; , cs=reat(ce); end disp(‘Número de reatores em série necessários:’) N Exemplo 9.4: Equações do tipo x i f ( x i 1 ) para i 1 , 2 , 3 ... ; são muito comuns em algoritmos relativos à métodos numéricos em engenharia. Seja a seguinte equação recursiva, 1 xi com x0 = 1 (3 x i 1 ) 2 Determinar o valor de xi para o qual o valor absoluto da diferença de (xi-xi-1) torna-se menor que 10-4. Obs: Qual a relação entre o resultado do processo recursivo do exemplo e a equação: 1 x 0 (3 x ) 2 10. VARIÁVEIS INDEXADAS: 10.1 Conceito Variáveis indexadas são variáveis formadas por um conjunto de elementos individuais, onde cada elemento apresenta uma posição definida no conjunto. Vetores e matrizes, tal qual foram apresentados na Seção 6, são exemplos de variáveis indexadas, onde a posição do elemento é indicada por um índice, no caso dos vetores, ou dois índices, no caso das matrizes. Nas linguagens de programação usuais são possíveis variáveis indexadas com mais de dois índices. 10.2 Utilização As variáveis indexadas permitem ao programador gerenciar uma grande quantidade de informações de maneira simples e organizada. Uma grande massa de dados pode ser introduzida no computador através de apenas uma variável indexada, possibilitando depois que os dados individuais possam ser manipulados indicando apenas a sua posição no conjunto (índices). O exemplo seguinte ilustra a aplicação deste tipo de variáveis. Exemplo 10.1: Em um sistema de controle de estoque em uma indústria química, um programa recebe os níveis diários de aditivo em um tanque em um certo período, calcula a massa de aditivo disponível em cada dia, e devolve os dados de resposta indicando o dia, o nível do tanque, a massa de aditivo e um aviso nos dias em que a massa de aditivo esteve abaixo do limite mínimo. 20 % Leitura das informações à respeito do nível diário de aditivo Ndias=input(‘Digite o número de dias analisados’); for i=1:Ndias disp(‘Dia’) , i nivel(i)=input(‘Digite o nível do tanque (m)’); end % Rotina para cálculo das massas de aditivo em cada tanque for i=1:Ndias massa(i)=pi*D^2/4*nivel(i)*dens; end % Saída dos resultados for i=1:Ndias disp(‘Dia’) , i disp(‘Nível do tanque’) , nivel(i) disp(‘Massa de aditivo’), massa(i) if massa(i)<lim , disp(‘Estoque abaixo do limite mínimo’) , end end Observação: O emprego das operações elemento a elemento presentes no Matlab (Seção 6.3) permitem simplificar bastante a utilização das variáveis indexadas, eliminando muitas vezes a necessidade da utilização de laços for. É importante observar que este recurso normalmente não está disponível nas demais linguagens de programação. 11. FUNÇÕES: 11.1 Conceito Funções (function files) são uma classe especial de arquivos de comandos. Sua mecânica de funcionamento é similar as funções definidas na matemática. As funções recebem um ou mais argumentos, e partir destes argumentos, procedem a execução de um conjunto de comandos, gerando na saída um ou mais resultados numéricos. A grande vantagem das funções é que, uma vez definidas, elas podem ser empregadas quantas vezes forem necessárias em um ou mais programas diferentes. Com o objetivo de apresentar, na prática, como deve ser montado um arquivo de função, considere a criação de uma função destinada a determinar a pressão de um gás, a partir da temperatura e do volume, segundo a equação de estado dos gases ideais. A função deve ser criada em um arquivo exclusivo para ela. Todo arquivo de função deve começar pelo comando function. Ao lado deste comando, escreve-se o valor numérico da saída da função (no nosso caso p, a pressão) igualado ao nome da função (eq) seguido pelos argumentos de entrada (T,V; respectivamente, temperatura e volume). function p=eq(T,V) Seguem-se então o conjunto de definições, operações matemáticas e comandos que permitirão a função determinar o valor numérico da saída. 21 R=8314; p=R*T/V; Finalmente, um arquivo de função deve ser gravado necessariamente com o nome da função e a extensão “.m”. No exemplo acima, o arquivo deve ser gravado como “eq.m”. É possível, agora, utilizar a função de cálculo da pressão de um gás (eq) na linha de comando, em um arquivo de comando qualquer ou até mesmo em outra função. Por exemplo, o procedimento PT=eq(273.15,22.4); calcula o valor da pressão de um kgmol de gás ideal para T = 273,15 K e V = 22,4 m3, armazenando o resultado na variável PT. Observação: Para que o Matlab possa reconhecer a função criada, deve-se inicialmente indicar o “endereço” do arquivo (Seção 5). Exemplo 11.1: Criar uma função que faça a conversão de volume em ft3 para litros e m3. 11.2 Variáveis locais e globais Quando um arquivo de comandos convencional é executado, as variáveis envolvidas são manipuladas ao longo do programa, e, no final, continuam armazenadas em um espaço de memória gerenciado pelo Matlab (workspace). Tente, como exemplo, executar um arquivo de comandos e depois digite o comando who. Funções, no entanto, operam de maneira diferente. As variáveis definidas no interior de uma função (variáveis locais) não são armazenadas após a execução da função, e também não interferem com as demais variáveis externas. Da mesma maneira, as operações matemáticas e os comandos utilizados no interior da função só reconhecem as variáveis internas à função. Exemplo 11.2: Limpe as variáveis da memória do Matlab (comando clear all), execute uma vez a função gerada no exemplo da Seção 11.1 e digite o comando who. Caso seja necessário, é possível permitir que uma função reconheça uma ou mais variáveis externas. Neste caso utiliza-se o comando global, global A B C onde A, B e C são nomes de variáveis. O comando global deve ser incluído na função e também no arquivo de comando onde as variáveis globais aparecem. Em teoria, é possível nunca usar o comando global, introduzindo todos os valores numéricos necessários para o cálculo da função, ou através do argumento, ou 22 definindo-os no interior da própria função. Mas este pode não ser o procedimento mais prático sempre. Em um programa onde um grande número de parâmetros é calculado através de um arquivo de comandos principal e depois estes parâmetros são utilizados em várias funções diferentes, torna-se mais prático “distribuir” estes parâmetros através do comando global. 12. BIBLIOGRAFIA: “Notas de Aula do Curso de Computação I” Eduardo Paz e Moacyr Azevedo “Matlab - User`s Guide” The MathWorks, Inc. “Matlab - Versão do estudante - Guia do Usuário” Makron Books “Mini-Curso Uma Introdução ao Mathematica” (Apostila) Marcelo Castier 23