You are on page 1of 96

Curso de programação em MATLAB®

META Consultoria

Vergílio Torezan Silingardi Del Claro
UFU – Universidade Federal de Uberlândia; FEMEC - Faculdade de Engenharia Mecânica, Mecatrônica e Aeronáutica; LMEst Laboratório de Mecânica de Estruturas Prof. José Eduardo Tannús Reis;

Maio 2011

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

Sumário

1) Introdução
a. Para que serve o MATLAB?
b. Como iniciar o programa
2) Operações básicas com escalares e matrizes
a. Escalares
b. Vetores e matrizes
3) Criação e tratamento de funções
a. Functions - Rotinas
b. Nested functions – Sub-rotinas
4) Operadores e estruturas condicionais e iterativas
a. Operadores lógicos
b. Condicionais “if”, “elseif” e “else”
c. Loops “for” e “while”, chave “switch” e comando “break”
5) Ajuste de curvas, linearizações e introdução ao tratamento de sinal
a. Interpolação
b. Ajuste de curvas
6) Derivação numérica
a. Derivando vetores
b. Localizando pontos críticos
7) Integração numérica
a. Regra do trapézio repetida
b. Regra de Simpson
8) Solução numérica de equações diferenciais ordinárias
a. Passo constante - Métodos de Runge-Kutta
b. Passo adaptável – ODEs

2

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

9) Gráficos
a. Gráficos bidimensionais
b. Gráficos tridimensionais
c. Propriedades de gráficos 2D
d. Propriedades de gráficos 3D
10) Animações
a. Loops para animações
b. Gravando vídeos
11) SYMs – Variáveis simbólicas
a. Declarando variáveis simbólicas
b. Operações com “syms”
c. Cálculo diferencial e integral – usando o solver
12) GUIs – Graphical User Interfaces
a. Criação de guides
b. Programação de guides
13) Simulink
a. Criação de diagramas de blocos
b. Solução de problemas envolvendo EDOs
c. Solução de problemas envolvendo sistemas de EDOs
14) Referências

3

Dr.LMEst . E o mais importante.pela amizade e auxílio desde quando ingressei na engenharia. Agradeço especialmente à META consultoria pela oportunidade de ministrar o curso pela segunda vez. Domingos Alves Rade pelo apoio e confiança constantes e aos colegas de sala e do Laboratório de Mecânica de Estruturas . Vergílio Torezan Silingardi Del Claro 4 . O desenvolvimento desta apostila e do curso de MATLAB é uma mostra da capacidade dos alunos e do empenho de nossos professores em sempre buscar progredir e fazer mais do que só o necessário. Sou muito grato a todos vocês.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Agradecimentos Agradeço aos professores e alunos da Faculdade de Engenharia Mecânica. Agradeço especialmente ao Prof. Mecatrônica e Aeronáutica da Universidade Federal de Uberlândia por tanto se empenharem em fazer deste um dos melhores cursos de Engenharia do país. agradeço muito aos meus pais e irmãos pela ajuda e compreensão.

como otimização de processos. muito usado em pesquisas sobre estruturas no LMEst (Laboratório de Mecânica de Estruturas Prof. 1.499 (R2010a) do Matlab. O texto foi escrito para o curso de programação aplicada oferecido pela META – empresa júnior do Curso de Engenharia Mecânica e Mecatrônica da Universidade Federal de Uberlândia – e é complementado pelas aulas ministradas durante o curso. Programas como esses são muito elaborados. Esse programa utiliza um tipo de algoritmo incrivelmente complexo. Esse tipo de algoritmo basicamente simplifica um problema “infinito”. O que se faz é discretizar a estrutura e representá-la por sistemas equações. “algoritmo genético”. entre outros. independentemente da área de engenharia é necessário que se saiba programar. ----- 5 . dentro de parâmetros estabelecidos. obtendo um modelo muito melhorado e bastante eficiente. Para criar esses códigos são necessários conhecimentos específicos de certas áreas. compostos de vários algoritmos simples interrelacionados. É muito usado em situações específicas.0. interfaces e simulações. cursos sobre MATLAB e programação em geral e na experiência dos autores. que cria um processo semelhante à evolução de espécies. ou uma estrutura qualquer. para um modelo finito. Podemos usar como exemplo de aplicação o otimizador de aeronaves criado pela Equipe Tucano de Aerodesign. ele cria milhares de possibilidades de modelos aeronaves. porém. placa.a) Para que serve o MATLAB? O Matlab é um programa extremamente útil para solucionar problemas de engenharia que frequentemente envolvem cálculos complexos ou extensos. tendo como objetivo auxiliar no uso do programa. abordando problemas práticos. escritos como matrizes. como aeronáutica ou vibrações. desenho de gráficos. Este texto foi escrito para a versão 7. adaptado a um problema prático. e “evolui” os modelos. livros.Curso de programação aplicada em linguagem MATLAB – META Consultoria 1) 2011 Introdução Este resumo se baseia em várias apostilas. Assim pode-se descrever como uma estrutura complexa se comportará em uma situação-problema. Este curso pretende ensinar os fundamentos da programação em linguagem MATLAB e suas funções mais relevantes para estudantes de engenharia. os dados das apostilas foram adaptados e os comandos antigos atualizados. José Eduardo Tannús Reis). No caso. como uma viga. Outro exemplo complexo são os programas que usam o Método dos Elementos Finitos.10.

é a área onde se digita os comandos a serem executados pelo programa. entre outros. Pode parecer trabalhoso. Por mais simples que seja o processo a ser feito. Existem algumas áreas essenciais do programa.  Current Directory . ----- 6 . Elas estão listadas abaixo:  Command Window .  Interprete o problema e escreva de modo simples como irá abordá-lo.  Compare os dados.  Help . plotar gráficos. não deixe de fazê-lo. mas diminui muito a chance de errar. manualmente (com calculadora ou como preferir). resolver sistemas.  Command History .  Editor . mesmo seguindo todos os passos.área de criação de funções. ajuda a organizar o seu trabalho.b) Como iniciar o programa? Para começar. É o guia mais útil e prático que irá encontrar. Principalmente em programas extensos.por mais que conheça o MATLAB. A chance de se esquecer de algum comando ou errar alguma parte de uma equação é grande.é uma pasta qualquer do computador que fica aberta junto com o MATLAB.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 1. como por exemplo: chamar funções.  Resolva o problema (ou parte dele). sempre que se for usar o MATLAB é útil seguir uma sequência de raciocínio. e mesmo que se faça o processo mentalmente.  Escreva o código e resolva o problema em Matlab.histórico de tudo o que foi digitado nos últimos meses. você vai precisar. para ter alguns dados seguros para comparar com os resultados obtidos no Matlab. fazer contas simples.

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2) 2011 Operações básicas com escalares e matrizes Este capítulo demonstra como executar operações básicas com escalares e matrizes.0000 Divisão ‘direta’ >>4/2 >>ans = 2 Divisão ‘inversa’ >>4\2 >>ans 0. desde uma simples soma algébrica a uma inversão de matrizes. 2. Soma >>1+1 >>ans = 2 Subtração >>1-1 >>ans = 0 Multiplicação >>2*2 >>ans = 4.5000 7 . Os operadores básicos são mostrados abaixo.a) Escalares Comandos com escalares funcionam de modo muito parecido aos de uma calculadora.

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Exponenciação >>3^2 >>ans = 9 >>2*10^(-5) >>ans = 2e-5 >> 5e3 >>ans = 5000 Logaritmo neperiano >>log(5) >>ans = 1.6094 Logaritmo na base 10 >>log10(5) >>ans = 2e-5 Raiz quadrada >>sqrt(9) >>ans = 3 Módulo >>abs(-2) >>ans = 2 Exponencial >>exp(1) >>ans = 2.7183 8 .

1416 Funções trigonométricas em radianos >>sin(pi/6) %seno >>ans = 0.5 >>tan(pi) %tangente >>ans = Inf >>asin(0) %arco-seno >>ans = 0 >>acos(1) %arco-cosseno >>ans = 0 >>sinh(0) %seno hiperbólico >>ans = 0 Números complexos >>real (x) %Calcula a parte real do número complexo x. >>imag(x) %Calcula a parte imaginária do número complexo x.5 >>cos(pi/3) %cosseno >>ans = 0. >>conj(x) %Calcula o conjugado do número complexo x.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Número pi >>pi >>ans = 3. 9 .

A maioria dos comandos usados para escalares pode ser usado do mesmo modo para matrizes. Porém. todo escalar. handle ou qualquer outro formato é uma matriz. >>angle(x) %Calcula o ângulo usando o valor de atan2 (imag(x).Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 >>abs(x) %Calcula o módulo do número complexo x. ” no final da linha de comando.2. toda vez que se usar aquela variável se estará usando o último valor que ela recebeu. Essa mesma linha poderia ter sido reescrita em outras duas ou mesmo três linhas. Uma propriedade básica.b) Matrizes Para o programa. >>resp = var3*180/pi >>ans = 45 Observe que é permitido usar uma função “dentro da outra”. Porém. porém é mais rápido escrevê-la numa linha só. matriz. usada quase sempre. cell-array.3.4] >>ans = 1 2 3 4 10 . como em asin(sqrt(var2)/var2) por exemplo. string. Ao nomear uma variável. atribuir um valor a ela. >>var2 = (3*var1+5)/10. >>var3 = asin(sqrt(var2)/var2). é a atribuição de valores a variáveis. e portanto o ângulo está entre -p e p. há diferenças ao se operar com matrizes. o MATLAB executa o comando mas não mostra o valor da resposta. real(x)). para quem usa o programa. sem nenhuma diferença na sintaxe. Por exemplo: >>var1 = 5. ----2. ou seja. vetor. se o comando deve ser executado elemento a elemento na matriz deve-se adicionar um ponto antes do comando: >>a=[1. Também é importante perceber que ao digitar “ .

4] onde os colchetes definem a matriz.colunas) 11 . na mesma linha. Nas funções abaixo.Curso de programação aplicada em linguagem MATLAB – META Consultoria >> a*a 2011 %multiplicação de matrizes ans = 7 10 15 22 >> a. tais como calcular determinantes. inversas. “linhas” e “colunas” representam o número de linhas e colunas da matriz.colunas) Matriz de uns >>ones(linhas. Perceba também que para escrever comentários no código basta colocar % e o que se escrever depois dela. será apenas um comentário que não faz parte do programa. transpostas. Existem certos comandos específicos de matrizes. criar matrizes identidade. entre outros.2. Inversa >>inv(mat) Transposta (o símbolo da transposta é a apóstrofe) >>mat’ Determinante >>det(mat) Identidade >>eye(linhas.*a %multiplicação elemento a elemento ans = 1 4 9 16 Note que para criar a matriz usa-se [1. as vírgulas limitam cada coluna e o ponto-e-vírgula pula para a próxima linha.3.colunas) Matriz nula >>zeros(linhas.

2) ans = 6 4 3 -1 5 -2 0 1 2 12 .linhas. -2 5 -1 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Matriz aleatória >>rand(linhas. 3 4 6 ] ans = 2 1 0 -2 5 -1 3 4 6 B = rot90(A) ans = 0 -1 6 1 5 4 2 -2 3 C = rot90(A. colunas e diagonais são iguais >>magic(dimensão) >>magic(3) >>ans = 8 1 6 3 5 7 4 9 2 Remodelar matriz >>reshape(mat.colunas) Matriz quadrada “mágica” – somas de linhas.colunas) Rotacionar matriz em 90° >>rot90(mat) A = [ 2 1 0 .

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Somatório >>sum(vetor) Soma acumulativa >>cumsum(vetor) >> x=[0 1 2 3 4 5 6 7 8 9 10]. >> cumsum(x) ans = 0 1 3 6 10 15 21 28 36 45 55 Trocar o lado esquerdo pelo direito >> fliplr (mat) Troca a parte de cima com a de baixo >> flipud (mat) Diagonalizar >>diag (mat) >> a=[1 2 3] a= 1 2 3 >> diag(a) ans = 1 0 0 0 2 0 0 0 3 Zera abaixo da diagonal principal >>triu (mat) Zera acima da diagonal principal >>tril (mat) 13 .

900 4. como devo proceder? >>vetor = linspace(t_inicial .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Dimensão de vetor ou matriz >>length (mat) Tamanho de variável >>size(var) Caso precise criar uma matriz com uma estrutura repetitiva.800 3.1:4.000 15.000 12.5 a 2.000 3. pois muitas vezes se sabe a quantidade de pontos que o vetor deverá ter. de 1. >>tempos=[ t_zero : passo : t_final ].400 3.000 7.100 4. Outro modo útil de se criar um vetor é usar a função “linspace”. mas não se sabe o passo. 3:0.000 5.500 3.000 8.600 3.000 4.000 6.000 4.300 3. basta usar o operador dois-pontos.000 9. o vetor menor será complementado com zeros até que tenha o mesmo tamanho do vetor maior.200 4. como um vetor de tempos. >>tempos=[0:1:15] >>ans = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ou se precisar de dois vetores de mesmo tamanho.000 Columns 12 through 16 11.000 13.000 14.700 3. n_pontos) 14 . não é necessário criar uma estrutura iterativa. caso queira montar um vetor de 20 pontos. por exemplo o tempo a posição de uma partícula em MRU.000 3.200 3.500 Caso esteja preenchendo matrizes deste modo e um dos vetores seja maior do que o outro. Por exemplo.000 3. t_final .400 4.100 3.000 2.5 ] >>ans = Columns 1 through 11 0 1.000 10.3. pode-se escrevê-los como uma matriz de duas linhas: >>tempos_e_posicoes=[ 0:1:15 .300 4.

542105263157895 1.500000000000000 1. Para isso usa-se a função “meshgrid”.3 .752631578947368 1.963157894736842 2.005263157894737 2. 20)’ >>ans = 1.300000000000000 E num caso onde o problema é mais complexo? Tomemos como exemplo uma função no espaço (Nos próximos capítulos estudaremos como “plotá-la”). que retorna duas malhas. 2.173684210526316 2. Para descrevê-la numericamente é preciso uma malha. >>[malha_x .131578947368421 2. uma para x e outra para y.5 . para que seja possível escrever uma função Z dependente de X e Y ( Z(x. vetor_y) Para compreender melhor do que se trata.626315789473684 1.584210526315790 1.710526315789474 1.y) ).794736842105263 1.878947368421053 1. isto é só um exemplo da função meshgrid. nos eixos X e Y.215789473684211 2.047368421052632 2.668421052631579 1.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 >>vetor = linspace(1. que é usada para gerar matrizes): 15 . execute os comandos abaixo prestando atenção no que o “meshgrid” faz (os plots serão estudados mais a frente.921052631578947 1. malha_y] = meshgrid (vetor_x .257894736842105 2.089473684210526 2. de preferência bem refinada.836842105263158 1.

faz não é muito elaborado. %gera o vetor Y >> [X. que podem ser mais bem aplicada na solução do problema de engenharia em si. que é uma função qualquer %plota a superficie que representa a função Z(X. %gera o vetor X >> y=x. %gera as malhas em X e Y >> Z=3+5*X. >> surf(X.Z) 2011 %calcula Z(X. o que evita que se desperdice tempo e esforço realizando tarefas de programação.*Y-2*X.^2+0.Curso de programação aplicada em linguagem MATLAB – META Consultoria >> x=[0:0.y). que não são diretamente relacionadas à solução do problema. A grande vantagem do MATLAB sobre outros “softwares” é a facilidade de programação. porém é trabalhoso e demanda muita atenção. ----- 16 .Y) Perceba que a malha gerada é bastante refinada. como X tem 100 pontos e Y=X.^3.Y).1:10]. e a maioria dos comandos citados.Y.5*Y.Y]=meshgrid(x. (no caso. 100*100=10000 pontos) e pode-se observar perfeitamente o comportamento da função no intervalo definido. O que a função meshgrid.

Por exemplo.Curso de programação aplicada em linguagem MATLAB – META Consultoria 3) 2011 Definindo suas próprias funções Este capítulo mostra como definir funções. Para isso digite no editor: function [area] = areacirc (raio) %esta funcao calcula a área de uma circunferência. Deste modo. É interessante que se crie o hábito de comentar suas funções. que são basicamente funções dentro de funções. Também mostra como usar “nested functions” ou sub-rotinas. Uma função pode ter vários comandos e realizar operações de todo tipo.a) Funções Função é um conjunto de comandos escritos em sequência. dado seu raio area=pi*(raio^2).. 3. quando se digitar na linha de comando (“command window”) areacirc(3) o programa irá executar a função areacirc enviando a ela um dado de entrada que vale “3” e recebendo de volta um dado de saída que tem o valor da área de um círculo de raio 3. Funções possuem ou não argumentos de entrada e de saída e podem ou não ter sub-rotinas. uma vez que irá criar muitas e dificilmente se lembrará de todas elas. que seguem uma linha de raciocínio lógica.. sua sintaxe básica. desde uma montagem de matriz a cálculos muitíssimo complexos e montagem de animações. Para criar uma função abra o “editor” do MATLAB e digite: function [saídas] = nome_da_funcao (entradas) %comentários %comentários %comentários Comandos Comandos . define o que são parâmetros de entrada e de saída e como “chamar” funções. ----- 17 . vamos escrever uma função que calcula a área de uma circunferência.

A seguir é apresentado um código que calcula o movimento de uma manivela no tempo e plota a animação usando uma nested function.yc] = geramanivela (T.L).y.theta. gera os valores principais da manivela %(as duas pontas e a articulação) 18 .xmax. Concentre a atenção na sub-rotina e em como usá-la.b. x(cont. Este é um tipo de propriedade mais específico de certos problemas. é uma nested function..h.xc. para definir o tamanho da %janela onde será desenhada a animação xmin=-max(a)-1.b..'o'.2).r.0.ymax]) title ('Manivela'.2).b) Nested functions Nested functions ou sub-rotinas são funções subalternas.r.x.:).ymin..y.y(cont. ymin=-max(h)-1. dando os parâmetros de entrada (T.2). frequentemente usadas para realizar cálculos repetitivos e recursivos. T=2.'o'. %plota a animação -------------------------------------------------------------for k=1:n for cont=length(t)-1:-1:1 tic plot(x(cont.6) axis equal axis ([xmin.yc] = geramanivela (T.'o'.3).xc. n=30.. r=2.:). L=6. %define os valores máximos e mínimos para x e y.b.3).yc..'bold') grid on s=toc.xc..x(cont.L) e %recebendo os parâmetros de saída [t.yc] [t.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 3.a. e não se preocupe com a animação.h.-x(cont.a. como a de um trem a vapor.y(cont.'o'. %raio da manivela [m] %comprimento do braço [m] %período [s] %número de voltas animadas %chama a função 'geramanivela'. xmax=max(a)+max(b)+1. ymax=max(h)+1. function [] = animamanivela () % %esta funcao executa a animacao de uma manivela. ela é muito mais simples do que parece e será explicada mais adiante.a.'fontweight'.y.L) % %esta funcao calcula os pontos usados na animaçao executada pela funcao %'animamanivela'.2).h.x.r. pois isto será necessário mais a frente.0. e é quase sempre usado para resolver numericamente equações diferenciais.x.-y(cont.y(cont.xc. pause (t(cont+1)-t(cont)-s) end end %------------------------------------------------------------------------------function [t. 'linewidth'.

*w. %gera uma circunferência para a animação alfa=0:0.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 w=2*pi/T. y(:.^2). %calcula o vetor de posições em função do tempo %calcula as posições dos dois pontos girantes e da extremidade do braço a=r. “geramanivela” tem vários argumentos de entrada e de saída e que os argumentos equivalentes devem ter as mesmas posições tanto na função como na chamada. b=sqrt(L^2-h. xc=r*19ós(alfa). h=r. pois os valores dos parâmetros variáveis foram fixados no início do programa.*cos(theta). com length(theta) linhas e 3 colunas.3). Observe também que a sub-rotina de cálculo.*sin(theta).2)=h. %atribui os valores calculados às matrizes resposta x e y x(:. porém ele deve sempre ocupar a mesma posição na chamada e na sub-rotina: 19 . y=zeros(length(theta). x(:. essas %matrizes nulas serão preenchidas com as respostas calculadas acima x=zeros(length(theta). %gera matrizes nulas para x e y. o vetor de tempos pode ter nomes diferentes na função principal e na sub-rotina. %=============================================================================== Note que a função “animamanivela” não tem argumentos de entrada nem de saída.01:2*pi. Por exemplo. yc=r*sin(alfa).3).3)=a+b. %define o vetor de tempos theta=t.2)=a. %define a velocidade angular t=[0:1/30:T].

m”.m areacirc. pois algumas versões antigas não fazem isto automaticamente. o programa deve gerar um arquivo para a função. Quando forem salvas.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Para salvar sua função clique na opção “save” e salve-a com o mesmo nome que deu a ela no editor de funções. É conveniente também colocar a extensão “.m ----- 20 . caso isto não seja obedecido o programa não reconhecerá sua função. similar aos apresentados abaixo. animamanivela.

menor que. Os principais operadores lógicos do MATLAB estão listados abaixo. entre outros. maior que. 4.Curso de programação aplicada em linguagem MATLAB – META Consultoria 4) 2011 Operadores e estruturas condicionais e iterativas Este capítulo mostra a sintaxe e o funcionamento básico dos operadores lógicos do MATLAB e ensina como montar estruturas condicionais e iterativas básicas. como igual. diferente.a) Operadores Um operador é um símbolo que represente uma comparação ou condição. = Variável da esquerda recebe valor da direita ( var = valor ) < Variável da esquerda menor que variável da direita <= Variável da esquerda menor ou igual que variável da direita > Variável da esquerda maior que variável da direita >= Variável da esquerda maior ou igual que variável da direita == Igualdade de valores(com sentido de condição) ~= Diferença de valores (diferente) && Operador “e” (dependendo do tipo de dado é simples ou duplo) || Operador “ou” (dependendo do tipo de dado é simples ou duplo) ~ Negação 1 VERDADEIRO / SIM (convenção) 0 FALSO / NÃO (convenção) ----- 21 .

end Ou então: if expressao 1 comandos 1 if expressao 2 comandos 2 end comandos 3 end Por exemplo.0]. se for falsa o programa passa direto para o end.'color'.'k') axis off end 22 . elseif e else Condicionais são estruturas de comparação. que realizam ou não uma série de comandos. Operador IF if condição comando 1 comando 2 . sum=sum+a. dependendo da ocorrência ou não ocorrência de algum fato externo..Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 4. end É equivalente ao "se". se a expressão for verdadeira os comandos abaixo dela serão executados.b) Condicionais if. if a<50 cont=cont+1.. e não executa os comandos internos. podemos considerar uma comparação do valor de uma variável: if ang==0 plot([0.

FORCAS(end)=f_impostos(2). DESLOCAMENTOS(end)=u_impostos(2). ele só será executado se nenhuma condição anterior a ele for satisfeita. pois precisa de uma condição. DESLOCAMENTOS(j)=u_livres(j-1). if condição 1 grupo de comandos A elseif condição 2 grupo de comandos B elseif condição 3 grupo de comandos C else grupo de comandos D end Um exemplo de aplicação é uma estrutura condicional de um programa que faz análise de reações à esforços: if j==1 FORCAS(1)=f_impostos(1). DESLOCAMENTOS(1)=u_impostos(1). O “else” é sempre a última opção. sendo que sempre será executado se a condição anterior a ele falhar.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Operadores ELSE e ELSEIF if condição comandos 1 elseif condição comandos 2 else comandos 3 end Perceba que o “elseif” funciona como um “if” após o “if” inicial. porém o “else” não precisa de condições. else FORCAS(j)=f_livres(j-1). end 23 .

if (VALOR_MEDIO*DIREITA)> 0 D=XI. else E=XI. senão entrará em loop infinito) end A sequência de raciocínio é bem próxima à do C++. faça XI=(E+D)/2. ESQUERDA=VALOR_MEDIO. end %condição dupla. DIREITA=VALOR_MEDIO. Por exemplo: for i=1:length(conect) %para “i” variando de 1 até o tamanho do vetor “conect” if ele_pzt==i && pzt_sup==1 mat_ele_no(i. %expressão que muda a condição end 24 . end end Já um loop “while” tem aplicação em situações onde não se sabe as dimensões do problema como. e é usado para se realizar processos onde se sabe as dimensões do que se está calculando. VALOR_MEDIO=funcao(XI). para um loop “for” tem-se um número definido de iterações. End ERRO=abs(DIREITA-ESQUERDA). i=i+1.3)=1. por exemplo. um programa que calcula raízes de equações: while i<1000 && ERRO>(10^(-6))%enquanto as condições não forem satisfeitas.2)=1. as duas devem ser satisfeitas if ele_pzt==i && pzt_inf==1 mat_ele_no(i.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Operadores FOR e WHILE for variável = valor_inicial : passo : valor_final comandos end while condição comandos (DEVE conter um comando que altere a condição.

então este caso será executado.nely+1). dimY*yy. (dimZ*10*zz)-(dimZ*5)) %'fundo' hold off case 'malha' %plota somente a malha x=linspace(0. switch variável case 1 comandos case ‘dois’ comandos default comandos end Por exemplo.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Operador SWITCH Este comando cria uma chave.dimX. %vetor de y [x. axis equal camproj ('orthographic') tam_el_x=(max(x)/(nelx+1)). %eleva na altura certa surf(x. Ele recebe uma variável e em cada caso testa seu valor.nelx+1). Se o valor da variável do “switch” for igual ao valor do “case”. tam_el_y=(max(y)/(nely+1)). um programa que plota vários tipos de gráficos em uma análise de placas: switch caso case 'placa3d' %viga ou placa 3D com engastes surf(dimX*xx. %vetor de x y=linspace(0. dimY*yy. (dimZ*10*zz)-(dimZ*5)) %'frente' surf((dimX*xx). que orienta o código para uma delas dependendo de alguma condição externa. (yy-1).y. composta de várias opções. dimY*yy. case 'elemento' %plota somente um elemento genérico 25 .dimY. %gera os elementos z=(x*0)+dimZ+(dimZ/100).z). (dimZ*zz)) %viga hold on surf((xx-1). (yy+dimY).y). (dimZ*10*zz)-(dimZ*5)) %'direita' surf((dimX*xx). É bastante usado em menus e códigos que têm que responder de formas diversas a uma mesma situação. (dimZ*10*zz)-(dimZ*5)) %'esquerda' surf((xx+dimX).y]=meshgrid(x.

0. que teoricamente tende à zero. %vetor de y [x.'o'.y]=meshgrid(x.z). break end end Este programa calcula a posição de uma esfera lançada obliquamente.(dimY/(nely+1)).0.0. ----- 26 .a/2. a condição para o “break” é que a posição no vetor seja maior ou igual que a posição-alvo.teta).b/2.b/2. 'marker'.a.b.0.'markerfacecolor'.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 x=linspace(0.'b') default %caso nenhum caso seja executado..0.b.y).0.a.a/2. 'nome'.y.0. surf(x.0.'markeredgecolor'.0.b.0. Devido ao passo ser relativamente pequeno.0. Note que a opção “default“ será ativada somente se o programa não for direcionado para nenhuma das opções anteriores. %gera os elementos a=(dimX/(nelx+1)). pois quando a iteração “passar do ponto” o erro terá no máximo o tamanho de um passo. Operador BREAK Este comando tem a função de sair de um loop.(dimX/(nelx+1)). %vetor de x y=linspace(0..0.0. a variável que orienta o switch chama-se “caso”.0.2).a.0.0.. pode-se usar “<=”. hold on plot3(0. o programa roda o default error('Digite um opção válida!') end Neste caso. mas se as opções fossem números não haveria necessidade das aspas. b=(dimY/(nely+1)). z=(x*0).'k'. e é usado frequentemente dentro de uma condição.2). por exemplo: for k=1:length(xmax) if xmax(k)<=xalvo fprintf('\n%f\n'. e como ela deve ser uma “string” as opções possíveis para ela devem ser escritas entre aspas simples.

A interpolação linear estima os valores traçando uma reta entre os pontos definidos.Curso de programação aplicada em linguagem MATLAB – META Consultoria 5) 2011 Ajustes de curvas e linearizações Neste capítulo são apresentadas funções e métodos de interpolação e ajuste de curvas. 100 data 2 spline 90 linear 80 70 60 50 40 30 20 1 2 3 4 5 6 7 Interpolação linear e spline Interpolação Linear É uma das técnicas mais utilizadas para estimar dados entre dois pontos de dados. 27 . exemplificando como manipular dados de forma prática. A interpolação linear calcula o valor de uma função em qualquer ponto entre dois valores dados usando semelhança de triângulos. 5.a) Interpolação Nessa seção vamos apresentar dois tipos de interpolação: a interpolação linear e a interpolação com spline cúbica. Já a interpolação spline considera uma curva suave que se ajusta aos pontos através de um polinômio do terceiro grau.

temperatura. tempo = [0 1 2 3 4 5 ]. %Ponto a ponto y1=interp1(tempo. que contém os valores y interpolados que correspondem a x_new usando interpolação linear. Podemos realizar a interpolação de duas formas: ponto a ponto ou por vetores. os valores de x devem estar em ordem crescente. y.3. vamos usar os seguintes dados de medições de temperatura tomadas na cabeça de um cilindro de um motor novo. x_new) Interp1(x. x_new. %y1 corresponde a temperatura para o tempo igual a 3. Tempo (s) Temperatura (F) 0 0 1 20 2 60 3 68 4 77 5 110 Para manipularmos essas informações. temperatura = [0 20 60 68 77 110]. y. 28 . A função supõe que os vetores x e y contém os valores de dados originais e que outro vetor x_new contém os novos pontos para os quais desejamos calcular os valores interpolados y_new. e os valores x_new devem estar em ordem e dentro do intervalo dos valores de x.4). ’linear’) Esta função devolve um vetor do tamanho de x_new. Para esse tipo de interpolação não é necessário escrever linear como último parâmetro da função. A sintaxe é apresentada a seguir: Interp1(x. A fim de ilustrar o emprego da função. já que esta é a opção default.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 A função “interp1” realiza a interpolação usando vetores com os valores de x e y. vamos armazená-los na forma matricial da seguinte maneira.4 segundos. Para que a função opere corretamente.

’spline’) %ou temp3= interp1(tempo.[1. podemos utilizar o seguinte comando: temp2 = interp1(tempo. temp1 = interp1(tempo. Interpolação Spline Uma spline cúbica é uma curva contínua construída de modo que passe por uma série de pontos.8.temperatura. A curva entre cada par de pontos é um polinômio de terceiro grau.7 e 4. suponha que queremos usar interpolação spline para calcular a temperatura na cabeça dos cilindros em t=2. ou seja.2.2. a spline cúbica se calcula com a função interp1 usando um argumento que especifica interpolação spline cúbica no lugar da interpolação linear (default).3]). 2.’spline’) Que devolve um vetor do mesmo tamanho de x_new com os valores de y interpolados correspondentes usando splines cúbicas.x_new.8]. Interp1(x. temperatura.6 3. temperatura=[0 20 60 68 77 110]. No Matlab.2 3.2s. y3=interp1(tempo. ‘spline’) %Para calcular a temperatura em instantes diferentes.8 2.temperatura. temperatura. calculado para formar uma curva contínua e uma transição suave entre os pontos.[2. x_new=0:0.’spline’) 29 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Ou então: %Vetores y2=interp1(tempo.7 4.y. Como ilustração. Podemos usar as seguintes instruções: tempo=[0 1 2 3 4 5].3.6s. %y2 corresponde à temperatura para os tempos iguais a 1. x_new.3 segundos.temperatura.x_new). O procedimento para o bom funcionamento dessa interpolação é o mesmo da linear do que diz respeito aos valores de x_new.2:5.6. todos os elementos em ordem crescente. %y3 corresponde à temperatura para os tempos de 0 a 5 segundos com passo de 0.

y=[0 20 60 68 77 110].b) Ajuste de curvas No MATLAB existem várias formas de se ajustar curvas. Ao plotar esses pontos.*x. é possível que essa linha otimizada não passe por nenhum dos pontos. minimizando a distância entre cada ponto e a linha. Entretanto. como mostra a figura. x=0:5. pode-se usar desde uma simples regressão linear a uma função “polyfit”. é provável que apenas alguns deles fiquem na linha. Regressão linear pelo Método dos Mínimos Quadrados A regressão linear é o processo que determina qual equação linear é a que melhor se ajusta a um conjunto de pontos. plot(x.x. vemos que em geral caem em uma linha reta.’o’. se traçamos uma linha reta que passe por esses pontos. Nesta seção apresentaremos os métodos usuais de ajuste de curvas. Depois de plotar esses pontos. Podemos utilizar então o método de ajuste de curvas de mínimos quadrados para encontrar a linha reta que mais se aproxima dos pontos. y1=20. Para entender esse processo.y1) 30 . minimizando a soma das distâncias entre a linha e os pontos elevadas ao quadrado. O ajuste é feito através de uma função y=mx+b.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Suponha que tenhamos um conjunto de dados que obtivemos de um experimento.y. ----5. Então. é evidente que y=20x é uma boa estimativa de uma linha que passa pelos pontos. primeiro consideraremos o conjunto de valores de temperatura tomados na cabeça dos cilindros de um motor novo.

Se utilizamos um conjunto de n+1 pontos para determinar um polinômio de grau n. todos os pontos n+1 ficarão sobre a curva do polinômio. Ao aumentar o grau do polinômio.^2). Pode-se calcular o erro quadrático médio (MSE) de 95. aumentamos também o número de pontos que passam sobre a curva. podemos utilizar uma técnica similar para calcular uma curva através de uma equação polinomial: Observe que a equação linear também é um polinômio de grau 1. Esse erro pode ser calculado no Matlab utilizando os seguintes comandos: erro = sum((y-y1). Aprendemos anteriormente como calcular uma equação linear que melhor se ajusta ao conjunto de dados. Para esse conjunto de dados o valor do erro é 573.^2)/length(y). 31 . Na figura abaixo plotamos os gráficos com os melhores ajustes para polinômios de grau 1 a 5.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Para medir o erro da estimativa linear utilizamos a distância entre os pontos e a reta elevada ao quadrado. Entretanto.5 com essa instrução: mse=sum((y-y1).

polyfit(x. A função devolve os coeficientes. em potências decrescentes de x.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Função Polyfit A função que calcula o melhor ajuste de um conjunto de dados com um polinômio de certo grau é a função polyfit.y. Esta função tem três argumentos: as coordenadas x e y dos pontos de dados e o grau n do polinômio.n) 32 . no polinômio de grau n que ajusta os pontos xy.

y. Não se esqueça que o número de coeficientes é igual a n+1. ybest=m*x+b.y. O primeiro argumento da função “polyval” é um vetor que contém os coeficientes do polinômio (no caso anteriror. a=coef(1).'o'. m=coef(1). plot(x. ybest=a*x.'o'. c=coef(3).y.ybest) Atenção ao fazer a aquisição dos dados da função “polyfit”.1).y.^2 +b*x + c. %regressão linear coef=polyfit(x. b=coef(2). o vetor de valores x para qual desejamos conhecer os valores do polinômio.ybest) %regressão polinomial de grau 2 coef=polyfit(x.x. y=[0 20 60 68 77 110]. 33 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Vamos agora utilizar essa função para fazer o ajuste linear e de 2° grau dos dados de temperatura na cabeça dos cilindros.x). ybest=polyval(coef. % entrada dos dados x=0:5. Função Polyval A função “polyval” serve para calcular o valor de um polinômio em um conjunto de pontos. plot(x.2). “coef”) e o segundo.x. b=coef(2). sendo n o grau do polinômio.

pois com poucos comandos é possível plotar as curvas de diferentes regressões. Na janela do gráfico (Figure1) acesse: Tools > Basic Fitting. Abrirá a seguinte janela: 34 . primeiro plote o gráfico xy.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Basic Fitting O Basic fitting é uma ferramenta que permite realizar regressões de maneira mais intuitiva. Para utilizar o basic fitting. É muito eficiente na comparação de ajustes de curva de polinômios de graus diferentes.

Nela podemos escolher o tipo de ajuste de curva. É possível escolher mais de um tipo de ajuste e comparar os valores na janela da direita. ----- 35 . Selecionando a opção Show Equations.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 À esquerda há a janela do basic fitting. selecionando o check box da regressão. o Matlab mostra a equação de cada polinômio no gráfico.

assim. o ponto é de máximo. Já a derivada segunda pode ser calculada por: >>derivada2=diff(derivada)/diff(vetor_tempos). por isso deve-se fazer uma aproximação na última posição do vetor derivada: 36 . Para calcular a derivada num ponto o programa seleciona os dois pontos imediatamente ao lado do ponto desejado e traça uma reta passando por eles. se considerarmos esta diferença como o “dt” do cálculo. Função de derivação diff(x) e diff(y) Este comando calcula a diferença entre dois pontos vizinhos. e devolve um novo vetor com as diferenças entre os pontos. Se a derivada vale zero o ponto é crítico. Já sobre derivada segunda. existe uma diferença entre um valor na posição (i) e o próximo (i+1). 6. Usando esse comando. cada coluna funciona como um vetor). a posição de uma partícula no tempo. Observe que a derivada é aproximada. Note que. se ela muda de sinal da esquerda à direita o ponto é de máximo ou mínimo local ou global. por isso. por exemplo. a derivada "yp" é igual a: >>derivada=diff(vetor_posições)/diff(vetor_tempos). e encontrar seus valores de máximos e mínimos. Um vetor é basicamente uma sequência de pontos que podem ser representados por uma função.Curso de programação aplicada em linguagem MATLAB – META Consultoria 6) 2011 Derivação numérica Este capítulo demonstra como executar uma derivação numérica em vetor de dados. que representa. o vetor derivada será sempre uma posição menor que o vetor original. se ela for negativa num ponto crítico.a) Derivando vetores Para fazer uma derivada numérica é preciso compreender como um vetor é estruturado. como a função “diff” é calculada entre dois pontos sucessivos. quanto mais pontos melhor será a aproximação. A derivada de uma função num ponto é a inclinação da reta que tangencia esse ponto. caso seja positiva o ponto é de mínimo. A inclinação dela é retornada como a derivada no ponto. num vetor qualquer (se for uma matriz. O vetor das derivadas será sempre um elemento menor que o original. assim. podemos fazer a derivação usando a idéia da soma de Riemann.

esses índices são então usados com o vetor contendo os valores de tp para determinar os locais de pontos críticos. ou algum similar.num2str(ponto_critico))) grid on. function derivacao_numerica %esta função é um exemplo do uso da função diff de derivação numérica clc t=-5:0. Este código calcula a derivada numérica da função.001:5. deve ser feito para que a derivada segunda possa ser feita. prod = yp(1 : length(yp) . yp=diff(y). apesar de gerar um erro matemático. pois o vetor de tempos tem originalmente uma posição a mais que o vetor derivada.b) Localizando pontos críticos O comando "find" determina os índices dos locais do produto para os quais a derivada tp(k) é igual a zero ou o mais próximo possível disto. ponto_critico = tp(find (prod < 0) ). tp=diff(t). plot(t. y=t. plota a função e a derivada e informa o ponto crítico com um erro de no máximo o tamanho de um passo do vetor inicial. Este procedimento.'f''(x)') title(strcat('Ponto crítico:'. A seguir está um código de diferenciação numérica de uma função y=f(x). onde y=x².y. yp(end+1)=yp(end).^2.* yp(2 : length(yp) ).Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 >>derivada(end+1)=derivada(end).t. pode ser feita. 37 ./diff(t). ----6. Esta aproximação. uma vez que uma posição num vetor de milhares de posições causará um distúrbio desprezível.1 ) .yp) legend('f(x)'.

----- 38 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Perceba que o ponto de mínimo da parábola coincide com o ponto onde a reta cruza o zero até a terceira casa decimal. mostrando que a derivada numérica é realmente eficiente. desde que se tenha uma quantidade razoável de pontos.

que é a regra de Simpson. que é a regra do trapézio e um modelo mais elaborado. dentre eles estudaremos o modelo mais simples. A regra do trapézio é dado por: Existe uma função do MATLAB que calcula a regra do trapézio (“trapz”) que realiza múltiplas vezes (uma vez para cada intervalo entre pontos) o procedimento mostrado acima. com um erro relativamente pequeno. A diferença é que este comando considera também alguns pontos próximos ao Xo e X1 para calcular a integral no intervalo. então. 7. A seguir está um algoritmo que compara a integração pela regra do trapézio e pela regra de Simpson.b) Regra de Simpson Um outro algoritmo que realiza uma operação similar á o comando “quad”.a) Regra do trapézio repetida Uma integral é a área abaixo de um gráfico. 39 . que fazem a integral pela regra de Simpson. se dividirmos o gráfico em uma quantidade imensa de parcelas.Curso de programação aplicada em linguagem MATLAB – META Consultoria 7) 2011 Integração Numérica Existem vários métodos de integração numérica. pode-se aproximar a área dessas parcelas por áreas de trapézios. Somando-se a área de todas as parcelas se obtém uma integral aproximada da função. ou a função “integra_simpson”. ----7.

'spline'). é dado abaixo.y) n=201.y) trapz_do_grafico_experimental =trapz(x.y) %=============================================================================== Onde o algoritmo da função “integra_simpson”.1:10]. k=x.'red') simpson_do_grafico_experimental=INTEGRA_SIMPSON(x.y. que funciona de modo similar. function [integ] = INTEGRA_SIMPSON (x.y. integ=(dx*(sum(4*f(2:2:end-1))+sum(2*f(3:2:end-2))+f(1)+f(end))). xx=linspace(k(1). f=interp1(k. %=============================================================================== 40 .k(end). figure (1) plot(x. dx=(k(end)-k(1))/(3*n).xx.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 function [] = trapezio_x_simpson () %este algoritmo compara a integraçao numérica pela regra do trapézio com a %integração pela regra de simpson. y=sin(x. x=[0:0.^3)+x. mas não igual à função “quad”.n).

pois numa amostragem experimental os dados obtidos nem sempre definem uma função. ou uma “spline” podem ser aplicadas com precisão satisfatória.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 simpson_do_grafico_experimental = 49.7540 trapezoidal_dos_experimentais = 49. Essas diferenças permitem que se calcule a integral inclusive de curvas e não somente de funções como o comando “quad” faz. dados amostrais zoom de uma região 41 . transformando-os em pontos de uma função bem definida. para ser possível calcular uma integral aproximada. Um exemplo disso é uma curva obtida em laboratório. que aparentemente é bem definida. mostrando que não são necessários métodos muito mais precisos para aplicações simples. usa-se uma “spline” ou um “resample” como nested function da função “integra_simpson” para tratar os dados amostrais.7172 Note que mesmo com os pontos marcados com um passo muito grande a diferença é pequena. mas localmente não pode ser definida por nenhum tipo de método. Esta aproximação é muito útil em casos onde os dados são tão irregulares localmente que nem mesmo uma interpolação de alto grau (grau 10). pois ela permite que se altere o número de pontos e a função de interpolação usada na integração numérica. Assim. Também vale ressaltar que usamos uma função que não pertence ao MATLAB (“integra_simpson”).

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

curva ajustada

simpson_do_grafico_experimental =
3.2396e+003
trapz_ do_grafico_experimental =
3.2398e+003
simpson_do_grafico_interpolado =
3.2395e+003
trapz_do_grafico_interpolado =
3.2397e+003
Perceba que o método se mostra eficiente, pois os resultados obtidos para os dados sem
tratamento e para a função interpolada são muito próximos.
-----

42

Curso de programação aplicada em linguagem MATLAB – META Consultoria

8)

2011

Equações Diferenciais Ordinárias

Equações diferenciais de primeira ordem (ODEs) são equações que podem ser escritas da
seguinte forma:

Onde x é a variável independente.
A solução da equação diferencial de primeira ordem é a função y = f(x), tal que f’(x)=g(x,y).
A solução de uma ODE é geralmente uma família de soluções e a condição inicial é necessária
para especificar uma única solução. Enquanto que muitas vezes as soluções analíticas para as
ODEs são preferíveis, muitas vezes elas são muito complicadas ou inviáveis. Para esses casos, é
necessário utilizar uma técnica numérica. As mais comuns são a de Euler e de Runge-Kutta, que
aproximam a função utilizando a expansão da série de Taylor.
8.a) Métodos de Runge-Kutta
São os métodos mais populares para resolução de ODEs. O método Runge-Kutta de
primeira ordem utiliza expansão de Taylor de primeira ordem, o método de Runge - Kutta de
segunda ordem utiliza da expansão de Taylor de segunda ordem, e, assim por diante. Sendo o
método de Euler igual ao método de Runge-Kutta de primeira ordem. A equação da integração
Runge-Kutta de primeira ordem é a seguinte:

Esta equação estima o valor da função
em

usando uma linha reta que é tangente à função

, como se mostra a figura abaixo. Para calcular o valor de

h=(b-a) e um ponto de partida
vez determinando o valor de

usamos um tamanho de passo

; se usa a equação diferencial para calcular o valor de
, podemos estimar o valor de

. Uma

:

43

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

----8.b) Função ODE45
O Matlab utiliza as funções “ODEs” para determinar as soluções numéricas de equações
diferenciais ordinária. Neste curso abordaremos a função ode45.
[x,y] = ode45(‘nome_da_subrotina’,a,b,inicial)
Devolve um conjunto de coordenadas x e y que representam a função y=f(x) e se calculam
usando o método de Runge-Kutta de quarta e quinta ordem. O ‘nome_da_subrotina’ define uma
função f que devolve os valores de x e y. Os valores a e b especificam os extremos do intervalo do
queremos calcular a função y=f(x). O valor inicial especifica o valor da função no extremo
esquerdo do intervalo [a,b]. A função ode45 pode também levar dois parâmetros adicionais. Podese utilizar o quinto parâmetro para especificar a tolerância relacionada com o tamanho do passo;
A tolerância “default” é de 0.000001 para a ode45. Pode-se utilizar um sexto parâmetro para que a
função exiba imediatamente os resultados, traço. O valor “default” é zero, especificando nenhum
traço para os resultados. Para exemplificar o funcionamento da ode45, vamos plotar os gráficos
das soluções analítica e numérica. No exemplo resolveremos a ODE
[0,3], com condição inicial

no intervalo

igual a 3.

% arquivo g5.m (o arquivo da função deve ter o mesmo nome da função)
function dy=g5(x,y)
dy=3*y + exp(2*x);
%arquivo solveode.m
[x,y_num]=ode45('g5',0,3,3);

44

y_num.x. o movimento do bloco é amortecido por uma força igual a (sendo b a constante de amortecimento e a velocidade). 45 . O corpo de massa m está ligado por meio de uma mola (constante elástica igual a k) a uma parede.exp(2*x). Ao se deslocar.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 y=4*exp(3*x) .y. plot(x.'o') title('Solução da Equação 5') xlabel('x') ylabel('y=f(x)') grid Considere o sistema massa mola da figura.

b=0.15. chegamos à seguinte equação: Onde F(t) é a força aplicada no bloco. Para resolvermos o problema é necessário primeiro fazer a modelagem matemática para encontrar a EDO que descreve o comportamento do sistema. plote os gráficos deslocamento pelo tempo e velocidade pelo tempo. Para resolver uma EDO de segunda ordem utilizando ode45. precisamos reduzir a ordem da equação.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Por exemplo. reescrevendo na forma de um sistema. F(t)=0 e condições iniciais x(0)=5 e x’(0)=0. k=1. Isolando obtemos: Montando o sistema: Agora criamos uma função para implementar o sistema: 46 . Através da análise do DCL do corpo. para m=2.

xdot = zeros(2.15.t. xdot(2) = (1/m)*(-b*x(2)-k*x(1)).x] = ode45('eqx2'. b=0.m [t. %arquivo massamola.1). %declaração dos dados do exercício k=1. m=2. %tempo de 0 a 100 plot(t.x).[0 100].m function xdot = eqx2(t. xdot(1) = x(2).x(:.0]).1).2)) grid on ----- 47 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 % arquivo eqx2.x(:.[5.

quando se trata de uma função. 9. Os mais usados serão exemplificados e detalhados após a apresentação geral. por meio de exemplos e dicas de aplicações. Há muitos tipos de gráficos diferentes. porém ele cria o vetor X automaticamente ezcontour gráfico útil para vista superior de curvas de nível 48 . normalmente. e os principais estão listados abaixo com uma breve descrição.Curso de programação aplicada em linguagem MATLAB – META Consultoria 9) 2011 Gráficos Talvez uma das melhores qualidades do MATLAB sejam a facilidade que o programa proporciona para plotar gráficos. plotamos a variável independente em X e a dependente em Y. e podem ser modificados de várias maneiras.a) Gráficos bidimensionais Gráficos bidimensionais necessitam de dois vetores de valores para serem plotados. Este capítulo tem como objetivo ilustrar as funções de desenho mais úteis do programa. animações e superfícies. Linhas plot gráficos de funções y=f(x) plotyy gráfico com dois vetores de valores em Y loglog escala logarítmica para os dois eixos semilogx escala logarítmica para o eixo X semilogy escala logarítmica para o eixo Y stairs gráfico para dados medidos digitalmente no tempo contour gráfico útil para vista superior de curvas de nível ezplot o mesmo que o plot.

para valores em porcentagens fill desenha figura com interior preenchido contourf plota vista superior de curvas de nível image desenha imagem pcolor plota vista superior de curvas de nível com a malha usada ezcontourf plota vista superior de curvas de nível 49 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Barras Bar grouped/stacked – gráfico de barras vertical barh grouped/stacked – gráfico de barras horizontal hist histograma pareto plota os valores de Y em barras descendentes errorbar plota curvas com barras de erro stem plota dados discretos Área area gráfico de área pie gráfico de “pizza” ou disco.

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Direção feather plota orientação do campo vetorial sobre uma curva quiver plota orientação do campo vetorial numa região do plano comet plot no tempo. em coordenadas polares compass gráfico para vetores. em coordenadas polares ezpolar plot que gera automaticamente o vetor de θ. em coordenadas polares Dispersão scatter gráfico de dispersão spy gráfico usado para visualizar o padrão de dispersão de matrizes esparsas plotmatrix plota matriz de plots 50 . em movimento Coordenadas polares polar plot em coordenadas polares rose gráfico para dados discretos.

colormap(jet). vamos entender como usar os principais tipos de funções gráficas fornecidas pelo MATLAB. centro = 80% laterais)'). contourf(mf).Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Uma vez exemplificados. xlabel('Comprimento horizontal da placa').y) %vetor x %vetor y Outras funções bastante úteis são a “contourf” e a “pcolor”.5*x. %plota gráfico plano com os dados das temperaturas ajustados.5]. que podem. 51 . centro = 80% laterais)').0001:2. grid on. figure(3). colorbar. axis equal. Por exemplo: function plota_funcao %esta função plota funções do tipo y=f(x) e dados em vetores X e Y x=[-1:0. para usá-la precisamos de dois vetores. y=0. plot(x. pcolor(mf). xlabel('Comprimento horizontal da placa'). colormap(jet). ylabel('Comprimento vertical da placa'). por exemplo. title('Temperaturas na placa (quando temp. colorbar. um em X e um em Y. grid on.^3-x. %plota gráfico plano com os dados exatos das temperaturas em cada posição %da matriz correspondente à superfície. axis equal. title('Temperaturas na placa (quando temp. ylabel('Comprimento vertical da placa'). representar distribuições de temperatura numa superficie: figure(2). A função mais usada é sem dúvida o “plot”.^2.

sendo que alguns são exemplificados: 52 . necessitamos de três matrizes. a distribuição de temperatura sobre uma superfície. uma em Y e uma função das outras duas em Z. entre outros. numa aplicação prática.Curso de programação aplicada em linguagem MATLAB – META Consultoria contourf 2011 pcolor Gráficos como o “feather” podem ser usados para representar. Este tipo de gráfico descreve fenômenos mais complexos. a distribuição de pressão sobre o perfil da asa de uma avião: ----9. como a vibração de uma placa.b) Gráficos tridimensionais Para desenhar gráficos em três dimensões. uma em X. Os principais plots tridimensionais estão listados abaixo. normalmente.

porém só desenha as linhas das matrizes Malhas de dados mesh plota uma matriz como uma malha meshc plota uma matriz como uma malha e desenha algumas curvas de nível meshz plota uma matriz como uma malha. similar ao mesh ezmesh plota uma matriz como uma malha. similar ao mesh stem3 plota dados discretos no espaço bar2 gráfico 3D de barras verticais bar3h gráfico 3D de barras horizontais 53 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Linha plot3 plota funções e curvas no espaço contour3 desenha várias curvas de nível sobrepostas contourslice desenha as curvas de nível nas paredes da caixa de plotagem ezplot3 similar ao plot waterfall similar a um gráfico de malha.

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Sólidos pie3 gráfico 3D de porcentagens fill3 superfície preenchida no espaço patch cria polígonos a partir das coordenadas dos vértices cylinder cria um cilindro ellipsoid cria um elipsóide sphere cria uma esfera Superfícies surf desenha superfícies surfl desenha superfícies com cores baseadas na iluminação do gráfico surfc desenha superfícies e as curvas de nível ezsurf desenha superfícies ezsurfc desenha superfícies e as curvas de nível 54 .

Uma das melhores e mais úteis funções de desenho de superfícies é a função “surfc”. que também fornece as curvas de nível da função.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Movimento quiver3 desenha trajetórias no espaço. podemos gerar uma superfície bastante interessante a partir de manipulações algébricas. independendo dessa matriz ter sido obtida experimental ou teoricamente. Por exemplo. Ela pode ser usada para qualquer tipo de matriz. e diferentemente do que muitos pensam. numéricas e matriciais: 55 . indicando a intensidade de um parâmetro comet3 desenha trajetórias no espaço. em movimento streamslice desenha o campo vetorial de um campo para uma variável constante Fluxo scatter3 visualiza a distribuição de dados em matrizes esparsas no espaço coneplot desenha orientação de fluxos com cones indicando o sentido streamline desenha orientação de fluxos com linhas streamribbon desenha orientação de fluxos com faixas streamtube desenha orientação de fluxos com sólidos no espaço Os gráficos tridimensionais são uma das funções mais úteis do programa. são relativamente fáceis de serem desenhados quando comparados com a dificuldade de se obter os dados que dão origem a eles.

y).00000001.z) axis equal shading interp alpha (0. [x.y]=meshgrid(x. y=x.7) Existem outras aplicações bem mais elaboradas. porém para gerar uma animação é preciso primeiro criar o gráfico inicial. z=(z-z. Todos estes problemas podem ser solucionados usando métodos numéricos e posteriormente animados usando plots sucessivos. z=sin(z). que exigem combinações de várias funções gráficas para gerar um único gráfico final.*y)*3.*x+z. z=sqrt(x.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 function superficie_surfc %esta função desenha uma superfície usando a função surfc x=[-20:0.^2+y. Por exemplo: 56 ./z. como um sistema massa-mola simples ou um pêndulo.1:20]. Podemos usar como exemplo a modelagem de uma estrutura real.^2)+0.y. surfc(x. e o gráfico de sua animação no tempo.

pelo ODE45 e é posteriormente animado através de um loop com múltiplos tipos de gráficos simultâneos. ----- 57 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Este pêndulo simples é resultado de uma integração numérica usando o método de Runge-Kutta de 4ª ordem. este sistema massa-mola é desenhado com vários plots simultâneos. “plot3”. “sphere” e cerca de outras vinte funções de ajuste de propriedades gráficas. Para desenhá-los utiliza-se as funções “plot”. De forma similar. “cylinder”. “surf”.

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 9.y) Cria vários gráficos numa mesma janela. grade e cores. Ylabel(‘texto’) Escreve um texto ao lado do eixo Y.plot(x.c) Propriedades de gráficos 2D As propriedades dos gráficos possibilitam que se tenha uma apresentação adequada das informações. como numa matriz. para gráficos em duas dimensões. As mais usadas são apresentadas abaixo com uma breve descrição. Xlabel(‘texto’) Escreve um texto abaixo do eixo X. o segundo e terceiros são as posições deles na tela. legend(‘texto’) Cria uma caixa com a descrição da curva grid on / off Desenha ou apaga a grade do gráfico Gráficos múltiplos subplot(nº p1 p2). figure(nº) Abre uma nova janela 58 . Se x e y são vetores o texto é escrito no ponto definido por eles.y. gtext(‘texto’) Este comando escreve um texto nas posições indicadas na tela do gráfico pelo clique mouse. o primeiro dígito é o número de gráficos a serem plotados. títulos. Elas são basicamente as legendas. e é apresentada uma função que usa vários destes comandos. Legendas Title(‘texto’) Cria títulos no topo do gráfico. Text(x. y) usando os eixos dos gráficos.’texto’) Escreve um texto na tela do gráfico no ponto específico das coordenadas (x.

’linestyle’. por exemplo: Plot(x.’símbolo do tipo de linha‘) - Traço contínuo .’cor‘) r Vermelho g Verde 59 . Pontos nos pontos -- Tracejada + Cruz nos pontos : Pontos * Estrela nos pontos - Traço-ponto ° Círculos o Círculos nos pontos x Marcas em x nos pontos Cores É usada dentro das funções de desenho.y.y.’color’. por exemplo: Plot(x.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Estilo de linha É usado dentro das funções de desenho.

e devem ser escritos após eles. ymax]) Define os limites dos eixos em X e Y axis([xmin. São comandos distintos dos plots. sem encobrir dados axis equal Define a mesma escala para os eixos axis image Define a mesma escala e restringe o gráfico ao tamanho da imagem axis square Trava o gráfico como um quadrado ou cubo axis vis3d Ativa a visualização em 3D axis normal Define as propriedades “defaults” dos eixos axis off Desliga os eixos axis on Liga os eixos 60 . cmax]) Define os limites dos eixos em X.b] Matriz em RGB que representa uma cor definida pelo usuário 2011 Escala Altera a apresentação da escala do gráfico. Y e Z axis auto Ativa a definição automática das escalas dos eixos axis manual Ativa a definição manual das escalas dos eixos axis tight Trava no tamanho mínimo. ymax. zmin. zmax. cmin. ymin. axis([xmin. xmax.Curso de programação aplicada em linguagem MATLAB – META Consultoria b Azul w Branco i Transparente [r. ymin.g. xmax.

'bold'.thp.'fontname'..thpp].'Velocidade. title('Movimento do pêndulo em função do tempo'.'linewidth'.'italic').'italic').valores.'fontname'. %plotam os graficos da posicao e velocidade angulares em funcao do tempo e %definem as propriedades desses gráficos valores=[th. 'fontangle'.. %=============================================================================== ----- 61 . grid on.'fontangle'.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 O trecho de código apresentado a seguir utiliza vários dos comandos citados acima para desenhar a posição. (rad/s)'.'fontname'. \theta°(t) e \thetaºº(t)'. e é um excelente exemplo de aplicação destas propriedades em situações práticas. (rad)'. (rad²/s)'.2). 'Aceleração.. %------------------------------------------gráficos %abre a janela do grafico figure(1).'best').... \theta(t). axis normal. 'fontweight'. legend ('Posição.'Monospaced').. plot(t. xlabel('Tempo (segundos)'.. ylabel('\theta (t).'Monospaced'.'Monospaced'. \theta°(t). \theta°°(t).. velocidade e aceleração de um pêndulo.'location'.

Transparência alpha(valor_entre_0_e_1) Define a transparência e opacidade do gráfico (zero = transparente. como “jet” ou “cooper”.d) Propriedades de gráficos 3D Estas propriedades e comandos permitem que se desenhe gráficos muito complexos e elaborados de forma simples. Iluminação camlight Cria ou move uma fonte de luz dependendo da posição da câmera.luz uniforme / phong .luz com efeito tridimensional. um = totalmente opaco) uniformemente alphamap('parâmetro') Define a transparência e opacidade do gráfico variando com o parâmetro escolhido 62 .). Cores (superfícies e sólidos 3D) colormapeditor Editor de cores e mapas de cores. lightining tipo Define o método de iluminação (flat . mas tem efeito melhor. light Cria uma fonte de luz. com uma apresentação respeitável. permite que se altere qualquer parâmetro de cor do gráfico colormap tipo Define uma escala de cores padrão.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 9. lightangle Cria ou posiciona uma luz com coordenadas esféricas. material tipo Especifica a refletividade das superfícies (o quanto os objetos iluminados refletem a luz). é pesada.

'infinite'). camproj perspective.[0. shading interp.1)]. %----------plot do pêndulo %plota a esfera surf(xx*l/10+rm(i. colormap (bone).l]. Note que para um mesmo objeto usado na animação são usados vários “plots” diferentes. grid on.2. cor. esfera e reta) numa mesma figura hold off. %posicao do observador.zc*l/12-zc*l/24).rm(i.l/5]).l/4. deve ser usado após o primeiro plot hold on %plota o suporte surf(xc*l/12.rm(i.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Sombreamento shading tipo Define o tipo de sombreamento da superfície (“flat”. light('Position'. %desenha a corda plot([0.'Style'.-l*1. box on.l/40].'color'. axis ([-l*1.78]). material metal. %imprime todos os gráficos (cilindro.'Style'.2).'linewidth'. view(pos_cam).-l/5.2. %define as propriedades do gráfico do pêndulo(eixos.68. %=============================================================================== 63 .zz*l/10) %mantém todos os 'plots' na tela. etc.2.+l*1.'infinite'). relexividade. grade.0.-l/9.) axis equal.[-l/9.2)].[-l*2.1). “interp”) Estes comandos podem ser ilustrados com o exemplo abaixo. “faceted”.58. que desenha o pêndulo simples mostrado anteriormente na seção dos gráficos tridimensionais. light('Position'.yy*l/10+rm(i. e que em cada um deles há várias outras funções para definir suas propriedades.3. desenhando todos ao %mesmo tempo.2. até o hold off.0.[0.+l*1.yc*l/12.

as funções de cada comando estão indicadas na figura abaixo: Note que o gráfico acima tem muitas propriedades gráficas. ----- 64 . e após converter seu formato para um adequado. e usa artifícios que exigem muito esforço computacional. este pode ser assistido na velocidade correta. Num computador sem uma placa de vídeo adequada ele não será visualizado do modo correto.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 De modo simplificado. Quando a animação fica tão complexa a ponto do computador não ser capaz de desenhá-la na velocidade desejada pode-se salvar as imagens num vídeo.

-x(cont. 'linewidth'.'fontweight'.6) axis equal axis ([xmin.'o'. pause (t(cont+1)-t(cont)-s) end end 65 . ou desenhamos uma sequência de imagens e as salvamos num “vetor de imagens”. pode-se fazer a animação em tempo real.y(cont.0. 10.2).a) Loops para animações Os dois tipos de estruturas usadas para executar animações são loops “for” e “while”.2). que tem função similar..Curso de programação aplicada em linguagem MATLAB – META Consultoria 10) 2011 Animações Uma animação é um conjunto de “plots” sucessivos.yc. A idéia de se montar uma animação baseia-se no princípio abaixo: início do loop plots pausa final do loop E é exatamente isto que é feito num exemplo simples.3).2). para que possam ser assistidas posteriormente. que quando desenhados a uma velocidade adequada dão a impressão de que o gráfico tem movimento. como explicado no capítulo sobre operadores.y(cont.3). Para fazer isto.2).x(cont.. A escolha do método depende da complexidade do gráfico a ser animado.xmax. x(cont. montamos um filme.. como uma manivela girando: %plota a animacao for k=1:n for cont=1:length(t)-1 tic plot(x(cont.xc.0.ymax]) title ('Manivela'.ymin..'o'. porém se o gráfico exigir muito esforço computacional deve-se montar uma sequência de imagens e salvá-las.'o'. usamos funções de desenho dentro de estruturas iterativas (loops). Se o problema for simples.y(cont.'o'.'bold') grid on s=toc.-y(cont. mas são aplicados em situações diferentes.:)... na velocidade adequada. ou seja.:).

deve-se montar o filme.'off') set(gca. %abre a janela do plot aviobj=avifile('O mundo gira!. demcmap(topo) set(gcf. se a animação for muito complexa. 66 . axis off. baseref = [1 90 0]. axis vis3d clmo(hs) load topo topo = topo / (almanac('earth'. Não altere a posição ou o tamanho da janela do “plot” durante a montagem do vídeo. %Altere aqui o número de voltas do globo fig=figure.'perspective') base = zeros(180.avi').size(base)).'black'). funciona na versão R2008b ou mais recentes e necessita de cerca de 200Mb de memória por volta. axesm('globe'. colormap copper setm(gca.025). 'Box'. o mundo gira voltas=1.'off'.baseref.size(topo)..Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Porém.'radius')* 20). vamos fazer uma animação do mundo girando (esta função exige um processador relativamente rápido.'color'. hs = meshm(topo.. %Cria o arquivo de vídeo %===================================== propriedades do gráfico (não alterar) voltas=voltas-1.360). 'Galtitude'. 'Projection'. Por exemplo.): function O_mundo_gira % %como o ribeiro diz. hs = meshm(base.'Grid'.0.topo). e pode demorar alguns minutos a cada volta do globo.topolegend.

porém é mais recomendada para gráficos muito “pesados”.9.5). material ([.7. . drawnow F = getframe(fig). ou para quando é necessário transportar uma animação para outros computadores. ----- 67 . .F).23. %========================================= loop para montar o vídeo for h=0:voltas for i=0:1:360 view(i.8]) view(30. %Captura a imagem aviobj = addframe(aviobj. Esta técnica pode ser usada para qualquer tipo de gráfico.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 camlight right lighting phong. %Acrescenta a imagem ao arquivo de vídeo end end %========================================= fechamento close(fig) %fecha a janela aviobj = close(aviobj). salva no formato “avi”. %Fecha o arquivo de vídeo disp('Funcionou!!! Você fez um filme em Matlab!!!') E após executar o programa você terá um arquivo salvo de uma animação do globo terrestre girando.1).

11. Isto tornaria a solução do sistema algo impraticável.Variáveis Simbólicas Variáveis simbólicas do MATLAB. para vários valores de “ ”. Estas funções fazem parte de somatórios. com o auxílio de variáveis simbólicas. e fazer as devidas manipulações para montar o sistema linear final. que descrevem o movimento da estrutura. forçando-nos a mudar a abordagem do problema. para efeitos práticos. como por exemplo o método de Rayleigh-Ritz para análise de vibração em estruturas. a solução desta expressão e a montagem do sistema levam apenas alguns minutos. A seguir está a expressão analítica de uma possível função admissível “ ”: Imagine agora o tempo necessário para solucionar analiticamente esta função. mas é preciso obter sua expressão analítica. gerando respostas diferentes para cada valor de “ ”. antes de escrever a equação: syms x a b c y y=a+b*x+c*x.Curso de programação aplicada em linguagem MATLAB – META Consultoria 11) 2011 SYMs . funcionam como as incógnitas que usamos no cálculo diferencial e integral.a) Declarando variáveis simbólicas Inicialmente. Porém. Caso queiramos escrever a seguinte expressão: Devemos declarar as variáveis usadas nela. que serão manipulados matematicamente. São especialmente úteis quando se tem uma expressão muito complexa para ser solucionada “na mão”. Também podem ser usadas em operações com matrizes e sistemas lineares muito complexos. deve-se declarar as variáveis usadas no problema.^2 E a resposta escrita na linha de comando será: y= c*x^2 + b*x + a 68 . Neste método são usadas funções admissíveis ( ).

como será mostrado a seguir.4) %troca "a" por 4 y=subs(y. usando o comando “subs”: Var = subs (expressão_simbólica . ----11. Para substituir valores às variáveis. a variável simbólica “y” recebeu o valor de “c*x^2 + b*x + a”. como queríamos. para atribuir valor às variáveis.[0:1:5]) %troca "x" por [0 1 2 3 4 5] E a resposta do MATLAB é: y= c*x^2 + b*x + a y= c*x^2 + b*x + 4 y= c*x^2 + 3*x + 4 y= 2*x^2 + 3*x + 4 y= 4 9 18 31 48 69 69 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Deste modo.c.a. novo) Que no nosso programa fica: y=subs(y.x.3) %troca "b" por 3 y=subs(y. velho . devemos proceder da seguinte maneira. podemos usar o comando “subs”.b) Operações com “syms” Na nossa expressão anterior.2) %troca "c" por 2 y=subs(y.b.

n . v . fourier(f) Faz a transformada de Fourier do escalar simbólico “f” com variável independente “x” e retorna uma função de “w”. a . ‘right’ ou ‘left’) Calcula o limite de “eq”. int(eq . n) Deriva “n” vezes a expressão “eq”. b) Faz a integral definida de “eq”.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Existem alguns outros comandos muito úteis para tratar expressões complexas ou realizar algum tipo de manipulação matemática na expressão: Manipulação de Expressões simple(eq) Simplifica a expressão simbólica “eq” de todas as formas possíveis. limit(eq . taylor(eq . a . pela direita ou pela esquerda. expand(eq) Escreve a equação na forma expandida. na variável “v”. ilaplace(eq) Faz a transformada inversa de Laplace de “eq”. Solução de Expressões solve(eq . x . com “x” tendendo a “a”. de “a” até “b”. e não na forma do computador). var) Resolve a expressão “eq” para a variável “var”. limit(eq . v . int(eq) Faz a integral indefinida da expressão. 70 . x . a) Expande “eq” até a ordem “n” em torno de “a” em série de Taylor. a) Calcula o limite de “eq” com “x” tendendo a “a”. diff(eq . na variável “v”. laplace(eq) Faz a transformada de Laplace de “eq”. pretty(eq) Mostra a expressão escrita na forma convencional (como escrevemos no caderno.

derivada.. Integração simbólica % INTEGRAL simbólica clc.c) Cálculo diferencial e integral – usando o “solver” Os comandos mostrados na seção anterior são especialmente úteis para resolver analiticamente expressões complexas de cálculo diferencial e integral. Todos os comandos mostrados anteriormente se aplicam às variáveis e expressões simbólicas. . solução de PVIs e EDOs.clear all syms a b c d x y integral L_inf L_sup y=a*exp(b*x)+c*sin(d*x). Algumas expressões.cos(L_sup d)) a (exp(L_inf b) . e não podem ser solucionadas desta forma. v) Soluciona condições o sistema iniciais de “cond” EDOs 2011 com com as variável independente “v”. . cond2 .L_inf. transformada de Laplace direta e inversa e expansões em séries) em expressões matemáticas complexas ou muito extensas...L_sup).Curso de programação aplicada em linguagem MATLAB – META Consultoria dsolve(eq1 . dependendo da complexidade das expressões envolvidas. . eq2 .. não possuem solução analítica. Por exemplo para realizar as operações mais comuns (integral. como será mostrado a seguir. porém. cond1 . ----11.close all. pretty(simple(integ)) c (cos(L_inf d) .. mas que podem ser difíceis.exp(L_sup b)) ------------------------------. . Os códigos a seguir ilustram de maneira simples como proceder para realizar as operações mais simples.------------------------------d b 71 . integ=int(y.

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Derivação simbólica %DERIVADA simbólica clc.t.--------------------------------------k s k 72 .t. d2x = sym('diff(x(t).s). pretty(simple(x_lap)) f m laplace(diff(diff(x(t).close all. t.9 c d t sin(d t ) + 6 c d t cos(d t ) Transformada de Laplace simbólica % LAPLACE simbólicas clc. pretty(simple(dx)) pretty(simple(dx2)) 2 2 3 2 a b t exp(b t ) + 3 c d t cos(d t ) 2 2 2 2 2 4 3 3 2 a b exp(b t ) + 4 a b t exp(b t ) .2)'). s) c (x(0) . x_lap=laplace(x. t).t)').close all.t..^2)+c*sin(d*t. %escrever as derivadas desta forma %"derivada 1ª ou 2ª de x(t) em t" x=f/k-m/k*d2x-c*dx.t).clear all syms a b c d x t dx dx2 dx3 x=a*exp(b*t. dx2=diff(x.clear all syms k m c x y f x_lap t s dx = sym('diff(x(t).t. 2).s laplace(x(t).2).^3).s)) + --. dx=diff(x.

f. podemos criar um vetor de pontos semi-aleatórios para 73 .clear all syms a b c d x y y=a*tan(b*sqrt(x))-c*cos(d*x.c*cos((pi^2*d)/4) Agora. Por exemplo.x. obtendo-se um vetor de pontos.'t').^2).close all. etc. pois se precisa dele para determinar uma incógnita do problema. para praticar a aplicação de variáveis simbólicas na solução de problemas. Este vetor representa algum parâmetro físico.k. onde se mediu um parâmetro em alguns pontos distintos. intensidade.5).2). y=subs(y.'x(0)=0'.'Dx(0)=0'. seja ele posição. Suponha que foi realizado um experimento. y=subs(y. pretty(simple(y)) Limite simbólico %LIMITE simbólico clc. que nos interessa.0) lim_90=limit(y.x.clear all syms x y m c k f y=dsolve('f*sin(t)=k*x+c*Dx+m*D2x'.10).Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Problema de Valor Inicial simbólico % EDO simbólica clc.m. y=subs(y. y=subs(y. lim_0=limit(y.1). tempo. vamos tentar resolver um problema simples usando variáveis simbólicas.close all.pi/2) lim_0 = -c lim_90 = a*tan((2^(1/2)*pi^(1/2)*b)/2) .c.

03]. da carga inicial do capacitor e deseja-se saber a voltagem no fio conforme o capacitor se descarrega (vide figura). vet_t=[0:0. function experimento %programa para cálculos de dados em experimentos %--------------------------------------------.60). vet_E0=3*10e-6. %--------------------------------------------. O programa a seguir ilustra uma aplicação bastante simples.pretty(simple(v_total)) 74 .close all.clear all %--------------------------------------------. de uma capacitância.001:0.pretty(simple(dvdt)) v_total=int(v. obtendo a incógnita. disp('dvdt').Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 representar nossos pontos experimentais (usando a função “rand”) e tratá-los numa expressão simbólica.pretty(simple(v)) %escrevo outras expressões necessárias e difíceis de calcular dvdt=diff(v. vet_R=500.t). disp('v'). Posteriormente.inicialização clc. podem-se substituir estes valores e outros que já se conhece do problema na expressão simbólica.entrada de dados %declaro as variáveis do problema syms C R E0 v t %crio os vetores experimentais correspondentes às variáveis vet_C=1*10e-6. disp('v_total').0. onde se tem os valores de uma resistência elétrica.equacionamento %escrevo a expressão v=E0+exp(-t/(R*C)).

R.v.vet_E0).R. v=subs(v. v=subs(v.vet_E0).vet_t).'b') grid on title('v X t') xlabel('t') ylabel('v') legend(strcat('v total até 60 seg:'. v=subs(v.E0. v_total=subs(v_total.vet_C). plot(vet_t.| \ C R / 75 . dvdt=subs(dvdt. plot(vet_t.1.-------------/ t \ C R exp| --.'color'. %--------------------------------------------. v_total=subs(v_total.C. v=double(v). dvdt=subs(dvdt.E0.C.num2str(v_total))) subplot(2.vet_E0).1).vet_R).resultados %ploto as expresões com os valores experimentais subplot(2.dvdt.'color'.vet_R).'r') grid on title('dvdt X t') xlabel('t') ylabel('dvdt') E o resultado deste programa é: v 1 E0 + ---------/ t \ exp| --.t. dvdt=subs(dvdt. dvdt=double(dvdt).| \ C R / dvdt 1 .vet_t). v_total=double(v_total).t.C.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 %--------------------------------------------.R.vet_C).2).vet_R).E0.1. v_total=subs(v_total.cálculos %substituo os valores experimentais nas expressões v=subs(v.vet_C). dvdt=subs(dvdt.

.| | \ \ C R / / ----- 76 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 v_total / 1 \ 60 E0 .C R | ---------.1 | | / 60 \ | | exp| --.

digite na linha de comando do MATLAB: >>guide A seguir selecione a opção “Blank GUI (Default)” e clique OK. Assim. ou para quando é preciso criar um programa para que outras pessoas utilizem.Curso de programação aplicada em linguagem MATLAB – META Consultoria 12) 2011 Graphical User Interfaces Para operações muito complexas. mas que também são interdependentes. frequentemente faz-se uso de interfaces (GUIs). estas funções de cálculo são montadas com uma interface. Estes programas são então formulados em algumas funções que representem o problema físico. o pré e pós processamentos e a análise de resultados são feitos na interface. Quando se une várias janelas com um único propósito principal tem-se efetivamente um “programa de computador”. pois a entrada de dados. surgirá a janela a seguir: 77 . 12. e para facilitar o manejo e a interpretação do problema.a) Criando guides Para começarmos nosso estudo. mas os cálculos são feitos em rotinas de cálculo. Note que tanto a interface como o programa de cálculo são compostos de várias funções.

clique no botão correspondente a ela na barra de ferramentas à esquerda da janela do guide e a seguir posicione-a na grade. Algumas opções estão mostradas na figura a seguir: 78 . Para inserir uma “GUI” na janela.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Esta é a área de montagem das interfaces. onde se define quais “GUIs” a janela terá e a organização delas.

é usado por questão de organização e agrupamento de funções 79 . aplicável quando se tem várias opções e somente uma pode ser escolhida Check Box Botão de seleção. quando clicado permanece pressionado Radio Button Botão de seleção. um botão simples. aplicável quando se tem várias opções e várias podem ser escolhidas simultaneamente Panel Painel. normalmente usado para entrada de dados pelo usuário Push Button Botão.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 As GUIs básicas e aplicações principais de cada um dessas funções estão apresentadas abaixo: GUIs Static Text Texto estático. como um “OK” Toggle Button Botão de ativação. pode ser alterado pela função do guide Edit Text Texto editável.

muito útil para apresentar ou receber dados em grande quantidade. que não caberia no monitor Table Tabela. clique na seta verde na parte superior da janela do guide. Quando terminar de montar sua interface. todos os botões dentro dele funcionarão como “Radio Buttons” (somente um deles pode ser selecionado) Axes Eixos de gráfico. similar à “Listbox” Slider Barra de rolagem. clique duas vezes na GUI e configure o que desejar usando o “Property Inspector”. Isto fará o MATLAB compilar sua guide. ----- 80 . servem para receber plots de gráficos ou imagens Listbox Lista. lista para apresentar várias opções Pop-up Menu Menu expansível. especialmente quando não se sabe quantas posições terá uma matriz de dados de entrada Para definir propriedades mais a fundo.Curso de programação aplicada em linguagem MATLAB – META Consultoria Button Group 2011 Painel. criando uma função associada a ela. usada quando se tem uma janela complexa.

Assim.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 12. operando em conjunto. como foi feito neste exemplo: 81 . se estudarmos mais a fundo.b) Programando guides A programação de guides é similar à programação de funções. vamos criar uma função bem simples. A guide é um conjunto de funções menores. e isto se faz alterando e programando o código correspondente à guide. perceberemos que cada GUI colocado na guide criada na seção anterior é uma pequena função. que plota funções definidas pelo programador e são somente selecionadas pelo usuário: Inicialmente a janela do guide não funcionará. pois precisa ser programada como uma função comum (será feito durante as aulas do curso).

01:15... .DO NOT EDIT % --. gui_Singleton.. 'gui_LayoutFcn'. % Get default command line output from handles structure varargout{1} = handles.Outputs from this function are returned to the command line. hObject handle to figure eventdata reserved .. eventdata. function varargout = funcoes_trigonometricas_OutputFcn(hObject.output. varargin{:}).Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 function varargout = funcoes_trigonometricas(varargin) % Begin initialization code ..DO NOT EDIT gui_Singleton = 1. else gui_mainfcn(gui_State.. .. @funcoes_trigonometricas_OutputFcn. gui_State = struct('gui_Name'. .. handles) % % % % varargout hObject eventdata handles cell array for returning output args (see VARARGOUT).to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) global t t=0:0. handle to figure reserved . % Update handles structure guidata(hObject. [] . end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State. see OutputFcn. eventdata. @funcoes_trigonometricas_OpeningFcn. handles. mfilename.. function funcoes_trigonometricas_OpeningFcn(hObject.gui_Callback = str2func(varargin{1}). .to be defined in a future version of MATLAB handles structure with handles and user data (see GUIDATA) varargin command line arguments to funcoes_trigonometricas (see VARARGIN) % Choose default command line output for funcoes_trigonometricas handles. varargin{:}).output = hObject.Executes just before funcoes_trigonometricas is made visible. handles). %=========================================== término da inicialização % --. . 'gui_Callback'. 'gui_OpeningFcn'. if nargin && ischar(varargin{1}) gui_State. 82 . 'gui_OutputFcn'.. []). varargin) % % % % % This function has no output args. 'gui_Singleton'. end % End initialization code .

case 5 funcao=sec(w*t). case 3 funcao=tan(w*t). end 83 . after setting all properties. handles) % hObject % eventdata % handles handle to popupmenu1 (see GCBO) reserved .to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) global w posicao t clear funcao switch posicao case 1 funcao=sin(w*t).'defaultUicontrolBackgroundColor')) set(hObject.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 % --.funcao. %pega o valor do popupmenu1 % --.Executes during object creation. case 4 funcao=cot(w*t).axes1) plot(t.Executes on selection change in popupmenu1. function pushbutton1_Callback(hObject. function popupmenu1_CreateFcn(hObject. eventdata. case 2 funcao=cos(w*t). eventdata. end set(handles.2) grid on. case 6 funcao=csc(w*t).'linewidth'. get(0.'BackgroundColor'.'white'). if ispc && isequal(get(hObject.'Value').handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. eventdata. function popupmenu1_Callback(hObject.'BackgroundColor'). handles) % hObject % eventdata % handles handle to pushbutton1 (see GCBO) reserved .Executes on button press in pushbutton1.to be defined in a future version of MATLAB empty . handles) global posicao posicao=get(hObject. % --.

'defaultUicontrolBackgroundColor')) set(hObject. eventdata.'String')).'BackgroundColor').'white'). Estas propriedades são definidas no “Inspector”.to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) % Hints: get(hObject. que é aberto quando se clica duas vezes sobre um guide: 84 . como o tamanho das letras e as funções que aparecem no “popupmenu”. get(0.'BackgroundColor'. after setting all properties. end Note que além da edição do código. %returns contents of edit1 as a double % --. sem necessidade de escrever um código específico.Executes during object creation.'String') returns contents of edit1 as text w=str2double(get(hObject. function edit1_CreateFcn(hObject. handles) % hObject % eventdata % handles handle to edit1 (see GCBO) reserved . handles) % hObject % eventdata % handles global w handle to edit1 (see GCBO) reserved . eventdata. % See ISPC and COMPUTER.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 function edit1_Callback(hObject. if ispc && isequal(get(hObject.handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. algumas propriedades já foram definidas no próprio guide.to be defined in a future version of MATLAB empty .

Executando o código mostrado acima cria-se um guide similar ao apresentado a seguir: ----- 85 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Após modelar a janela e editar o código inerente a ela. principalmente se o usuário deste software não souber programar. muito mais compreensível e “fácil” do que um algoritmo. o que se obtém é um programa interativo.

a) Criando diagramas de bloco Para começarmos. suportado pelo MATLAB. 13. Este programa é excepcionalmente útil quando se trata de sistemas representados por equações diferenciais ordinárias. sistemas de nível de líquido entre outros [6]. clique no ícone do simulink na barra de ferramentas na parte superior da tela: Que abrirá a seguinte janela: 86 . sem que haja necessidade de programar um arquivo “. que vão desde análise de imagem e tratamento de sinal até biomatemática. Este programa permite criar códigos apenas por diagramas de bloco. Entretanto. sistemas massa-mola-amortecedor.m” ou implementar métodos numéricos para a solução de problemas de engenharia. devido à duração do curso e a alta especificidade destes “toolbox” eles não serão abordados no curso. “fuzzy” e redes neurais.Curso de programação aplicada em linguagem MATLAB – META Consultoria 13) 2011 Simulink O “Simulink” é um ambiente de criação e execução de simulações computacionais. que possam ser resolvidos pela Transformada de Laplace. Há também várias “Toolbox” para uma ampla gama de aplicações. como circuitos elétricos.

bomba. compressor. Uma vez feito isto. 87 .b) Solução de problemas envolvendo EDOs Para começar.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Para começar o trabalho. presa a uma base fixa. clique no ícone indicado (folha em branco) para abrir um novo projeto. pode-se começar a modelar sistemas físicos e solucioná-los numericamente através de diagramas de bloco. vamos modelar um sistema relativamente simples.). ----13. Suponha uma máquina que opera em alta rotação (motor. etc.

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

Imagine agora que a base apresenta certa elasticidade, como se vê em mecânica de
estruturas, até certo limite podemos considerar a base como uma mola, apresentando
comportamento elástico linear, seguindo a lei de Hooke. Além disso, suponha que o material da
qual a base é feita dissipa energia mecânica. Após estas considerações, o modelo físico, segundo
as leis de Newton deve ser o seguinte:

C
X

Este modelo apresenta uma componente de força externa (devido à vibração do motor),
uma componente na aceleração (massa), uma na velocidade (amortecimento) e uma na posição
(constante elástica). Para representar a equação no “simulink” podemos proceder de duas
maneiras: aplicando Laplace e escrevendo a função de transferência; montando o diagrama para
a equação na forma diferencial.
Caso queira trabalhar no domínio de Laplace, não é preciso montar um diagrama, basta
escrever a expressão num arquivo “.m” e desenhá-la em alguns pontos. Como desejamos
representar o sistema no “simulink” iremos montar o sistema da seguinte forma:

88

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

O bloco de “Sinais” soma ou subtrai os termos da expressão de acordo com o sinal de
cada um. Os blocos “1/s” representam integrais no domínio de Laplace, ou seja, se o que entra no
bloco “1/s” for a aceleração, o que sai será a velocidade. Já os blocos triangulares são os ganhos
(coeficientes) de cada termo (
velocidade,

) da expressão, ou seja,

multiplica a

multiplica a posição e 1 multiplica a aceleração.

Deste modo, porém, falta acrescentar a força externa e visualizar o comportamento do
sistema. Para tanto fazemos:

O bloco “força externa” é um seno multiplicado por uma constante, e o bloco “gráficos” é
um “scope”, ou seja, é um bloco que desenha o que chega até ele. Uma fez montado o diagrama,
escreva na linha de comando os valores das constantes (

). Para escolher as propriedades

da força externa e dos gráficos dê um clique duplo sobre os blocos respectivos e escolha suas
propriedades da maneira adequada. Por exemplo, defina
externa com

, e faça a força

, e defina o tempo de execução até

. Feito

isto execute o sistema e clique no bloco de gráfico (após abrir o gráfico clique em “autoscale”,
para visualizar na escala correta). O gráfico deverá se parecer com:

89

Curso de programação aplicada em linguagem MATLAB – META Consultoria

2011

Percebe-se que o período da força externa é muito menor que a frequência natural do
sistema (as ondulações nos primeiros segundos são a aplicação da força externa; após 15
segundos o amortecimento já “abafou” essas flutuações, permanecendo somente sua influência
global no movimento). Para tornar a simulação mais interessante, vamos aplicar a força externa
com frequência igual à frequência natural do sistema.

Para isto, defina o valor da frequência da força externa como
frequência natural deste sistema, e execute a simulação até

, que é a

. A resposta então deverá

ser:

90

há uma massa menor do pneu e uma muito maior do carro. Esquematizando o diagrama de corpo livre do sistema. há amortecimento viscoso devido ao amortecedor.c) Solução de problemas envolvendo sistemas de EDOs Para ilustrar uma classe mais complexa de problemas. há uma elasticidade devido aos pneus e outra devido à mola da suspensão.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Onde o gráfico superior é a força externa aplicada e o inferior é a posição da massa no tempo. ----13. iremos abordar um modelo diferencial que representa a suspensão de um carro (usa-se estes sistemas mecânicos como exemplo por serem comuns e se assemelharem a outros sistemas de interpretação mais difícil). No sistema de suspensão de um veículo há algumas considerações a serem feitas: a entrada é um deslocamento e não uma força. suas equações representativas são dadas por: 91 .

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Neste sistema. equações diferenciais interdependentes. porém com o “simulink” é possível solucionar ambas ao mesmo tempo. o amortecedor por Equacionando o sistema e sua massa por . Para resolver analiticamente. a suspensão de uma roda foi isolada do resto do carro. vamos dividir as equações pelas massas correspondentes: Inicialmente vamos montar o lado direito da equação da massa 1 em diagrama de bloco: 92 . temos duas . considerando-se como ¼ da massa do veículo. A elasticidade do pneu é representada pela mola de rigidez representada por . Para facilitar a montagem. O contato da roda com o solo está indicado pela seta. A mola da suspensão é e a massa de ¼ do veículo por desta maneira. deveríamos substituir uma na outra e isolar o termo desejado. e é considerado perfeito (sem deslizamento) e desconsideram-se forças horizontais.

Para tanto.Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Perceba que os termos “Gain3” e “Gain4” vêm da equação da massa 2 e ainda precisamos determiná-los. montaremos o diagrama da equação 2: 93 .

Acrescentando agora o termo de deslocamento de entrada e o “scope”. o diagrama deverá se assemelhar a: Onde o termo de deslocamento externo é dado pelo seno multiplicando a constante. A resposta do sistema deverá ser a seguinte: 94 .Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 Perceba também que os termos “Gain6” e “Gain7” vêm da equação da massa 1 que já determinamos. E vamos definir a frequência do seno como sendo . e sua amplitude como . Vamos agora executar o diagrama com os seguintes valores para as constantes: .

Curso de programação aplicada em linguagem MATLAB – META Consultoria 2011 ----- 95 .

[8] Karris. 2007. 2004.Curso de programação aplicada em linguagem MATLAB – META Consultoria 14) 2011 Referências [1] Dainaila. McGraw Hill. [4] MacMahon.. Chapmann e Hall/CRC. Inc. 2004. Springer. Orchard Publications. The MathWorks Inc. 2007 [2] The MathWorks. 1997..1 – Introdução à solução de problemas de engenharia”. E.. “MATLAB – Demystified”. F. Methods and Analysis with MATLAB and MPI”. K.. UERJ – Universidade do Estado do Rio de Janeiro. “Using MATLAB Graphics”. 96 . “Introduction to Simulink with Engineering Aplications”. J.. Prentice Hall.. [7] White. et al. I. Inc. “Curso de Matlab 5. “Modern Control Engineering”. R. ed. 2006. 2000. [5] Konte. ed. “Computational Mathematics – Models. [6] Ogata. The MathWorks Inc. “An introduction to scientific computing – twelve computational projects solved with Matlab”. “MATLAB Programming”. D. [3] The MathWorks. et al. T. S.