Baixe o app para aproveitar ainda mais
Prévia do material em texto
Página 1 Profa. Waléria A. G. Cecílio, Profa. Mônica D. S. Damaris e Prof. Wadilson K. F. Pereira CÁLCULO NUMÉRICO USANDO O MATLAB Página 2 INTRODUÇÃO O MATLAB é um sistema interativo cujo elemento básico de informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos problemas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem Fortran, Basic ou C. Além disso, as soluções dos problemas são expressas no MATLAB quase exatamente como elas são escritas matematicamente. AMBIENTE DE TRABALHO Quando iniciamos o MATLAB, o Comando Window é criado e se torna ativo. É através do Comando Window que nos comunicamos com o interpretador MATLAB, isto é, é a área na qual são digitados dados e instruções para o MATLAB. Desta forma, após digitar o comando basta acionar a tecla entere os resultados são exibidos na tela. Sinal de prompt „>>‟Indica estado de espera de entrada de dados. Outras janelas: [CommandDirectory]: área na qual é exibida a lista dos arquivos contidos no diretório corrente. [Workspace] Área de memória de trabalho do MATLAB, na qual ficam armazenadas todas as variáveis criadas na janela de comando. Página 3 [LaunchPad]: área na qual são exibidas informações, textos explicativos (online help) e exemplos de utilização dos produtos instalados. [Help] NÚMEROS E EXPRESSÕES ARITMÉTICAS DECLARAÇÕES E VARIÁVEIS As declarações no MATLAB são frequentemente da forma >> variável = expressão ou simplesmente >> expressão As expressões são compostas de operadores e outros caracteres especiais, de funções e dos nomes das variáveis. A avaliação das expressões produzem matrizes, que são então mostradas na tela e atribuídas às variáveis para uso futuro. Se o nome da variável e o sinal de igualdade “=” são omitidos, a variável com o nome ans,que representa a palavra “answer” (resposta), é automaticamente criada. Por exemplo: >> 1245/123 ans = 10.1220 Página 4 >> 53-4 ans = 49 >> 53-4; Se o último caractere da declaração é um ponto e vírgula, a impressão na tela é suprimida, mas a tarefa é realizada. Esse procedimento, em geral, é usado em arquivos do tipo script (<nome>.m) e em situações onde o resultado é uma matriz de grandes dimensões e temos interesse em apenas alguns dos seus elementos. Se a expressão é tão grande que não cabe em apenas uma linha, pode-se continuar a expressão na próxima linha usando um espaço em branco e três pontos”...”, ao final das linhas incompletas. Por exemplo, >> k=1/2 +3 -4/5 -3 +1 + 4 - 9 ... + 4 + 5/6 +7/4 k = 2.2833 Observe que o espaço em branco entre “-9” e “...” é obrigatório. A notação decimal convencional, com ponto decimal opcional e o sinal de menos, são usados para números. A potência de dez pode ser incluída como um sufixo. A seguir são mostrados alguns exemplos de números aceitos: 3 -99 0.00003 3.147458638 1.512E-20 6.097885e21 As expressões podem ser construídas usando os operadores aritméticos usuais e as regras de precedência: ^ exponenciação / divisão a direita \ divisão a esquerda * multiplicação + adição - subtração Página 5 Deve-se notar que existem dois símbolos para divisão: as expressões 1/4 e 4\1 possuem o mesmo valor numérico, isto é, 0,25. RESOLUÇÃO DE EXPRESSÕES Toda expressão é calculada da esquerda para a direita utilizando as definições da Matemática, isto é, Potenciação Multiplicação ou divisão Adição e subtração Sempre obedecendo a ordem de procedência. Para definir ou alterar a ordem de procedência utiliza-se do sinal de parênteses. Exemplo: 7+33 55−2 − 35 34.5 >> a=(7+3^3)/(5^5-2) a = 0.0109 >> b=(3^5)/34.5 b = 7.0435 >> sol=a-b sol = -7.0326 OBTENDO INFORMAÇÕES DA ÁREA DE TRABALHO Os exemplos de declarações mostrados nos itens acima criaram variáveis que são armazenadas na Área de Trabalho do MATLAB. Executando >>who obtêm-se uma lista das variáveis armazenadas na Área de Trabalho: Yourvariables are: aans b k sol Página 6 Que mostra as cinco variáveis geradas em nossos exemplos, incluindo ans. Uma informação mais detalhada mostrando a dimensão de cada uma das variáveis correntes é obtida com o comando whos. Cada elemento de uma matriz real requer 8 bytes de memória, assim nossa matriz sol de dimensão 1x1 usa 8 bytes. Seguindo o mesmo raciocínio, uma matriz A de dimensão 3x3 usa 72 bytes. FORMATO DE SAÍDA O formato numérico exibido na tela pode ser modificado utilizando-se o comando format, que afeta somente o modo como as matrizes são mostradas, e não como elas são computadas ou salvas. O MATLAB efetua todas as operações em dupla precisão. A precisão dupla fornece uma relativa precisão de cerca de 16 dígitos decimais e intervalo de magnitude de 10 -308 a 10 +308 . Se pelo menos um dos valores de entrada não é inteiro, existem várias possibilidades de formatar a saída. O formato “default”, chamado de formato short, mostra aproximadamente 5 dígitos significativos ou usam notação científica. Podemos verificar os tipos de formatos existentes no MATLAB, seguindo o caminho: File PreferencesNumericformat. Página 7 ALGUNS COMANDOS E OBSERVAÇÕES: As teclas seta para cima e seta para baixo repetem os comandos digitados anteriormente. Além das teclas com setas, pode-se usar outras teclas para reeditar a linha de comando. retorna a linha anterior retorna a linha posterior move um espaço para a esquerda move um espaço para a direita Ctrl move uma palavra para a esquerda Ctrl move uma palavra para a direita Home move para o começo da linha End move para o final da linha Del apaga um caractere a direita Backspace apaga um caractere a esquerda O símbolo % indica textos de comentário Cores (classes sintáticas) Palavras reservadas (for, end, if, ...). (azul) Textos de comentários. (verde) Mensagem de erro. (vermelho) Funções e variáveis. (preto) Cores e fonte de textos da janela de comandos e cor de fundo, podem ser alterados pelo comando preferences. Sinal ‘ - ’ para indicar número negativo. Página 8 ‘ . ’ para indicar casa decimal. ans é uma variável reservada, que armazena o último valor calculado pelo MATLAB. pi: 3.141592...; ‘i’ e ‘j’: raiz imaginária (raiz quadrada de -1); eps: Precisão numérica relativa; realmin: menor número real; realmax: maior número real; Inf: infinito. Ex: 1/0; Nan: not a number. Exemplo: 0/0. Nome de Variáveis Deve ser alfanumérico, iniciando com letra. Diferencia letras maiúsculas e minúsculas (case-sensitive) Aceita caractere „_‟ no meio do nome Pode ter no máximo 32 caracteres Todas as funções do MATLAB devem ser escritas em letras minúsculas: inv(A) calcula a inversa de A, mas INV(A) é uma função indefinida. clearall– apaga todos os dados da memória clc – limpa a janela de comandos close- fecha todas as Janelas Gráficas A execução do MATLAB poderá ser interrompida a qualquer momento pressionando as teclas Ctrl e C simultaneamente. Página 9 FUNÇÕES MATEMÁTICAS ELEMENTARES |x| abs(x) sen(x) sin(x) cos(x) cos(x) tg(x) tan(x) cossec(x) csc(x) sec(x) sec(x) cotg(x) cot(x) arcsen(x) asin(x) arccos(x) acos(x) arctg(x) atan(x) arccossec(x) acsc(x) arcsec(x) asec(x) arccotg(x) acot(x) e x exp(x) ln(x)=loge(x) log(x) log10(x) log10(x) Log2(x) log2(x) 𝒙 sqrt(x) 𝒙𝒃 𝒂 x^(b/a) 𝝅 pi n! factorial(n) para n<21 IMPORTANTE: O MATLAB operara com arcos trigonométricos somente em radianos. MATRIZES E VETORESO método mais fácil de entrar com pequenas matrizes no MATLAB é usando uma lista explícita. Os elementos de cada linha da matriz são separados por espaços em branco ou vírgulas e as colunas separadas por ponto e vírgula, colocando-se colchetes em volta do grupo de elementos que formam a matriz. Por exemplo, entre com a expressão: >> A=[ 12 3; 45 6; 78 9 ] Pressionando <enter> o MATLAB mostra o resultado Página 10 A= l 2 3 4 5 6 7 8 9 A matriz A é salva na memória RAM do computador, ficando armazenada para uso posterior. A expressão A ( : ) equivale a uma matriz coluna que contém a primeira coluna de A, seguida pelas coluna subsequentes. >>A(:) ans = 12 45 78 3 6 9 Em algumas situações é importante definir as dimensões e o número de elementos de uma matriz. Desta forma, temos: size(matriz) – todas as dimensões da matriz length(matriz) – maior dimensão da matriz numel(matriz) – numero de elementos na matriz >>size(A) ans = 3 2 >>length(A) ans = 3 Página 11 >>numel(A) ans = 6 ALGUMAS MATRIZES ESPECIAIS Matriz Nula >> zeros(3) ans = 0 0 0 0 0 0 0 0 0 Matriz com 1 em todas as posições >> ones(2,3) ans = 1 1 1 1 1 1 Matriz com elementos randomicos uniformente distribuidos >> rand(2) ans = 0.8687 0.3998 0.0844 0.2599 Matriz identidade >>eye(3) ans = 1 0 0 0 1 0 0 0 1 Há várias maneiras de gerar uma matriz coluna ou linha. Como exemplo, temos: Página 12 >> a1=[1 2 3 4 5 6 7 8 9 10] a1 = 1 2 3 4 5 6 7 8 9 10 >> a1=1:10 a1 = 1 2 3 4 5 6 7 8 910 A declaração 1:10 gera um vetor linha contendo os números de 1 a 10 com incremento unitário. Outros incrementos, diferentes de um, podem ser usados. >> a2=1:2:10 a2 = 1 3 5 7 9 Incrementos negativos também são possíveis: >> a3=10:-1:1 a3 = 10 9 8 7 6 5 4 3 2 1 Pode-se, também, gerar vetores usando a função linspace. Por exemplo, >> x=linspace(2,10,5) x = 2 4 6 810 gera um vetor linearmente espaçado de 2 até 10, contendo 5 elementos. CONCATENAÇÃO DE MATRIZES O MATLAB permite a manipulação de linhas, colunas, elementos individuais e partes de matrizes. Um elemento individual da matriz pode ser chamado com índice entre parênteses. Observe o exemplo: >>A=[2 -2 3;4 5 -5;7 -4 9] A = Página 13 2 -2 3 4 5 -5 7 -4 9 >>A(2,1) produz: ans = 4 Uma entrada da matriz (elemento individual)pode ser modificada. >>A(2,1) = A(2,2) + A(3,2) resulta em A = 2 -2 3 1 5 -5 7 -4 9 Também podemos tomar uma parte de uma matriz. Por exemplo, suponha que D é uma matriz de ordem 6x6 criada randomicamente. >> D=rand(6) D = 0.4087 0.1174 0.2625 0.5785 0.2316 0.9880 0.5949 0.2967 0.8010 0.2373 0.4889 0.0377 0.2622 0.3188 0.0292 0.4588 0.6241 0.8852 0.6028 0.4242 0.9289 0.9631 0.6791 0.9133 0.7112 0.5079 0.7303 0.5468 0.3955 0.7962 0.2217 0.0855 0.4886 0.5211 0.3674 0.0987 então >>D(1:5,3) ans = Página 14 0.2625 0.8010 0.0292 0.9289 0.7303 especifica uma submatriz 5x1, ou vetor coluna, que consiste dos cinco primeiros elementos da terceira coluna da matriz D. Analogamente, >> D(1:5,2:4) ans = 0.11740.2625 0.5785 0.29670.8010 0.2373 0.31880.0292 0.4588 0.42420.9289 0.9631 0.50790.7303 0.5468 é uma submatriz 5x3, consiste das primeiras cinco linhas e as colunas dois, três e quatro. Também podemos tomar uma parte da matriz D, tal que a nova matriz é definida através dos elementos da linha dois e três e colunas quatro e cinco, desta forma, definimos: >> D([2, 3],[4,5]) ans = 0.2373 0.4889 0.6241 É possível definir uma matriz de dimensão zero por zero a D, isto é: D=[ ]. Subsequente uso desta matriz não conduz a uma condição de erro; ele propaga matriz vazia. Isto é diferente de declaração Clear D que remove D da lista das variáveis corrente. O mamando a seguir, atribui vazio a linha três da matriz D. >> D(3,:)=[ ] D = Página 15 0.4087 0.1174 0.2625 0.5785 0.9880 0.5949 0.2967 0.8010 0.2373 0.0377 0.6028 0.4242 0.9289 0.9631 0.9133 0.7112 0.5079 0.7303 0.5468 0.7962 0.2217 0.0855 0.4886 0.5211 0.0987 OPERAÇÕES COM MATRIZES O caractere apóstrofo, " „ " , indica a transposta de uma matriz. Seja a matriz A definida abaixo: >> A =[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 A declaração A’ define a transposta da matriz A: >> A' ans = 1 4 7 2 5 8 3 6 9 A adição e subtração de matrizes são indicadas, respectivamente, por “+” e “-“. As operações são definidas somente se as matrizes são de mesmas dimensões. >> A-A' ans = 0 -2 -4 2 0 -2 4 2 0 Página 16 >> A+A' ans = 2 610 610 14 1014 18 A adição e subtração também são definidas se um dos operadores é um escalar, ou seja, uma matriz 1 x 1. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo: >> A+2 ans = 3 4 5 6 7 8 910 11 A multiplicação de matrizes é indicada por “*”. A multiplicação A*S édefinida somente se o número de colunas da matriz A é igual ao número de linhas da matriz S. Exemplo: >> S=[1 2 ; 3 4; 7 2] S = 1 2 3 4 7 2 >> A*S ans = 2816 6140 9464 Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz. >> A*2 ans = Página 17 2 4 6 810 12 1416 18 A expressão A^peleva 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 ans = 468 576 684 1062 1305 1548 1656 2034 2412 Suponha que M e N sejam vetores linha com quatro elementos. Para gerar um novo vetor F com valores que sejam produtos dos valores correspondentes em M e N, temos: >> M=[1 3 5 7] M = 1 3 5 7 >> N=[-2 3 4 1] N = -2 3 4 1 >> F=M.*N F = -2 920 7 Se o ponto for omitido, a operação executada será uma operação matricial. Neste caso, a operação não seria possível. Da mesma forma, temos: >> A =[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 Página 18 7 8 9 >> A^2 ans = 30 36 42 66 81 96 102 126 150 >> A.^2 ans = 1 4 9 16 25 36 49 64 81 SOLUÇÃO E REPRESENTAÇÃO DE SISTEMAS DE EQUAÇÕES LINEARES Um Sistema de equações lineares consiste em um conjunto de m equações polinomiais com n variáveis xj de grau 1, que podem ser representadas na forma: mnmnmmm n n n b b b b x x x x aaaa aaaa aaaa aaaa bAx 3 2 1 3 2 1 321 3333231 2232221 1131211 Matriz dos coeficientes Vetor Solução Vetor dos termos independentes mnmnmmm nn nn nn bxaxaxaxa bxaxaxaxa bxaxaxaxa bxaxaxaxa 33221133333232131 22323222121 11313212111 Página 19 Em muitos problemas de engenharia estamos interessados em determinar se existe uma solução para o sistema de equações lineares que descreve uma parte do problema real. Na construção civil: TRELIÇAS Problema: Determinar as componentes horizontal e vertical das forças que atuam nas junções da treliça: Para isso é necessário determinar as 17 forças desconhecidas que atuam nesta treliça. Página 20 Um sistema de equações lineares poderá ser resolvido no MATLAB de diversas formas: Assumindo o sistema de equações apresentado abaixo, temos: 3223 1242 6 0 wzyx wzyx wzyx wzy onde 2213 2142 1111 1110 A , 3 1 6 0 b e w z y x X Definindo amatriz dos coeficientes e o vetor dos termos independentes no MATLAB, temos: >> A=[0 -1 -1 1; 1 1 1 1 ;2 4 1 -2;3 1 -2 -2] A = 0-1 -1 1 1 1 1 1 2 4 1-2 3 1-2 -2 >> b=[0; 6;-1;3] b = 0 Página 21 6 -1 3 A inversa da matriz A poderá ser calculada usando o comando inv: >>inv(A) ans = -3/5 3/5 -2/5 2/5 1 -1/3 2/3 -1/3 -6/5 8/15 -7/15 2/15 4/5 1/5 1/5 -1/5 Se existe a inversa da matriz A, o vetor solução é definido por: >> X=inv(A)*b X = 26/5 -11/3 61/15 2/5 Ou ainda, independente de existir ou não a inversa da matriz A, podemos obter a solução do problema escalonando a matriz aumentada do sistema[A,b]. No MATLABpodemos usar o comando rref: >> [A,b] ans = 0 -1 -1 1 0 1 1 1 1 6 2 4 1 -2 -1 3 1 -2 -2 3 Página 22 >>rref([A,b]) ans = 1 0 0 0 26/5 0 1 0 0 -11/3 0 0 1 0 61/15 0 0 0 1 2/5 >> X=ans(:,5) X = 26/5 -11/3 61/15 2/5 A solução também poderá ser obtida aplicando o comando solve nas equações do sistema: >> [x,y,z,w]=solve( '-y-z+w=0','x+y+z+w=6','2*x+4*y+z-2*w=-1','3*x+y-2*z-2*w=3' ) x = 2/5 y = 26/5 z = -11/3 w = 61/15 MATEMÁTICA SIMBÓLICA É possível instruir o MATLAB a manipular expressões matemáticas, que lhe permitam calcular com símbolos matemáticos, além de números. Esse processo é frequentemente chamado de matemática simbólica. Na sequencia são apresentados alguns exemplos de expressões simbólicas. Para exemplificar, declaramos: Página 23 >>syms x a b c d n Observe que, o comando syms foi usado para , explicitamente, dizer ao MATLAB que x a b c d e n definem uma expressão simbólica. Entrando com a expressão: x x 1 >> z=x/sqrt(1-x) z = x/(1 - x)^(1/2) Para visualizar a expressão simbólica na forma x x 1 devemos usar o comando: >>pretty(z) Entrando com matrizes: Seja dc ba M >> M=[a b; c d] M = [ a, b] [ c, d] O determinante da matriz simbólica M é definido por: >>det(M) ans = a*d - b*c Entrando com polinômios: 𝑃 𝑥 = 2𝑥3 − 3𝑥2 + 𝑥 e calculando suas raízes: >>syms x >> 2*x^3-3*x^2+x ans = 2*x^3 - 3*x^2 + x >>raizes_x=solve('2*x^3-3*x^2+x') raizes_x = Página 24 0 1/2 1 SUBSTITUIÇÃO DE VARIÁVEIS Quando se tem uma expressão simbólica em x, e que queira mudar a variável para y, usa-se a função subs. >>syms a b c d x >> f= a*x^2+b*x+c f = a*x^2 + b*x + c >>subs(f,x,'s') ans = a*s^2 + b*s + c Quando queremos avaliar a função em um determinado ponto x=k, onde k é uma constante, usamos o comando eval(f). >> x=2; >>eval(f) ans = 4*a + 2*b + c DERIVAÇÃO E INTEGRAÇÃO A derivação de uma expressão simbólica usa a função diff em uma dentre as quatro formas: Expressão Resultado syms a b c x ; f=a*x^3+x^2-b*x+c; Define uma expressão simbólica. diff(f) Deriva em relação a x (padrão). Página 25 diff(f,a) Deriva f em relação a „a‟. diff(f,2) Deriva f 2 vezes em relação a x. diff(f,a,2) Deriva f 2 vezes em relação a „a‟. A função difftambém opera sobre conjuntos. Se f for um vetor simbólico ou matriz, diff(f)deriva cada elemento do conjunto. Exemplo: >>syms a b c d x s >> T=[a*x, b*x^2; c*x^3, d*s] T = [ a*x, b*x^2] [ c*x^3, d*s] >>diff(T) ans = [ a, 2*b*x] [ 3*c*x^2, 0] A função de integração int(f), onde f é uma expressão simbólica, tenta encontrar outra expressão simbólica F tal que diff(F)=f. Expressão Resultado syms s m n x; f=sin(s+2*x); Define uma expressão simbólica. int(f) Integra em relação a x (padrão). int(f,pi/2,pi) Integra f em relação a x de pi/2 a pi. int(f,s,pi/2,pi) Integra f em relação a s de pi/2 a pi. int(f,m,n) Integra f em relação a x de m a n. A função inttambém opera sobre conjuntos. Se f for um vetor simbólico ou matriz, int(f) integra cada elemento do conjunto. Exemplo: Página 26 >> T=[a*x, b*x^2; c*x^3, d*s] T = [ a*x, b*x^2] [ c*x^3, d*s] >>int(T,0,2) ans = [ 2*a, (8*b)/3] [ 4*c, 2*d*s] Página 27 EXERCÍCIOS PROPOSTOS Sendo x=345,6, y= 3,5 e z=23,7, calcule o valor de A. zyx A 53 5 yx xy A 2 1222 yxyxA xxeA y ln 2 2 53 xeyx yx A )43( )2( . 64 2 yx yxy yx xyx A 164 2 1 2 2 e y y xx x A= 53 24 01 . y x . RESPOSTAS: 0.0105 A 0.9900i + 0 A 005+1.1978eA 004+1.1447e A 148-1.1465eA 2) Seja a matriz A= 263 174 952 ,calcular A+A T =S e verificar se S é simétrica. Resp: A é simétrica 3)Dadas as matrizes A,B e C determine: Página 28 A= 46 51 B= 210 63 C= 01 87 A.C e (A.C).B B.( A.C) Resp: 4838 812 AC , 324594 886.11 BAC e 1644 264192 ACB 4) Dadas as matrizes A e B calcule a A.B: A= 287 612/1 412 035 B= 21 35 40 Resp: 4838 1311 131 1115 AB 5) Resolva as equações: a) x x x 311 151 113 =0 b) 123 312 132 xxx =0 Resp: a) {x=2, x=3, x=6} e b) {x=-10} 6) Dadas as matrizes A= 53/22 05/32/1 e B= 3/1 3/4 3 , calcule se for possível: A T B T ABnão é possível A T B não é possível 7) Dadas as matrizes A e B calcule as seguintes colunas de AB: A= 512 324 423 211 B= 1524 4333 2101 A segunda coluna. A quarta coluna. Resp: a) 13 0 14 1 e b) 13 3 18 0 Página 29 8) Seja A= 30 21 determine g(A), onde g(x)=x 2 . Resp: 90 81 2A 9) Determine x, y e z, se 3 wz yx = w x 21 6 + 3 4 wz yx . Resp: {x=2, y=4, z=1, w=3} 10)Escreva os sistemas de equações linearesna forma matricial, em seguida encontre o vetor solução. a) 432 4242 8523 zyx zyx zyx SCD x=3, y=2 e z=1 b) 02212 0816 042 1 21 21 xx xx xx Somente a Sol. Trivial c) 26523 442 83 zyx yx zx SCD: x=4, y=3 e z=-4 d) 0639 0426 zyx zyx SCI: z y zy X 3 2 3 1 e) 5366 2363 132 cba cba cb SI f) 14223 1742 72 zyx zyx zyx SCD:x=2,y=-1 e z=3 h) 17483 53 32 zyx zyx zyx SCD 3 4 3 2 3 17 X i) 754 93 425 1642 21 21 21 21 xx xx xx xx SCD 3 2 X 11)Determine o conteúdo das matrizes definidas abaixo. Use a matriz A como referência. Página 30 2211 3510 1521 2751 A 12)Verifique suas respostas usando o MATLAB. A ( : , 2 ) A ( 4 , : ) A ( 4:5 , 1:3 ) A ( 1:2:5 , 2 ) 3 * A ( : ) 13)Calcule a integral indefinida de y=f(x) para: 𝑦 = 𝑠𝑒𝑛(3𝑥) 𝑦 = 𝑠𝑒𝑛 1 2 𝑥 𝑦 = cos(3𝑥2) 𝑦 = 𝑡𝑔 3𝑥 − 2𝑥3 𝑦 = 𝑒5𝑥 𝑦 = 1 2 𝑒−2𝑥 𝑦 = 𝑎𝑥2 + 𝑏2 𝑦 = 𝑠𝑒𝑛(𝑤𝑥 + 𝑎2) 𝑦 = 𝑠𝑒𝑛(𝑤𝑥2). cos(2𝑥) 𝑦 = 𝑒6𝑥 + 3𝑒2𝑥𝑠𝑒𝑛(3𝑥) 𝑦 = 42𝑥 − 5𝑠𝑒𝑛(3𝑥 − 2𝑤) 𝑦 = 1 3𝑥 + 2 𝑦 = − 4 𝑠𝑒𝑛𝑥 𝑦 = cos( 1 𝑥 + 3) Página 31 𝑦 = −11 2𝑥 𝑦 = 𝑒𝑠𝑒𝑛 (3𝜋𝑥 ) 14)Sabendo que 𝑓 𝑥 𝑑𝑥 = 𝐹 𝑥 + 𝑐 e 𝑑 𝑑𝑥 𝑓 𝑥 𝑑𝑥 = 𝑑 𝑑𝑥 𝐹 𝑥 + 𝑐 , isto é 𝐹′ 𝑥 = 𝑓(𝑥). Verifique se as respostas encontradas no exercício 12) estão corretas. Página 32 AMBIENTE GRÁFICO A construção de gráficos no MATLAB é 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 MATLAB uma vasta biblioteca de comandos gráficos. Se yéum vetor, plot(y) produz um gráfico linear dos elementos de y versos o índice dos elementos de y. Por exemplo, para plotar os números [0,1 0,3 1 0,3 0,1], entre com o vetor e execute o comando plot: >> y=[.1 .3 1 .3 .1] >>plot(y) e o resultado é apresentado na Janela Gráfica: Se Aéuma matriz, plot(A) produz um gráfico linear dos elementos de A versos o índice da linha ao qual elemento pertence. Por exemplo: >> A=[1 2 -3; 4 5 10]; >>plot(A),grid 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 -4 -2 0 2 4 6 8 10 Página 33 ou ainda, se A é uma matriz 3x3, temos como exemplo: >> A=[1 2 -3; 4 5 10;1 2 5]; >>plot(A),grid Dados dois vectores de mesma dimensão, o comando plot(x,y) permite desenhar o gráfico definido pelos pares ordenado (x,y). >> x=linspace(1,5,20); >> y=linspace(2,26,20); >>plot(x,y) Para obter o gráfico de uma função y = f(x), Introduza na linha de comandos do MATLAB o vetor x (parte do domínio de f) e o vetor y (imagem referente as componentes do vetor x): >> x=1:6; >> y=1./x; >>plot(x,y),grid 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 -4 -2 0 2 4 6 8 10 1 1.5 2 2.5 3 3.5 4 4.5 5 0 5 10 15 20 25 30 Página 34 O comando grid insere uma grade na janela gráfica: Observe que o gráfico acima não apresenta com precisão o comportamento da função 𝑦 = 1 𝑥 no intervalo 1 ≤ 𝑥 ≤ 6. Desta forma, é importante notar que o número de pontos definidos no vetor x, define a qualidade com relação ao aspecto de continuidade e diferenciabilidade da função. >>x=1:0.01:6; >>y=1./x; >>plot(x,y) ALGUNS COMANDOS E FUNÇÕES O MATLAB 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. 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Página 35 ylabel Título do eixo-Y. zlabel Título do eixo-Z. text Inseriranotação no gráfico. gtext Inserir anotação com o “mouse”. grid Linhas de grade. Além da formatação default para gráficos, outros tipos de linhas, pontos e cores também podem ser usados: TIPO DE LINHA - ---- - - ----------------- -. --------- : TIPO DE PONTO + +++++++++ X x xxxxxx CORES y amarelo m lilás c azul claro r vermelho Página 36 g verde b azulescuro w branco k preto Observe a sequencia de comandos e o respectivo gráfico: >>x=1:.01:10; >>y=1./x; >>plot(x,y,'y*') >>title('FUNÇÃO Y=1/X') >>xlabel('EIXO DAS ABSCISSAS') >>ylabel('EIXO DAS ORDENADAS') >>x=-6:.01:6; >>y=1./x; >>plot(x,y,'y*') >>title('FUNÇÃO Y=1/X') >>xlabel('EIXO DAS ABSCISSAS') >>ylabel('EIXO DAS ORDENADAS') 1 2 3 4 5 6 7 8 9 10 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 FUNÇÃO Y=1/X EIXO DAS ABSCISSAS E IX O D A S O R D E N A D A S Página 37 >>legend('f(x)=1/x') O MATLAB plota múltiplas ‘linhas’ em apenas um gráfico, usando o comando plot com múltiplos argumentos. Por exemplo: Os comandos definidos abaixo cria o gráfico da função seno e da função cosseno, com x variando de 0 até 2*pi, com 30 pontos: >> x=linspace(0,2*pi,30); >> y1=sin(x); >> y2=cos(x); >>plot(x,y1,x,y2),grid Para inserir mensagens sobre o texto, usando o mouse, temos: >>gtext('sin(x)') >>gtext('cos(x)') Para inserir uma legenda, fazemos uso do comando legend: >>legend('sin(x)','cos(x)') Para inserir título e nomes nos eixos, usamos os comandos: title, xlabel e ylabel. >>title('Gráfico das funçoes: f(x)=sen(x) e f(x)=cos(x), 0<x<2*pi') >> xlabel('x') >> ylabel('f(x)') -6 -4 -2 0 2 4 6 -150 -100 -50 0 50 100 150 FUNÇÃO Y=1/X EIXO DAS ABSCISSAS E IX O D A S O R D E N A D A S f(x)=1/x Página 38 Caso seja necessário redefinir os valores dos eixos coordenados, usamos o comando axis([xminxmaxyminymax]) >>axis([ 0 3*pi/2 -pipi]) Para que os valores dos eixos voltem ao norma usamos >>axisxy normal Outro exemplo: Gráfico da função seno e da função cos(x)+1 de 0 até 2pi, com 30 pontos >>x=linspace(0,2*pi,30); >>f=sin(x); >>g=cos(x)+1; 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 -3 -2 -1 0 1 2 3 sin(x) cos(x) x f( x ) Gráfico das funçoes: f(x)=sen(x) e f(x)=cos(x), 0<x<2*pi sin(x) cos(x) Página 39 >>plot(x,f,x,g),grid >>gtext('f(x)=cos(x)+1') >>gtext('g(x)=sin(x)') 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 . Veja os exemplos, que seguem na mesma janela usando o comando subplot. Sintaxe do subplot: >>subplot(m,n,p) Parâmetros de entrada: m: número de eixo na vertical n: número de eixos na horizontal p: índice do eixo corrente. No exemplo definido abaixo, uma janela gráfica (2x3) foi criada evidenciando o gráfico de seis funções. >>x = -15:0.1:15; >>y1=x.^2-6*x+8; >>y2=x.^2-2*x+2; 0 1 2 3 4 5 6 7 -1 -0.5 0 0.5 1 1.5 2 f(x)=cos(x)+1 g(x)=sin(x) Página 40 >>y3=x.^2-6*x+9; >>y4=abs(x); >>y5=2*x+1; >>y6=-2*x+1; >>subplot(2,3,1), plot(x,y1,'k*') >>subplot(2,3,2), plot(x,y2,'r.') >>subplot(2,3,3), plot(x,y3,'yo') >>subplot(2,3,4), plot(x,y4,'b>') >>subplot(2,3,5), plot(x,y5,'m.-') >>subplot(2,3,6), plot(x,y6,'g') Na sequencia, uma única linha apresenta três gráficos ( matriz 1x3). >>x = -5:0.01:5; >>g1=x.^2+6*x-2; >>g2=abs(x)+1; >>g3=-2*x+1; >>subplot(1,3,1), plot(x,g1,'k*') >>title('g1(x)=x^2+6*x-2')>>subplot(1,3,2), plot(x,g2,'r.') -20 0 20 -100 0 100 200 300 400 -20 0 20 0 100 200 300 -20 0 20 0 100 200 300 400 -20 0 20 0 5 10 15 -20 0 20 -40 -20 0 20 40 -20 0 20 -40 -20 0 20 40 Página 41 >>title('g2(x)=abs(x)+1') >>subplot(1,3,3), plot(x,g3,'yo') >>title('g3(x)=-2*x+1') INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO LÓGICAE ALGORITMO A lógica na programação é muito útil quando se que deseja desenvolver sistemas e programas, ela permite definir a sequência lógica de procedimentos para cumprir o desejado . São passos que devem ser executados em uma sequência tal que o objetivo ou solução de um problema são alcançados. Em computação, uma instrução é a informação que indica ao computador uma ação elementar que deve ser executada. Uma instrução isolada, em geral, não resolve um processo completo. Nesses casos é necessário um conjunto de instruções, colocadas em uma ordem sequencial lógica. Um algoritmo é formalmente uma sequênciafinita de passos, não redundantes nem subjetivos na sua definição, logicamente encadeados que levam a execução de uma tarefa. Um exemplo, no dia-a-dia, seria um manual de instalação e uso de um aparelho eletrônico, que explica passo-a-passo como proceder a sua instalação e como realizar cada uma das suas funções. -5 0 5 -20 -10 0 10 20 30 40 50 60 g1(x)=x2+6*x-2 -5 0 5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 g2(x)=abs(x)+1 -5 0 5 -10 -5 0 5 10 15 g3(x)=-2*x+1 Lógica é o encadeamento de pensamentos para atingir determinado objetivo. Página 42 Um outro exemplo seria o de efetuar a soma de dois números reais. Nada seria feito se a instrução fosse: efetue a soma desses números. Mesmo que essa operação fosse efetuada, qual seria o resultado? Ter-se-ia conhecimento dele se nenhuma instrução foi dada para que isso ocorresse? Em termos computacionais, seria necessário estabelecer uma sequência finita de passos, de forma clara e precisa, que possibilitasse que o computador realizasse a tarefa. Seria algo como: Leia o primeiro número. Leia o segundo número. Efetue a soma desses números. Informe o resultado. Suponha agora que sejadesejável, além de efetuar a soma, calcular a multiplicação da soma pelo segundo número. Então, além da elaboração da sequência acima, seria necessário proceder à multiplicação pelo segundo número lido. Isto seria descrito por: Leia o primeiro número. Leia o segundo número. Efetue a soma desses números e o produto dessa soma pelo segundo número lido. Informe o resultado. Algumas vezes, não é possível realizar todas as operações de uma só vez, conforme a linguagem utilizada e/ou a conveniência do desenvolvimento do raciocínio. Neste caso, os procedimentos que não puderem ser realizados de uma só vez podem e devem ser realizados por partes: Leia o primeiro número. Leia o segundo número. Página 43 Efetue a soma desses números. Efetue o produto dessa soma pelo segundo número. Informe o resultado. Conforme o problema torna-se necessário estabelecer outro tipo de raciocínio. É o caso, por exemplo, se a multiplicação, no problema acima, fosse efetuada com o maior dos dois números fornecidos, em lugar de pelo segundo. Isso levaria a necessidade de se estabelecer: Leia o primeiro número. Leia o segundo número. Se o primeiro número é maior do que o segundo; Efetue a soma dos dois números e multiplica a soma pelo primeiro número. Senão (se o primeiro não é maior do que o segundo) Efetue a soma dos dois números e multiplica a soma pelo segundo número. Informe o resultado. Poder-se-ia elaborar vários outros problemas com especificações mais trabalhosas. Mas é bom estabelecer aqui que em todos os casos é possível encontrar uma sequência de passos finita, clara e não redundantes que, ao final, apresentaria um resultado. PROGRAMAS Os programas de computadores são, simplesmente, algoritmos escritos numa linguagem decomputador (Pascal, C, Cobol, Fortran, MatLab entre outras) e que são interpretados eexecutados por uma máquina, no caso um computador. É bom que se saiba que um programa é muito específico e rígido em relação aos algoritmos da vidareal. Qualquer falha no raciocínio, erro de sintaxe na linguagem ou erro na sequência estabelecida para o computador, o resultado pode ser muito diferente daquele que seria o correto. CONSTRUÇÃO DE ALGORITMOS PSEUDOCÓDIGO Ao se criar um algoritmo ele é em uma linguagem chamada pseudocódigo. Assim chamada por ser conveniente elaborá-lo aproximando-se da posterior implementação em uma linguagem de programação. Isto significa que quando da programação, o código será gerado de acordo com o estabelecido no algoritmo. Página 44 Por esta razão, os algoritmos são independentes das linguagens de programação e, por isto, não existe um formalismo rígido de como deve serescrito o algoritmo. Um algoritmo deve ser fácil de interpretar e ao mesmo tempo fácil de codificar. O algoritmo deve ser intermediário entre a linguagem falada e a linguagem de programação. REGRAS PARA CONSTRUÇÃO DO ALGORITMO Um algoritmo deve descrever a sequência de instruções, de maneirasimples e objetiva e, por isso é aconselhável a obediência àalgumas regras: Levar em consideração que o algoritmo será visto por pessoas que não estão familiarizadas com computação. Usar frases curtas e simples. Preferencialmente, usar apenas um verbo por frase. Objetividade. Não usar palavras que possam oferecer duplo sentido. FASES Na elaboração de um algoritmo é necessário: Conhecimento completo do problema que se pretende resolver (Análise do Problema). Isto inclui em estabelecer quais são os dados que devem ser conhecidos, quais cálculos devem ser realizados e em quais condições, entre outros. Elaborar uma sequência de passos, finita, clara e objetiva. Observar se o algoritmo cumpre todas as etapas na ordem desejada. Exemplo:Deseja-se calcular a média anual de um aluno do curso, ao final do ano. Solução: Os alunos se submeterão a uma prova por bimestre, totalizando, ao final do ano, 4 provas que correspondem a 4 notas (digamos, N1 , N2, N3 e N4 ). A média anual é dada pela soma das quatro notas divididas pelo número de notas (4). O que se deseja é o resultado da média assim calculada. Para se elaborar o algoritmo deve-se levar em conta: Quais são os dados de entrada? Quais são os procedimentos que serão executados para os cálculos? Qual é o resultado que será apresentado? As respostas podem ser extraídas do conhecimento do problema: Página 45 Dados de entrada:as notas bimestrais (N1 , N2 , N3 e N4) Procedimentos: Efetuar a soma das notas e dividir por 4. Saída:fornecer a média anual (resultado obtido nos procedimentos). Algoritmo: Ler nota da prova 1. (N1) Ler nota da prova 2. (N2) Ler nota da prova 3. (N3) Ler nota da prova 4. (N4) Somar as notas e dividir por 4. Informar o resultado. Teste de Mesa Elaborado o algoritmo ele deverá passar por um teste, chamado teste de mesa, para verificar a sua exatidão. Este teste consiste em realizar com exatidão a sequência estabelecida no algoritmo para certificar se o algoritmo realiza o desejado de forma correta. EXERCÍCIO: Elabore um algoritmo para calcular a média anual de um aluno do curso, sabendo que ele recebe quatro notas no ano e que a média é ponderada, tendo, cada nota seu peso específico. DIAGRAMA DE BLOCO O diagrama de blocos é uma forma eficaz para representar os passoslógicos de um determinado processamento. Ele é construído através de símbolos (em geral figuras geométricas) específicos para cada atividade e tem por objetivo facilitar a visualização e o entendimento dos passos de um processamento. Dentro de cada um deles é escrito o que será realizado. Na sequência são descritos alguns símbolosmais utilizados. No decorrer do curso poderão ser apresentados outros, se for necessário. Página 46 SÍMBOLO DESCRIÇÃO TERMINAL Início ou fim do processamento. ENTRADA DE DADOS Exemplo:ler N PROCESSAMENTO Indica qualquer processamento Exemplo:soma de dois números DECISÃO Será exemplificado no futuro EXIBIR Apresenta o resultado do desenvolvimento SENTIDO DO FLUXO CONECTOR Exemplo:Para o exemplo anterior, onde foi calculada a média das notas de uma aluno, tem- se: Página 47 Algoritmo e diagrama de bloco: início Ler nota da prova 1. (N1) Ler nota da prova 2. (N2) Ler nota da prova 3. (N3) Ler nota da prova 4. (N4) Somar as notas e dividir por 4. Informar o resultado fim OBSERVAÇÃO: Alguns preferem usar, e de fato usam quando possível, um só símbolo de entrada de dados, constando, explicitamente, que será dada entrada de quais dados. Ler N1 , N2 , N3 , N4 Nada impede este procedimento, desde que não seja prejudicada a clareza e a não ambiguidade do diagrama. Exercício:Elabore um diagrama de blocos para o caso de cálculo da média ponderada, conforme enunciado anteriormente. Fim Ler N2 Ler N1 Ler N3 Ler N4 Media = (N1+N2+N3+N4)/4 Início Imprimir Média Página 48 CONSTANTES E VARIÁVEIS Variáveis e constantes são os elementos básicos que todo programa manipula. VARIÁVEIS Uma variável éum espaço reservado na memória do computador para armazenar um determinado tipo de dado. Variáveis devem receber nomes através dos quais podem ser referenciadas e modificadas quandonecessário, na execução do programa. Uma variável a ser utilizada muitas vezes recebe um valor inicial que pode ser alterado no decorrerdo programa. Esses valores podem ser reais, inteiros, caracteres, etc. Em programação, o sinal de igual ( = ), significa atribuição, como já se viu. Neste caso, quando se escrevea = 10 o que se pretende é reservar um espaço de memória, designado por a e será armazenado o valor atribuído ( 10 ). CONSTANTES Constante é um valor fixo que não se modifica ao longo do tempo, durante aexecução de um programa. Conforme o seu tipo, a constante é classificada como sendo numérica,lógicaou literal. Exemplo de constantes: PI = 3.141516 , K = 4 , nome = “Maria” Operadores Os operadores são os meios pelos quaiso computador incrementa, decrementa, compara eavaliadados. São classificados em três tipos: Operadores Aritméticos Operadores Relacionais Operadores Lógicos OPERADORES ARITMÉTICOS Os operadores aritméticos são aqueles utilizados para obter resultados numéricos. Além daadição, subtração, multiplicação e divisão, utiliza-se também o operador para exponenciação. Página 49 OPERAÇÃO SÍMBOLO Adição + Subtração - Multiplicação * Divisão / Exponenciação ^ OPERADORES RELACIONAIS Os operadores relacionais são aqueles utilizados para efetuar comparações. Osvalores a serem comparados podem ser caracteres ou variáveis. Estes operadores retornam valores lógicos (verdadeiro ou falso/ True ou False) Para estabelecer prioridades no que diz respeito a qual operação executar primeirosão utilizados parênteses. Descrição Símbolo Igual a == Diferente de ~= Maior que > Menor que < Maior ou igual a >= Menor ou igual a <= Exemplo: Considere duas variáveis e seus respectivos valores:L = 5 e P = 10 Utilizando os operadores obtém-se os resultados: L== P retorna Falso L ~= P retorna Verdadeiro L> P retorna Falso L< P retorna Verdadeiro L>= P retorna Falso L<= P retorna Verdadeiro Página 50 Os operadores relacionais são muito úteis quando se deseja realizar cálculos quando uma determinada condição for satisfeita. Na elaboração de um algoritmo, no diagrama de bloco o símbolo que representa esses operadores tem a forma: Por um dos vértices deve seguir o fluxo que realiza as operações no caso de a comparação descrita no interior da figura resultar em Verdadeiro ( V ) e por outro vértice o fluxo que realiza as operações no caso de a comparação resultar em falso ( F ) Exemplo: Elaborar um algoritmo que, dados dois númerosA e B, imprime a soma deles se A for maior do que B e a diferença A – B, se A não for maior do que B. Inicio Ler A Ler B Se A > B Efetuara soma dos números Senão Efetuar a subtração A – B Imprimir o resultado Fim Página 51 O fluxograma ficaria da forma: ROTINAS (M-FILES OU SCRIPTS) A janela do command Windows não é interativa. Toda vez que é acionada a tecla enter somente o último comando digitado é executado e os anteriores ficam inalterados. Se alguma alteração ou correção for necessária, todos os comandos deverão ser digitados e executados novamente. Uma forma de tornar isto menos trabalhoso e mais eficiente é criar um arquivo com a lista de comandos desejados, salvar esse arquivo e depois executá-lo. Se alguma correção ou alteração for necessária, abre-se o arquivo, procedem-se as correções necessárias e salva o arquivo. Ele fica disponível, com todos os comandos para nova execução. Esses arquivos são chamados rotinas (programas),M-files ou scripts. No uso de programas (rotinas) convém observar: Um programa é uma sequência de comandos do MATLAB. F V R = A + B Início Ler Ae B R= A + B A > B R= A - B ImprimirR Fim Página 52 Toda comunicação com o usuário e feita através da janela command Windows, quer seja solicitando dados, quer seja fornecendo resultados. Podem ser executados e editados quantas vezes forem necessárias. CONSTRUINDO UM PROGRAMA As rotinas devem ser criadas e editadas em um editor. A janela do editor se abrirá através do caminho:File → New → Script. Será apresentada a janela: Os comando serão digitados linha a linha e as linhas serão numeradas automaticamente. Após a digitação a rotina deve ser salva. Para salvar, escolha, no menu, o caminho File → save as... Escolha a unidade e atribua um nome para a rotina. Se não for explicitado um caminho para o salvamento, ele será realizado na pasta default do MATLAB:c:\matlab7\work. É neste diretório que a rotina é procurada quando solicitada a sua execução, a menos que tenha sido realizada uma configuração personalizada. Na escolha do nome da rotina não pode ser usado o nome de comandos ou funções nativas do MATLAB e nem o nome de variáveis declaradas pelo usuário. Observe, finalmente, que as linhas iniciadas pelo símbolo% não são consideradas na execução. Por esta razão geralmente o símbolo é usado para incluir descrição e comentários na rotina. Exemplo:Calcular a média das notas obtidas por um aluno, na disciplina, no final do ano. Solução: Os comandos deverão ser digitados aqui, linha por linha. As linhas serão numeradas automaticamente e para passar de uma linha para outra tecle enter. O editor possui propriedades semelhantes ao word. Número da linha. Página 53 A análise e o respectivo algoritmo já foram apresentados anteriormente. A digitação, na janela do editor, obedeceu à sequência apresentada no algoritmo. Foi escolhido o caminho default para salvar e atribuímos o nome “media” para o arquivo. Veja a janela após a digitação: Para executar o programa digitamos o nome do arquivo no command Windows. Página 54 ENTRADA DE DADOS EM UMA ROTINA Para executar uma rotina as variáveis usadasdentro do arquivo devem ser inicializadas. Essa inicialização (atribuição de um valor) pode ser feita de três modos: a)Dentro da própria rotina - A variável é declarada e inicializada dentro da própria rotina. Foi o caso no exemplo acima. O inconveniente é que se for desejado rodar a rotina com valores diferentes, o arquivo deve ser editado e os novos valores fornecidos para as variáveis ali constantes. b)Na janela do Command Windows- Neste caso, as variáveis são inicializadas antes de chamar a rotina para execução. No exemplo anterior o problema seria elaborado:no editor No Command Windows, inicializa-se cada variável e só após é solicitada a execução da rotina. Variáveis não inicializadas no arquivo. Inicializando as variáveis que serão usadas na rotina. Solicitando a execução da rotina Página 55 c)O usuário é solicitado a forneceros dados quando inicia-se a execução. Neste caso, usa-se a função input() para solicitar ao usuário a entrada do dado. Essa função ocasiona uma interrupção temporária da execução da rotina para que possa ser fornecido o dado e a execução é continuada após teclar enter. O novo arquivo para o problema anterior ficaria assim No command Windows, quando solicitada a rotina, imediatamente haveria uma parada e a janela se apresentaria da seguinte forma: A função input usada para receber dados. Página 56 Após a entrada de todos os valores solicitados, a janela estaria da forma seguinte: No exemplo, os valores dos dados foram atribuídos um a um. Existem formas de se proceder a entrada dos dados na forma de matriz, como se verá mais adiante. Também é possível dar entrada de strings usando input. O COMANDO DE SAÍDADISP() O camandodisp() é utilizado para apresentar texto (mensagens) na tela ou para apresentar o conteúdo de uma variável. Forma geral: No caso do exemplo que tem sido o modelo até aqui, poder-se-ia emitir uma mensagem informando do que se tratava o resultado apresentado. disp(‘texto’) ou disp(nome da variável) A mensagem que apareceria na janela Página 57 Outras funcionalidades do disp podem ser vistas na bibliografia. OPERADORES LÓGICOS Um operador lógico é utilizado para combinar resultados de expressões lógicas cujo resultado sempre será V (verdadeiro) ou F (falso). Os operadores lógicos são: OPERADOR SINAL NO MATLAB DESCRIÇÃO AND(E) & RetornaV se todos os operandos forem verdadeiros. Caso contrário retorna F OR (OU) | RetornaV se pelo menos um dos operandos for verdadeiro. Caso contrário retorna F NOT(NÃO) ~ É um operador unário. Ele inverte o resultado do operando. Se o operando é verdadeiro, o operador retorna F.Se o operando é falso, o operador retorna V. Analise o resultado em cada linha: Operando 1 operador Operando 2 resultado V AND V V V AND F F F AND F F F AND V F V OR V V V OR F V F OR F F NOT V F NOT F V Página 58 EXEMPLO:Considere três variáveis inicializadas com os valores:A = 1 ; B = 10 e C = 6. Preencha a coluna corresponde a resultados, na tabela abaixo: EXPRESSÃO RESULTADO (A == B)& (B > C) (A <> B)& (B == C) (A<> B)& (B < C) (A < C)| (B < C) (A > C)| (B <> C) ~ (A < B) ~ (B < C) SENTENÇAS CONDICIONAIS As sentenças condicionais são estruturas que permitem ao MATLAB efetuar desvios na sequência do programa, optando por um ou outro conjunto de comandos ou até mesmo repetir um grupo de comandos um número finito de vezes. A decisão é determinada pelo resultado (verdadeiro ou falso) de uma operação lógica. Estas estruturas podem ser divididas em dois grupos:estruturas de decisão e estruturas de repetição. ESTRUTURAS DE DECISÃO Uma estrutura de decisão envolve uma sentença lógica e, de acordo com o resultado o programa decide por realizar um conjunto de comando ou um outro. ESTRUTURA IF-END A principal estrutura de decisão corresponde ao se já comentada em operadores lógicos. A estrutura fornece opção para o fluxo da execução de uma rotina. Página 59 A rotina em execução, ao encontrar uma sentença if verifica se ela é verdadeira ou falsa. No caso de ser verdadeira, a rotina executa os comandos entre o if e o end. Caso contrário, ela não considera esses comandos e executa aqueles abaixo de end. FLUXOGRAMA ESTRUTURA NA LINGUAGEM Exemplo:Considere o exemplo de determinar a média anual de um aluno do curso. Imprimir o resultado “aprovado” se a média for maior ou igual a 7.0. Solução: Após a análise e a construção do algoritmo, a digitação seria: V F Fim do if comandos If(sentença) > B ...................... ......................programa do MATLAB ...................... If expressão condicional Comandos end ...................... ......................programa do MATLAB ...................... Página 60 Digite a rotina, salve-a e proceda a sua execução. Analise o resultado em diversas situações. A ESTRUTURAIF – ELSE - END Esta estrutura é uma variação da estrutura acima. Ela acrescenta a opção de realizar a execução de um novo conjunto de comando. Quer seja na primeira opção, quer seja na segunda, após a realização a rotina passa para os comandos após o end. Exemplo:Suponha a situação do exemplo anterior. Se a média for igual ou maior do que 7 emitir a mensagem “aprovado”. Caso contrário emitir a mensagem “não aprovado”. Solução: A análise e o algoritmo correspondentes podem ser construídos. A rotina teria a forma: V F comandos Ifsenteça comandos Fim comandos ........... ............comandos ............ Ifsentença Comandos Else Comandos Fim .............. ..............comandos ............... Página 61 É possível aninhar vários if-else- end. Como isto ocorrerá depende da situação envolvida na análise e algoritmo. Entretanto, um em particular deve ser citado. ESTRUTURAIF - ELSEIF – ELSE - END Fim V F Ifsenteça comandos comandos Ifsenteça comandos F V F Observe que no caso de falso no primeiro if, e só então, um novo if é executado. Página 62 Exemplo:Considere o caso da média de aluno.Deseja-se que sejam emitidas mensagens de que ele foi aprovado, está em exame ou ainda reprovado. Solução: Sabe-se que se a média for igual ou superior a sete, o aluno está aprovado. Se, entretanto, for inferior a sete, mas igual ou superior a quatro, o aluno está em exame final e, finalmente, se for inferior a quatro então o aluno está reprovado (no que diz respeito a notas). Realizada a análise e construído o algoritmo, o resultado seria uma rotina da forma: É bom lembrar que são várias as possibilidades de aninhar sentenças if – elseif – end. Desta forma é possível efetuar vários testes dentro de um único programa. ESTRUTURAS DE REPETIÇÃO Além das estruturas de decisão, existem na linguagem MATLAB (e demais linguagens) as estruturas de repetição. Estas servem para proporcionar oportunidade para que uma rotina Página 63 execute várias vezes um mesmo conjunto de comandos sem a necessidade de reescrevê-los em igual número de vezes. São conhecidos também porLOOPS ou LAÇOS. A cada repetição do laço é chamada passo e em cada passo pelo menos uma variável é modificada. Essa variável deve ser quem controla o encerramento do laço. O laço deixa de ser executado quandoessa variável deixar de satisfazer uma condição definida para esse fim. Dois tipos de laços estão presentes no MATLAB: for – ende while - end . Ambos obedecem ao mesmo conceito inicial de ser interrompido quando a condição de controle seja falsa. Entretanto, existe o comandobreak que interrompe a execução, em ambos os casos, a qualquer momento em que for desejável. A ESTRUTURAFOR - END A principal característica deste laço é que deve ser previamente conhecido o número de vezes que se deseja repetir o conjunto de comandos. O laço tem a seguinte forma: for i = a: k : b Comandos end Algumas considerações e regras acerca da estrutura: O nome da variável-índice é atribuído pelo programador e pode ser qualquer. Em geral atribui-se as letras i , j, k , m ou n, tomando-se o cuidado de, se a programação envolver número complexo, evitar a atribuição de i e j. Sobre o funcionamento, a variável assume o valor inicial ( a , no caso) e executa o primeiro passo, retornando ao início do loop quando recebe o incremento de valor k e, se i ainda for menor ou igual ao valor b o loop volta a ser executado. O processo se repete até que i fica maior do que o valor b, quando o fluxo deixa de executar os comandos no interior do loop e passa ao primeiro comando após o end. O incrementok pode ser negativo. Todo laço for deve terminar com um end. O valor dei não pode ser redefinido pelos comandos no interior do laço. O valor dek ao final da execução é o último valor que ela recebeu, e pode ser usado após o término do laço. i é o índice controlador do loop. Valor inicial dei k é o incremento que i sofrerá a cada passo, após o primeiro. bé o valor que i terá ao executar o último passo. Página 64 Exemplos: 1.- Efetuar uma rotina que efetue a soma dos n primeiros número naturais, onde n é fornecido pelo usuário no início da execução da rotina. Solução: O que se deseja é determinar 𝑠 = 𝑘𝑛1 com n conhecido. Um algoritmo para o problema: Início Ler n S = 0; Para k = 1até n S = S+k ImprimirS Fim Para escrever a rotina, vamos usar ofor-end uma vez que é conhecido o número de vezes que o laço de repetição é executado. A rotina seria: Inicialização da variávelS. Igual a zero para não interferir no resultado da soma. Página 65 Execute o programa com diversos valores den (natural) e confira os resultados. Exercícios: 1.- Escreva uma rotina que calcula o produto dos n primeiros números naturais. Obs:veja que, neste caso, a inicialização da variável deve ser para o valor 1. O problema é equivalente a determinar o valor den! 2.- Escreva uma rotina que determina o valor de P = −1 𝑘 𝑘 2𝑘 𝑛 1 para um valor n a ser fornecido pelo usuário. 3.- A função f x = ex pode ser representada (em série de Taylor) por ex = 𝑥𝑛 𝑛 ! ∞ 𝑛=0 . Escreva uma rotina que calcula o valor da aproximado para a função, para x = 2, considerando os 6 primeiros termos da série,. Sugestão:Uma análise do problema deve levar em consideração: Deseja-se o valor da função para x = 2. O problema solicita a soma dos seis primeiros termos, o que nos leva a iniciar o for-end com n = 0 e terminar com n = 5). A ESTRUTURAWHILE - END Página 66 O comando while-end realiza um trabalho semelhante ao for-end. A diferença está no fato de ele realizar o laço quando o número de repetições não é conhecido antecipadamente. A exemplo das demais estruturas de repetição, após o while existe uma condição lógica que, para a execução do laço deve ser verdadeira quando o fluxo de execução encontrar o while pela primeira vez. Neste caso são executados os comandos existentes no laço até que o end seja encontrado. O fluxo volta ao while e verifica novamente se a condição é verdadeira ou falsa. Observe que, se não houver alteração da condição lógica a execução do loop nunca será interrompido. É obrigatória a existência de alteração de pelo menos uma variável presente na condição lógica para que, em algum momento, expressão lógica venha a ter valor falso. A estrutura tem a seguinte construção: while<expressão> .................. ..................comandos .................. end Exemplos: 1. Escrever uma rotina para determinar todos os números pares positivos menores ou iguais a 31. Apresentar o resultado na forma de matriz. Solução: Uma análise do problema: Sabe-se que os números pares positivos são aqueles múltiplos de 2. Portando o problema consiste em determinar os números positivos múltiplos de 2 e menores do que 31. Isto significa que o primeiro elemento é igual a 2 e o último igual a 30. É conveniente usar um loop para realizar o trabalho. Não se sabe quantas vezes o loop deve ser executado e, portanto, deve-se usar o while-end. Deseja-se apresentar o resultado na forma de matriz, por isto é bom lembrar que os elementos de uma matriz podem ser referenciados através de índices. Se a matriz é designada porx, então seus elementos podem ser referenciados por x(i), com i variando de 1 até o número de elementos que formam a matriz. Página 67 Diagrama de blocos A<= 30 Imprimir A FIM A = 2*i i = i + 1 x(i) = A + 1 INICIO i = 1 A= 2 i = 1; A = 2; while A <= 30 x(i) = A; i = i + 1; A = 2*i; end disp(x) A identação não é obrigatória, mas é aconselhável. Facilita o entendimento e possíveis correções. Página 68 Veja a rotina no editor do MATLAB A execução no Command Windows: Página 69 Exercício:A funçãof x = ex pode ser representada (em série de Taylor) por ex = 𝑥𝑛 𝑛 ! ∞ 𝑛=0 . Escreva uma rotina que calcula o valor da aproximado para a função, para x = 2, considerando a soma dos termos cujo valor seja menor do que 0.00001. Sugestão:Uma análise do problema deve levar em consideração: Deseja-se o valor da função para x = 2. O problema solicita a soma dos termos,cujo valor seja menor do que 0.00001. Isto significa que não se sabe o número de laços que devem ser executados, o que ocasiona o uso do while- end. Note ainda que o primeiro termo da série (n=0) é igual a 1. OBSERVAÇÕES IMPORTANTES 1.- As sentenças condicionais podem fazer uso dos operadores condicionais. Isto significa que a expressão no for, por exemplo, pode ser do tipo:A & B ou A | B ou (~A & B) | C , para citar apenas alguns exemplos. 2.- Os loops podem ser aninhados. Isto quer dizer que é possível estabelecer umfor-end dentro do laço de outro for-end (e tantos quantos forem necessários), ou ainda for-end dentro do laço de um while-end , ou, ao contrário, while-end dentro de for-end. Além de outras combinações usando o if-end ou if-else-end, se for o caso. 3.- Além disso, é útil lembrar que as rotinas podem “chamar” ou carregar qualquer função nativa do MATLAB, como exp() , abs(), sin(), para citar algumas. Página 70 4.- Finalmente, é bom saber que existe um comando break que, quando inserido no laço de um comando de repetição, ocasiona a saída incondicional do loop. Ao encontrar o break, o fluxo do programa é dirigido para o primeiro comando após o end do loop, saindo do laço. O uso do break é útil quando se deseja interromper o loop mesmo com a condição de controle tendo sido satisfeita. Por exemplo, no exercício que foi enunciado acima, mesmo que a condição de parada não seja atendida, mas um número máximo de execução do laço, previamente estipulado, for alcançado. Exemplos: 1.- Dada uma matriz de ordem nxm criar uma rotina que determina a soma de todos os elementos da matriz que sejam positivos e menores do que 10. Solução: Uma análise do problemafornece as seguintes informações: Sabe-se que uma matriz de ordemnxm indica que a matriz terá n linhas e m colunas. Se a matriz for designada porA os seus elementos podem ser referenciados por A( i , j ) com i variando de 1 a n e j variando de 1 a m. É necessário ter a matriz definida antes ou ser definida na execução da rotina. O programador pode decidir. Para esse programa, a matriz será fornecida antes da rotina ser chamada. A rotina deve verificar se cada elemento é menor do que 10 e, o sendo, soma-lo aos demais elementos que satisfizerem a mesma condição. Para percorrer todos os elementos da matriz tornar-se-á necessário fazer uso de dois contadores. Um deles percorrendo o índice que representa a linha e o outro o índice que representa a coluna do elemento. Como conhecemos os valores de n e de m (ordem da matriz), é possível usar, em ambos os casos o comandofor-end. Lembre-se de que se o acréscimo no contador para o for é igual a 1 ele não precisa ser escrito na declaração. Basta colocar o valor inicial e o final, separados por dois pontos. Após elaboração do diagrama e do algoritmo, o programa ficaria assim. Página 71 2.- Escrever uma rotina que resolva tantas equações do segundo grau quantas forem desejadas pelo usuário. Solução: A análise do problema resulta nas observações: Para resolver várias equações é necessário que o usuário entre com os coeficientes da equação e precisa fazê-lo de forma que possa repetir o processo. Isso leva à existência de um controle do fluxo sob a responsabilidade do usuário. A existência de um loop que, após cada realização, solicita ao usuário se deseja ou não resolver outra equação. Na solução de uma equação do segundo grau é necessário observar que o coeficiente principal não pode ser nulo ( a ≠ 0). O discriminante deve ser não negativo ( delta ≥ 0 ). Esta condição obriga a emitir uma mensagem se a condição não for satisfeita para informar ao usuário que não existem raízes reais e resolvê-la em caso contrário. Veja um diagrama de Blocos (Fluxograma) do problema. Poderia ser montado de outras formas além da apresentada. Veja a diferença na apresentação dos dois for. Em um consta o acréscimo do contador e no outro não. Página 72 V F Não existem raízes reais Mensagema ≠ 0 Cálculode D F F Lera , b , c a == 0 Apagar tela F V F início Flag = 1 Flag == 0 V F V F D < 0 Página 73 A roti na em MA TL AB fica ria assi m: Página 74 Neste exemplo o problema foi resolvido com o uso de while-ende if-else-end , inclusive aninhando alguns. Observe que houve alguma modificação após a construção do fluxograma. Antes da leitura dos coeficientesb e c, foi realizado o teste com o coeficiente a e somente se a for não nulo a rotina continua a ser executada. Foi declarada e inicializada uma variável com o nome de flag apenas para definir se o programa deve ser executado novamente ou se encerrado. A rotina não é executada apenas se flag for igual a zero. Note que ao final é solicitada a informação de continuar ou parar. No caso de parar deve ser digitado o número zero. Qualquer outra resposta o problema continua, visto que o valor digitado é armazenado exatamente em flag. FUNÇÕES No MATLAB existem várias funções nativas que podem ser usadas para cálculos diversos, como sin(x) , cos(x) , sqrt(x) , exp(x) e várias outras, como já foi citado. Função (sqrt )nativa do MATLAB. Calcula a raiz quadrada do argumento. Página 75 Além disto, é possível a criação de funções próprias do usuário para efetuar algum tipo de cálculo para o qual não existe função nativa, e cujo uso ocorre da mesma forma como as que existem no MATLAB. ESTRUTURA DE UMA FUNÇÃO Uma função é construída no mesmo ambiente em que criamos as rotinas, que é o editor do MATLAB. DECLARAÇÃO DA FUNÇÃO Toda função deve ser declarada, no editor, na primeira linha. Essa declaração é elaboradada sequinte forma: function<argumentos de saída> = nome da função( parâmetros) A palavrafunction é obrigatória e a caracteriza como função. Argumentos de saídaé o elemento que referencia algum resultado que for necessário utilizar no futuro (outra função ou outros cálculos) e que a função disponibilizará ao final da execução, e devem ser referenciados entre colchetes quando for mais de um valor. Segue-se o sinal de igual e nome da função. Esse nome da função é a forma como ela será referenciada quando da solicitação da execução, e deve ser sempre sucedido de um par de parênteses (obrigatório). Parâmetros são os valores que se deseja informar e que serão utilizados como variáveis na execução. Os parâmetros não são obrigatórios, mas é uma forma de se enviar dados para a função, além da possibilidade de se proceder à leitura dos dados no interior da função, como foi realizado nas rotinas. Pelo que se conclui então é que ao declarar uma função: Define o arquivo a ser construído como sendo uma função, o que a torna diferente da rotina. Estabelece o nome da função. Define o número de variáveis de entrada e a sua ordem. Especifica se a função retornará algum valor, quantos são eles e o tipo das variáveis de saída. Página 76 CORPO DA FUNÇÃO Uma função, logo após ter sido declarada, podem ser incluídas linhas de comentários iniciadas pelo símbolo% e tem as mesmas características de quando foram estudadas as rotinas. O código do programa a ser executado pode conter cálculos, inicialização de variáveis, as funções nativas do MATLAB, os operadores lógicos e as expressões lógicas, além das estruturas de fluxo do programa (if, for, while, além de outros não mencionados aqui). Devem ser obedecidos os mesmos critérios estabelecidos para o caso de rotinas. SALVANDOE EXECUTANDO UMA FUNÇÃO O arquivo construído para uma função será salvo com a mesma extensão usada para as rotinas: .m e é atribuída pelo próprio MATLAB. Também o diretório onde é salvo, o MATLAB já oferece uma primeira opção, que é a pastawork, conforme já foi comentado. Nada impede, entretanto, que seja direcionado para outro local, escolhido pelo programador, desde que sejam tomadas as providências para que ele tenha a sua localização informada para o MATLAB. Para executar a função basta fazer referência ao seu nome na janela do Command Windows, ou dentro de uma rotina ou ainda dentro de uma outra função, indicando, sempre, os parâmetros de entrada que constam da sua definição. Pelo que se observa, uma rotina e uma função são muito parecidas. Isto é verdade. Entretanto algumas diferenças são significativas: A primeira linha de uma função, a linha de declaração da função, é obrigatória. Nas rotinas essa primeira linha não é exigida. Uma função pode fazer receber dados de entrada, através dos parâmetros de entrada (argumentos) e podem retornar dados para o argumento de saída, enquanto uma rotina não goza dessas características. Exemplo: Elaborar uma rotina que determina o ponto extremo de uma função do segundo grau, da forma 𝑓 𝑥 = 𝑎 𝑥2 + 𝑏 𝑥 + 𝑐. Solução: Uma análise do problema esclarece que: Página 77 É solicitado o PONTO extremo da função, o que ocasiona a determinação da abscissa e da ordenada do ponto. Isto significa que o parâmetro de saída é um par ordenado. O valor do coeficientea não pode ser nulo. Além disso, é o valor dea que determina se a concavidade da curva está voltada para cima ou para baixo, indicando se o valor da função é, respectivamente, mínimo ou máximo. Finalmente, é sabido que a abscissa do vértice é dado por 𝑥𝑣 = 𝑏 2𝑎 e a ordenadapor 𝑦𝑣 = − ∆ 4𝑎 onde ∆ representa o discriminante. Poder-se-ia estabelecer um fluxograma (diagrama de blocos) para o problema. A função teria o seguinte aspecto: Para executar a função poder-se-ia proceder como aparece no Command Windows abaixo. Página 78 Página 79 Como já foi afirmado, é possível “chamar” uma função através da rotina de uma primeira função. Para exemplificar este fato, considere o mesmo problema acima. Proceda a criação de uma função, que se dará o nome de graf, e que terá como argumentos de entrada os coeficientes da função do segundo grau e o valor da abscissa do ponto extremo, que já teria sido calculada na função maxmin. Esta função teria como trabalho traçar o gráfico da função, considerando pontos antes e depois do vértice (ponto extremo da função) da parábola. Construída, esta função teria a forma: Como se verá, os coeficientes da função do segundo grau foram designados pora , b e c, e assim foram tratados na função maxmin. São esse valores que serão passados como parâmetro para a função graf. Nesta função eles serão tratados por m , n e r, respectivamente, em todos os cálculos que envolverem os coeficientes. Não que isto seja obrigatório. Poder-se-ia continuar designando eles por seus nomes de origem, mas não é obrigatório. Em cada função, as variáveis recebem os VALORES e dão a eles a designação própria da função. Este procedimento não causa nenhum inconveniente ao resultado. Neste momento, proceda a uma alteração na função maxmin, acrescentando a “chamada” para a função graf. Esta alteração daria o seguinte aspecto à função maxmin. Parâmetros da função. Os primeiros são os coeficientes e o último é o valor da abscissa do vértice. Página 80 Ao executar, a partir do Command Windows a função maxmin, fornecendo os coeficientes da função do segundo grau, a função calcula o ponto extremo, informa-o na janela e solicita a execução da função graf, informando como parâmetros os mesmos coeficientes que recebeu e um valor calculado no corpo da função maxmin (p) e que representa o valor da abscissa no ponto extremo. Executado o programa, ele apresentaria o seguinte resultado: A única alteração:incluir uma “chamada” para a função graf, informando os parâmetros solicitados: a , b e c, além do valor de p, que é a abscissa do vértice. Página 81 REFERÊNCIAS BIBLIOGRÁFICAS 1. Cecílio, Waléria Adriana Gonçalez, Introdução ao Matlab, Apostila – Curso de Extensão – PUCPR, 2010. 2. HANSELMAN, Duane e LITTLEFIELD, Bruce. Matlab5 Versão do Estudante, Ed. Makron Books: São Paulo, 1999. 3. Universidade do Estado do Rio de Janeiro - Programa Prodenge / Sub-ProgramaReenge. Introdução à Solução de Problemas de Engenharia, Apostila de.
Compartilhar